summaryrefslogtreecommitdiff
path: root/body/c_fl_widget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'body/c_fl_widget.cpp')
-rw-r--r--body/c_fl_widget.cpp400
1 files changed, 400 insertions, 0 deletions
diff --git a/body/c_fl_widget.cpp b/body/c_fl_widget.cpp
new file mode 100644
index 0000000..6eda9e3
--- /dev/null
+++ b/body/c_fl_widget.cpp
@@ -0,0 +1,400 @@
+
+
+// Programmed by Jedidiah Barber
+// Released into the public domain
+
+
+#include <FL/Fl_Widget.H>
+#include <FL/Fl_Image.H>
+#include "c_fl_widget.h"
+
+
+
+
+// Exports from Ada
+
+extern "C" void widget_draw_hook(void * ud);
+extern "C" int widget_handle_hook(void * ud, int e);
+
+
+
+
+// Non-friend protected access
+
+class Friend_Widget : Fl_Widget {
+public:
+ // probably expand this later when doing a pass for protected methods
+ using Fl_Widget::draw_box;
+};
+
+
+
+
+// Attaching all relevant hooks and friends
+
+class My_Widget : public Fl_Widget {
+public:
+ using Fl_Widget::Fl_Widget;
+ friend WIDGET new_fl_widget(int x, int y, int w, int h, char* label);
+
+ friend void fl_widget_draw(WIDGET w);
+ friend int fl_widget_handle(WIDGET w, int e);
+
+ void draw();
+ int handle(int e);
+};
+
+void My_Widget::draw() {
+ widget_draw_hook(this->user_data());
+}
+
+int My_Widget::handle(int e) {
+ return widget_handle_hook(this->user_data(), e);
+}
+
+
+
+
+// Flattened C API
+
+WIDGET new_fl_widget(int x, int y, int w, int h, char* label) {
+ My_Widget *wd = new My_Widget(x, y, w, h, label);
+ return wd;
+}
+
+void free_fl_widget(WIDGET w) {
+ delete static_cast<My_Widget*>(w);
+}
+
+
+
+
+void * fl_widget_get_user_data(WIDGET w) {
+ return static_cast<Fl_Widget*>(w)->user_data();
+}
+
+void fl_widget_set_user_data(WIDGET w, void * d) {
+ static_cast<Fl_Widget*>(w)->user_data(d);
+}
+
+
+
+
+void fl_widget_activate(WIDGET w) {
+ static_cast<Fl_Widget*>(w)->activate();
+}
+
+void fl_widget_deactivate(WIDGET w) {
+ static_cast<Fl_Widget*>(w)->deactivate();
+}
+
+int fl_widget_active(WIDGET w) {
+ return static_cast<Fl_Widget*>(w)->active();
+}
+
+int fl_widget_active_r(WIDGET w) {
+ return static_cast<Fl_Widget*>(w)->active_r();
+}
+
+void fl_widget_set_active(WIDGET w) {
+ static_cast<Fl_Widget*>(w)->set_active();
+}
+
+void fl_widget_clear_active(WIDGET w) {
+ static_cast<Fl_Widget*>(w)->clear_active();
+}
+
+
+
+
+unsigned int fl_widget_changed(WIDGET w) {
+ return static_cast<Fl_Widget*>(w)->changed();
+}
+
+void fl_widget_set_changed(WIDGET w) {
+ static_cast<Fl_Widget*>(w)->set_changed();
+}
+
+void fl_widget_clear_changed(WIDGET w) {
+ static_cast<Fl_Widget*>(w)->clear_changed();
+}
+
+int fl_widget_output(WIDGET w) {
+ return static_cast<Fl_Widget*>(w)->output();
+}
+
+void fl_widget_set_output(WIDGET w) {
+ static_cast<Fl_Widget*>(w)->set_output();
+}
+
+void fl_widget_clear_output(WIDGET w) {
+ static_cast<Fl_Widget*>(w)->clear_output();
+}
+
+int fl_widget_visible(WIDGET w) {
+ return static_cast<Fl_Widget*>(w)->visible();
+}
+
+int fl_widget_visible_r(WIDGET w) {
+ return static_cast<Fl_Widget*>(w)->visible_r();
+}
+
+void fl_widget_set_visible(WIDGET w) {
+ static_cast<Fl_Widget*>(w)->set_visible();
+}
+
+void fl_widget_clear_visible(WIDGET w) {
+ static_cast<Fl_Widget*>(w)->clear_visible();
+}
+
+
+
+
+int fl_widget_get_visible_focus(WIDGET w) {
+ return static_cast<Fl_Widget*>(w)->visible_focus();
+}
+
+void fl_widget_set_visible_focus(WIDGET w, int f) {
+ static_cast<Fl_Widget*>(w)->visible_focus(f);
+}
+
+int fl_widget_take_focus(WIDGET w) {
+ return static_cast<Fl_Widget*>(w)->take_focus();
+}
+
+int fl_widget_takesevents(WIDGET w) {
+ return static_cast<Fl_Widget*>(w)->takesevents();
+}
+
+
+
+
+unsigned int fl_widget_get_color(WIDGET w) {
+ return static_cast<Fl_Widget*>(w)->color();
+}
+
+void fl_widget_set_color(WIDGET w, unsigned int b) {
+ static_cast<Fl_Widget*>(w)->color(b);
+}
+
+unsigned int fl_widget_get_selection_color(WIDGET w) {
+ return static_cast<Fl_Widget*>(w)->selection_color();
+}
+
+void fl_widget_set_selection_color(WIDGET w, unsigned int c) {
+ static_cast<Fl_Widget*>(w)->selection_color(c);
+}
+
+
+
+
+void * fl_widget_get_parent(WIDGET w) {
+ return static_cast<Fl_Widget*>(w)->parent();
+}
+
+int fl_widget_contains(WIDGET w, WIDGET i) {
+ return static_cast<Fl_Widget*>(w)->contains(static_cast<Fl_Widget*>(i));
+}
+
+int fl_widget_inside(WIDGET w, WIDGET p) {
+ return static_cast<Fl_Widget*>(w)->inside(static_cast<Fl_Widget*>(p));
+}
+
+void * fl_widget_window(WIDGET w) {
+ return static_cast<Fl_Widget*>(w)->window();
+}
+
+void * fl_widget_top_window(WIDGET w) {
+ return static_cast<Fl_Widget*>(w)->top_window();
+}
+
+void * fl_widget_top_window_offset(WIDGET w, int &x, int &y) {
+ return static_cast<Fl_Widget*>(w)->top_window_offset(x,y);
+}
+
+
+
+
+unsigned int fl_widget_get_align(WIDGET w) {
+ return static_cast<Fl_Widget*>(w)->align();
+}
+
+void fl_widget_set_align(WIDGET w, unsigned int a) {
+ static_cast<Fl_Widget*>(w)->align(a);
+}
+
+int fl_widget_get_box(WIDGET w) {
+ return static_cast<Fl_Widget*>(w)->box();
+}
+
+void fl_widget_set_box(WIDGET w, int b) {
+ static_cast<Fl_Widget*>(w)->box(static_cast<Fl_Boxtype>(b));
+}
+
+const char * fl_widget_tooltip(WIDGET w) {
+ return static_cast<Fl_Widget*>(w)->tooltip();
+}
+
+void fl_widget_copy_tooltip(WIDGET w, const char * t) {
+ static_cast<Fl_Widget*>(w)->copy_tooltip(t);
+}
+
+
+
+
+const char* fl_widget_get_label(WIDGET w) {
+ return static_cast<Fl_Widget*>(w)->label();
+}
+
+void fl_widget_set_label(WIDGET w, const char* t) {
+ static_cast<Fl_Widget*>(w)->copy_label(t);
+}
+
+unsigned int fl_widget_get_labelcolor(WIDGET w) {
+ return static_cast<Fl_Widget*>(w)->labelcolor();
+}
+
+void fl_widget_set_labelcolor(WIDGET w, unsigned int v) {
+ static_cast<Fl_Widget*>(w)->labelcolor(v);
+}
+
+int fl_widget_get_labelfont(WIDGET w) {
+ return static_cast<Fl_Widget*>(w)->labelfont();
+}
+
+void fl_widget_set_labelfont(WIDGET w, int f) {
+ static_cast<Fl_Widget*>(w)->labelfont(static_cast<Fl_Font>(f));
+}
+
+int fl_widget_get_labelsize(WIDGET w) {
+ return static_cast<Fl_Widget*>(w)->labelsize();
+}
+
+void fl_widget_set_labelsize(WIDGET w, int s) {
+ static_cast<Fl_Widget*>(w)->labelsize(static_cast<Fl_Fontsize>(s));
+}
+
+int fl_widget_get_labeltype(WIDGET w) {
+ return static_cast<Fl_Widget*>(w)->labeltype();
+}
+
+void fl_widget_set_labeltype(WIDGET w, int l) {
+ static_cast<Fl_Widget*>(w)->labeltype(static_cast<Fl_Labeltype>(l));
+}
+
+void fl_widget_measure_label(WIDGET w, int &d, int &h) {
+ static_cast<Fl_Widget*>(w)->measure_label(d,h);
+}
+
+
+
+
+void fl_widget_set_callback(WIDGET w, void * cb) {
+ static_cast<Fl_Widget*>(w)->callback(reinterpret_cast<Fl_Callback_p>(cb));
+}
+
+unsigned int fl_widget_get_when(WIDGET w) {
+ return static_cast<Fl_Widget*>(w)->when();
+}
+
+void fl_widget_set_when(WIDGET w, unsigned int c) {
+ static_cast<Fl_Widget*>(w)->when(c);
+}
+
+
+
+
+int fl_widget_get_x(WIDGET w) {
+ return static_cast<Fl_Widget*>(w)->x();
+}
+
+int fl_widget_get_y(WIDGET w) {
+ return static_cast<Fl_Widget*>(w)->y();
+}
+
+int fl_widget_get_w(WIDGET w) {
+ return static_cast<Fl_Widget*>(w)->w();
+}
+
+int fl_widget_get_h(WIDGET w) {
+ return static_cast<Fl_Widget*>(w)->h();
+}
+
+void fl_widget_size(WIDGET w, int d, int h) {
+ static_cast<Fl_Widget*>(w)->size(d, h);
+}
+
+void fl_widget_position(WIDGET w, int x, int y) {
+ static_cast<Fl_Widget*>(w)->position(x, y);
+}
+
+
+
+
+void fl_widget_set_image(WIDGET w, void * img) {
+ static_cast<Fl_Widget*>(w)->image(static_cast<Fl_Image*>(img));
+}
+
+void fl_widget_set_deimage(WIDGET w, void * img) {
+ static_cast<Fl_Widget*>(w)->deimage(static_cast<Fl_Image*>(img));
+}
+
+
+
+
+unsigned char fl_widget_get_type(WIDGET w) {
+ return static_cast<Fl_Widget*>(w)->type();
+}
+
+void fl_widget_set_type(WIDGET w, unsigned char t) {
+ static_cast<Fl_Widget*>(w)->type(t);
+}
+
+
+
+
+int fl_widget_damage(WIDGET w) {
+ return static_cast<Fl_Widget*>(w)->damage();
+}
+
+void fl_widget_set_damage(WIDGET w, int t) {
+ if (t != 0) {
+ static_cast<Fl_Widget*>(w)->damage(0xff);
+ } else {
+ static_cast<Fl_Widget*>(w)->damage(0x00);
+ }
+}
+
+void fl_widget_set_damage2(WIDGET w, int t, int x, int y, int d, int h) {
+ if (t != 0) {
+ static_cast<Fl_Widget*>(w)->damage(0xff,x,y,d,h);
+ } else {
+ static_cast<Fl_Widget*>(w)->damage(0x00,x,y,d,h);
+ }
+}
+
+void fl_widget_draw(WIDGET w) {
+ // The Fl_Widget draw method doesn't technically exist, so...
+ (void)(w);
+ // It is more convenient for this function to exist, however,
+ // even though it will likely never be called, because it simplifies
+ // and makes uniform the implementation of the Ada Widget Draw subprogram.
+}
+
+void fl_widget_draw_label(WIDGET w, int x, int y, int d, int h, unsigned int a) {
+ static_cast<Fl_Widget*>(w)->draw_label(x,y,d,h,a);
+}
+
+void fl_widget_redraw(WIDGET w) {
+ static_cast<Fl_Widget*>(w)->redraw();
+}
+
+void fl_widget_redraw_label(WIDGET w) {
+ static_cast<Fl_Widget*>(w)->redraw_label();
+}
+
+int fl_widget_handle(WIDGET w, int e) {
+ return static_cast<My_Widget*>(w)->Fl_Widget::handle(e);
+}
+
+