From 0187eb8e96d5075a17a4547e0730946d5138c09a Mon Sep 17 00:00:00 2001 From: MoAlyousef Date: Fri, 4 Aug 2023 22:47:38 +0300 Subject: [PATCH] update to zig0.11 --- README.md | 28 +++++++++++++------------- examples/browser.zig | 6 +++--- examples/channels.zig | 11 +++++------ examples/customwidget.zig | 8 ++++---- examples/editor.zig | 41 +++++++++++++++++++-------------------- examples/editormsgs.zig | 7 +++---- examples/flex.zig | 15 +++++++------- examples/flutterlike.zig | 4 ++-- examples/glwin.zig | 2 +- examples/handle.zig | 12 ++++++------ examples/image.zig | 10 +++++----- examples/input.zig | 16 +++++++-------- examples/layout.zig | 15 +++++++------- examples/mixed.zig | 20 +++++++++---------- examples/simple.zig | 10 +++++----- examples/threadawake.zig | 13 ++++++------- examples/tile.zig | 15 +++++++------- examples/valuators.zig | 16 +++++++-------- src/browser.zig | 10 ++++++++-- src/button.zig | 16 +++++++++++---- src/group.zig | 31 +++++++++++++++++------------ src/input.zig | 14 +++++++++---- src/menu.zig | 12 ++++++++---- src/output.zig | 9 ++++++--- src/table.zig | 11 +++++++---- src/text.zig | 17 +++++++++------- src/tree.zig | 2 +- src/valuator.zig | 15 ++++++++++---- src/widget.zig | 21 ++++++++++---------- src/window.zig | 4 ++-- src/zfltk.zig | 18 +---------------- 31 files changed, 225 insertions(+), 204 deletions(-) diff --git a/README.md b/README.md index 4635393..a93785c 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ If you're using the official package manager: .version = "0.0.1", .dependencies = .{ .zfltk = .{ - .url = "https://github.com/MoAlyousef/zfltk/archive/refs/tags/pkg0.0.8.tar.gz", + .url = "https://github.com/MoAlyousef/zfltk/archive/refs/tags/pkg0.1.0.tar.gz", }, } } @@ -154,12 +154,12 @@ Using the Zig wrapper (under development): ```zig const zfltk = @import("zfltk"); const app = zfltk.app; -const Window = zfltk.Window; -const Button = zfltk.Button; -const Box = zfltk.Box; +const Window = zfltk.window.Window; +const Button = zfltk.button.Button; +const Box = zfltk.box.Box; const Color = zfltk.enums.Color; -fn butCb(but: *Button(.normal), data: ?*anyopaque) void { +fn butCb(but: *Button, data: ?*anyopaque) void { var box = Box.fromRaw(data.?); box.setLabel("Hello World!"); @@ -177,8 +177,9 @@ pub fn main() !void { .label = "Hello", }); + win.freePosition(); - var but = try Button(.normal).init(.{ + var but = try Button.init(.{ .x = 160, .y = 220, .w = 80, @@ -187,6 +188,8 @@ pub fn main() !void { .label = "Click me!", }); + but.setDownBox(.flat); + var box = try Box.init(.{ .x = 10, .y = 10, @@ -210,10 +213,9 @@ The messaging api can also be used: ```zig const zfltk = @import("zfltk"); const app = zfltk.app; -const Widget = zfltk.Widget; -const Window = zfltk.Window; -const Button = zfltk.Button; -const Box = zfltk.Box; +const Window = zfltk.window.Window; +const Button = zfltk.button.Button; +const Box = zfltk.box.Box; const enums = zfltk.enums; pub const Message = enum(usize) { @@ -233,7 +235,7 @@ pub fn main() !void { .label = "Hello", }); - var but1 = try Button(.normal).init(.{ + var but1 = try Button.init(.{ .x = 100, .y = 220, .w = 80, @@ -242,7 +244,7 @@ pub fn main() !void { .label = "Button 1", }); - var but2 = try Button(.normal).init(.{ + var but2 = try Button.init(.{ .x = 200, .y = 220, .w = 80, @@ -307,7 +309,7 @@ You can also mix and match for any missing functionalities in the Zig wrapper (s Widgets also provide a `call` method which allows to call any method that wasn't wrapped yet in the bindings: ```zig - var flex = try Group(.flex).init(.{ + var flex = try Flex.init(.{ .w = 400, .h = 300, .orientation = .vertical, diff --git a/examples/browser.zig b/examples/browser.zig index 8bdcafe..fcda09a 100644 --- a/examples/browser.zig +++ b/examples/browser.zig @@ -1,7 +1,7 @@ const zfltk = @import("zfltk"); const app = zfltk.app; -const Window = zfltk.Window; -const Browser = zfltk.Browser; +const Window = zfltk.window.Window; +const MultiBrowser = zfltk.browser.MultiBrowser; pub fn main() !void { try app.init(); @@ -12,7 +12,7 @@ pub fn main() !void { }); // Available browsers are: normal, select, hold, multi and file - var browser = try Browser(.multi).init(.{ + var browser = try MultiBrowser.init(.{ .x = 10, .y = 10, .w = 900 - 20, diff --git a/examples/channels.zig b/examples/channels.zig index 3236df4..4c0715b 100644 --- a/examples/channels.zig +++ b/examples/channels.zig @@ -1,9 +1,8 @@ const zfltk = @import("zfltk"); const app = zfltk.app; -const Widget = zfltk.Widget; -const Window = zfltk.Window; -const Button = zfltk.Button; -const Box = zfltk.Box; +const Window = zfltk.window.Window; +const Button = zfltk.button.Button; +const Box = zfltk.box.Box; const enums = zfltk.enums; pub const Message = enum(usize) { @@ -23,7 +22,7 @@ pub fn main() !void { .label = "Hello", }); - var but1 = try Button(.normal).init(.{ + var but1 = try Button.init(.{ .x = 100, .y = 220, .w = 80, @@ -32,7 +31,7 @@ pub fn main() !void { .label = "Button 1", }); - var but2 = try Button(.normal).init(.{ + var but2 = try Button.init(.{ .x = 200, .y = 220, .w = 80, diff --git a/examples/customwidget.zig b/examples/customwidget.zig index 7cefae0..6ec0906 100644 --- a/examples/customwidget.zig +++ b/examples/customwidget.zig @@ -1,10 +1,10 @@ const zfltk = @import("zfltk"); const app = zfltk.app; const draw = zfltk.draw; -const Window = zfltk.Window; -const Widget = zfltk.Widget; -const Button = zfltk.Button; -const Box = zfltk.Box; +const Window = zfltk.window.Window; +const Widget = zfltk.widget.Widget; +const Button = zfltk.button.Button; +const Box = zfltk.box.Box; const enums = zfltk.enums; const Color = enums.Color; const Event = enums.Event; diff --git a/examples/editor.zig b/examples/editor.zig index 23073f3..e621e0c 100644 --- a/examples/editor.zig +++ b/examples/editor.zig @@ -4,14 +4,13 @@ const zfltk = @import("zfltk"); const app = zfltk.app; const widget = zfltk.widget; -const Widget = widget.Widget; -const Window = zfltk.Window; -const Menu = zfltk.Menu; +const Window = zfltk.window.Window; +const MenuBar = zfltk.menu.MenuBar; const enums = zfltk.enums; const Color = enums.Color; -const TextDisplay = zfltk.TextDisplay; +const TextEditor = zfltk.text.TextEditor; const dialog = zfltk.dialog; -const FileDialog = zfltk.FileDialog; +const FileDialog = zfltk.dialog.FileDialog; const std = @import("std"); // To avoid exiting when hitting escape. @@ -22,13 +21,13 @@ pub fn winCb(w: *Window) void { } } -fn newCb(_: *Menu(.menu_bar), data: ?*anyopaque) void { - var editor = TextDisplay(.editor).fromRaw(data.?); +fn newCb(_: *MenuBar, data: ?*anyopaque) void { + var editor = TextEditor.fromRaw(data.?); editor.buffer().?.setText(""); } -pub fn openCb(_: *Menu(.menu_bar), data: ?*anyopaque) void { - var editor = TextDisplay(.editor).fromRaw(data.?); +pub fn openCb(_: *MenuBar, data: ?*anyopaque) void { + var editor = TextEditor.fromRaw(data.?); var dlg = try FileDialog(.file).init(.{}); dlg.setFilter("*.{txt,zig}"); dlg.show(); @@ -38,8 +37,8 @@ pub fn openCb(_: *Menu(.menu_bar), data: ?*anyopaque) void { } } -pub fn saveCb(_: *Menu(.menu_bar), data: ?*anyopaque) void { - var editor = TextDisplay(.editor).fromRaw(data.?); +pub fn saveCb(_: *MenuBar, data: ?*anyopaque) void { + var editor = TextEditor.fromRaw(data.?); var dlg = try FileDialog(.save_file).init(.{ .save_as_confirm = true }); dlg.setFilter("*.{txt,zig}"); dlg.show(); @@ -49,27 +48,27 @@ pub fn saveCb(_: *Menu(.menu_bar), data: ?*anyopaque) void { } } -pub fn quitCb(_: *Menu(.menu_bar), data: ?*anyopaque) void { +pub fn quitCb(_: *MenuBar, data: ?*anyopaque) void { var win = widget.Widget.fromRaw(data.?); win.hide(); } -pub fn cutCb(_: *Menu(.menu_bar), data: ?*anyopaque) void { - const editor = TextDisplay(.editor).fromRaw(data.?); +pub fn cutCb(_: *MenuBar, data: ?*anyopaque) void { + const editor = TextEditor.fromRaw(data.?); editor.cut(); } -pub fn copyCb(_: *Menu(.menu_bar), data: ?*anyopaque) void { - const editor = TextDisplay(.editor).fromRaw(data.?); +pub fn copyCb(_: *MenuBar, data: ?*anyopaque) void { + const editor = TextEditor.fromRaw(data.?); _ = editor.copy(); } -pub fn pasteCb(_: *Menu(.menu_bar), data: ?*anyopaque) void { - const editor = TextDisplay(.editor).fromRaw(data.?); +pub fn pasteCb(_: *MenuBar, data: ?*anyopaque) void { + const editor = TextEditor.fromRaw(data.?); editor.paste(); } -pub fn helpCb(_: *Menu(.menu_bar)) void { +pub fn helpCb(_: *MenuBar) void { dialog.message(300, 200, "This editor was built using fltk and zig!"); } @@ -86,9 +85,9 @@ pub fn main() !void { }); win.freePosition(); - var mymenu = try Menu(.menu_bar).init(.{ .w = 800, .h = 35 }); + var mymenu = try MenuBar.init(.{ .w = 800, .h = 35 }); - var editor = try TextDisplay(.editor).init(.{ + var editor = try TextEditor.init(.{ .x = 2, .y = 37, .w = 800 - 2, diff --git a/examples/editormsgs.zig b/examples/editormsgs.zig index 9dbec57..977004b 100644 --- a/examples/editormsgs.zig +++ b/examples/editormsgs.zig @@ -1,14 +1,13 @@ const zfltk = @import("zfltk"); const app = zfltk.app; const widget = zfltk.widget; -const Widget = widget.Widget; const window = zfltk.window; const menu = zfltk.menu; const enums = zfltk.enums; const Color = enums.Color; const text = zfltk.text; const dialog = zfltk.dialog; -const FileDialog = zfltk.FileDialog; +const FileDialog = zfltk.dialog.FileDialog; const std = @import("std"); pub const Message = enum(usize) { @@ -38,10 +37,10 @@ pub fn main() !void { app.setBackground(Color.fromRgb(211, 211, 211)); var win = try window.Window.init(.{ .w = 800, .h = 600, .label = "Editor" }); win.freePosition(); - var mymenu = try menu.Menu(.menu_bar).init(.{ .w = 800, .h = 35 }); + var mymenu = try menu.MenuBar.init(.{ .w = 800, .h = 35 }); var buf = try text.TextBuffer.init(); defer buf.deinit(); - var editor = try text.TextDisplay(.editor).init(.{ + var editor = try text.TextEditor.init(.{ .x = 2, .y = 37, .w = 800 - 2, diff --git a/examples/flex.zig b/examples/flex.zig index 92c27bb..439d136 100644 --- a/examples/flex.zig +++ b/examples/flex.zig @@ -1,11 +1,10 @@ const zfltk = @import("zfltk"); const app = zfltk.app; -const Window = zfltk.Window; -const Box = zfltk.Box; -const Button = zfltk.Button; -const Group = zfltk.Group; -const Color = enums.Color; -const enums = zfltk.enums; +const Window = zfltk.window.Window; +const Box = zfltk.box.Box; +const Button = zfltk.button.Button; +const Flex = zfltk.group.Flex; +const Color = zfltk.enums.Color; pub fn main() !void { try app.init(); @@ -17,7 +16,7 @@ pub fn main() !void { .label = "Hello", }); - var flex = try Group(.flex).init(.{ + var flex = try Flex.init(.{ .w = 400, .h = 300, @@ -29,7 +28,7 @@ pub fn main() !void { win.resizable(flex); - var btn = try Button(.normal).init(.{ + var btn = try Button.init(.{ .h = 48, .label = "Button", }); diff --git a/examples/flutterlike.zig b/examples/flutterlike.zig index 7a1593e..9701feb 100644 --- a/examples/flutterlike.zig +++ b/examples/flutterlike.zig @@ -17,7 +17,7 @@ const HEIGHT: i32 = 400; var COUNT: i32 = 0; -fn btnCb(_: *button.Button(.normal), data: ?*anyopaque) void { +fn btnCb(_: *button.Button, data: ?*anyopaque) void { var count = box.Box.fromRaw(data.?); COUNT += 1; var buf: [250]u8 = undefined; @@ -38,7 +38,7 @@ pub fn main() !void { bar.setLabelAlign(Align.left | Align.inside); var text = try box.Box.init(.{ .x = 250, .y = 180, .w = 100, .h = 40, .label = "You have pushed the button this many times:" }); var count = try box.Box.init(.{ .x = 250, .y = 220, .w = 100, .h = 40, .label = "0" }); - var but = try button.Button(.normal).init(.{ .x = WIDTH - 100, .y = HEIGHT - 100, .w = 60, .h = 60, .label = "@+6plus" }); + var but = try button.Button.init(.{ .x = WIDTH - 100, .y = HEIGHT - 100, .w = 60, .h = 60, .label = "@+6plus" }); win.end(); win.resizable(win); win.show(); diff --git a/examples/glwin.zig b/examples/glwin.zig index 6682053..fec040d 100644 --- a/examples/glwin.zig +++ b/examples/glwin.zig @@ -1,6 +1,6 @@ const zfltk = @import("zfltk"); const app = zfltk.app; -const GlutWindow = zfltk.GlutWindow; +const GlutWindow = zfltk.window.GlutWindow; const Mode = zfltk.enums.Mode; extern fn glClearColor(r: f32, g: f32, b: f32, a: f32) void; diff --git a/examples/handle.zig b/examples/handle.zig index 1004d38..70b1fd1 100644 --- a/examples/handle.zig +++ b/examples/handle.zig @@ -1,14 +1,14 @@ const zfltk = @import("zfltk"); const app = zfltk.app; -const Window = zfltk.Window; -const Button = zfltk.Button; -const Box = zfltk.Box; +const Window = zfltk.window.Window; +const Button = zfltk.button.Button; +const Box = zfltk.box.Box; const Color = zfltk.enums.Color; const Event = zfltk.enums.Event; const std = @import("std"); const draw = zfltk.draw; -fn butCb(but: *Button(.normal), data: ?*anyopaque) void { +fn butCb(but: *Button, data: ?*anyopaque) void { var box = Box.fromRaw(data.?); box.setLabel("Hello World!"); @@ -17,7 +17,7 @@ fn butCb(but: *Button(.normal), data: ?*anyopaque) void { } fn boxEventHandler(_: *Box, ev: Event, data: ?*anyopaque) bool { - const btn = Button(.normal).fromRaw(data.?); + const btn = Button.fromRaw(data.?); switch (ev) { .push => { std.debug.print("Click the button: {s}\n", .{btn.label()}); @@ -43,7 +43,7 @@ pub fn main() !void { .label = "Hello", }); - var but = try Button(.normal).init(.{ + var but = try Button.init(.{ .x = 160, .y = 220, .w = 80, diff --git a/examples/image.zig b/examples/image.zig index 59645c6..83be0a5 100644 --- a/examples/image.zig +++ b/examples/image.zig @@ -1,10 +1,10 @@ const zfltk = @import("zfltk"); const app = zfltk.app; const SharedImage = zfltk.image.SharedImage; -const Image = zfltk.Image; -const Window = zfltk.Window; -const Box = zfltk.Box; -const Group = zfltk.Group; +const Image = zfltk.image.Image; +const Window = zfltk.window.Window; +const Box = zfltk.box.Box; +const Scroll = zfltk.group.Scroll; const Align = zfltk.enums.Align; const std = @import("std"); @@ -18,7 +18,7 @@ pub fn main() !void { .label = "Image demo", }); - var scroll = try Group(.scroll).init(.{ + var scroll = try Scroll.init(.{ .w = 415, .h = 140, }); diff --git a/examples/input.zig b/examples/input.zig index 208ae38..d63ba53 100644 --- a/examples/input.zig +++ b/examples/input.zig @@ -1,12 +1,10 @@ const zfltk = @import("zfltk"); const app = zfltk.app; -const Widget = zfltk.Widget; -const Box = zfltk.Box; +const Box = zfltk.box.Box; const Event = zfltk.enums.Event; -const Input = zfltk.Input; -const Group = zfltk.Group; -const Window = zfltk.Window; -const Button = zfltk.Button; +const Input = zfltk.input.Input; +const Window = zfltk.window.Window; +const Button = zfltk.button.Button; const std = @import("std"); const ButtonMessage = enum(usize) { @@ -14,7 +12,7 @@ const ButtonMessage = enum(usize) { released, }; -pub fn butCb(_: *Button(.normal), ev: Event) bool { +pub fn butCb(_: *Button, ev: Event) bool { switch (ev) { Event.push => { app.send(ButtonMessage, .pushed); @@ -42,7 +40,7 @@ pub fn main() !void { .label = "Hello", }); - var inp = try Input(.normal).init(.{ + var inp = try Input.init(.{ .x = 10, .y = 10, .w = 380, @@ -58,7 +56,7 @@ pub fn main() !void { .boxtype = .up, }); - var but = try Button(.normal).init(.{ + var but = try Button.init(.{ .x = 160, .y = 200, .w = 80, diff --git a/examples/layout.zig b/examples/layout.zig index f073be5..ea9b451 100644 --- a/examples/layout.zig +++ b/examples/layout.zig @@ -1,11 +1,10 @@ const zfltk = @import("zfltk"); const app = zfltk.app; -const Window = zfltk.Window; -const Box = zfltk.Box; -const Button = zfltk.Button; -const Group = zfltk.Group; -const Color = enums.Color; -const enums = zfltk.enums; +const Window = zfltk.window.Window; +const Box = zfltk.box.Box; +const Button = zfltk.button.Button; +const Pack = zfltk.group.Pack; +const Color = zfltk.enums.Color; pub fn main() !void { try app.init(); @@ -17,7 +16,7 @@ pub fn main() !void { .label = "Hello", }); - var pack = try Group(.pack).init(.{ + var pack = try Pack.init(.{ .w = 400, .h = 300, @@ -29,7 +28,7 @@ pub fn main() !void { win.resizable(pack); - var btn = try Button(.normal).init(.{ + var btn = try Button.init(.{ .h = 48, .label = "Button", }); diff --git a/examples/mixed.zig b/examples/mixed.zig index 9913d53..6224d0b 100644 --- a/examples/mixed.zig +++ b/examples/mixed.zig @@ -2,15 +2,15 @@ const zfltk = @import("zfltk"); const app = zfltk.app; -const Widget = zfltk.Widget; -const Window = zfltk.Window; -const Button = zfltk.Button; +const Widget = zfltk.widget.Widget; +const Window = zfltk.window.Window; +const Button = zfltk.button.Button; const Color = zfltk.enums.Color; const std = @import("std"); const fmt = std.fmt; const c = zfltk.c; -fn butCb(but: *Button(.normal)) void { +fn butCb(but: *Button) void { var buf: [32]u8 = undefined; const label = fmt.bufPrintZ( @@ -22,13 +22,13 @@ fn butCb(but: *Button(.normal)) void { but.setLabel(label); } -fn colorButCb(color_but: *Button(.normal), _: ?*anyopaque) void { +fn colorButCb(color_but: *Button, _: ?*anyopaque) void { color_but.setColor(Color.fromRgbi( c.Fl_show_colormap(color_but.color().toRgbi()), )); } -fn timeoutButCb(_: *Button(.normal), data: ?*anyopaque) void { +fn timeoutButCb(_: *Button, data: ?*anyopaque) void { const container: *[2]usize = @ptrCast(@alignCast(data.?)); const wait_time: f32 = @as(*f32, @ptrFromInt(container[1])).*; @@ -39,7 +39,7 @@ fn timeoutCb(data: ?*anyopaque) void { const container: *[2]usize = @ptrCast(@alignCast(data.?)); // Re-interpret our ints as pointers to get our objects back - var but = Button(.normal).fromRaw(@ptrFromInt(container[0])); + var but = Button.fromRaw(@ptrFromInt(container[0])); const wait_time: f32 = @as(*f32, @ptrFromInt(container[1])).*; var buf: [32]u8 = undefined; @@ -68,7 +68,7 @@ pub fn main() !void { .label = "Mixed API", }); - var but = try Button(.normal).init(.{ + var but = try Button.init(.{ .x = 10, .y = 100, .w = 380, @@ -78,7 +78,7 @@ pub fn main() !void { but.setLabelSize(24); but.setCallback(butCb); - var color_but = try Button(.normal).init(.{ + var color_but = try Button.init(.{ .x = 10, .y = 10, .w = 185, @@ -97,7 +97,7 @@ pub fn main() !void { .{wait_time}, ); - var timeout_but = try Button(.normal).init(.{ + var timeout_but = try Button.init(.{ .x = 205, .y = 10, .w = 185, diff --git a/examples/simple.zig b/examples/simple.zig index 61baf81..320084b 100644 --- a/examples/simple.zig +++ b/examples/simple.zig @@ -1,11 +1,11 @@ const zfltk = @import("zfltk"); const app = zfltk.app; -const Window = zfltk.Window; -const Button = zfltk.Button; -const Box = zfltk.Box; +const Window = zfltk.window.Window; +const Button = zfltk.button.Button; +const Box = zfltk.box.Box; const Color = zfltk.enums.Color; -fn butCb(but: *Button(.normal), data: ?*anyopaque) void { +fn butCb(but: *Button, data: ?*anyopaque) void { var box = Box.fromRaw(data.?); box.setLabel("Hello World!"); @@ -25,7 +25,7 @@ pub fn main() !void { }); win.freePosition(); - var but = try Button(.normal).init(.{ + var but = try Button.init(.{ .x = 160, .y = 220, .w = 80, diff --git a/examples/threadawake.zig b/examples/threadawake.zig index f3d73a0..0b4bc8f 100644 --- a/examples/threadawake.zig +++ b/examples/threadawake.zig @@ -1,11 +1,10 @@ const zfltk = @import("zfltk"); const std = @import("std"); const app = zfltk.app; -const Window = zfltk.Window; -const Button = zfltk.Button; -const Box = zfltk.Box; -const enums = zfltk.enums; -const Color = enums.Color; +const Window = zfltk.window.Window; +const Button = zfltk.button.Button; +const Box = zfltk.box.Box; +const Color = zfltk.enums.Color; var count: u32 = 0; @@ -42,7 +41,7 @@ pub fn thread_func(data: ?*anyopaque) !void { } } -pub fn butCb(_: *Button(.normal), data: ?*anyopaque) void { +pub fn butCb(_: *Button, data: ?*anyopaque) void { var thread = std.Thread.spawn(.{}, thread_func, .{data}) catch { return; }; @@ -61,7 +60,7 @@ pub fn main() !void { .label = "Thread awake", }); - var but = try Button(.normal).init(.{ + var but = try Button.init(.{ .x = 120, .y = 220, .w = 160, diff --git a/examples/tile.zig b/examples/tile.zig index c355ad4..2921013 100644 --- a/examples/tile.zig +++ b/examples/tile.zig @@ -1,11 +1,10 @@ const zfltk = @import("zfltk"); const app = zfltk.app; -const Window = zfltk.Window; -const Box = zfltk.Box; -const Button = zfltk.Button; -const Group = zfltk.Group; -const Color = enums.Color; -const enums = zfltk.enums; +const Window = zfltk.window.Window; +const Box = zfltk.box.Box; +const Button = zfltk.button.Button; +const Tile = zfltk.group.Tile; +const Color = zfltk.enums.Color; pub fn main() !void { try app.init(); @@ -17,14 +16,14 @@ pub fn main() !void { .label = "Tile group", }); - var tile = try Group(.tile).init(.{ + var tile = try Tile.init(.{ .w = 400, .h = 300, }); win.resizable(tile); - var btn = try Button(.normal).init(.{ + var btn = try Button.init(.{ .x = 0, .y = 48, .w = tile.w() - 48, diff --git a/examples/valuators.zig b/examples/valuators.zig index 9268006..54a5679 100644 --- a/examples/valuators.zig +++ b/examples/valuators.zig @@ -1,11 +1,9 @@ const zfltk = @import("zfltk"); const app = zfltk.app; -const Widget = zfltk.Widget; -const Window = zfltk.Window; +const Window = zfltk.window.Window; const valuator = zfltk.valuator; -const Group = zfltk.Group; +const Pack = zfltk.group.Pack; const enums = zfltk.enums; -const Valuator = zfltk.Valuator; pub fn main() !void { try app.init(); @@ -18,7 +16,7 @@ pub fn main() !void { .label = "Valuators", }); - var pack = try Group(.pack).init(.{ + var pack = try Pack.init(.{ .w = 400, .h = 300, @@ -26,27 +24,27 @@ pub fn main() !void { }); pack.add(.{ - try Valuator(.slider).init(.{ + try valuator.Slider.init(.{ .h = 40, .style = .nice, .orientation = .horizontal, .label = "Slider", }), - try Valuator(.scrollbar).init(.{ + try valuator.Scrollbar.init(.{ .h = 40, .style = .nice, .orientation = .horizontal, .label = "Scrollbar", }), - try Valuator(.counter).init(.{ + try valuator.Counter.init(.{ .h = 40, .w = win.w(), .label = "Counter", }), - try Valuator(.adjuster).init(.{ + try valuator.Adjuster.init(.{ .h = 40, .label = "Adjuster", }), diff --git a/src/browser.zig b/src/browser.zig index a85ae86..ed50c28 100644 --- a/src/browser.zig +++ b/src/browser.zig @@ -6,7 +6,13 @@ const enums = @import("enums.zig"); const c = zfltk.c; const std = @import("std"); -pub const BrowserKind = enum { +pub const Browser = BrowserType(.normal); +pub const SelectBrowser = BrowserType(.select); +pub const HoldBrowser = BrowserType(.hold); +pub const MultiBrowser = BrowserType(.multi); +pub const FileBrowser = BrowserType(.file); + +const BrowserKind = enum { normal, select, hold, @@ -14,7 +20,7 @@ pub const BrowserKind = enum { file, }; -pub fn Browser(comptime kind: BrowserKind) type { +fn BrowserType(comptime kind: BrowserKind) type { return struct { const Self = @This(); diff --git a/src/button.zig b/src/button.zig index f7e6a0d..6d53204 100644 --- a/src/button.zig +++ b/src/button.zig @@ -7,7 +7,15 @@ const Event = enums.Event; const std = @import("std"); const c = zfltk.c; -pub const ButtonKind = enum { +pub const Button = ButtonType(.normal); +pub const RadioButton = ButtonType(.radio); +pub const CheckButton = ButtonType(.check); +pub const RoundButton = ButtonType(.round); +pub const RepeatButton = ButtonType(.repeat); +pub const LightButton = ButtonType(.light); +pub const EnterButton = ButtonType(.enter); + +const ButtonKind = enum { normal, radio, check, @@ -17,7 +25,7 @@ pub const ButtonKind = enum { enter, }; -pub fn Button(comptime kind: ButtonKind) type { +fn ButtonType(comptime kind: ButtonKind) type { return struct { const Self = @This(); @@ -71,9 +79,9 @@ pub fn Button(comptime kind: ButtonKind) type { }; } -pub fn methods(comptime Self: type) type { +fn methods(comptime Self: type) type { return struct { - pub inline fn button(self: *Self) *Button(.normal) { + pub inline fn button(self: *Self) *ButtonType(.normal) { return @ptrCast(self); } diff --git a/src/group.zig b/src/group.zig index cd7a254..5f6e83f 100644 --- a/src/group.zig +++ b/src/group.zig @@ -9,7 +9,14 @@ const enums = zfltk.enums; pub const GroupPtr = ?*c.Fl_Group; -pub const GroupKind = enum { +pub const Group = GroupType(.normal); +pub const Pack = GroupType(.pack); +pub const Tabs = GroupType(.tabs); +pub const Scroll = GroupType(.scroll); +pub const Flex = GroupType(.flex); +pub const Tile = GroupType(.tile); + +const GroupKind = enum { normal, pack, tabs, @@ -37,7 +44,7 @@ pub const ScrollType = enum(c_int) { both_always = 7, }; -pub fn Group(comptime kind: GroupKind) type { +fn GroupType(comptime kind: GroupKind) type { return struct { const Self = @This(); @@ -106,7 +113,7 @@ pub fn methods(comptime Self: type, comptime RawPtr: type) type { const type_name = @typeName(RawPtr); const ptr_name = type_name[(std.mem.indexOf(u8, type_name, "struct_Fl_") orelse 0) + 7 .. type_name.len]; return struct { - pub inline fn group(self: *Self) *Group(.normal) { + pub inline fn group(self: *Self) *GroupType(.normal) { return @ptrCast(self); } @@ -194,8 +201,8 @@ pub fn methods(comptime Self: type, comptime RawPtr: type) type { pub fn spacing(self: *Self) u31 { const spacingFn = switch (Self) { - Group(.flex) => c.Fl_Flex_pad, - Group(.pack) => c.Fl_Pack_spacing, + GroupType(.flex) => c.Fl_Flex_pad, + GroupType(.pack) => c.Fl_Pack_spacing, else => @compileError("method `spacing` only usable with flex and pack groups"), }; @@ -205,8 +212,8 @@ pub fn methods(comptime Self: type, comptime RawPtr: type) type { pub fn setSpacing(self: *Self, sz: u31) void { const spacingFn = switch (Self) { - Group(.flex) => c.Fl_Flex_set_pad, - Group(.pack) => c.Fl_Pack_set_spacing, + GroupType(.flex) => c.Fl_Flex_set_pad, + GroupType(.pack) => c.Fl_Pack_set_spacing, else => @compileError("method `setSpacing` only usable with flex and pack groups"), }; @@ -215,7 +222,7 @@ pub fn methods(comptime Self: type, comptime RawPtr: type) type { } pub inline fn fixed(self: *Self, wid: anytype, sz: i32) void { - if (Self != Group(.flex)) { + if (Self != GroupType(.flex)) { @compileError("method `fixed` only usable with flex groups"); } @@ -229,7 +236,7 @@ pub fn methods(comptime Self: type, comptime RawPtr: type) type { pub fn setMargin(self: *Self, sz: u31) void { const marginFn = switch (Self) { - Group(.flex) => c.Fl_Flex_set_margin, + GroupType(.flex) => c.Fl_Flex_set_margin, else => @compileError("method `setMargin` only usable with flex groups"), }; @@ -239,7 +246,7 @@ pub fn methods(comptime Self: type, comptime RawPtr: type) type { pub fn setMargins(self: *Self, left: u31, top: u31, right: u31, bottom: u31) void { const marginsFn = switch (Self) { - Group(.flex) => c.Fl_Flex_set_margins, + GroupType(.flex) => c.Fl_Flex_set_margins, else => @compileError("method `setMargin` only usable with flex groups"), }; @@ -248,7 +255,7 @@ pub fn methods(comptime Self: type, comptime RawPtr: type) type { } pub inline fn setScrollbar(self: *Self, scrollbar: ScrollType) void { - if (Self != Group(.scroll)) { + if (Self != GroupType(.scroll)) { @compileError("method `setScrollbar` only usable with scroll groups"); } @@ -256,7 +263,7 @@ pub fn methods(comptime Self: type, comptime RawPtr: type) type { } pub inline fn setScrollbarSize(self: *Self, size: u31) void { - if (Self != Group(.scroll)) { + if (Self != GroupType(.scroll)) { @compileError("method `setScrollbarSize` only usable with scroll groups"); } diff --git a/src/input.zig b/src/input.zig index d10d41d..67032f2 100644 --- a/src/input.zig +++ b/src/input.zig @@ -1,6 +1,6 @@ const zfltk = @import("zfltk.zig"); const app = zfltk.app; -const Widget = zfltk.Widget; +const Widget = zfltk.widget.Widget; const enums = zfltk.enums; const Event = enums.Event; const Color = enums.Color; @@ -9,7 +9,13 @@ const std = @import("std"); const widget = zfltk.widget; const c = zfltk.c; -pub const InputKind = enum { +pub const Input = InputType(.normal); +pub const MultilineInput = InputType(.multiline); +pub const IntInput = InputType(.int); +pub const FloatInput = InputType(.float); +pub const Secret = InputType(.secret); + +const InputKind = enum { normal, multiline, int, @@ -17,7 +23,7 @@ pub const InputKind = enum { secret, }; -pub fn Input(comptime kind: InputKind) type { +fn InputType(comptime kind: InputKind) type { return struct { const Self = @This(); @@ -64,7 +70,7 @@ pub fn Input(comptime kind: InputKind) type { app.allocator.destroy(self); } - pub inline fn input(self: *Self) *Input(.normal) { + pub inline fn input(self: *Self) *InputType(.normal) { return @ptrCast(self); } diff --git a/src/menu.zig b/src/menu.zig index 19a1277..ad1acb5 100644 --- a/src/menu.zig +++ b/src/menu.zig @@ -30,13 +30,17 @@ pub const MenuFlag = enum(i32) { menu_horizontal = 0x100, }; -pub const MenuKind = enum { +pub const MenuBar = MenuType(.menu_bar); +pub const SysMenuBar = MenuType(.sys_menu_bar); +pub const Choice = MenuType(.choice); + +const MenuKind = enum { menu_bar, sys_menu_bar, choice, }; -pub fn Menu(comptime kind: MenuKind) type { +fn MenuType(comptime kind: MenuKind) type { return struct { const Self = @This(); @@ -82,11 +86,11 @@ pub fn Menu(comptime kind: MenuKind) type { }; } -pub fn methods(comptime Self: type, comptime RawPtr: type) type { +fn methods(comptime Self: type, comptime RawPtr: type) type { const type_name = @typeName(RawPtr); const ptr_name = type_name[(std.mem.indexOf(u8, type_name, "struct_Fl_") orelse 0) + 7 .. type_name.len]; return struct { - pub inline fn menu(self: *Self) *Menu(.menu_bar) { + pub inline fn menu(self: *Self) *MenuType(.menu_bar) { return @ptrCast(self); } diff --git a/src/output.zig b/src/output.zig index 91fef69..a87c1b9 100644 --- a/src/output.zig +++ b/src/output.zig @@ -9,12 +9,15 @@ const std = @import("std"); const c = zfltk.c; const widget = zfltk.widget; -pub const OutputKind = enum { +const OutputKind = enum { normal, multiline, }; -pub fn Output(comptime kind: OutputKind) type { +pub const Output = OutputType(.normal); +pub const MultilineOutput = OutputType(.multiline); + +fn OutputType(comptime kind: OutputKind) type { return struct { const Self = @This(); @@ -52,7 +55,7 @@ pub fn Output(comptime kind: OutputKind) type { app.allocator.destroy(self); } - pub inline fn input(self: *Self) *Output(.normal) { + pub inline fn input(self: *Self) *OutputType(.normal) { return @ptrCast(self); } diff --git a/src/table.zig b/src/table.zig index 1606aef..9f08e9b 100644 --- a/src/table.zig +++ b/src/table.zig @@ -7,12 +7,15 @@ const Event = enums.Event; const std = @import("std"); const c = zfltk.c; -pub const TableKind = enum { +const TableKind = enum { table, table_row, }; -pub fn Table(comptime kind: TableKind) type { +pub const Table = TableType(.table); +pub const TableRow = TableType(.table_row); + +fn TableType(comptime kind: TableKind) type { return struct { const Self = @This(); @@ -61,9 +64,9 @@ pub fn Table(comptime kind: TableKind) type { }; } -pub fn methods(comptime Self: type) type { +fn methods(comptime Self: type) type { return struct { - pub inline fn table(self: *Self) *Table(.table) { + pub inline fn table(self: *Self) *TableType(.table) { return @ptrCast(self); } }; diff --git a/src/text.zig b/src/text.zig index 9e7b47f..a8b2b90 100644 --- a/src/text.zig +++ b/src/text.zig @@ -15,11 +15,14 @@ pub const StyleTableEntry = struct { size: i32, }; -pub const TextKind = enum { +const TextKind = enum { normal, editor, }; +pub const TextDisplay = TextDisplayType(.normal); +pub const TextEditor = TextDisplayType(.editor); + pub const TextBuffer = struct { const Self = @This(); @@ -149,7 +152,7 @@ pub const TextBuffer = struct { } }; -pub fn TextDisplay(comptime kind: TextKind) type { +fn TextDisplayType(comptime kind: TextKind) type { return struct { const Self = @This(); @@ -210,9 +213,9 @@ pub fn TextDisplay(comptime kind: TextKind) type { }; } -pub fn methods(comptime Self: type) type { +fn methods(comptime Self: type) type { return struct { - pub inline fn textDisplay(self: *Self) *TextDisplay(.normal) { + pub inline fn textDisplay(self: *Self) *TextDisplayType(.normal) { return @ptrCast(self); } @@ -327,15 +330,15 @@ pub fn methods(comptime Self: type) type { } // Text editor only methods - pub fn cut(self: *TextDisplay(.editor)) void { + pub fn cut(self: *TextDisplayType(.editor)) void { _ = c.Fl_Text_Editor_kf_cut(self.raw()); } - pub fn paste(self: *TextDisplay(.editor)) void { + pub fn paste(self: *TextDisplayType(.editor)) void { _ = c.Fl_Text_Editor_kf_paste(self.raw()); } - pub fn copy(self: *TextDisplay(.editor)) void { + pub fn copy(self: *TextDisplayType(.editor)) void { _ = c.Fl_Text_Editor_kf_copy(self.raw()); } }; diff --git a/src/tree.zig b/src/tree.zig index 7bed0c0..6cedddb 100644 --- a/src/tree.zig +++ b/src/tree.zig @@ -43,7 +43,7 @@ pub const Tree = struct { } }; -pub fn methods(comptime Self: type) type { +fn methods(comptime Self: type) type { return struct { pub inline fn tree(self: *Self) *Tree { return @ptrCast(self); diff --git a/src/valuator.zig b/src/valuator.zig index b1e3c4a..fe8f4fa 100644 --- a/src/valuator.zig +++ b/src/valuator.zig @@ -6,7 +6,14 @@ const enums = zfltk.enums; const std = @import("std"); const app = zfltk.app; -pub const ValuatorKind = enum { +pub const Slider = ValuatorType(.slider); +pub const Dial = ValuatorType(.dial); +pub const Counter = ValuatorType(.counter); +pub const Scrollbar = ValuatorType(.scrollbar); +pub const Adjuster = ValuatorType(.adjuster); +pub const Roller = ValuatorType(.roller); + +const ValuatorKind = enum { slider, dial, counter, @@ -61,7 +68,7 @@ pub const CounterType = enum(i32) { simple = 1, }; -pub fn Valuator(comptime kind: ValuatorKind) type { +fn ValuatorType(comptime kind: ValuatorKind) type { return struct { const Self = @This(); @@ -150,11 +157,11 @@ pub fn Valuator(comptime kind: ValuatorKind) type { }; } -pub fn methods(comptime Self: type, comptime RawPtr: type) type { +fn methods(comptime Self: type, comptime RawPtr: type) type { const type_name = @typeName(RawPtr); const ptr_name = type_name[(std.mem.indexOf(u8, type_name, "struct_Fl_") orelse 0) + 7 .. type_name.len]; return struct { - pub inline fn valuator(self: *Self) *Valuator(.slider) { + pub inline fn valuator(self: *Self) *ValuatorType(.slider) { return @ptrCast(self); } diff --git a/src/widget.zig b/src/widget.zig index 07ddd8b..3ca2b38 100644 --- a/src/widget.zig +++ b/src/widget.zig @@ -2,9 +2,8 @@ const zfltk = @import("zfltk.zig"); const app = zfltk.app; const std = @import("std"); const enums = zfltk.enums; -const Color = enums.Color; -const Group = zfltk.Group; -const Image = zfltk.Image; +const Group = zfltk.group.Group; +const Image = zfltk.image.Image; const c = zfltk.c; pub const Widget = struct { @@ -154,19 +153,19 @@ pub fn methods(comptime Self: type, comptime RawPtr: type) type { c.Fl_Widget_set_type(self.widget().raw(), @intFromEnum(t)); } - pub inline fn color(self: *Self) Color { - return Color.fromRgbi(c.Fl_Widget_color(self.widget().raw())); + pub inline fn color(self: *Self) enums.Color { + return enums.Color.fromRgbi(c.Fl_Widget_color(self.widget().raw())); } - pub inline fn setColor(self: *Self, col: Color) void { + pub inline fn setColor(self: *Self, col: enums.Color) void { c.Fl_Widget_set_color(self.widget().raw(), col.toRgbi()); } - pub inline fn labelColor(self: *Self) Color { - return Color.fromRgbi(c.Fl_Widget_label_color(self.widget().raw())); + pub inline fn labelColor(self: *Self) enums.Color { + return enums.Color.fromRgbi(c.Fl_Widget_label_color(self.widget().raw())); } - pub inline fn setLabelColor(self: *Self, col: Color) void { + pub inline fn setLabelColor(self: *Self, col: enums.Color) void { c.Fl_Widget_set_label_color(self.widget().raw(), col.toRgbi()); } @@ -228,10 +227,10 @@ pub fn methods(comptime Self: type, comptime RawPtr: type) type { } // TODO: fix, this causes pointer issues - pub inline fn parent(self: *Self) ?*Group(.normal) { + pub inline fn parent(self: *Self) ?*Group { const ptr = c.Fl_Widget_parent(self.widget().raw()); if (ptr) |p| { - return Group(.normal).fromRaw(p); + return Group.fromRaw(p); } else { return null; } diff --git a/src/window.zig b/src/window.zig index c046962..c2dadc6 100644 --- a/src/window.zig +++ b/src/window.zig @@ -2,7 +2,7 @@ const std = @import("std"); const zfltk = @import("zfltk.zig"); const app = zfltk.app; const c = zfltk.c; -const Widget = zfltk.Widget; +const Widget = zfltk.widget.Widget; const Group = zfltk.Group; const enums = zfltk.enums; @@ -132,7 +132,7 @@ pub const GlutWindow = struct { } }; -pub fn methods(comptime Self: type) type { +fn methods(comptime Self: type) type { return struct { pub fn setSizeRange(self: *Self, min_w: u31, min_h: u31, max_w: u31, max_h: u31) void { return c.Fl_Window_size_range(@ptrCast(self.raw()), min_w, min_h, max_w, max_h); diff --git a/src/zfltk.zig b/src/zfltk.zig index a5ad521..5c64830 100644 --- a/src/zfltk.zig +++ b/src/zfltk.zig @@ -19,23 +19,7 @@ pub const table = @import("table.zig"); pub const tree = @import("tree.zig"); pub const draw = @import("draw.zig"); -pub const Image = image.Image; -pub const Widget = widget.Widget; -pub const Group = group.Group; -pub const Window = window.Window; -pub const GlutWindow = window.GlutWindow; -pub const Button = button.Button; -pub const Box = box.Box; -pub const Browser = browser.Browser; -pub const Menu = menu.Menu; -pub const Table = table.Table; -pub const Input = input.Input; -pub const Output = output.Output; -pub const TextDisplay = text.TextDisplay; -pub const TextBuffer = text.TextBuffer; -pub const FileDialog = dialog.FileDialog; -pub const Valuator = valuator.Valuator; -pub const Tree = tree.Tree; +const Widget = widget.Widget; pub const c = @cImport({ @cInclude("cfl.h");