From 6f1e7c19776d10878db0eb674339cf656972811f Mon Sep 17 00:00:00 2001 From: Jedidiah Barber Date: Wed, 27 Nov 2024 12:32:46 +1300 Subject: Fl_Cairo_Window binding added --- src/c_fl_cairo_window.cpp | 110 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 src/c_fl_cairo_window.cpp (limited to 'src/c_fl_cairo_window.cpp') diff --git a/src/c_fl_cairo_window.cpp b/src/c_fl_cairo_window.cpp new file mode 100644 index 0000000..59b03ed --- /dev/null +++ b/src/c_fl_cairo_window.cpp @@ -0,0 +1,110 @@ + + +// Programmed by Jedidiah Barber +// Released into the public domain + + +#include +#include +#include "c_fl_cairo_window.h" + + + + +// Exports from Ada + +extern "C" void widget_draw_hook(void * ud); +extern "C" int widget_handle_hook(void * ud, int e); + + + + +// Attaching all relevant hooks and friends + +class My_Cairo_Window : +#ifdef FLTK_HAVE_CAIRO +public Fl_Cairo_Window +#else +public Fl_Double_Window +#endif +{ +public: +#ifdef FLTK_HAVE_CAIRO + using Fl_Cairo_Window::Fl_Cairo_Window; +#else + using Fl_Double_Window::Fl_Double_Window; +#endif + + friend void fl_cairo_window_draw(CAIROWINDOW w); + + int handle(int e); + +protected: + void draw(); +}; + + +void My_Cairo_Window::draw() { + widget_draw_hook(this->user_data()); +} + +int My_Cairo_Window::handle(int e) { + return widget_handle_hook(this->user_data(), e); +} + + + + +// Flattened C API begins here + +CAIROWINDOW new_fl_cairo_window(int x, int y, int w, int h, char * label) { + My_Cairo_Window *c = new My_Cairo_Window(x, y, w, h, label); + return c; +} + +CAIROWINDOW new_fl_cairo_window2(int w, int h, char * label) { + My_Cairo_Window *c = new My_Cairo_Window(w, h, label); + return c; +} + +CAIROWINDOW new_fl_cairo_window3(int w, int h) { + My_Cairo_Window *c = new My_Cairo_Window(w, h); + return c; +} + +void free_fl_cairo_window(CAIROWINDOW w) { + delete reinterpret_cast(w); +} + + + + +void fl_cairo_window_set_draw_cb(CAIROWINDOW w, void * cb) { + #ifdef FLTK_HAVE_CAIRO + reinterpret_cast(w)->set_draw_cb(reinterpret_cast(cb)); + #else + (void)(w); + (void)(cb); + #endif +} + + + + +void fl_cairo_window_draw(CAIROWINDOW w) { + #ifdef FLTK_HAVE_CAIRO + reinterpret_cast(w)->Fl_Cairo_Window::draw(); + #else + reinterpret_cast(w)->Fl_Double_Window::draw(); + #endif +} + +int fl_cairo_window_handle(CAIROWINDOW w, int e) { + #ifdef FLTK_HAVE_CAIRO + return reinterpret_cast(w)->Fl_Cairo_Window::handle(e); + #else + return reinterpret_cast(w)->Fl_Double_Window::handle(e); + #endif +} + + -- cgit