summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJedidiah Barber <contact@jedbarber.id.au>2025-02-18 12:54:42 +1300
committerJedidiah Barber <contact@jedbarber.id.au>2025-02-18 12:54:42 +1300
commitd5fd3906e62969fce7fec7f2fccdc5a7436cbdbc (patch)
tree3f21adf51a8ea3aa75111c6653a6c8612608c096
parent36e546c1c9a9bb8e778fb637c17f94390b4d23c2 (diff)
Filled holes in FLTK, FLTK.Events, FLTK.Screen, tweaked Fl_Shortcut implementation
-rw-r--r--body/c_fl.cpp72
-rw-r--r--body/c_fl.h30
-rw-r--r--body/c_fl_event.cpp51
-rw-r--r--body/c_fl_event.h15
-rw-r--r--body/c_fl_screen.cpp31
-rw-r--r--body/c_fl_screen.h13
-rw-r--r--body/c_fl_static.cpp12
-rw-r--r--body/c_fl_static.h3
-rw-r--r--body/fltk-events.adb (renamed from body/fltk-event.adb)380
-rw-r--r--body/fltk-menu_items.adb4
-rw-r--r--body/fltk-screen.adb81
-rw-r--r--body/fltk-widgets-buttons.adb2
-rw-r--r--body/fltk-widgets-groups-text_displays-text_editors.adb6
-rw-r--r--body/fltk-widgets-groups-text_displays.adb4
-rw-r--r--body/fltk-widgets-inputs.adb4
-rw-r--r--body/fltk-widgets-menus-menu_bars-systemwide.adb10
-rw-r--r--body/fltk-widgets-menus.adb10
-rw-r--r--body/fltk-widgets-valuators-value_inputs.adb2
-rw-r--r--body/fltk.adb125
-rw-r--r--doc/enumerations.html7
-rw-r--r--doc/fl.html108
-rw-r--r--doc/fl_(fltk-events).html (renamed from doc/fl_(fltk-event).html)96
-rw-r--r--doc/fl_(fltk-screen).html59
-rw-r--r--doc/fl_(fltk-static).html48
-rw-r--r--doc/index.html4
-rw-r--r--spec/fltk-events.ads (renamed from spec/fltk-event.ads)92
-rw-r--r--spec/fltk-screen.ads37
-rw-r--r--spec/fltk-static.ads15
-rw-r--r--spec/fltk.ads90
29 files changed, 1031 insertions, 380 deletions
diff --git a/body/c_fl.cpp b/body/c_fl.cpp
index 42d9a45..871b32d 100644
--- a/body/c_fl.cpp
+++ b/body/c_fl.cpp
@@ -60,6 +60,37 @@ const int fl_enum_num_gray = FL_NUM_GRAY;
+const unsigned int fl_enum_button1 = FL_BUTTON1;
+const unsigned int fl_enum_button2 = FL_BUTTON2;
+const unsigned int fl_enum_button3 = FL_BUTTON3;
+#if FL_API_VERSION >= 10310
+const unsigned int fl_enum_button4 = FL_BUTTON4;
+const unsigned int fl_enum_button5 = FL_BUTTON5;
+#else
+// woo, limited backwards compatibility
+const unsigned int fl_enum_button4 = 8;
+const unsigned int fl_enum_button5 = 16;
+#endif
+const unsigned int fl_enum_buttons = FL_BUTTONS;
+
+
+
+
+const int fl_enum_left_mouse = FL_LEFT_MOUSE;
+const int fl_enum_middle_mouse = FL_MIDDLE_MOUSE;
+const int fl_enum_right_mouse = FL_RIGHT_MOUSE;
+#if FL_API_VERSION >= 10310
+const int fl_enum_back_mouse = FL_BACK_MOUSE;
+const int fl_enum_forward_mouse = FL_FORWARD_MOUSE;
+#else
+// woo, limited backwards compatibility
+const int fl_enum_back_mouse = 4;
+const int fl_enum_forward_mouse = 5;
+#endif
+
+
+
+
unsigned int fl_enum_rgb_color2(unsigned char l) {
return static_cast<unsigned int>(fl_rgb_color(l));
}
@@ -116,6 +147,13 @@ int fl_enum_down(int b) {
+const char * fl_clip_image_char_ptr = Fl::clipboard_image;
+
+const char * fl_clip_plain_text_char_ptr = Fl::clipboard_plain_text;
+
+
+
+
int fl_abi_check(int v) {
return Fl::abi_check(v);
}
@@ -135,40 +173,6 @@ double fl_version() {
-void fl_awake() {
- Fl::awake();
-}
-
-void fl_lock() {
- Fl::lock();
-}
-
-void fl_unlock() {
- Fl::unlock();
-}
-
-
-
-
-int fl_get_damage() {
- return Fl::damage();
-}
-
-void fl_set_damage(int v) {
- Fl::damage(v);
-}
-
-void fl_flush() {
- Fl::flush();
-}
-
-void fl_redraw() {
- Fl::redraw();
-}
-
-
-
-
short fl_inside_callback = 0;
void fl_delete_widget(void * w) {
diff --git a/body/c_fl.h b/body/c_fl.h
index f85c36f..88d229d 100644
--- a/body/c_fl.h
+++ b/body/c_fl.h
@@ -49,6 +49,21 @@ extern "C" const int fl_enum_num_blue;
extern "C" const int fl_enum_num_gray;
+extern "C" const unsigned int fl_enum_button1;
+extern "C" const unsigned int fl_enum_button2;
+extern "C" const unsigned int fl_enum_button3;
+extern "C" const unsigned int fl_enum_button4;
+extern "C" const unsigned int fl_enum_button5;
+extern "C" const unsigned int fl_enum_buttons;
+
+
+extern "C" const int fl_enum_left_mouse;
+extern "C" const int fl_enum_middle_mouse;
+extern "C" const int fl_enum_right_mouse;
+extern "C" const int fl_enum_back_mouse;
+extern "C" const int fl_enum_forward_mouse;
+
+
extern "C" unsigned int fl_enum_rgb_color2(unsigned char l);
extern "C" unsigned int fl_enum_rgb_color(unsigned char r, unsigned char g, unsigned char b);
extern "C" unsigned int fl_enum_color_cube(int r, int g, int b);
@@ -65,23 +80,16 @@ extern "C" int fl_enum_frame(int b);
extern "C" int fl_enum_down(int b);
+extern "C" const char * fl_clip_image_char_ptr;
+extern "C" const char * fl_clip_plain_text_char_ptr;
+
+
extern "C" int fl_abi_check(int v);
extern "C" int fl_abi_version();
extern "C" int fl_api_version();
extern "C" double fl_version();
-extern "C" void fl_awake();
-extern "C" void fl_lock();
-extern "C" void fl_unlock();
-
-
-extern "C" int fl_get_damage();
-extern "C" void fl_set_damage(int v);
-extern "C" void fl_flush();
-extern "C" void fl_redraw();
-
-
extern "C" short fl_inside_callback;
extern "C" void fl_delete_widget(void * w);
diff --git a/body/c_fl_event.cpp b/body/c_fl_event.cpp
index d8760af..d88dfc2 100644
--- a/body/c_fl_event.cpp
+++ b/body/c_fl_event.cpp
@@ -16,10 +16,14 @@ void fl_event_add_handler(void * f) {
Fl::add_handler(reinterpret_cast<Fl_Event_Handler>(f));
}
-void fl_event_set_event_dispatch(void * f) {
+void fl_event_set_dispatch(void * f) {
Fl::event_dispatch(reinterpret_cast<Fl_Event_Dispatch>(f));
}
+int fl_event_handle_dispatch(int e, void * w) {
+ return Fl::handle(e, static_cast<Fl_Window*>(w));
+}
+
int fl_event_handle(int e, void * w) {
return Fl::handle_(e, static_cast<Fl_Window*>(w));
}
@@ -70,6 +74,17 @@ void fl_event_set_visible_focus(int f) {
+const char * fl_event_clipboard_text() {
+ return static_cast<const char*>(Fl::event_clipboard());
+}
+
+const char * fl_event_clipboard_type() {
+ return Fl::event_clipboard_type();
+}
+
+
+
+
int fl_event_compose(int &d) {
return Fl::compose(d);
}
@@ -86,6 +101,10 @@ int fl_event_length() {
return Fl::event_length();
}
+int fl_event_test_shortcut(unsigned int s) {
+ return Fl::test_shortcut(static_cast<Fl_Shortcut>(s));
+}
+
@@ -136,7 +155,11 @@ int fl_event_is_click() {
return Fl::event_is_click();
}
-int fl_event_is_clicks() {
+void fl_event_set_click(int c) {
+ Fl::event_is_click(c);
+}
+
+int fl_event_get_clicks() {
return Fl::event_clicks();
}
@@ -160,6 +183,30 @@ int fl_event_button3() {
return Fl::event_button3();
}
+int fl_event_button4() {
+#if FL_API_VERSION >= 10310
+ return Fl::event_button4();
+#else
+ return 0;
+#endif
+}
+
+int fl_event_button5() {
+#if FL_API_VERSION >= 10310
+ return Fl::event_button5();
+#else
+ return 0;
+#endif
+}
+
+int fl_event_buttons() {
+ return Fl::event_buttons();
+}
+
+int fl_event_inside2(void * c) {
+ return Fl::event_inside(static_cast<Fl_Widget*>(c));
+}
+
int fl_event_inside(int x, int y, int w, int h) {
return Fl::event_inside(x, y, w, h);
}
diff --git a/body/c_fl_event.h b/body/c_fl_event.h
index 34daf2b..0acf999 100644
--- a/body/c_fl_event.h
+++ b/body/c_fl_event.h
@@ -9,7 +9,8 @@
extern "C" void fl_event_add_handler(void * f);
-extern "C" void fl_event_set_event_dispatch(void * f);
+extern "C" void fl_event_set_dispatch(void * f);
+extern "C" int fl_event_handle_dispatch(int e, void * w);
extern "C" int fl_event_handle(int e, void * w);
@@ -25,10 +26,15 @@ extern "C" int fl_event_get_visible_focus();
extern "C" void fl_event_set_visible_focus(int f);
+extern "C" const char * fl_event_clipboard_text();
+extern "C" const char * fl_event_clipboard_type();
+
+
extern "C" int fl_event_compose(int &d);
extern "C" void fl_event_compose_reset();
extern "C" const char * fl_event_text();
extern "C" int fl_event_length();
+extern "C" int fl_event_test_shortcut(unsigned int s);
extern "C" int fl_event_get();
@@ -44,12 +50,17 @@ extern "C" int fl_event_dx();
extern "C" int fl_event_dy();
extern "C" void fl_event_get_mouse(int &x, int &y);
extern "C" int fl_event_is_click();
-extern "C" int fl_event_is_clicks();
+extern "C" void fl_event_set_click(int c);
+extern "C" int fl_event_get_clicks();
extern "C" void fl_event_set_clicks(int c);
extern "C" int fl_event_button();
extern "C" int fl_event_button1();
extern "C" int fl_event_button2();
extern "C" int fl_event_button3();
+extern "C" int fl_event_button4();
+extern "C" int fl_event_button5();
+extern "C" int fl_event_buttons();
+extern "C" int fl_event_inside2(void * c);
extern "C" int fl_event_inside(int x, int y, int w, int h);
diff --git a/body/c_fl_screen.cpp b/body/c_fl_screen.cpp
index d0e8019..7a5fc2f 100644
--- a/body/c_fl_screen.cpp
+++ b/body/c_fl_screen.cpp
@@ -10,10 +10,22 @@
+const int fl_enum_mode_rgb = FL_RGB;
+const int fl_enum_mode_rgb8 = FL_RGB8;
+const int fl_enum_mode_double = FL_DOUBLE;
+const int fl_enum_mode_index = FL_INDEX;
+
+
+
+
void fl_screen_display(const char * v) {
Fl::display(v);
}
+int fl_screen_visual(int mode) {
+ return Fl::visual(mode);
+}
+
@@ -91,3 +103,22 @@ void fl_screen_xywh4(int &x, int &y, int &w, int &h, int px, int py, int pw, int
}
+
+
+int fl_screen_get_damage() {
+ return Fl::damage();
+}
+
+void fl_screen_set_damage(int v) {
+ Fl::damage(v);
+}
+
+void fl_screen_flush() {
+ Fl::flush();
+}
+
+void fl_screen_redraw() {
+ Fl::redraw();
+}
+
+
diff --git a/body/c_fl_screen.h b/body/c_fl_screen.h
index 8fff58d..c2b0e98 100644
--- a/body/c_fl_screen.h
+++ b/body/c_fl_screen.h
@@ -8,7 +8,14 @@
#define FL_SCREEN_GUARD
+extern "C" const int fl_enum_mode_rgb;
+extern "C" const int fl_enum_mode_rgb8;
+extern "C" const int fl_enum_mode_double;
+extern "C" const int fl_enum_mode_index;
+
+
extern "C" void fl_screen_display(const char * v);
+extern "C" int fl_screen_visual(int mode);
extern "C" int fl_screen_x();
@@ -36,6 +43,12 @@ extern "C" void fl_screen_xywh3(int &x, int &y, int &w, int &h);
extern "C" void fl_screen_xywh4(int &x, int &y, int &w, int &h, int px, int py, int pw, int ph);
+extern "C" int fl_screen_get_damage();
+extern "C" void fl_screen_set_damage(int v);
+extern "C" void fl_screen_flush();
+extern "C" void fl_screen_redraw();
+
+
#endif
diff --git a/body/c_fl_static.cpp b/body/c_fl_static.cpp
index 0b45115..31cb3af 100644
--- a/body/c_fl_static.cpp
+++ b/body/c_fl_static.cpp
@@ -20,6 +20,18 @@ void fl_static_get_awake_handler(void * &h, void * &f) {
Fl::get_awake_handler_(reinterpret_cast<Fl_Awake_Handler&>(h),f);
}
+void fl_static_awake() {
+ Fl::awake();
+}
+
+void fl_static_lock() {
+ Fl::lock();
+}
+
+void fl_static_unlock() {
+ Fl::unlock();
+}
+
diff --git a/body/c_fl_static.h b/body/c_fl_static.h
index 2622544..c0a6c2f 100644
--- a/body/c_fl_static.h
+++ b/body/c_fl_static.h
@@ -10,6 +10,9 @@
extern "C" void fl_static_add_awake_handler(void * h, void * f);
extern "C" void fl_static_get_awake_handler(void * &h, void * &f);
+extern "C" void fl_static_awake();
+extern "C" void fl_static_lock();
+extern "C" void fl_static_unlock();
extern "C" void fl_static_add_check(void * h, void * f);
diff --git a/body/fltk-event.adb b/body/fltk-events.adb
index 2c96792..a15c55b 100644
--- a/body/fltk-event.adb
+++ b/body/fltk-events.adb
@@ -15,7 +15,7 @@ use type
Interfaces.C.Strings.chars_ptr;
-package body FLTK.Event is
+package body FLTK.Events is
package Chk renames Ada.Assertions;
@@ -24,6 +24,43 @@ package body FLTK.Event is
------------------------
+ -- Constants From C --
+ ------------------------
+
+ fl_enum_button1 : constant Interfaces.C.int;
+ pragma Import (C, fl_enum_button1, "fl_enum_button1");
+
+ fl_enum_button2 : constant Interfaces.C.int;
+ pragma Import (C, fl_enum_button2, "fl_enum_button2");
+
+ fl_enum_button3 : constant Interfaces.C.int;
+ pragma Import (C, fl_enum_button3, "fl_enum_button3");
+
+ fl_enum_button4 : constant Interfaces.C.int;
+ pragma Import (C, fl_enum_button4, "fl_enum_button4");
+
+ fl_enum_button5 : constant Interfaces.C.int;
+ pragma Import (C, fl_enum_button5, "fl_enum_button5");
+
+ fl_enum_left_mouse : constant Interfaces.C.int;
+ pragma Import (C, fl_enum_left_mouse, "fl_enum_left_mouse");
+
+ fl_enum_middle_mouse : constant Interfaces.C.int;
+ pragma Import (C, fl_enum_middle_mouse, "fl_enum_middle_mouse");
+
+ fl_enum_right_mouse : constant Interfaces.C.int;
+ pragma Import (C, fl_enum_right_mouse, "fl_enum_right_mouse");
+
+ fl_enum_back_mouse : constant Interfaces.C.int;
+ pragma Import (C, fl_enum_back_mouse, "fl_enum_back_mouse");
+
+ fl_enum_forward_mouse : constant Interfaces.C.int;
+ pragma Import (C, fl_enum_forward_mouse, "fl_enum_forward_mouse");
+
+
+
+
+ ------------------------
-- Functions From C --
------------------------
@@ -34,12 +71,18 @@ package body FLTK.Event is
pragma Import (C, fl_event_add_handler, "fl_event_add_handler");
pragma Inline (fl_event_add_handler);
- procedure fl_event_set_event_dispatch
+ procedure fl_event_set_dispatch
(F : in Storage.Integer_Address);
- pragma Import (C, fl_event_set_event_dispatch, "fl_event_set_event_dispatch");
- pragma Inline (fl_event_set_event_dispatch);
+ pragma Import (C, fl_event_set_dispatch, "fl_event_set_dispatch");
+ pragma Inline (fl_event_set_dispatch);
+
+ function fl_event_handle_dispatch
+ (E : in Interfaces.C.int;
+ W : in Storage.Integer_Address)
+ return Interfaces.C.int;
+ pragma Import (C, fl_event_handle_dispatch, "fl_event_handle_dispatch");
+ pragma Inline (fl_event_handle_dispatch);
- -- actually handle_ but can't have an underscore on the end of an identifier
function fl_event_handle
(E : in Interfaces.C.int;
W : in Storage.Integer_Address)
@@ -105,6 +148,21 @@ package body FLTK.Event is
+ -- Clipboard --
+
+ function fl_event_clipboard_text
+ return Interfaces.C.Strings.chars_ptr;
+ pragma Import (C, fl_event_clipboard_text, "fl_event_clipboard_text");
+ pragma Inline (fl_event_clipboard_text);
+
+ function fl_event_clipboard_type
+ return Interfaces.C.Strings.chars_ptr;
+ pragma Import (C, fl_event_clipboard_type, "fl_event_clipboard_type");
+ pragma Inline (fl_event_clipboard_type);
+
+
+
+
-- Multikey --
function fl_event_compose
@@ -123,6 +181,12 @@ package body FLTK.Event is
pragma Import (C, fl_event_length, "fl_event_length");
pragma Inline (fl_event_length);
+ function fl_event_test_shortcut
+ (S : in Interfaces.C.unsigned)
+ return Interfaces.C.int;
+ pragma Import (C, fl_event_test_shortcut, "fl_event_test_shortcut");
+ pragma Inline (fl_event_test_shortcut);
+
@@ -189,10 +253,15 @@ package body FLTK.Event is
pragma Import (C, fl_event_is_click, "fl_event_is_click");
pragma Inline (fl_event_is_click);
- function fl_event_is_clicks
+ procedure fl_event_set_click
+ (C : in Interfaces.C.int);
+ pragma Import (C, fl_event_set_click, "fl_event_set_click");
+ pragma Inline (fl_event_set_click);
+
+ function fl_event_get_clicks
return Interfaces.C.int;
- pragma Import (C, fl_event_is_clicks, "fl_event_is_clicks");
- pragma Inline (fl_event_is_clicks);
+ pragma Import (C, fl_event_get_clicks, "fl_event_get_clicks");
+ pragma Inline (fl_event_get_clicks);
procedure fl_event_set_clicks
(C : in Interfaces.C.int);
@@ -219,6 +288,27 @@ package body FLTK.Event is
pragma Import (C, fl_event_button3, "fl_event_button3");
pragma Inline (fl_event_button3);
+ function fl_event_button4
+ return Interfaces.C.int;
+ pragma Import (C, fl_event_button4, "fl_event_button4");
+ pragma Inline (fl_event_button4);
+
+ function fl_event_button5
+ return Interfaces.C.int;
+ pragma Import (C, fl_event_button5, "fl_event_button5");
+ pragma Inline (fl_event_button5);
+
+ function fl_event_buttons
+ return Interfaces.C.int;
+ pragma Import (C, fl_event_buttons, "fl_event_buttons");
+ pragma Inline (fl_event_buttons);
+
+ function fl_event_inside2
+ (C : in Storage.Integer_Address)
+ return Interfaces.C.int;
+ pragma Import (C, fl_event_inside2, "fl_event_inside2");
+ pragma Inline (fl_event_inside2);
+
function fl_event_inside
(X, Y, W, H : in Interfaces.C.int)
return Interfaces.C.int;
@@ -295,25 +385,27 @@ package body FLTK.Event is
end Event_Handler_Hook;
- -- function Dispatch_Hook
- -- (Num : in Interfaces.C.int;
- -- Ptr : in Storage.Integer_Address)
- -- return Interfaces.C.int
- -- is
- -- Ret_Val : Event_Outcome;
- -- Actual_Window : access FLTK.Widgets.Groups.Windows.Window'Class;
- -- begin
- -- if Ptr /= Null_Pointer then
- -- Actual_Window := Window_Convert.To_Pointer
- -- (Storage.To_Address (fl_widget_get_user_data (Ptr)));
- -- end if;
- -- if Current_Dispatch = null then
- -- Ret_Val := Default_Dispatch (Event_Kind'Val (Num), Actual_Window);
- -- else
- -- Ret_Val := Current_Dispatch (Event_Kind'Val (Num), Actual_Window);
- -- end if;
- -- return Event_Outcome'Pos (Ret_Val);
- -- end Dispatch_Hook;
+ function Dispatch_Hook
+ (Num : in Interfaces.C.int;
+ Ptr : in Storage.Integer_Address)
+ return Interfaces.C.int
+ is
+ Ada_Ptr : Storage.Integer_Address;
+ Actual_Window : access FLTK.Widgets.Groups.Windows.Window'Class;
+ begin
+ if Ptr /= Null_Pointer then
+ Ada_Ptr := fl_widget_get_user_data (Ptr);
+ pragma Assert (Ada_Ptr /= Null_Pointer);
+ Actual_Window := Window_Convert.To_Pointer (Storage.To_Address (Ada_Ptr));
+ end if;
+ return Event_Outcome'Pos (Current_Dispatch (Event_Kind'Val (Num), Actual_Window));
+ exception
+ when Chk.Assertion_Error => raise Internal_FLTK_Error with
+ "Window passed to Event_Dispatch hook did not have user_data pointer back to Ada";
+ when Constraint_Error => raise Internal_FLTK_Error with
+ "Event_Dispatch hook passed unexpected event int value of " &
+ Interfaces.C.int'Image (Num);
+ end Dispatch_Hook;
@@ -343,38 +435,55 @@ package body FLTK.Event is
end Remove_Handler;
- -- function Get_Dispatch
- -- return Event_Dispatch is
- -- begin
- -- if Current_Dispatch = null then
- -- return Default_Dispatch'Access;
- -- else
- -- return Current_Dispatch;
- -- end if;
- -- end Get_Dispatch;
+ function Get_Dispatch
+ return Event_Dispatch is
+ begin
+ return Current_Dispatch;
+ end Get_Dispatch;
- -- procedure Set_Dispatch
- -- (Func : in Event_Dispatch) is
- -- begin
- -- Current_Dispatch := Func;
- -- end Set_Dispatch;
+ procedure Set_Dispatch
+ (Func : in Event_Dispatch) is
+ begin
+ Current_Dispatch := Func;
+ if Current_Dispatch /= null then
+ fl_event_set_dispatch (Storage.To_Integer (Dispatch_Hook'Address));
+ else
+ fl_event_set_dispatch (Null_Pointer);
+ end if;
+ end Set_Dispatch;
- -- function Default_Dispatch
- -- (Event : in Event_Kind;
- -- Win : access FLTK.Widgets.Groups.Windows.Window'Class)
- -- return Event_Outcome is
- -- begin
- -- if Win = null then
- -- return Event_Outcome'Val (fl_event_handle
- -- (Event_Kind'Pos (Event), Null_Pointer));
- -- else
- -- return Event_Outcome'Val (fl_event_handle
- -- (Event_Kind'Pos (Event),
- -- Wrapper (Win.all).Void_Ptr));
- -- end if;
- -- end Default_Dispatch;
+ function Handle_Dispatch
+ (Event : in Event_Kind;
+ Origin : in out FLTK.Widgets.Groups.Windows.Window'Class)
+ return Event_Outcome
+ is
+ Result : Interfaces.C.int := fl_event_handle_dispatch
+ (Event_Kind'Pos (Event),
+ Wrapper (Origin).Void_Ptr);
+ begin
+ return Event_Outcome'Val (Result);
+ exception
+ when Constraint_Error => raise Internal_FLTK_Error with
+ "Fl::handle returned unexpected int value of " & Interfaces.C.int'Image (Result);
+ end Handle_Dispatch;
+
+
+ function Handle
+ (Event : in Event_Kind;
+ Origin : in out FLTK.Widgets.Groups.Windows.Window'Class)
+ return Event_Outcome
+ is
+ Result : Interfaces.C.int := fl_event_handle
+ (Event_Kind'Pos (Event),
+ Wrapper (Origin).Void_Ptr);
+ begin
+ return Event_Outcome'Val (Result);
+ exception
+ when Constraint_Error => raise Internal_FLTK_Error with
+ "Fl::handle_ returned unexpected int value of " & Interfaces.C.int'Image (Result);
+ end Handle;
@@ -503,6 +612,36 @@ package body FLTK.Event is
+ -- Clipboard --
+
+ function Clipboard_Text
+ return String
+ is
+ Text_Ptr : Interfaces.C.Strings.chars_ptr := fl_event_clipboard_text;
+ begin
+ if Text_Ptr = Interfaces.C.Strings.Null_Ptr then
+ return "";
+ else
+ return Interfaces.C.Strings.Value (Text_Ptr);
+ end if;
+ end Clipboard_Text;
+
+
+ function Clipboard_Kind
+ return String
+ is
+ Text_Ptr : Interfaces.C.Strings.chars_ptr := fl_event_clipboard_type;
+ begin
+ if Text_Ptr = Interfaces.C.Strings.Null_Ptr then
+ return "";
+ else
+ return Interfaces.C.Strings.Value (Text_Ptr);
+ end if;
+ end Clipboard_Kind;
+
+
+
+
-- Multikey --
function Compose
@@ -533,21 +672,34 @@ package body FLTK.Event is
end Text_Length;
+ function Test_Shortcut
+ (Shortcut : in Key_Combo)
+ return Boolean is
+ begin
+ return fl_event_test_shortcut (To_C (Shortcut)) /= 0;
+ end Test_Shortcut;
+
+
-- Modifiers --
function Last
- return Event_Kind is
+ return Event_Kind
+ is
+ Value : Interfaces.C.int := fl_event_get;
begin
- return Event_Kind'Val (fl_event_get);
+ return Event_Kind'Val (Value);
+ exception
+ when Constraint_Error => raise Internal_FLTK_Error with
+ "Fl::event returned unexpected int value of " & Interfaces.C.int'Image (Value);
end Last;
function Last_Modifier
return Modifier is
begin
- return To_Ada (fl_event_state);
+ return To_Ada (Interfaces.C.unsigned (fl_event_state));
end Last_Modifier;
@@ -555,7 +707,7 @@ package body FLTK.Event is
(Had : in Modifier)
return Boolean is
begin
- return fl_event_check_state (To_C (Had)) /= 0;
+ return fl_event_check_state (Interfaces.C.int (To_C (Had))) /= 0;
end Last_Modifier;
@@ -620,24 +772,73 @@ package body FLTK.Event is
end Is_Click;
+ procedure Clear_Click is
+ begin
+ fl_event_set_click (0);
+ end Clear_Click;
+
+
function Is_Multi_Click
return Boolean is
begin
- return fl_event_is_clicks /= 0;
+ return fl_event_get_clicks /= 0;
end Is_Multi_Click;
+ function Get_Clicks
+ return Natural
+ is
+ Raw : Interfaces.C.int := fl_event_get_clicks;
+ begin
+ if Is_Click then
+ return Positive (Raw + 1);
+ else
+ return 0;
+ end if;
+ exception
+ when Constraint_Error => raise Internal_FLTK_Error with
+ "Fl::event_clicks returned unexpected int value of " &
+ Interfaces.C.int'Image (Raw);
+ end Get_Clicks;
+
+
procedure Set_Clicks
(To : in Natural) is
begin
- fl_event_set_clicks (Interfaces.C.int (To));
+ if To = 0 then
+ fl_event_set_clicks (0);
+ Clear_Click;
+ elsif To = 1 then
+ fl_event_set_clicks (0);
+ else
+ fl_event_set_clicks (Interfaces.C.int (To) - 1);
+ end if;
end Set_Clicks;
function Last_Button
- return Mouse_Button is
- begin
- return Mouse_Button'Val (fl_event_button);
+ return Mouse_Button
+ is
+ Code : Interfaces.C.int := fl_event_button;
+ begin
+ pragma Assert (Last = Push or Last = Release);
+ if Code = fl_enum_left_mouse then
+ return Left_Button;
+ elsif Code = fl_enum_middle_mouse then
+ return Middle_Button;
+ elsif Code = fl_enum_right_mouse then
+ return Right_Button;
+ elsif Code = fl_enum_back_mouse then
+ return Back_Button;
+ elsif Code = fl_enum_forward_mouse then
+ return Forward_Button;
+ else
+ raise Internal_FLTK_Error with "Fl::event_button returned unexpected int value of " &
+ Interfaces.C.int'Image (Code);
+ end if;
+ exception
+ when Chk.Assertion_Error => raise Internal_FLTK_Error with
+ "Fl::event_button was called when the most recent event was not Push or Release";
end Last_Button;
@@ -662,6 +863,46 @@ package body FLTK.Event is
end Mouse_Right;
+ function Mouse_Back
+ return Boolean is
+ begin
+ return fl_event_button4 /= 0;
+ end Mouse_Back;
+
+
+ function Mouse_Forward
+ return Boolean is
+ begin
+ return fl_event_button5 /= 0;
+ end Mouse_Forward;
+
+
+ procedure Mouse_Buttons
+ (Left, Middle, Right, Back, Forward : out Boolean)
+ is
+ type Cint_Mod is mod 2 ** Interfaces.C.int'Size;
+ Mask : Interfaces.C.int := fl_event_buttons;
+ begin
+ Left := (Cint_Mod (Mask) and Cint_Mod (fl_enum_button1)) /= 0;
+ Middle := (Cint_Mod (Mask) and Cint_Mod (fl_enum_button2)) /= 0;
+ Right := (Cint_Mod (Mask) and Cint_Mod (fl_enum_button3)) /= 0;
+ Back := (Cint_Mod (Mask) and Cint_Mod (fl_enum_button4)) /= 0;
+ Forward := (Cint_Mod (Mask) and Cint_Mod (fl_enum_button5)) /= 0;
+ exception
+ when Constraint_Error => raise Internal_FLTK_Error with
+ "Fl::event_buttons returned unexpected int value of " &
+ Interfaces.C.int'Image (Mask);
+ end Mouse_Buttons;
+
+
+ function Is_Inside
+ (Child : in FLTK.Widgets.Widget'Class)
+ return Boolean is
+ begin
+ return fl_event_inside2 (Wrapper (Child).Void_Ptr) /= 0;
+ end Is_Inside;
+
+
function Is_Inside
(X, Y, W, H : in Integer)
return Boolean is
@@ -681,14 +922,14 @@ package body FLTK.Event is
function Last_Key
return Keypress is
begin
- return To_Ada (fl_event_key);
+ return To_Ada (Interfaces.C.unsigned (fl_event_key));
end Last_Key;
function Original_Last_Key
return Keypress is
begin
- return To_Ada (fl_event_original_key);
+ return To_Ada (Interfaces.C.unsigned (fl_event_original_key));
end Original_Last_Key;
@@ -696,7 +937,7 @@ package body FLTK.Event is
(Key : in Keypress)
return Boolean is
begin
- return fl_event_key_during (To_C (Key)) /= 0;
+ return fl_event_key_during (Interfaces.C.int (To_C (Key))) /= 0;
end Pressed_During;
@@ -704,7 +945,7 @@ package body FLTK.Event is
(Key : in Keypress)
return Boolean is
begin
- return fl_event_get_key (To_C (Key)) /= 0;
+ return fl_event_get_key (Interfaces.C.int (To_C (Key))) /= 0;
end Key_Now;
@@ -740,9 +981,8 @@ begin
fl_event_add_handler (Storage.To_Integer (Event_Handler_Hook'Address));
- -- fl_event_set_event_dispatch (Storage.To_Integer (Dispatch_Hook'Address));
-end FLTK.Event;
+end FLTK.Events;
diff --git a/body/fltk-menu_items.adb b/body/fltk-menu_items.adb
index 7ee4d61..dfb579a 100644
--- a/body/fltk-menu_items.adb
+++ b/body/fltk-menu_items.adb
@@ -297,7 +297,7 @@ package body FLTK.Menu_Items is
This.Void_Ptr := new_fl_menu_item
(Interfaces.C.To_C (Text),
Callback_Convert.To_Address (Action),
- To_C (Shortcut),
+ Interfaces.C.int (To_C (Shortcut)),
MFlag_To_Cint (Flags));
end return;
end Create;
@@ -536,7 +536,7 @@ package body FLTK.Menu_Items is
(This : in Menu_Item)
return Key_Combo is
begin
- return To_Ada (fl_menu_item_get_shortcut (This.Void_Ptr));
+ return To_Ada (Interfaces.C.unsigned (fl_menu_item_get_shortcut (This.Void_Ptr)));
end Get_Shortcut;
diff --git a/body/fltk-screen.adb b/body/fltk-screen.adb
index 89f7413..6b8118e 100644
--- a/body/fltk-screen.adb
+++ b/body/fltk-screen.adb
@@ -17,6 +17,25 @@ package body FLTK.Screen is
------------------------
+ -- Constants From C --
+ ------------------------
+
+ fl_enum_mode_rgb : constant Interfaces.C.int;
+ pragma Import (C, fl_enum_mode_rgb, "fl_enum_mode_rgb");
+
+ fl_enum_mode_rgb8 : constant Interfaces.C.int;
+ pragma Import (C, fl_enum_mode_rgb8, "fl_enum_mode_rgb8");
+
+ fl_enum_mode_double : constant Interfaces.C.int;
+ pragma Import (C, fl_enum_mode_double, "fl_enum_mode_double");
+
+ fl_enum_mode_index : constant Interfaces.C.int;
+ pragma Import (C, fl_enum_mode_index, "fl_enum_mode_index");
+
+
+
+
+ ------------------------
-- Functions From C --
------------------------
@@ -27,6 +46,12 @@ package body FLTK.Screen is
pragma Import (C, fl_screen_display, "fl_screen_display");
pragma Inline (fl_screen_display);
+ function fl_screen_visual
+ (F : in Interfaces.C.int)
+ return Interfaces.C.int;
+ pragma Import (C, fl_screen_visual, "fl_screen_visual");
+ pragma Inline (fl_screen_visual);
+
@@ -133,6 +158,21 @@ package body FLTK.Screen is
+ -- Drawing --
+
+ function fl_screen_get_damage
+ return Interfaces.C.int;
+ pragma Import (C, fl_screen_get_damage, "fl_screen_get_damage");
+ pragma Inline (fl_screen_get_damage);
+
+ procedure fl_screen_set_damage
+ (V : in Interfaces.C.int);
+ pragma Import (C, fl_screen_set_damage, "fl_screen_set_damage");
+ pragma Inline (fl_screen_set_damage);
+
+
+
+
-----------------------
-- API Subprograms --
-----------------------
@@ -146,6 +186,29 @@ package body FLTK.Screen is
end Set_Display_String;
+ procedure Set_Visual_Mode
+ (Value : in Visual_Mode)
+ is
+ Ignore : Boolean := Set_Visual_Mode (Value);
+ begin
+ null;
+ end Set_Visual_Mode;
+
+
+ function Set_Visual_Mode
+ (Value : in Visual_Mode)
+ return Boolean is
+ begin
+ return fl_screen_visual
+ ((case Value is
+ when RGB => fl_enum_mode_rgb,
+ when RGB_24bit => fl_enum_mode_rgb8,
+ when Double_Buffer => fl_enum_mode_double + fl_enum_mode_index,
+ when Double_RGB => fl_enum_mode_double + fl_enum_mode_rgb,
+ when Double_RGB_24bit => fl_enum_mode_double + fl_enum_mode_rgb8)) /= 0;
+ end Set_Visual_Mode;
+
+
-- Basic Dimensions --
@@ -318,6 +381,24 @@ package body FLTK.Screen is
end Bounding_Rect;
+
+
+ -- Drawing --
+
+ function Is_Damaged
+ return Boolean is
+ begin
+ return fl_screen_get_damage /= 0;
+ end Is_Damaged;
+
+
+ procedure Set_Damaged
+ (To : in Boolean) is
+ begin
+ fl_screen_set_damage (Boolean'Pos (To));
+ end Set_Damaged;
+
+
end FLTK.Screen;
diff --git a/body/fltk-widgets-buttons.adb b/body/fltk-widgets-buttons.adb
index d6e587e..bc78d8d 100644
--- a/body/fltk-widgets-buttons.adb
+++ b/body/fltk-widgets-buttons.adb
@@ -293,7 +293,7 @@ package body FLTK.Widgets.Buttons is
(This : in Button)
return Key_Combo is
begin
- return To_Ada (fl_button_get_shortcut (This.Void_Ptr));
+ return To_Ada (Interfaces.C.unsigned (fl_button_get_shortcut (This.Void_Ptr)));
end Get_Shortcut;
diff --git a/body/fltk-widgets-groups-text_displays-text_editors.adb b/body/fltk-widgets-groups-text_displays-text_editors.adb
index 906edef..680d3be 100644
--- a/body/fltk-widgets-groups-text_displays-text_editors.adb
+++ b/body/fltk-widgets-groups-text_displays-text_editors.adb
@@ -8,7 +8,7 @@ with
Ada.Assertions,
Ada.Characters.Latin_1,
- FLTK.Event,
+ FLTK.Events,
Interfaces.C;
@@ -476,8 +476,8 @@ package body FLTK.Widgets.Groups.Text_Displays.Text_Editors is
Editor_Ptr : Storage.Integer_Address := fl_widget_get_user_data (E);
Ada_Editor : access Text_Editor'Class;
- Extra_Keys : Modifier := FLTK.Event.Last_Modifier;
- Actual_Key : Keypress := FLTK.Event.Last_Key; -- fuck you FLTK, give me the real code
+ Extra_Keys : Modifier := FLTK.Events.Last_Modifier;
+ Actual_Key : Keypress := FLTK.Events.Last_Key; -- fuck you FLTK, give me the real code
Ada_Key : Key_Combo := Extra_Keys + Actual_Key;
-- For whatever reason, if a regular key function is used then FLTK will
diff --git a/body/fltk-widgets-groups-text_displays.adb b/body/fltk-widgets-groups-text_displays.adb
index 7fda2fd..601bde9 100644
--- a/body/fltk-widgets-groups-text_displays.adb
+++ b/body/fltk-widgets-groups-text_displays.adb
@@ -2172,7 +2172,7 @@ package body FLTK.Widgets.Groups.Text_Displays is
(This : in Text_Display)
return Key_Combo is
begin
- return To_Ada (fl_text_display_get_shortcut (This.Void_Ptr));
+ return To_Ada (Interfaces.C.unsigned (fl_text_display_get_shortcut (This.Void_Ptr)));
end Get_Shortcut;
@@ -2180,7 +2180,7 @@ package body FLTK.Widgets.Groups.Text_Displays is
(This : in out Text_Display;
Value : in Key_Combo) is
begin
- fl_text_display_set_shortcut (This.Void_Ptr, To_C (Value));
+ fl_text_display_set_shortcut (This.Void_Ptr, Interfaces.C.int (To_C (Value)));
end Set_Shortcut;
diff --git a/body/fltk-widgets-inputs.adb b/body/fltk-widgets-inputs.adb
index 888ef68..ef791be 100644
--- a/body/fltk-widgets-inputs.adb
+++ b/body/fltk-widgets-inputs.adb
@@ -633,7 +633,7 @@ package body FLTK.Widgets.Inputs is
(This : in Input)
return Key_Combo is
begin
- return To_Ada (fl_input_get_shortcut (This.Void_Ptr));
+ return To_Ada (Interfaces.C.unsigned (fl_input_get_shortcut (This.Void_Ptr)));
end Get_Shortcut;
@@ -641,7 +641,7 @@ package body FLTK.Widgets.Inputs is
(This : in out Input;
To : in Key_Combo) is
begin
- fl_input_set_shortcut (This.Void_Ptr, To_C (To));
+ fl_input_set_shortcut (This.Void_Ptr, Interfaces.C.int (To_C (To)));
end Set_Shortcut;
diff --git a/body/fltk-widgets-menus-menu_bars-systemwide.adb b/body/fltk-widgets-menus-menu_bars-systemwide.adb
index c09ef93..47ef6d9 100644
--- a/body/fltk-widgets-menus-menu_bars-systemwide.adb
+++ b/body/fltk-widgets-menus-menu_bars-systemwide.adb
@@ -338,7 +338,7 @@ package body FLTK.Widgets.Menus.Menu_Bars.Systemwide is
Added_Spot : Interfaces.C.int := fl_sys_menu_bar_add2
(This.Void_Ptr,
Interfaces.C.To_C (Text),
- To_C (Shortcut),
+ Interfaces.C.int (To_C (Shortcut)),
Callback_Convert.To_Address (Action),
MFlag_To_Cint (Flags));
begin
@@ -357,7 +357,7 @@ package body FLTK.Widgets.Menus.Menu_Bars.Systemwide is
Added_Spot : Interfaces.C.int := fl_sys_menu_bar_add2
(This.Void_Ptr,
Interfaces.C.To_C (Text),
- To_C (Shortcut),
+ Interfaces.C.int (To_C (Shortcut)),
Callback_Convert.To_Address (Action),
MFlag_To_Cint (Flags));
begin
@@ -416,7 +416,7 @@ package body FLTK.Widgets.Menus.Menu_Bars.Systemwide is
(This.Void_Ptr,
Interfaces.C.int (Place) - 1,
Interfaces.C.To_C (Text),
- To_C (Shortcut),
+ Interfaces.C.int (To_C (Shortcut)),
Callback_Convert.To_Address (Action),
MFlag_To_Cint (Flags));
begin
@@ -437,7 +437,7 @@ package body FLTK.Widgets.Menus.Menu_Bars.Systemwide is
(This.Void_Ptr,
Interfaces.C.int (Place) - 1,
Interfaces.C.To_C (Text),
- To_C (Shortcut),
+ Interfaces.C.int (To_C (Shortcut)),
Callback_Convert.To_Address (Action),
MFlag_To_Cint (Flags));
begin
@@ -584,7 +584,7 @@ package body FLTK.Widgets.Menus.Menu_Bars.Systemwide is
fl_sys_menu_bar_shortcut
(This.Void_Ptr,
Interfaces.C.int (Place) - 1,
- To_C (Press));
+ Interfaces.C.int (To_C (Press)));
end Set_Shortcut;
diff --git a/body/fltk-widgets-menus.adb b/body/fltk-widgets-menus.adb
index ede63a3..1e690f3 100644
--- a/body/fltk-widgets-menus.adb
+++ b/body/fltk-widgets-menus.adb
@@ -596,7 +596,7 @@ package body FLTK.Widgets.Menus is
Added_Spot : Interfaces.C.int := fl_menu_add2
(This.Void_Ptr,
Interfaces.C.To_C (Text),
- To_C (Shortcut),
+ Interfaces.C.int (To_C (Shortcut)),
Callback_Convert.To_Address (Action),
MFlag_To_Cint (Flags));
begin
@@ -615,7 +615,7 @@ package body FLTK.Widgets.Menus is
Added_Spot : Interfaces.C.int := fl_menu_add2
(This.Void_Ptr,
Interfaces.C.To_C (Text),
- To_C (Shortcut),
+ Interfaces.C.int (To_C (Shortcut)),
Callback_Convert.To_Address (Action),
MFlag_To_Cint (Flags));
begin
@@ -674,7 +674,7 @@ package body FLTK.Widgets.Menus is
(This.Void_Ptr,
Interfaces.C.int (Place) - 1,
Interfaces.C.To_C (Text),
- To_C (Shortcut),
+ Interfaces.C.int (To_C (Shortcut)),
Callback_Convert.To_Address (Action),
MFlag_To_Cint (Flags));
begin
@@ -695,7 +695,7 @@ package body FLTK.Widgets.Menus is
(This.Void_Ptr,
Interfaces.C.int (Place) - 1,
Interfaces.C.To_C (Text),
- To_C (Shortcut),
+ Interfaces.C.int (To_C (Shortcut)),
Callback_Convert.To_Address (Action),
MFlag_To_Cint (Flags));
begin
@@ -1177,7 +1177,7 @@ package body FLTK.Widgets.Menus is
fl_menu_shortcut
(This.Void_Ptr,
Interfaces.C.int (Place) - 1,
- To_C (Press));
+ Interfaces.C.int (To_C (Press)));
end Set_Shortcut;
diff --git a/body/fltk-widgets-valuators-value_inputs.adb b/body/fltk-widgets-valuators-value_inputs.adb
index 929d117..b107e3a 100644
--- a/body/fltk-widgets-valuators-value_inputs.adb
+++ b/body/fltk-widgets-valuators-value_inputs.adb
@@ -317,7 +317,7 @@ package body FLTK.Widgets.Valuators.Value_Inputs is
(This : in Value_Input)
return Key_Combo is
begin
- return To_Ada (fl_value_input_get_shortcut (This.Void_Ptr));
+ return To_Ada (Interfaces.C.unsigned (fl_value_input_get_shortcut (This.Void_Ptr)));
end Get_Shortcut;
diff --git a/body/fltk.adb b/body/fltk.adb
index 48023f2..c7a8fe4 100644
--- a/body/fltk.adb
+++ b/body/fltk.adb
@@ -11,6 +11,7 @@ with
use type
Interfaces.C.int,
+ Interfaces.C.unsigned,
Interfaces.C.unsigned_char,
Interfaces.C.unsigned_long;
@@ -22,17 +23,42 @@ package body FLTK is
-- Constants From C --
------------------------
+ -- Color --
+
fl_enum_num_red : constant Interfaces.C.int;
- pragma Import (C, fl_enum_num_red);
+ pragma Import (C, fl_enum_num_red, "fl_enum_num_red");
fl_enum_num_green : constant Interfaces.C.int;
- pragma Import (C, fl_enum_num_green);
+ pragma Import (C, fl_enum_num_green, "fl_enum_num_green");
fl_enum_num_blue : constant Interfaces.C.int;
- pragma Import (C, fl_enum_num_blue);
+ pragma Import (C, fl_enum_num_blue, "fl_enum_num_blue");
fl_enum_num_gray : constant Interfaces.C.int;
- pragma Import (C, fl_enum_num_gray);
+ pragma Import (C, fl_enum_num_gray, "fl_enum_num_gray");
+
+
+
+
+ -- Keyboard and Mouse Input --
+
+ fl_enum_button1 : constant Interfaces.C.unsigned;
+ pragma Import (C, fl_enum_button1, "fl_enum_button1");
+
+ fl_enum_button2 : constant Interfaces.C.unsigned;
+ pragma Import (C, fl_enum_button2, "fl_enum_button2");
+
+ fl_enum_button3 : constant Interfaces.C.unsigned;
+ pragma Import (C, fl_enum_button3, "fl_enum_button3");
+
+ fl_enum_button4 : constant Interfaces.C.unsigned;
+ pragma Import (C, fl_enum_button4, "fl_enum_button4");
+
+ fl_enum_button5 : constant Interfaces.C.unsigned;
+ pragma Import (C, fl_enum_button5, "fl_enum_button5");
+
+ fl_enum_buttons : constant Interfaces.C.unsigned;
+ pragma Import (C, fl_enum_buttons, "fl_enum_buttons");
@@ -154,21 +180,6 @@ package body FLTK is
- -- Drawing --
-
- function fl_get_damage
- return Interfaces.C.int;
- pragma Import (C, fl_get_damage, "fl_get_damage");
- pragma Inline (fl_get_damage);
-
- procedure fl_set_damage
- (V : in Interfaces.C.int);
- pragma Import (C, fl_set_damage, "fl_set_damage");
- pragma Inline (fl_set_damage);
-
-
-
-
-- Event Loop --
function fl_check
@@ -457,14 +468,14 @@ package body FLTK is
function To_C
(Key : in Key_Combo)
- return Interfaces.C.int is
+ return Interfaces.C.unsigned is
begin
return To_C (Key.Modcode) + To_C (Key.Keycode) + To_C (Key.Mousecode);
end To_C;
function To_Ada
- (Key : in Interfaces.C.int)
+ (Key : in Interfaces.C.unsigned)
return Key_Combo is
begin
return Result : Key_Combo do
@@ -477,14 +488,14 @@ package body FLTK is
function To_C
(Key : in Keypress)
- return Interfaces.C.int is
+ return Interfaces.C.unsigned is
begin
- return Interfaces.C.int (Key);
+ return Interfaces.C.unsigned (Key);
end To_C;
function To_Ada
- (Key : in Interfaces.C.int)
+ (Key : in Interfaces.C.unsigned)
return Keypress is
begin
return Keypress (Key mod 65536);
@@ -493,14 +504,14 @@ package body FLTK is
function To_C
(Modi : in Modifier)
- return Interfaces.C.int is
+ return Interfaces.C.unsigned is
begin
- return Interfaces.C.int (Modi) * 65536;
+ return Interfaces.C.unsigned (Modi) * 65536;
end To_C;
function To_Ada
- (Modi : in Interfaces.C.int)
+ (Modi : in Interfaces.C.unsigned)
return Modifier is
begin
return Modifier ((Modi / 65536) mod 256);
@@ -509,27 +520,41 @@ package body FLTK is
function To_C
(Button : in Mouse_Button)
- return Interfaces.C.int is
+ return Interfaces.C.unsigned is
begin
case Button is
- when Left_Button => return 1 * (256 ** 3);
- when Middle_Button => return 2 * (256 ** 3);
- when Right_Button => return 4 * (256 ** 3);
- when others => return 0;
+ when No_Button => return 0;
+ when Left_Button => return fl_enum_button1;
+ when Middle_Button => return fl_enum_button2;
+ when Right_Button => return fl_enum_button3;
+ when Back_Button => return fl_enum_button4;
+ when Forward_Button => return fl_enum_button5;
+ when Any_Button => return fl_enum_buttons;
end case;
end To_C;
function To_Ada
- (Button : in Interfaces.C.int)
+ (Button : in Interfaces.C.unsigned)
return Mouse_Button is
begin
- case (Button / (256 ** 3)) is
- when 1 => return Left_Button;
- when 2 => return Middle_Button;
- when 4 => return Right_Button;
- when others => return No_Button;
- end case;
+ if Button = 0 then
+ return No_Button;
+ elsif Button = fl_enum_button1 then
+ return Left_Button;
+ elsif Button = fl_enum_button2 then
+ return Middle_Button;
+ elsif Button = fl_enum_button3 then
+ return Right_Button;
+ elsif Button = fl_enum_button4 then
+ return Back_Button;
+ elsif Button = fl_enum_button5 then
+ return Forward_Button;
+ elsif Button = fl_enum_buttons then
+ return Any_Button;
+ else
+ raise Constraint_Error;
+ end if;
end To_Ada;
@@ -701,25 +726,15 @@ package body FLTK is
- -- Drawing --
-
- function Is_Damaged
- return Boolean is
- begin
- return fl_get_damage /= 0;
- end Is_Damaged;
-
+ -- Event Loop --
- procedure Set_Damaged
- (To : in Boolean) is
+ procedure Check
+ is
+ Ignore : Interfaces.C.int := fl_check;
begin
- fl_set_damage (Boolean'Pos (To));
- end Set_Damaged;
-
-
-
+ null;
+ end Check;
- -- Event Loop --
function Check
return Boolean is
diff --git a/doc/enumerations.html b/doc/enumerations.html
index 3533cd9..6e4f521 100644
--- a/doc/enumerations.html
+++ b/doc/enumerations.html
@@ -78,9 +78,10 @@
<tr>
<td>
- #define FL_LEFT_MOUSE 1<br />
- #define FL_MIDDLE_MOUSE 2<br />
- #define FL_RIGHT_MOUSE 3
+ #define FL_BUTTON1 0x01000000<br />
+ #define FL_BUTTON2 0x02000000<br />
+ #define FL_BUTTON3 0x04000000<br />
+ #define FL_BUTTONS 0x7f000000
</td>
<td>Mouse_Button</td>
</tr>
diff --git a/doc/fl.html b/doc/fl.html
index 7d4d3ee..9cefff7 100644
--- a/doc/fl.html
+++ b/doc/fl.html
@@ -68,6 +68,31 @@
<table class="function">
+ <tr><th colspan="2">Static Attributes</th></tr>
+
+ <tr>
+<td><pre>
+static char const * const clipboard_image = "image";
+</pre></td>
+<td><pre>
+Clipboard_Image : constant String;
+</pre></td>
+ </tr>
+
+ <tr>
+<td><pre>
+static char const * const clipboard_plain_text = "text/plain";
+</pre></td>
+<td><pre>
+Clipboard_Plain_Text : constant String;
+</pre></td>
+ </tr>
+
+</table>
+
+
+
+<table class="function">
<tr><th colspan="2">Static Functions and Procedures</th></tr>
<tr>
@@ -103,15 +128,6 @@ function API_Version
<tr>
<td><pre>
-static void awake(void *message=0);
-</pre></td>
-<td><pre>
-procedure Awake;
-</pre></td>
- </tr>
-
- <tr>
-<td><pre>
static void cairo_autolink_context(bool alink);
</pre></td>
<td>&nbsp;</td>
@@ -150,6 +166,8 @@ static cairo_t * cairo_make_current(Fl_Window *w);
static int check();
</pre></td>
<td><pre>
+procedure Check;
+
function Check
return Boolean;
</pre></td>
@@ -164,26 +182,6 @@ static void clear_widget_pointer(Fl_Widget const *w);
<tr>
<td><pre>
-static void damage(int d);
-</pre></td>
-<td><pre>
-procedure Set_Damaged
- (To : in Boolean);
-</pre></td>
- </tr>
-
- <tr>
-<td><pre>
-static int damage();
-</pre></td>
-<td><pre>
-function Is_Damaged
- return Boolean;
-</pre></td>
- </tr>
-
- <tr>
-<td><pre>
static void delete_widget(Fl_Widget *w);
</pre></td>
<td>Used automatically as appropriate by the binding.</td>
@@ -198,15 +196,6 @@ static void do_widget_deletion();
<tr>
<td><pre>
-static void flush();
-</pre></td>
-<td><pre>
-procedure Flush;
-</pre></td>
- </tr>
-
- <tr>
-<td><pre>
static int gl_visual(int, int *alist=0);
</pre></td>
<td>&nbsp;</td>
@@ -214,24 +203,6 @@ static int gl_visual(int, int *alist=0);
<tr>
<td><pre>
-static int handle(int, Fl_Window *);
-
-static int handle_(int, Fl_Window *);
-</pre></td>
-<td>&nbsp;</td>
- </tr>
-
- <tr>
-<td><pre>
-static int lock();
-</pre></td>
-<td><pre>
-procedure Lock;
-</pre></td>
- </tr>
-
- <tr>
-<td><pre>
static int ready();
</pre></td>
<td><pre>
@@ -242,15 +213,6 @@ function Ready
<tr>
<td><pre>
-static void redraw();
-</pre></td>
-<td><pre>
-procedure Redraw;
-</pre></td>
- </tr>
-
- <tr>
-<td><pre>
static void release_widget_pointer(Fl_Widget *&w);
</pre></td>
<td>Marked as internal use only.</td>
@@ -268,22 +230,6 @@ function Run
<tr>
<td><pre>
-static void * thread_message();
-</pre></td>
-<td>&nbsp;</td>
- </tr>
-
- <tr>
-<td><pre>
-static void unlock();
-</pre></td>
-<td><pre>
-procedure Unlock;
-</pre></td>
- </tr>
-
- <tr>
-<td><pre>
static void use_high_res_GL(int val);
</pre></td>
<td>&nbsp;</td>
diff --git a/doc/fl_(fltk-event).html b/doc/fl_(fltk-events).html
index 3aaca1f..c9846fd 100644
--- a/doc/fl_(fltk-event).html
+++ b/doc/fl_(fltk-events).html
@@ -3,14 +3,14 @@
<html lang="en">
<head>
<meta charset="utf-8">
- <title>Fl (FLTK.Event) Binding Map</title>
+ <title>Fl (FLTK.Events) Binding Map</title>
<link href="map.css" rel="stylesheet">
</head>
<body>
-<h2>Fl (FLTK.Event) Binding Map</h2>
+<h2>Fl (FLTK.Events) Binding Map</h2>
<a href="index.html">Back to Index</a>
@@ -21,7 +21,7 @@
<tr>
<td>Fl</td>
- <td>FLTK.Event</td>
+ <td>FLTK.Events</td>
</tr>
</table>
@@ -38,7 +38,7 @@
<tr>
<td>Fl_Event_Dispatch</td>
- <td>&nbsp;</td>
+ <td>Event_Dispatch</td>
</tr>
</table>
@@ -160,9 +160,32 @@ function Mouse_Right
<tr>
<td><pre>
+static int event_button4();
+</pre></td>
+<td><pre>
+function Mouse_Back
+ return Boolean;
+</pre></td>
+ </tr>
+
+ <tr>
+<td><pre>
+static int event_button5();
+</pre></td>
+<td><pre>
+function Mouse_Forward
+ return Boolean;
+</pre></td>
+ </tr>
+
+ <tr>
+<td><pre>
static int event_buttons();
</pre></td>
-<td>&nbsp;</td>
+<td><pre>
+procedure Mouse_Buttons
+ (Left, Middle, Right, Back, Forward : out Boolean);
+</pre></td>
</tr>
<tr>
@@ -172,6 +195,9 @@ static int event_clicks();
<td><pre>
function Is_Multi_Click
return Boolean;
+
+function Get_Clicks
+ return Natural;
</pre></td>
</tr>
@@ -189,14 +215,20 @@ procedure Set_Clicks
<td><pre>
static void * event_clipboard();
</pre></td>
-<td>&nbsp;</td>
+<td><pre>
+function Clipboard_Text
+ return String;
+</pre></td>
</tr>
<tr>
<td><pre>
static const char * event_clipboard_type();
</pre></td>
-<td>&nbsp;</td>
+<td><pre>
+function Clipboard_Kind
+ return String;
+</pre></td>
</tr>
<tr>
@@ -223,14 +255,20 @@ function Key_Ctrl
<td><pre>
static Fl_Event_Dispatch event_dispatch();
</pre></td>
-<td>TBA</td>
+<td><pre>
+function Get_Dispatch
+ return Event_Dispatch;
+</pre></td>
</tr>
<tr>
<td><pre>
static void event_dispatch(Fl_Event_Dispatch d);
</pre></td>
-<td>&nbsp;</td>
+<td><pre>
+procedure Set_Dispatch
+ (Func : in Event_Dispatch);
+</pre></td>
</tr>
<tr>
@@ -257,7 +295,11 @@ function Mouse_DY
<td><pre>
static int event_inside(const Fl_Widget *);
</pre></td>
-<td>&nbsp;</td>
+<td><pre>
+function Is_Inside
+ (Child : in FLTK.Widgets.Widget'Class)
+ return Boolean;
+</pre></td>
</tr>
<tr>
@@ -285,7 +327,9 @@ function Is_Click
<td><pre>
static void event_is_click(int i);
</pre></td>
-<td>See static void event_clicks(int i);</td>
+<td><pre>
+procedure Clear_Click;
+</pre></td>
</tr>
<tr>
@@ -475,6 +519,30 @@ procedure Set_Grab
<tr>
<td><pre>
+static int handle(int, Fl_Window *);
+</pre></td>
+<td><pre>
+function Handle_Dispatch
+ (Event : in Event_Kind;
+ Origin : in out FLTK.Widgets.Groups.Windows.Window'Class)
+ return Event_Outcome;
+</pre></td>
+ </tr>
+
+ <tr>
+<td><pre>
+static int handle_(int, Fl_Window *);
+</pre></td>
+<td><pre>
+function Handle
+ (Event : in Event_Kind;
+ Origin : in out FLTK.Widgets.Groups.Windows.Window'Class)
+ return Event_Outcome;
+</pre></td>
+ </tr>
+
+ <tr>
+<td><pre>
static Fl_Widget * pushed();
</pre></td>
<td><pre>
@@ -516,7 +584,11 @@ procedure Remove_Handler
<td><pre>
static int test_shortcut(Fl_Shortcut);
</pre></td>
-<td>&nbsp;</td>
+<td><pre>
+function Test_Shortcut
+ (Shortcut : in Key_Combo)
+ return Boolean;
+</pre></td>
</tr>
<tr>
diff --git a/doc/fl_(fltk-screen).html b/doc/fl_(fltk-screen).html
index a5f8722..7d44273 100644
--- a/doc/fl_(fltk-screen).html
+++ b/doc/fl_(fltk-screen).html
@@ -28,11 +28,43 @@
+<table class="type">
+ <tr><th colspan="2">Types</th></tr>
+
+ <tr>
+ <td>Fl_Mode</td>
+ <td>Visual_Mode</td>
+ </tr>
+
+</table>
+
+
+
<table class="function">
<tr><th colspan="2">Static Functions and Procedures</th></tr>
<tr>
<td><pre>
+static int damage();
+</pre></td>
+<td><pre>
+function Is_Damaged
+ return Boolean;
+</pre></td>
+ </tr>
+
+ <tr>
+<td><pre>
+static void damage(int d);
+</pre></td>
+<td><pre>
+procedure Set_Damaged
+ (To : in Boolean);
+</pre></td>
+ </tr>
+
+ <tr>
+<td><pre>
static void display(const char *);
</pre></td>
<td><pre>
@@ -43,6 +75,15 @@ procedure Set_Display_String
<tr>
<td><pre>
+static void flush();
+</pre></td>
+<td><pre>
+procedure Flush;
+</pre></td>
+ </tr>
+
+ <tr>
+<td><pre>
static int h();
</pre></td>
<td><pre>
@@ -53,6 +94,15 @@ function Get_H
<tr>
<td><pre>
+static void redraw();
+</pre></td>
+<td><pre>
+procedure Redraw;
+</pre></td>
+ </tr>
+
+ <tr>
+<td><pre>
static int screen_count();
</pre></td>
<td><pre>
@@ -180,7 +230,14 @@ procedure Work_Area
<td><pre>
static int visual(int);
</pre></td>
-<td>&nbsp;</td>
+<td><pre>
+procedure Set_Visual_Mode
+ (Value : in Visual_Mode);
+
+function Set_Visual_Mode
+ (Value : in Visual_Mode)
+ return Boolean;
+</pre></td>
</tr>
<tr>
diff --git a/doc/fl_(fltk-static).html b/doc/fl_(fltk-static).html
index 3afc53a..ac47474 100644
--- a/doc/fl_(fltk-static).html
+++ b/doc/fl_(fltk-static).html
@@ -132,20 +132,6 @@ static void (*atclose)(Fl_Window *, void *);
<tr>
<td><pre>
-static char const * const clipboard_image = "image";
-</pre></td>
-<td>&nbsp;</td>
- </tr>
-
- <tr>
-<td><pre>
-static char const * const clipboard_plain_text = "text/plain";
-</pre></td>
-<td>&nbsp;</td>
- </tr>
-
- <tr>
-<td><pre>
static const char * const help = helpmsg + 13;
</pre></td>
<td>&nbsp;</td>
@@ -281,6 +267,15 @@ static int awake(Fl_Awake_Handler cb, void *message=0);
<tr>
<td><pre>
+static void awake(void *message=0);
+</pre></td>
+<td><pre>
+procedure Awake;
+</pre></td>
+ </tr>
+
+ <tr>
+<td><pre>
static void background(uchar, uchar, uchar);
</pre></td>
<td><pre>
@@ -603,6 +598,15 @@ function Is_Scheme
<tr>
<td><pre>
+static int lock();
+</pre></td>
+<td><pre>
+procedure Lock;
+</pre></td>
+ </tr>
+
+ <tr>
+<td><pre>
static Fl_Window * modal();
</pre></td>
<td><pre>
@@ -948,6 +952,22 @@ static void set_labeltype(Fl_Labeltype, Fl_Labeltype from);
<td>&nbsp;</td>
</tr>
+ <tr>
+<td><pre>
+static void * thread_message();
+</pre></td>
+<td>&nbsp;</td>
+ </tr>
+
+ <tr>
+<td><pre>
+static void unlock();
+</pre></td>
+<td><pre>
+procedure Unlock;
+</pre></td>
+ </tr>
+
</table>
diff --git a/doc/index.html b/doc/index.html
index 57ff15c..af2faf1 100644
--- a/doc/index.html
+++ b/doc/index.html
@@ -20,7 +20,7 @@
<li><a href="filename.html">Filename</a></li>
<li><a href="fl.html">Fl</a></li>
<li><a href="fl_(fltk-errors).html">Fl (FLTK.Errors)</a></li>
- <li><a href="fl_(fltk-event).html">Fl (FLTK.Event)</a></li>
+ <li><a href="fl_(fltk-events).html">Fl (FLTK.Events)</a></li>
<li><a href="fl_(fltk-screen).html">Fl (FLTK.Screen)</a></li>
<li><a href="fl_(fltk-static).html">Fl (FLTK.Static)</a></li>
<li><a href="fl_adjuster.html">Fl_Adjuster</a></li>
@@ -161,7 +161,7 @@
<li><a href="fl_draw.html">FLTK.Draw</a></li>
<li><a href="fl_preferences.html">FLTK.Environment</a></li>
<li><a href="fl_(fltk-errors).html">FLTK.Errors</a></li>
- <li><a href="fl_(fltk-event).html">FLTK.Event</a></li>
+ <li><a href="fl_(fltk-events).html">FLTK.Events</a></li>
<li><a href="fl_file_chooser.html">FLTK.File_Choosers</a></li>
<li><a href="filename.html">FLTK.Filenames</a></li>
<li><a href="fl_help_dialog.html">FLTK.Help_Dialogs</a></li>
diff --git a/spec/fltk-event.ads b/spec/fltk-events.ads
index 483f317..6a556ff 100644
--- a/spec/fltk-event.ads
+++ b/spec/fltk-events.ads
@@ -14,17 +14,17 @@ private with
System.Address_To_Access_Conversions;
-package FLTK.Event is
+package FLTK.Events is
type Event_Handler is access function
(Event : in Event_Kind)
return Event_Outcome;
- -- type Event_Dispatch is access function
- -- (Event : in Event_Kind;
- -- Win : access FLTK.Widgets.Groups.Windows.Window'Class)
- -- return Event_Outcome;
+ type Event_Dispatch is access function
+ (Event : in Event_Kind;
+ Win : access FLTK.Widgets.Groups.Windows.Window'Class)
+ return Event_Outcome;
@@ -37,16 +37,23 @@ package FLTK.Event is
procedure Remove_Handler
(Func : in Event_Handler);
- -- function Get_Dispatch
- -- return Event_Dispatch;
+ function Get_Dispatch
+ return Event_Dispatch;
+
+ -- Any Event_Dispatch function set must call Handle
+ -- if you want the Event to actually be acknowledged.
+ procedure Set_Dispatch
+ (Func : in Event_Dispatch);
- -- procedure Set_Dispatch
- -- (Func : in Event_Dispatch);
+ function Handle_Dispatch
+ (Event : in Event_Kind;
+ Origin : in out FLTK.Widgets.Groups.Windows.Window'Class)
+ return Event_Outcome;
- -- function Default_Dispatch
- -- (Event : in Event_Kind;
- -- Win : access FLTK.Widgets.Groups.Windows.Window'Class)
- -- return Event_Outcome;
+ function Handle
+ (Event : in Event_Kind;
+ Origin : in out FLTK.Widgets.Groups.Windows.Window'Class)
+ return Event_Outcome;
@@ -88,6 +95,17 @@ package FLTK.Event is
+ -- Clipboard --
+
+ function Clipboard_Text
+ return String;
+
+ function Clipboard_Kind
+ return String;
+
+
+
+
-- Multikey --
function Compose
@@ -102,6 +120,10 @@ package FLTK.Event is
function Text_Length
return Natural;
+ function Test_Shortcut
+ (Shortcut : in Key_Combo)
+ return Boolean;
+
@@ -110,9 +132,11 @@ package FLTK.Event is
function Last
return Event_Kind;
+ -- Focuses on keyboard modifiers only, not mouse buttons
function Last_Modifier
return Modifier;
+ -- Focuses on keyboard modifiers only, not mouse buttons
function Last_Modifier
(Had : in Modifier)
return Boolean;
@@ -146,9 +170,18 @@ package FLTK.Event is
function Is_Click
return Boolean;
+ procedure Clear_Click;
+
function Is_Multi_Click
return Boolean;
+ -- Returns the actual number of clicks.
+ -- So no clicks is 0, a single click is 1, a double click is 2, etc.
+ function Get_Clicks
+ return Natural;
+
+ -- Will set the actual number of clicks.
+ -- This means setting it to 0 will make Is_Click return False.
procedure Set_Clicks
(To : in Natural);
@@ -164,6 +197,19 @@ package FLTK.Event is
function Mouse_Right
return Boolean;
+ function Mouse_Back
+ return Boolean;
+
+ function Mouse_Forward
+ return Boolean;
+
+ procedure Mouse_Buttons
+ (Left, Middle, Right, Back, Forward : out Boolean);
+
+ function Is_Inside
+ (Child : in FLTK.Widgets.Widget'Class)
+ return Boolean;
+
function Is_Inside
(X, Y, W, H : in Integer)
return Boolean;
@@ -214,7 +260,7 @@ private
Handlers : Handler_Vectors.Vector := Handler_Vectors.Empty_Vector;
- -- Current_Dispatch : Event_Dispatch := null;
+ Current_Dispatch : Event_Dispatch := null;
function fl_widget_get_user_data
@@ -229,9 +275,10 @@ private
pragma Inline (Add_Handler);
pragma Inline (Remove_Handler);
- -- pragma Inline (Get_Dispatch);
- -- pragma Inline (Set_Dispatch);
- -- pragma Inline (Default_Dispatch);
+ pragma Inline (Get_Dispatch);
+ pragma Inline (Set_Dispatch);
+ pragma Inline (Handle_Dispatch);
+ pragma Inline (Handle);
pragma Inline (Get_Grab);
pragma Inline (Set_Grab);
@@ -245,10 +292,14 @@ private
pragma Inline (Has_Visible_Focus);
pragma Inline (Set_Visible_Focus);
+ pragma Inline (Clipboard_Text);
+ pragma Inline (Clipboard_Kind);
+
pragma Inline (Compose);
pragma Inline (Compose_Reset);
pragma Inline (Text);
pragma Inline (Text_Length);
+ pragma Inline (Test_Shortcut);
pragma Inline (Last);
pragma Inline (Last_Modifier);
@@ -261,12 +312,15 @@ private
pragma Inline (Mouse_DY);
pragma Inline (Get_Mouse);
pragma Inline (Is_Click);
+ pragma Inline (Clear_Click);
pragma Inline (Is_Multi_Click);
+ pragma Inline (Get_Clicks);
pragma Inline (Set_Clicks);
- pragma Inline (Last_Button);
pragma Inline (Mouse_Left);
pragma Inline (Mouse_Middle);
pragma Inline (Mouse_Right);
+ pragma Inline (Mouse_Back);
+ pragma Inline (Mouse_Forward);
pragma Inline (Is_Inside);
pragma Inline (Last_Key);
@@ -279,6 +333,6 @@ private
pragma Inline (Key_Shift);
-end FLTK.Event;
+end FLTK.Events;
diff --git a/spec/fltk-screen.ads b/spec/fltk-screen.ads
index ccfd224..38db9aa 100644
--- a/spec/fltk-screen.ads
+++ b/spec/fltk-screen.ads
@@ -7,11 +7,23 @@
package FLTK.Screen is
+ type Visual_Mode is (RGB, RGB_24bit, Double_Buffer, Double_RGB, Double_RGB_24bit);
+
+
+
+
-- Environment --
procedure Set_Display_String
(Value : in String);
+ procedure Set_Visual_Mode
+ (Value : in Visual_Mode);
+
+ function Set_Visual_Mode
+ (Value : in Visual_Mode)
+ return Boolean;
+
@@ -87,10 +99,30 @@ package FLTK.Screen is
PX, PY, PW, PH : in Integer);
+
+
+ -- Drawing --
+
+ function Is_Damaged
+ return Boolean;
+
+ procedure Set_Damaged
+ (To : in Boolean);
+
+ procedure Flush;
+
+ procedure Redraw;
+
+
private
+ pragma Import (C, Flush, "fl_screen_flush");
+ pragma Import (C, Redraw, "fl_screen_redraw");
+
+
pragma Inline (Set_Display_String);
+ pragma Inline (Set_Visual_Mode);
pragma Inline (Get_X);
pragma Inline (Get_Y);
@@ -104,6 +136,11 @@ private
pragma Inline (Work_Area);
pragma Inline (Bounding_Rect);
+ pragma Inline (Is_Damaged);
+ pragma Inline (Set_Damaged);
+ pragma Inline (Flush);
+ pragma Inline (Redraw);
+
end FLTK.Screen;
diff --git a/spec/fltk-static.ads b/spec/fltk-static.ads
index a2a9ff4..6b54878 100644
--- a/spec/fltk-static.ads
+++ b/spec/fltk-static.ads
@@ -53,7 +53,7 @@ package FLTK.Static is
- -- Interthread Notify --
+ -- Thread Notify --
procedure Add_Awake_Handler
(Func : in Awake_Handler);
@@ -61,6 +61,12 @@ package FLTK.Static is
function Get_Awake_Handler
return Awake_Handler;
+ procedure Awake;
+
+ procedure Lock;
+
+ procedure Unlock;
+
@@ -350,6 +356,10 @@ private
(Read => 1, Write => 4, Except => 8);
+ pragma Import (C, Awake, "fl_static_awake");
+ pragma Import (C, Lock, "fl_static_lock");
+ pragma Import (C, Unlock, "fl_static_unlock");
+
pragma Import (C, Own_Colormap, "fl_static_own_colormap");
pragma Import (C, System_Colors, "fl_static_get_system_colors");
@@ -363,6 +373,9 @@ private
pragma Inline (Add_Awake_Handler);
pragma Inline (Get_Awake_Handler);
+ pragma Inline (Awake);
+ pragma Inline (Lock);
+ pragma Inline (Unlock);
pragma Inline (Add_Check);
pragma Inline (Has_Check);
diff --git a/spec/fltk.ads b/spec/fltk.ads
index ddac9b2..2a38434 100644
--- a/spec/fltk.ads
+++ b/spec/fltk.ads
@@ -11,7 +11,7 @@ with
private with
Ada.Unchecked_Conversion,
- Interfaces.C,
+ Interfaces.C.Strings,
System.Storage_Elements;
@@ -228,7 +228,14 @@ package FLTK is
Tab_Key : constant Keypress;
- type Mouse_Button is (No_Button, Left_Button, Middle_Button, Right_Button);
+ type Mouse_Button is
+ (No_Button,
+ Left_Button,
+ Middle_Button,
+ Right_Button,
+ Back_Button,
+ Forward_Button,
+ Any_Button);
type Key_Combo is private;
@@ -496,6 +503,14 @@ package FLTK is
+ -- Clipboard Attributes --
+
+ Clipboard_Image : constant String;
+ Clipboard_Plain_Text : constant String;
+
+
+
+
-- Versioning --
type Version_Number is new Natural;
@@ -516,35 +531,10 @@ package FLTK is
- -- Threads --
-
- procedure Awake;
-
- procedure Lock;
-
- procedure Unlock;
-
-
-
-
- -- Drawing --
-
- -- Need to check/revise these damage bits...
- function Is_Damaged
- return Boolean;
-
- procedure Set_Damaged
- (To : in Boolean);
-
- procedure Flush;
-
- procedure Redraw;
-
-
-
-
-- Event Loop --
+ procedure Check;
+
function Check
return Boolean;
@@ -681,34 +671,34 @@ private
function To_C
(Key : in Key_Combo)
- return Interfaces.C.int;
+ return Interfaces.C.unsigned;
function To_Ada
- (Key : in Interfaces.C.int)
+ (Key : in Interfaces.C.unsigned)
return Key_Combo;
function To_C
(Key : in Keypress)
- return Interfaces.C.int;
+ return Interfaces.C.unsigned;
function To_Ada
- (Key : in Interfaces.C.int)
+ (Key : in Interfaces.C.unsigned)
return Keypress;
function To_C
(Modi : in Modifier)
- return Interfaces.C.int;
+ return Interfaces.C.unsigned;
function To_Ada
- (Modi : in Interfaces.C.int)
+ (Modi : in Interfaces.C.unsigned)
return Modifier;
function To_C
(Button : in Mouse_Button)
- return Interfaces.C.int;
+ return Interfaces.C.unsigned;
function To_Ada
- (Button : in Interfaces.C.int)
+ (Button : in Interfaces.C.unsigned)
return Mouse_Button;
-- these values designed to align with FLTK enumeration types
@@ -839,19 +829,20 @@ private
- pragma Import (C, Awake, "fl_awake");
- pragma Import (C, Lock, "fl_lock");
- pragma Import (C, Unlock, "fl_unlock");
+ clip_image_char_ptr : Interfaces.C.Strings.chars_ptr;
+ pragma Import (C, clip_image_char_ptr, "fl_clip_image_char_ptr");
+
+ clip_plain_text_char_ptr : Interfaces.C.Strings.chars_ptr;
+ pragma Import (C, clip_plain_text_char_ptr, "fl_clip_plain_text_char_ptr");
- pragma Import (C, Flush, "fl_flush");
- pragma Import (C, Redraw, "fl_redraw");
+ Clipboard_Image : constant String := Interfaces.C.Strings.Value (clip_image_char_ptr);
+ Clipboard_Plain_Text : constant String := Interfaces.C.Strings.Value (clip_plain_text_char_ptr);
pragma Inline (RGB_Color);
pragma Inline (Color_Cube);
- pragma Inline (Contrast);
pragma Inline (Grey_Ramp);
pragma Inline (Darker);
pragma Inline (Lighter);
@@ -859,20 +850,15 @@ private
pragma Inline (Inactive);
pragma Inline (Color_Average);
+ pragma Inline (Filled);
+ pragma Inline (Frame);
+ pragma Inline (Down);
+
pragma Inline (ABI_Check);
pragma Inline (ABI_Version);
pragma Inline (API_Version);
pragma Inline (Version);
- pragma Inline (Awake);
- pragma Inline (Lock);
- pragma Inline (Unlock);
-
- pragma Inline (Is_Damaged);
- pragma Inline (Set_Damaged);
- pragma Inline (Flush);
- pragma Inline (Redraw);
-
pragma Inline (Check);
pragma Inline (Ready);
pragma Inline (Wait);