Compare commits

..

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

22 changed files with 1998 additions and 3386 deletions

1
.gitignore vendored
View file

@ -1 +0,0 @@
build/

2
.gitmodules vendored
View file

@ -1,3 +1,3 @@
[submodule "src/nuklear"] [submodule "src/nuklear"]
path = 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} ${LUA_LIBRARIES}
) )
IF(MSVC)
TARGET_COMPILE_DEFINITIONS(${LIB_NAME} PRIVATE LUA_BUILD_AS_DLL)
endif(MSVC)
SET_TARGET_PROPERTIES("${LIB_NAME}" PROPERTIES PREFIX "") 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 # 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. 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 ```lua
-- Simple UI example. -- Simple UI example.
local nuklear = require 'nuklear' local nk = require 'nuklear'
local ui
function love.load() function love.load()
ui = nuklear.newUI() nk.init()
end end
local combo = {value = 1, items = {'A', 'B', 'C'}} local combo = {value = 1, items = {'A', 'B', 'C'}}
function love.update(dt) function love.update(dt)
ui:frameBegin() nk.frameBegin()
if ui:windowBegin('Simple Example', 100, 100, 200, 160, if nk.windowBegin('Simple Example', 100, 100, 200, 160,
'border', 'title', 'movable') then 'border', 'title', 'movable') then
ui:layoutRow('dynamic', 30, 1) nk.layoutRow('dynamic', 30, 1)
ui:label('Hello, world!') nk.label('Hello, world!')
ui:layoutRow('dynamic', 30, 2) nk.layoutRow('dynamic', 30, 2)
ui:label('Combo box:') nk.label('Combo box:')
if ui:combobox(combo, combo.items) then if nk.combobox(combo, combo.items) then
print('Combo!', combo.items[combo.value]) print('Combo!', combo.items[combo.value])
end end
ui:layoutRow('dynamic', 30, 3) nk.layoutRow('dynamic', 30, 3)
ui:label('Buttons:') nk.label('Buttons:')
if ui:button('Sample') then if nk.button('Sample') then
print('Sample!') print('Sample!')
end end
if ui:button('Button') then if nk.button('Button') then
print('Button!') print('Button!')
end end
end end
ui:windowEnd() nk.windowEnd()
ui:frameEnd() nk.frameEnd()
end end
function love.draw() function love.draw()
ui:draw() nk.draw()
end end
function love.keypressed(key, scancode, isrepeat) function love.keypressed(key, scancode, isrepeat)
ui:keypressed(key, scancode, isrepeat) nk.keypressed(key, scancode, isrepeat)
end end
function love.keyreleased(key, scancode) function love.keyreleased(key, scancode)
ui:keyreleased(key, scancode) nk.keyreleased(key, scancode)
end end
function love.mousepressed(x, y, button, istouch, presses) function love.mousepressed(x, y, button, istouch)
ui:mousepressed(x, y, button, istouch, presses) nk.mousepressed(x, y, button, istouch)
end end
function love.mousereleased(x, y, button, istouch, presses) function love.mousereleased(x, y, button, istouch)
ui:mousereleased(x, y, button, istouch, presses) nk.mousereleased(x, y, button, istouch)
end end
function love.mousemoved(x, y, dx, dy, istouch) function love.mousemoved(x, y, dx, dy, istouch)
ui:mousemoved(x, y, dx, dy, istouch) nk.mousemoved(x, y, dx, dy, istouch)
end end
function love.textinput(text) function love.textinput(text)
ui:textinput(text) nk.textinput(text)
end end
function love.wheelmoved(x, y) function love.wheelmoved(x, y)
ui:wheelmoved(x, y) nk.wheelmoved(x, y)
end end
``` ```
## Building ## 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: To build the library yourself, grab the code with:
```sh ```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. 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.
### 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.
## Documentation ## Documentation

View file

@ -11,7 +11,7 @@
find_path(LUA_INCLUDE_DIR luajit.h find_path(LUA_INCLUDE_DIR luajit.h
HINTS HINTS
ENV LUA_DIR 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 PATHS
~/Library/Frameworks ~/Library/Frameworks
/Library/Frameworks /Library/Frameworks

View file

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

View file

@ -1,72 +1,53 @@
-- Several simple examples. -- Several simple examples.
local nuklear = require 'nuklear' local nk = require 'nuklear'
local calculator = require 'calculator' local calculator = require 'calculator'
local closure = require 'closure'
local draw = require 'draw'
local overview = require 'overview' local overview = require 'overview'
local style = require 'style' local style = require 'style'
local skin = require 'skin' local skin = require 'skin'
local template = require 'template'
local transform = require 'transform'
local ui1, ui2
function love.load() function love.load()
love.keyboard.setKeyRepeat(true) nk.init()
ui1, ui2 = nuklear.newUI(), nuklear.newUI()
end end
function love.update(dt) function love.update(dt)
ui1:frameBegin() nk.frameBegin()
calculator(ui1) calculator()
style(ui1) style()
closure(ui1) overview()
overview(ui1) skin()
draw(ui1) nk.frameEnd()
template(ui1)
skin(ui1)
ui1:frameEnd()
ui2:frameBegin()
transform(ui2)
ui2:frameEnd()
end end
function love.draw() function love.draw()
ui1:draw() nk.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, ...)
end end
function love.keypressed(key, scancode, isrepeat) function love.keypressed(key, scancode, isrepeat)
input('keypressed', key, scancode, isrepeat) nk.keypressed(key, scancode, isrepeat)
end end
function love.keyreleased(key, scancode) function love.keyreleased(key, scancode)
input('keyreleased', key, scancode) nk.keyreleased(key, scancode)
end end
function love.mousepressed(x, y, button, istouch, presses) function love.mousepressed(x, y, button, istouch)
input('mousepressed', x, y, button, istouch, presses) nk.mousepressed(x, y, button, istouch)
end end
function love.mousereleased(x, y, button, istouch, presses) function love.mousereleased(x, y, button, istouch)
input('mousereleased', x, y, button, istouch, presses) nk.mousereleased(x, y, button, istouch)
end end
function love.mousemoved(x, y, dx, dy, istouch) function love.mousemoved(x, y, dx, dy, istouch)
input('mousemoved', x, y, dx, dy, istouch) nk.mousemoved(x, y, dx, dy, istouch)
end end
function love.textinput(text) function love.textinput(text)
input('textinput', text) nk.textinput(text)
end end
function love.wheelmoved(x, y) function love.wheelmoved(x, y)
input('wheelmoved', x, y) nk.wheelmoved(x, y)
end end

View file

@ -1,5 +1,7 @@
-- An overview of most of the supported widgets. -- An overview of most of the supported widgets.
local nk = require 'nuklear'
local checkA = {value = false} local checkA = {value = false}
local checkB = {value = true} local checkB = {value = true}
local radio = {value = 'A'} local radio = {value = 'A'}
@ -11,108 +13,94 @@ local colorPicker = {value = '#ff0000'}
local property = {value = 6} local property = {value = 6}
local edit = {value = 'Edit text'} local edit = {value = 'Edit text'}
local comboA = {value = 1, items = {'A', 'B', 'C'}} local comboA = {value = 1, items = {'A', 'B', 'C'}}
local scissorActive = false
return function (ui) return function ()
if ui:windowBegin('Overview', 100, 100, 600, 450, 'border', 'movable', 'title') then if nk.windowBegin('Overview', 100, 100, 600, 450, 'border', 'movable', 'title') then
ui:menubarBegin() nk.menubarBegin()
ui:layoutRow('dynamic', 30, 1) nk.layoutRow('dynamic', 30, 1)
if ui:menuBegin('Menu', nil, 120, 90) then if nk.menuBegin('Menu', nil, 120, 90) then
ui:layoutRow('dynamic', 40, 1) nk.layoutRow('dynamic', 40, 1)
ui:menuItem('Item A') nk.menuItem('Item A')
ui:menuItem('Item B') nk.menuItem('Item B')
ui:menuItem('Item C') nk.menuItem('Item C')
ui:menuEnd() nk.menuEnd()
end end
ui:menubarEnd() nk.menubarEnd()
ui:layoutRow('dynamic', 375, 3) nk.layoutRow('dynamic', 400, 3)
if ui:groupBegin('Group 1', 'border') then nk.groupBegin('Group 1', 'border')
ui:layoutRow('dynamic', 30, 1) nk.layoutRow('dynamic', 30, 1)
ui:label('Left label') nk.label('Left label')
ui:label('Centered label', 'centered') nk.label('Centered label', 'centered')
ui:label('Right label', 'right') nk.label('Right label', 'right')
ui:label('Colored label', 'left', '#ff0000') nk.label('Colored label', 'left', '#ff0000')
if ui:treePush('tab', 'Tree Tab') then if nk.treePush('tab', 'Tree Tab') then
if ui:treePush('node', 'Tree Node 1') then if nk.treePush('node', 'Tree Node 1') then
ui:label('Label 1') nk.label('Label 1')
ui:treePop() nk.treePop()
end end
if ui:treePush('node', 'Tree Node 2') then if nk.treePush('node', 'Tree Node 2') then
ui:label('Label 2') nk.label('Label 2')
ui:treePop() nk.treePop()
end end
ui:treePop() nk.treePop()
end end
ui:spacing(1) nk.spacing(1)
if ui:button('Button') then if nk.button('Button') then
print('button pressed!') print('button pressed!')
end end
ui:spacing(1) nk.spacing(1)
ui:checkbox('Checkbox A', checkA) nk.checkbox('Checkbox A', checkA)
ui:checkbox('Checkbox B', checkB) nk.checkbox('Checkbox B', checkB)
if ui:button('Scissor') then nk.groupEnd()
scissorActive = not scissorActive 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 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 end
if ui:groupBegin('Group 2', 'border') then nk.label('Contextual (Right click me)')
ui:layoutRow('dynamic', 30, 1) nk.groupEnd()
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()
end end
nk.windowEnd()
end end

View file

@ -1,34 +1,28 @@
-- Basic skinning example. local nk = require 'nuklear'
local windowHeader = love.graphics.newImage 'skin/window_header.png' local windowHeader = love.graphics.newImage 'skin/window_header.png'
local windowBody = love.graphics.newImage 'skin/window.png' local checkboxSkin = love.graphics.newImage 'skin/checkbox_false.png'
local checkboxTexture = love.graphics.newImage 'skin/checkbox.png' local checkboxCheck = love.graphics.newImage 'skin/checkbox_true.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 style = { local style = {
['text'] = { ['text'] = {
['color'] = '#000000' ['color'] = '#000000'
}, },
['button'] = { ['button'] = {
['normal'] = buttonNormal, ['normal'] = love.graphics.newImage 'skin/button.png',
['hover'] = buttonHover, ['hover'] = love.graphics.newImage 'skin/button_hover.png',
['active'] = buttonActive, ['active'] = love.graphics.newImage 'skin/button_active.png',
['text background'] = '#00000000', ['text background'] = '#00000000',
['text normal'] = '#000000', ['text normal'] = '#000000',
['text hover'] = '#000000', ['text hover'] = '#000000',
['text active'] = '#ffffff' ['text active'] = '#ffffff'
}, },
['checkbox'] = { ['checkbox'] = {
['normal'] = checkboxOff, ['normal'] = checkboxSkin,
['hover'] = checkboxOff, ['hover'] = checkboxSkin,
['active'] = checkboxOff, ['active'] = checkboxSkin,
['cursor normal'] = checkboxOn, ['cursor normal'] = checkboxCheck,
['cursor hover'] = checkboxOn, ['cursor hover'] = checkboxCheck,
['text normal'] = '#000000', ['text normal'] = '#000000',
['text hover'] = '#000000', ['text hover'] = '#000000',
['text active'] = '#000000', ['text active'] = '#000000',
@ -44,25 +38,25 @@ local style = {
['label active'] = '#000000', ['label active'] = '#000000',
['label padding'] = {x = 10, y = 8} ['label padding'] = {x = 10, y = 8}
}, },
['fixed background'] = windowBody, ['fixed background'] = love.graphics.newImage 'skin/window.png',
['background'] = '#d3ceaa' ['background'] = '#d3ceaa'
} }
} }
local check = {value = false} local check = {value = false}
return function (ui) return function ()
ui:stylePush(style) nk.stylePush(style)
if ui:windowBegin('Skin Example', 200, 200, 350, 200, 'title', 'movable') then if nk.windowBegin('Skin Example', 200, 200, 350, 200, 'title', 'movable') then
ui:layoutSpaceBegin('dynamic', 150, 3) nk.layoutSpaceBegin('dynamic', 150, 3)
ui:layoutSpacePush(0.14, 0.15, 0.72, 0.3) nk.layoutSpacePush(0.14, 0.15, 0.72, 0.3)
ui:label('Skin example! Styles can change skins, colors, padding, font, and more.', 'wrap') nk.label('Skin example! Styles can change skins, colors, padding, font, and more.', 'wrap')
ui:layoutSpacePush(0.2, 0.55, 0.2, 0.2) nk.layoutSpacePush(0.2, 0.55, 0.2, 0.2)
ui:button('Button') nk.button('Button')
ui:layoutSpacePush(0.55, 0.55, 0.3, 0.2) nk.layoutSpacePush(0.55, 0.55, 0.3, 0.2)
ui:checkbox('Checkbox', check) nk.checkbox('Checkbox', check)
ui:layoutSpaceEnd() nk.layoutSpaceEnd()
end end
ui:windowEnd() nk.windowEnd()
ui:stylePop() nk.stylePop()
end 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. -- Show off some of the styling options.
local nuklear = require "nuklear" local nk = require 'nuklear'
local colors = { local colors = {
['text'] = '#afafaf', ['text'] = '#afafaf',
@ -41,29 +41,28 @@ end
table.sort(colorNames) table.sort(colorNames)
return function (ui) return function ()
ui:styleLoadColors(colors) nk.styleLoadColors(colors)
if ui:windowBegin('Style', 400, 50, 350, 450, 'border', 'movable', 'title', 'scrollbar') then nk.windowBegin('Style', 400, 50, 350, 450, 'border', 'movable', 'title', 'scrollbar')
ui:layoutRow('dynamic', 25, 2) nk.layoutRow('dynamic', 25, 2)
for _,name in ipairs(colorNames) do for _,name in ipairs(colorNames) do
ui:label(name..':') nk.label(name..':')
local color = colors[name] local color = colors[name]
if ui:comboboxBegin(nil, color, 200, 200) then if nk.comboboxBegin(nil, color, 200, 200) then
ui:layoutRow('dynamic', 90, 1) nk.layoutRow('dynamic', 90, 1)
color = ui:colorPicker(color) color = nk.colorPicker(color)
colors[name] = color colors[name] = color
local r, g, b = nuklear.colorParseRGBA(color) local r, g, b = nk.colorParseRGBA(color)
ui:layoutRow('dynamic', 25, {.25, .75}) nk.layoutRow('dynamic', 25, {.25, .75})
ui:label('R: '..r) nk.label('R: '..r)
r = ui:slider(0, r, 255, 1) r = nk.slider(0, r, 255, 1)
ui:label('G: '..g) nk.label('G: '..g)
g = ui:slider(0, g, 255, 1) g = nk.slider(0, g, 255, 1)
ui:label('B: '..b) nk.label('B: '..b)
b = ui:slider(0, b, 255, 1) b = nk.slider(0, b, 255, 1)
colors[name] = nuklear.colorRGBA(r, g, b) colors[name] = nk.colorRGBA(r, g, b)
ui:comboboxEnd() nk.comboboxEnd()
end end
end end
end nk.windowEnd()
ui:windowEnd()
end 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