Compare commits

..

No commits in common. "master" and "v1.3" have entirely different histories.
master ... v1.3

22 changed files with 1827 additions and 3030 deletions

1
.gitignore vendored
View file

@ -1 +0,0 @@
build/

2
.gitmodules vendored
View file

@ -1,3 +1,3 @@
[submodule "src/nuklear"]
path = src/nuklear
url = https://github.com/Immediate-Mode-UI/Nuklear.git
url = https://github.com/vurtun/nuklear.git

View file

@ -24,14 +24,4 @@ TARGET_LINK_LIBRARIES(
${LUA_LIBRARIES}
)
IF(MSVC)
TARGET_COMPILE_DEFINITIONS(${LIB_NAME} PRIVATE LUA_BUILD_AS_DLL)
endif(MSVC)
SET_TARGET_PROPERTIES("${LIB_NAME}" PROPERTIES PREFIX "")
IF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
SET(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}" CACHE PATH "..." FORCE)
ENDIF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
INSTALL(TARGETS "${LIB_NAME}" DESTINATION .)

122
README.md
View file

@ -1,6 +1,6 @@
# LÖVE-Nuklear
[Nuklear](https://github.com/Immediate-Mode-UI/Nuklear) module for the [LÖVE](https://love2d.org/) game engine.
[Nuklear](https://github.com/vurtun/nuklear) module for the [LÖVE](https://love2d.org/) game engine.
Provides a lightweight immediate mode GUI for LÖVE games.
@ -8,145 +8,81 @@ Provides a lightweight immediate mode GUI for LÖVE games.
```lua
-- Simple UI example.
local nuklear = require 'nuklear'
local ui
local nk = require 'nuklear'
function love.load()
ui = nuklear.newUI()
nk.init()
end
local combo = {value = 1, items = {'A', 'B', 'C'}}
function love.update(dt)
ui:frameBegin()
if ui:windowBegin('Simple Example', 100, 100, 200, 160,
nk.frameBegin()
if nk.windowBegin('Simple Example', 100, 100, 200, 160,
'border', 'title', 'movable') then
ui:layoutRow('dynamic', 30, 1)
ui:label('Hello, world!')
ui:layoutRow('dynamic', 30, 2)
ui:label('Combo box:')
if ui:combobox(combo, combo.items) then
nk.layoutRow('dynamic', 30, 1)
nk.label('Hello, world!')
nk.layoutRow('dynamic', 30, 2)
nk.label('Combo box:')
if nk.combobox(combo, combo.items) then
print('Combo!', combo.items[combo.value])
end
ui:layoutRow('dynamic', 30, 3)
ui:label('Buttons:')
if ui:button('Sample') then
nk.layoutRow('dynamic', 30, 3)
nk.label('Buttons:')
if nk.button('Sample') then
print('Sample!')
end
if ui:button('Button') then
if nk.button('Button') then
print('Button!')
end
end
ui:windowEnd()
ui:frameEnd()
nk.windowEnd()
nk.frameEnd()
end
function love.draw()
ui:draw()
nk.draw()
end
function love.keypressed(key, scancode, isrepeat)
ui:keypressed(key, scancode, isrepeat)
nk.keypressed(key, scancode, isrepeat)
end
function love.keyreleased(key, scancode)
ui:keyreleased(key, scancode)
nk.keyreleased(key, scancode)
end
function love.mousepressed(x, y, button, istouch, presses)
ui:mousepressed(x, y, button, istouch, presses)
function love.mousepressed(x, y, button, istouch)
nk.mousepressed(x, y, button, istouch)
end
function love.mousereleased(x, y, button, istouch, presses)
ui:mousereleased(x, y, button, istouch, presses)
function love.mousereleased(x, y, button, istouch)
nk.mousereleased(x, y, button, istouch)
end
function love.mousemoved(x, y, dx, dy, istouch)
ui:mousemoved(x, y, dx, dy, istouch)
nk.mousemoved(x, y, dx, dy, istouch)
end
function love.textinput(text)
ui:textinput(text)
nk.textinput(text)
end
function love.wheelmoved(x, y)
ui:wheelmoved(x, y)
nk.wheelmoved(x, y)
end
```
## Building
Windows binaries are available for each [release](https://github.com/keharriso/love-nuklear/releases).
Windows and Linux binaries are available for each [release](https://github.com/keharriso/love-nuklear/releases).
To build the library yourself, grab the code with:
```sh
$ git clone --recursive https://github.com/keharriso/love-nuklear.git
$ git clone --recursive git@github.com:keharriso/love-nuklear.git
```
Next, you need to compile the code to a native Lua module.
### Compiling with CMake on Linux
1. First, ensure you have a C compiler and the `cmake` and `luajit` or `lua51-luajit` (for openSUSE) packages installed, as well as `libluajit-5.1-dev` (for Ubuntu/Debian), `luajit-devel` (for Fedora), or `lua51-luajit-devel` (for openSUSE) if your distro has one of these packages.
2. Create a new folder next to `love-nuklear` called `love-nuklear-build`.
3. Open a terminal inside `love-nuklear-build`.
4. Compile the library with
```sh
$ cmake -DCMAKE_BUILD_TYPE=Release ../love-nuklear
$ make
```
5. Locate `nuklear.so` in the build folder.
#### Via GNU Guix
LÖVE-Nuklear is also available as a [Guix](http://guix.gnu.org/) package, and can thus be directly downloaded and built via:
```
$ guix package --install love-nuklear
```
### Compiling with CMake and MinGW on Windows
1. Install [CMake](https://cmake.org/download/) and [MinGW](http://mingw.org/) or [MinGW-w64](https://mingw-w64.org/doku.php).
2. Download the source code for [LuaJIT](http://luajit.org/download.html).
3. Open a command window inside the LuaJIT folder (the one that contains "README").
4. Compile LuaJIT with
```sh
$ mingw32-make
```
5. Remember the path to `lua51.dll` inside the LuaJIT `src` folder.
6. Run the CMake GUI.
7. Click "Browse Source" at the top right, then select the `love-nuklear` folder.
8. Enter a path for the build folder. It should be separate from the source folder.
9. Press "Configure" at the bottom.
10. Select "MinGW Makefiles" from the generator drop list, then click "Finish".
11. You should receive an error. This is normal.
12. Open the LUA tree by clicking the triangle on the left.
13. Replace "LUA_INCLUDE_DIR-NOTFOUND" with the path to the LuaJIT `src` folder.
14. Replace "LUA_LIBRARY-NOTFOUND" with the path to `lua51.dll` inside the LuaJIT `src` folder.
15. Click "Generate" at the bottom.
16. Open a command window inside the build folder.
17. Compile with
```sh
$ mingw32-make
```
18. Locate `nuklear.dll` inside the build folder.
### Compiling with CMake and MSVC on Windows
1. Install [CMake](https://cmake.org/download/) and [Visual Studio](https://visualstudio.microsoft.com/).
Community or Express edition is sufficient.
2. Download the source code for [LuaJIT](http://luajit.org/download.html).
3. Open a Visual Studio Command Prompt (x86 or x64 depending on what architecture you need)
and set the current directory to the LuaJIT folder (the one that contains "README"). Also
remember this path.
4. At the VS Command Prompt, set your current directory to `src` then
execute `msvcbuild.bat`. This will create lua51.dll, lua51.lib, and luajit.exe
5. Now open new command prompt window inside the `love-nuklear` folder.
6. Type `set "LUA_DIR=<path to directory at step 3>"`
7. Then type `cmake -Bbuild -H. -A Win32 -DLUA_INCLUDE_DIR=%LUA_DIR%\src -DLUA_LIBRARY=%LUA_DIR%\src\lua51.lib -DCMAKE_INSTALL_PREFIX=%CD%\install`.
If you previously compile LuaJIT using x64 VS command prompt, replace `Win32` with `x64` at above command.
8. Then type `cmake --build build --config Release --target install` and you'll found `nuklear.dll` inside "install" folder.
Compile with CMake (I recommend using the MinGW generator on Windows). You'll need to tell CMake where to find the LuaJIT headers and binaries. The end result is a native Lua module.
## Documentation

View file

@ -11,7 +11,7 @@
find_path(LUA_INCLUDE_DIR luajit.h
HINTS
ENV LUA_DIR
PATH_SUFFIXES include/luajit-2.0 include/luajit-2.1 include/luajit-5_1-2.1 include
PATH_SUFFIXES include/luajit-2.0 include
PATHS
~/Library/Frameworks
/Library/Frameworks

View file

@ -1,5 +1,7 @@
-- Simple calculator example, adapted from the original nuklear demo.
local nk = require 'nuklear'
local ops = {'+', '-', '*', '/'}
local a, b, op = '0'
@ -58,36 +60,36 @@ local function display()
return b or a
end
return function (ui)
if ui:windowBegin('Calculator', 50, 50, 180, 250, 'border', 'movable', 'title') then
ui:layoutRow('dynamic', 35, 1)
ui:label(display(), 'right')
ui:layoutRow('dynamic', 35, 4)
return function ()
if nk.windowBegin('Calculator', 50, 50, 180, 250, 'border', 'movable', 'title') then
nk.layoutRow('dynamic', 35, 1)
nk.label(display(), 'right')
nk.layoutRow('dynamic', 35, 4)
for i=1,16 do
if i >= 13 and i < 16 then
if i == 13 then
if ui:button('C') then
if nk.button('C') then
clear()
end
if ui:button('0') then
if nk.button('0') then
digit('0')
end
if ui:button('=') then
if nk.button('=') then
equals()
end
end
elseif i % 4 ~= 0 then
local d = tostring(math.floor(i / 4) * 3 + (i % 4))
if ui:button(d) then
if nk.button(d) then
digit(d)
end
else
local o = ops[math.floor(i / 4)]
if ui:button(o) then
if nk.button(o) then
operator(o)
end
end
end
end
ui:windowEnd()
nk.windowEnd()
end

View file

@ -1,51 +0,0 @@
-- Show off the optional closure-oriented versions of basic functions
local function menu(ui)
ui:layoutRow('dynamic', 30, 2)
ui:menu('Menu A', nil, 100, 200, function ()
ui:layoutRow('dynamic', 30, 1)
if ui:menuItem('Item 1') then
print 'Closure: Item 1'
end
if ui:menuItem('Item 2') then
print 'Closure: Item 2'
end
end)
ui:menu('Menu B', nil, 100, 200, function ()
ui:layoutRow('dynamic', 30, 1)
if ui:menuItem('Item 3') then
print 'Closure: Item 3'
end
if ui:menuItem('Item 4') then
print 'Closure: Item 4'
end
end)
end
local comboText = 'Combo 1'
function combo(ui)
ui:layoutRow('dynamic', 30, 1)
if ui:comboboxItem('Combo 1') then
print 'Closure: Combo 1'
comboText = 'Combo 1'
end
if ui:comboboxItem('Combo 2') then
print 'Closure: Combo 2'
comboText = 'Combo 2'
end
if ui:comboboxItem('Combo 3') then
print 'Closure: Combo 3'
comboText = 'Combo 3'
end
end
local function window(ui)
ui:menubar(menu)
ui:layoutRow('dynamic', 30, 1)
ui:combobox(comboText, combo)
end
return function (ui)
ui:window('Closure', 200, 200, 150, 120, {'title', 'movable', 'border'}, window)
end

View file

@ -1,21 +1,21 @@
-- Demonstrate a number of custom drawing functions.
local nk = require "nuklear"
local img = love.graphics.newImage 'skin/button.png'
return function (ui)
if ui:windowBegin('Draw Example', 300, 300, 200, 200, 'title', 'movable', 'border') then
local x, y, w, h = ui:windowGetBounds()
love.graphics.setColor(1, 0, 0)
ui:line(x + 10, y + 40, x + 50, y + 40, x + 50, y + 80)
ui:curve(x + 50, y + 80, x + 80, y + 40, x + 100, y + 80, x + 80, y + 80)
ui:polygon('line', x + 100, y + 150, x + 60, y + 140, x + 70, y + 70)
ui:circle('line', x + 130, y + 140, 50)
ui:ellipse('fill', x + 30, y + 150, 20, 40)
ui:arc('fill', x + 150, y + 80, 40, 3 * math.pi / 2, 2 * math.pi);
ui:rectMultiColor(x + 95, y + 50, 50, 50, '#ff0000', '#00ff00', '#0000ff', '#000000')
love.graphics.setColor(1, 1, 1)
ui:image(img, x + 120, y + 120, 70, 50)
ui:text('DRAW TEXT', x + 15, y + 75, 100, 100)
return function ()
if nk.windowBegin('Draw Example', 300, 300, 200, 200, 'title', 'movable', 'border') then
local x, y, w, h = nk.windowGetBounds()
love.graphics.setColor(255, 0, 0)
nk.line(x + 10, y + 40, x + 50, y + 40, x + 50, y + 80)
nk.curve(x + 50, y + 80, x + 80, y + 40, x + 100, y + 80, x + 80, y + 80)
nk.polygon('line', x + 100, y + 150, x + 60, y + 140, x + 70, y + 70)
nk.circle('line', x + 130, y + 140, 50)
nk.ellipse('fill', x + 30, y + 150, 20, 40)
nk.arc('fill', x + 150, y + 80, 40, 3 * math.pi / 2, 2 * math.pi);
nk.rectMultiColor(x + 95, y + 50, 50, 50, '#ff0000', '#00ff00', '#0000ff', '#000000')
love.graphics.setColor(255, 255, 255)
nk.image(img, x + 120, y + 120, 70, 50)
nk.text('DRAW TEXT', x + 15, y + 75, 100, 100)
end
ui:windowEnd()
nk.windowEnd()
end

View file

@ -1,72 +1,56 @@
-- Several simple examples.
local nuklear = require 'nuklear'
local nk = require 'nuklear'
local calculator = require 'calculator'
local closure = require 'closure'
local draw = require 'draw'
local overview = require 'overview'
local style = require 'style'
local skin = require 'skin'
local template = require 'template'
local transform = require 'transform'
local ui1, ui2
function love.load()
love.keyboard.setKeyRepeat(true)
ui1, ui2 = nuklear.newUI(), nuklear.newUI()
nk.init()
end
function love.update(dt)
ui1:frameBegin()
calculator(ui1)
style(ui1)
closure(ui1)
overview(ui1)
draw(ui1)
template(ui1)
skin(ui1)
ui1:frameEnd()
ui2:frameBegin()
transform(ui2)
ui2:frameEnd()
nk.frameBegin()
calculator()
style()
overview()
draw()
skin()
nk.frameEnd()
end
function love.draw()
ui1:draw()
ui2:draw()
love.graphics.print('Current FPS: '..tostring(love.timer.getFPS( )), 10, 10)
end
local function input(name, ...)
return ui2[name](ui2, ...) or ui1[name](ui1, ...)
nk.draw()
love.graphics.print("Current FPS: "..tostring(love.timer.getFPS( )), 10, 10)
end
function love.keypressed(key, scancode, isrepeat)
input('keypressed', key, scancode, isrepeat)
nk.keypressed(key, scancode, isrepeat)
end
function love.keyreleased(key, scancode)
input('keyreleased', key, scancode)
nk.keyreleased(key, scancode)
end
function love.mousepressed(x, y, button, istouch, presses)
input('mousepressed', x, y, button, istouch, presses)
function love.mousepressed(x, y, button, istouch)
nk.mousepressed(x, y, button, istouch)
end
function love.mousereleased(x, y, button, istouch, presses)
input('mousereleased', x, y, button, istouch, presses)
function love.mousereleased(x, y, button, istouch)
nk.mousereleased(x, y, button, istouch)
end
function love.mousemoved(x, y, dx, dy, istouch)
input('mousemoved', x, y, dx, dy, istouch)
nk.mousemoved(x, y, dx, dy, istouch)
end
function love.textinput(text)
input('textinput', text)
nk.textinput(text)
end
function love.wheelmoved(x, y)
input('wheelmoved', x, y)
nk.wheelmoved(x, y)
end

View file

@ -1,5 +1,7 @@
-- An overview of most of the supported widgets.
local nk = require 'nuklear'
local checkA = {value = false}
local checkB = {value = true}
local radio = {value = 'A'}
@ -11,108 +13,94 @@ local colorPicker = {value = '#ff0000'}
local property = {value = 6}
local edit = {value = 'Edit text'}
local comboA = {value = 1, items = {'A', 'B', 'C'}}
local scissorActive = false
return function (ui)
if ui:windowBegin('Overview', 100, 100, 600, 450, 'border', 'movable', 'title') then
ui:menubarBegin()
ui:layoutRow('dynamic', 30, 1)
if ui:menuBegin('Menu', nil, 120, 90) then
ui:layoutRow('dynamic', 40, 1)
ui:menuItem('Item A')
ui:menuItem('Item B')
ui:menuItem('Item C')
ui:menuEnd()
return function ()
if nk.windowBegin('Overview', 100, 100, 600, 450, 'border', 'movable', 'title') then
nk.menubarBegin()
nk.layoutRow('dynamic', 30, 1)
if nk.menuBegin('Menu', nil, 120, 90) then
nk.layoutRow('dynamic', 40, 1)
nk.menuItem('Item A')
nk.menuItem('Item B')
nk.menuItem('Item C')
nk.menuEnd()
end
ui:menubarEnd()
ui:layoutRow('dynamic', 375, 3)
if ui:groupBegin('Group 1', 'border') then
ui:layoutRow('dynamic', 30, 1)
ui:label('Left label')
ui:label('Centered label', 'centered')
ui:label('Right label', 'right')
ui:label('Colored label', 'left', '#ff0000')
if ui:treePush('tab', 'Tree Tab') then
if ui:treePush('node', 'Tree Node 1') then
ui:label('Label 1')
ui:treePop()
nk.menubarEnd()
nk.layoutRow('dynamic', 400, 3)
nk.groupBegin('Group 1', 'border')
nk.layoutRow('dynamic', 30, 1)
nk.label('Left label')
nk.label('Centered label', 'centered')
nk.label('Right label', 'right')
nk.label('Colored label', 'left', '#ff0000')
if nk.treePush('tab', 'Tree Tab') then
if nk.treePush('node', 'Tree Node 1') then
nk.label('Label 1')
nk.treePop()
end
if ui:treePush('node', 'Tree Node 2') then
ui:label('Label 2')
ui:treePop()
if nk.treePush('node', 'Tree Node 2') then
nk.label('Label 2')
nk.treePop()
end
ui:treePop()
nk.treePop()
end
ui:spacing(1)
if ui:button('Button') then
nk.spacing(1)
if nk.button('Button') then
print('button pressed!')
end
ui:spacing(1)
ui:checkbox('Checkbox A', checkA)
ui:checkbox('Checkbox B', checkB)
if ui:button('Scissor') then
scissorActive = not scissorActive
nk.spacing(1)
nk.checkbox('Checkbox A', checkA)
nk.checkbox('Checkbox B', checkB)
nk.groupEnd()
nk.groupBegin('Group 2', 'border')
nk.layoutRow('dynamic', 30, 1)
nk.label('Radio buttons:')
nk.layoutRow('dynamic', 30, 3)
nk.radio('A', radio)
nk.radio('B', radio)
nk.radio('C', radio)
nk.layoutRow('dynamic', 30, 1)
nk.selectable('Selectable A', selectA)
nk.selectable('Selectable B', selectB)
nk.layoutRow('dynamic', 30, {.35, .65})
nk.label('Slider:')
nk.slider(0, slider, 1, 0.05)
nk.label('Progress:')
nk.progress(progress, 10, true)
nk.layoutRow('dynamic', 30, 2)
nk.spacing(2)
nk.label('Color picker:')
nk.button(nil, colorPicker.value)
nk.layoutRow('dynamic', 90, 1)
nk.colorPicker(colorPicker)
nk.groupEnd()
nk.groupBegin('Group 3', 'border')
nk.layoutRow('dynamic', 30, 1)
nk.property('Property', 0, property, 10, 0.25, 0.05)
nk.spacing(1)
nk.label('Edit:')
nk.layoutRow('dynamic', 90, 1)
nk.edit('box', edit)
nk.layoutRow('dynamic', 5, 1)
nk.spacing(1)
nk.layoutRow('dynamic', 30, 1)
nk.label('Combobox:')
nk.combobox(comboA, comboA.items)
nk.layoutRow('dynamic', 5, 1)
nk.spacing(1)
nk.layoutRow('dynamic', 30, 1)
if nk.widgetIsHovered() then
nk.tooltip('Test tooltip')
end
ui:groupEnd()
local x, y, w, h = nk.widgetBounds()
if nk.contextualBegin(100, 100, x, y, w, h) then
nk.layoutRow('dynamic', 30, 1)
nk.contextualItem('Item A')
nk.contextualItem('Item B')
nk.contextualEnd()
end
if ui:groupBegin('Group 2', 'border') then
ui:layoutRow('dynamic', 30, 1)
ui:label('Radio buttons:')
ui:layoutRow('dynamic', 30, 3)
ui:radio('A', radio)
ui:radio('B', radio)
ui:radio('C', radio)
ui:layoutRow('dynamic', 30, 1)
ui:selectable('Selectable A', selectA)
ui:selectable('Selectable B', selectB)
ui:layoutRow('dynamic', 30, {.35, .65})
ui:label('Slider:')
ui:slider(0, slider, 1, 0.05)
ui:label('Progress:')
ui:progress(progress, 10, true)
ui:layoutRow('dynamic', 30, 2)
ui:spacing(2)
ui:label('Color picker:')
ui:button(nil, colorPicker.value)
ui:layoutRow('dynamic', 90, 1)
ui:colorPicker(colorPicker)
ui:groupEnd()
end
if ui:groupBegin('Group 3', 'border') then
ui:layoutRow('dynamic', 30, 1)
ui:property('Property', 0, property, 10, 0.25, 0.05)
ui:spacing(1)
ui:label('Edit:')
ui:layoutRow('dynamic', 90, 1)
ui:edit('box', edit)
ui:layoutRow('dynamic', 5, 1)
ui:spacing(1)
ui:layoutRow('dynamic', 30, 1)
ui:label('Combobox:')
ui:combobox(comboA, comboA.items)
ui:layoutRow('dynamic', 5, 1)
ui:spacing(1)
ui:layoutRow('dynamic', 30, 1)
if ui:widgetIsHovered() then
ui:tooltip('Test tooltip')
end
local x, y, w, h = ui:widgetBounds()
if ui:contextualBegin(100, 100, x, y, w, h) then
ui:layoutRow('dynamic', 30, 1)
ui:contextualItem('Item A')
ui:contextualItem('Item B')
ui:contextualEnd()
end
ui:label('Contextual (Right click me)')
ui:groupEnd()
end
end
ui:windowEnd()
if(scissorActive) then
love.graphics.setScissor()
love.graphics.clear()
love.graphics.setScissor(130, 130, 500, 400)
else
love.graphics.setScissor()
nk.label('Contextual (Right click me)')
nk.groupEnd()
end
nk.windowEnd()
end

View file

@ -1,34 +1,28 @@
-- Basic skinning example.
local nk = require 'nuklear'
local windowHeader = love.graphics.newImage 'skin/window_header.png'
local windowBody = love.graphics.newImage 'skin/window.png'
local checkboxTexture = love.graphics.newImage 'skin/checkbox.png'
local checkboxOff = {checkboxTexture, love.graphics.newQuad(0, 0, 51, 55, 58, 115)}
local checkboxOn = {checkboxTexture, love.graphics.newQuad(0, 55, 58, 60, 58, 115)}
local buttonTexture = love.graphics.newImage 'skin/button.png'
local buttonNormal = {buttonTexture, love.graphics.newQuad(0, 0, 69, 52, 69, 156)}
local buttonActive = {buttonTexture, love.graphics.newQuad(0, 52, 69, 52, 69, 156)}
local buttonHover = {buttonTexture, love.graphics.newQuad(0, 104, 69, 52, 69, 156)}
local checkboxSkin = love.graphics.newImage 'skin/checkbox_false.png'
local checkboxCheck = love.graphics.newImage 'skin/checkbox_true.png'
local style = {
['text'] = {
['color'] = '#000000'
},
['button'] = {
['normal'] = buttonNormal,
['hover'] = buttonHover,
['active'] = buttonActive,
['normal'] = love.graphics.newImage 'skin/button.png',
['hover'] = love.graphics.newImage 'skin/button_hover.png',
['active'] = love.graphics.newImage 'skin/button_active.png',
['text background'] = '#00000000',
['text normal'] = '#000000',
['text hover'] = '#000000',
['text active'] = '#ffffff'
},
['checkbox'] = {
['normal'] = checkboxOff,
['hover'] = checkboxOff,
['active'] = checkboxOff,
['cursor normal'] = checkboxOn,
['cursor hover'] = checkboxOn,
['normal'] = checkboxSkin,
['hover'] = checkboxSkin,
['active'] = checkboxSkin,
['cursor normal'] = checkboxCheck,
['cursor hover'] = checkboxCheck,
['text normal'] = '#000000',
['text hover'] = '#000000',
['text active'] = '#000000',
@ -44,25 +38,25 @@ local style = {
['label active'] = '#000000',
['label padding'] = {x = 10, y = 8}
},
['fixed background'] = windowBody,
['fixed background'] = love.graphics.newImage 'skin/window.png',
['background'] = '#d3ceaa'
}
}
local check = {value = false}
return function (ui)
ui:stylePush(style)
if ui:windowBegin('Skin Example', 200, 200, 350, 200, 'title', 'movable') then
ui:layoutSpaceBegin('dynamic', 150, 3)
ui:layoutSpacePush(0.14, 0.15, 0.72, 0.3)
ui:label('Skin example! Styles can change skins, colors, padding, font, and more.', 'wrap')
ui:layoutSpacePush(0.2, 0.55, 0.2, 0.2)
ui:button('Button')
ui:layoutSpacePush(0.55, 0.55, 0.3, 0.2)
ui:checkbox('Checkbox', check)
ui:layoutSpaceEnd()
return function ()
nk.stylePush(style)
if nk.windowBegin('Skin Example', 200, 200, 350, 200, 'title', 'movable') then
nk.layoutSpaceBegin('dynamic', 150, 3)
nk.layoutSpacePush(0.14, 0.15, 0.72, 0.3)
nk.label('Skin example! Styles can change skins, colors, padding, font, and more.', 'wrap')
nk.layoutSpacePush(0.2, 0.55, 0.2, 0.2)
nk.button('Button')
nk.layoutSpacePush(0.55, 0.55, 0.3, 0.2)
nk.checkbox('Checkbox', check)
nk.layoutSpaceEnd()
end
ui:windowEnd()
ui:stylePop()
nk.windowEnd()
nk.stylePop()
end

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Before After
Before After

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

View file

@ -1,6 +1,6 @@
-- Show off some of the styling options.
local nuklear = require "nuklear"
local nk = require 'nuklear'
local colors = {
['text'] = '#afafaf',
@ -41,29 +41,28 @@ end
table.sort(colorNames)
return function (ui)
ui:styleLoadColors(colors)
if ui:windowBegin('Style', 400, 50, 350, 450, 'border', 'movable', 'title', 'scrollbar') then
ui:layoutRow('dynamic', 25, 2)
return function ()
nk.styleLoadColors(colors)
nk.windowBegin('Style', 400, 50, 350, 450, 'border', 'movable', 'title', 'scrollbar')
nk.layoutRow('dynamic', 25, 2)
for _,name in ipairs(colorNames) do
ui:label(name..':')
nk.label(name..':')
local color = colors[name]
if ui:comboboxBegin(nil, color, 200, 200) then
ui:layoutRow('dynamic', 90, 1)
color = ui:colorPicker(color)
if nk.comboboxBegin(nil, color, 200, 200) then
nk.layoutRow('dynamic', 90, 1)
color = nk.colorPicker(color)
colors[name] = color
local r, g, b = nuklear.colorParseRGBA(color)
ui:layoutRow('dynamic', 25, {.25, .75})
ui:label('R: '..r)
r = ui:slider(0, r, 255, 1)
ui:label('G: '..g)
g = ui:slider(0, g, 255, 1)
ui:label('B: '..b)
b = ui:slider(0, b, 255, 1)
colors[name] = nuklear.colorRGBA(r, g, b)
ui:comboboxEnd()
local r, g, b = nk.colorParseRGBA(color)
nk.layoutRow('dynamic', 25, {.25, .75})
nk.label('R: '..r)
r = nk.slider(0, r, 255, 1)
nk.label('G: '..g)
g = nk.slider(0, g, 255, 1)
nk.label('B: '..b)
b = nk.slider(0, b, 255, 1)
colors[name] = nk.colorRGBA(r, g, b)
nk.comboboxEnd()
end
end
end
ui:windowEnd()
nk.windowEnd()
end

View file

@ -1,19 +0,0 @@
-- Show off the template row layout
return function(ui)
if ui:windowBegin('Template Layout', 200, 100, 300, 200,
'title', 'border', 'movable', 'scalable') then
x, y, width, height = ui:windowGetContentRegion()
ui:layoutRow('dynamic', 40, 1)
ui:label('Scale me!');
ui:layoutTemplateBegin(height - 40)
ui:layoutTemplatePush('static', 75)
ui:layoutTemplatePush('dynamic')
ui:layoutTemplatePush('variable', 75)
ui:layoutTemplateEnd()
ui:button(nil, '#ff0000')
ui:button(nil, '#00ff00')
ui:button(nil, '#0000ff')
end
ui:windowEnd()
end

View file

@ -1,16 +0,0 @@
-- Apply transformations to a basic UI.
return function(ui)
local t = love.timer.getTime()
ui:translate(350 + 100 * math.cos(t / 4), 350 + 100 * math.sin(t / 4))
ui:rotate(t / 8)
ui:scale(1 + math.sin(t / 4) / 2, 1 + math.cos(t / 4) / 2)
ui:shear(math.cos(t / 8) / 4, math.sin(t / 8) / 4)
if ui:windowBegin('Transform', 0, 0, 200, 200, 'border', 'movable', 'title') then
ui:layoutRow('dynamic', 100, 1)
ui:label('You can apply transformations to the UI using ui:rotate, ui:scale, ui:shear, and ui:translate.', 'wrap')
ui:layoutRow('dynamic', 30, 1)
ui:button('Try and catch me!')
end
ui:windowEnd()
end

@ -1 +1 @@
Subproject commit 614abce05b9455849bbf1519b7f86e53c78b04ab
Subproject commit ca1c9b3275cf8e31b01fcd61c4d5116f88d4e24d

File diff suppressed because it is too large Load diff