aboutsummaryrefslogtreecommitdiff
path: root/src/syslua/lx
diff options
context:
space:
mode:
Diffstat (limited to 'src/syslua/lx')
-rw-r--r--src/syslua/lx/gui.lua6
-rw-r--r--src/syslua/lx/tk.lua97
2 files changed, 101 insertions, 2 deletions
diff --git a/src/syslua/lx/gui.lua b/src/syslua/lx/gui.lua
index 23e6cb6..35e73b8 100644
--- a/src/syslua/lx/gui.lua
+++ b/src/syslua/lx/gui.lua
@@ -121,6 +121,8 @@ end
function gui.on_mouse(dx, dy, dw, lb, rb, mb)
if dx ~= 0 or dy ~= 0 then
+ local prev_x, prev_y = gui.mouse_x, gui.mouse_y
+
local csr = gui.cursor_visible
if csr then gui.hide_cursor() end
@@ -133,7 +135,7 @@ function gui.on_mouse(dx, dy, dw, lb, rb, mb)
if csr then gui.show_cursor() end
- gui.on_mouse_move(gui.mouse_x, gui.mouse_y)
+ gui.on_mouse_move(prev_x, prev_y, gui.mouse_x, gui.mouse_y)
end
if lb == 1 and not gui.mouse_lbtn then
@@ -153,7 +155,7 @@ function gui.on_mouse(dx, dy, dw, lb, rb, mb)
end
end
-function gui.on_mouse_move(x, y)
+function gui.on_mouse_move(prev_x, prev_y, x, y)
-- Nothing, can be replaced :)
end
diff --git a/src/syslua/lx/tk.lua b/src/syslua/lx/tk.lua
new file mode 100644
index 0000000..0b0c69c
--- /dev/null
+++ b/src/syslua/lx/tk.lua
@@ -0,0 +1,97 @@
+local draw = require 'lx.draw'
+local sys = require 'lx.sys'
+
+local tk = {}
+
+function tk.widget(width, height)
+ local w = {
+ width = width,
+ height = height,
+ }
+
+ function w:resize(width, height)
+ w.width = width
+ w.height = height
+ end
+
+ function w:get_draw_buffer(x0, y0, w, h)
+ -- Replaced by parent by a function that returns the buffer for
+ return nil
+ end
+
+ function w:redraw(x0, y0, w, h)
+ -- Replaced by widget code by a function that does the actual drawing
+ end
+
+ function w:on_mouse_down(lb, rb, mb)
+ -- Handler for mouse down event
+ end
+
+ function w:on_mouse_up(lb, rb, mb)
+ -- Handler for mouse up event
+ end
+
+ function w:on_mouse_move(prev_x, prev_y, new_x, new_y)
+ -- Handler for mouse move event
+ end
+
+ function w:on_text_input(char)
+ -- Handler for text input
+ end
+
+ function w:on_key_down(key)
+ -- Handler for key press
+ end
+
+ function w:on_key_up(key)
+ -- Handler for key release
+ end
+
+ return w
+end
+
+function tk.init(gui, root_widget)
+ tk.fonts = {
+ default = draw.load_ttf_font("sys:/fonts/vera.ttf")
+ }
+
+ root_widget:resize(gui.surface:width(), gui.surface:height())
+
+ gui.on_key_down = function(key) root_widget:on_key_down(key) end
+ gui.on_key_up = function(key) root_widget:on_key_up(key) end
+ gui.on_text_input = function(key) root_widget:on_text_input(char) end
+ gui.on_mouse_move = function(ox, oy, nx, ny) root_widget:on_mouse_move(ox, oy, nx, ny) end
+ gui.on_mouse_down = function(lb, rb, mb) root_widget:on_mouse_down(lb, rb, mb) end
+ gui.on_mouse_up = function(lb, rb, mb) root_widget:on_mouse_up(lb, rb, mb) end
+
+ function root_widget:get_draw_buffer(x0, y0, w, h)
+ return gui.surface:sub(x0, y0, w, h)
+ end
+
+ root_widget:redraw(0, 0, root_widget.width, root_widget.height)
+end
+
+function tk.image_widget(img)
+ local image = tk.widget(img:width(), img:height())
+ image.img = img
+
+ function image:redraw(x0, y0, w, h)
+ local buf = self:get_draw_buffer(x0, y0, w, h)
+ if buf == nil then return end
+
+ for x = x0 - (x0 % 32), x0 + w, 32 do
+ for y = y0 - (y0 % 32), y0 + h, 32 do
+ buf:fillrect(x - x0, y - y0, 16, 16, buf:rgb(150, 150, 150))
+ buf:fillrect(x - x0 + 16, y - y0 + 16, 16, 16, buf:rgb(150, 150, 150))
+ buf:fillrect(x - x0 + 16, y - y0, 16, 16, buf:rgb(200, 200, 200))
+ buf:fillrect(x - x0, y - y0 + 16, 16, 16, buf:rgb(200, 200, 200))
+ end
+ end
+ buf:blit(0, 0, self.img:sub(x0, y0, self.img:width(), self.img:height()))
+ end
+
+ return image
+end
+
+
+return tk