My understanding is the default coordinate space of cairo is:
(0.0, 0.0) = top/left
(1.0, 1.0) = bottom/right
..and to use FLTK's coordinate space, you'd use cairo_scale(cr,
w(), h())
to convert to the window's integer coordinate space.
Here's what I have (it doesn't work - weird behavior).
Am I missing something?
#include <FL/Fl.H> #include <FL/Fl_Cairo_Window.H> static void my_cairo_draw_cb(Fl_Cairo_Window *window, cairo_t *cr) { const double xmax = (window->w() - 1); const double ymax = (window->h() - 1); // Draw green "X" // Draw an X to four corners of resizable window. // cairo_scale(cr, window->w(), window->h()); // use FLTK's coordinate space 0,0,w(),h() cairo_set_line_width(cr, 0.01); // line width for drawing cairo_set_source_rgb(cr, 0.0, 1.0, 0.0); // green cairo_move_to(cr, 0.0, 0.0); cairo_line_to(cr, xmax, ymax); // draw diagonal "\" in fltk coord space cairo_move_to(cr, 0.0, ymax); cairo_line_to(cr, xmax, 0.0); // draw diagonal "/" in fltk coord space cairo_stroke(cr); // stroke the lines } int main(int argc, char **argv) { Fl_Cairo_Window window(300, 300, "Cairo Draw 'X'"); window.color(FL_BLACK); window.resizable(&window); window.set_draw_cb(my_cairo_draw_cb); window.show(argc, argv); return Fl::run(); }
Trying to just draw a simple "X" to all four corners of the Fl_Cairo_Window.
Having trouble getting this working.
My understanding is the default coordinate space of cairo is:
(0.0, 0.0) = top/left
(1.0, 1.0) = bottom/right
..and to use FLTK's coordinate space, you'd use cairo_scale(cr, w(), h())
to convert to the window's integer coordinate space.
Here's what I have (it doesn't work - weird behavior).
Am I missing something?
On 12/31/21 2:21 PM, Albrecht Schlosser wrote:
I don't know how the coordinate systems are (or should be) translated, but if I change only your two drawing code lines to
cairo_move_to(cr, 0.0, 0.0); cairo_line_to(cr, 1.0, 1.0); // draw diagonal "\"cairo_move_to(cr, 0.0, 1.0); cairo_line_to(cr, 1.0, 0.0); // draw diagonal "/"
the "green X" works for me.
Thanks, I get that too.
Though still not sure how to achieve FLTK drawing coordinates.
// Cairo rendering cb called during Fl_Cairo_Window::draw() static void my_cairo_draw_cb(Fl_Cairo_Window *window, cairo_t *cr) { const double xmax = (window->w() - 1); const double ymax = (window->h() - 1); // Draw green "X" // Draws an X to four corners of resizable window. // cairo_set_antialias(cr, CAIRO_ANTIALIAS_BEST); cairo_set_line_width(cr, 1.00); // line width for drawing XXX what coord space is this?! cairo_set_source_rgb(cr, 0.0, 1.0, 0.0); // green cairo_move_to(cr, 0.0, 0.0); cairo_line_to(cr, xmax, ymax); // draw diagonal "\" cairo_move_to(cr, 0.0, ymax); cairo_line_to(cr, xmax, 0.0); // draw diagonal "/" cairo_stroke(cr); // stroke the lines } int main(int argc, char **argv) { Fl_Cairo_Window window(300, 300, "Cairo Draw 'X'"); window.color(FL_BLACK); window.resizable(&window); window.set_draw_cb(my_cairo_draw_cb); window.show(argc, argv); return Fl::run(); }
On 12/31/21 2:59 PM, Greg Ercolano wrote:
On 12/31/21 2:21 PM, Albrecht Schlosser wrote:
Thanks, I get that too.
I don't know how the coordinate systems are (or should be) translated, but if I change only your two drawing code lines to
cairo_move_to(cr, 0.0, 0.0); cairo_line_to(cr, 1.0, 1.0); // draw diagonal "\"cairo_move_to(cr, 0.0, 1.0); cairo_line_to(cr, 1.0, 0.0); // draw diagonal "/"
the "green X" works for me.
Though still not sure how to achieve FLTK drawing coordinates.
So the solution is just leave the scale alone and use 1.0 for line width.
The default *is* FLTK space, not normalized cairo space, lol.
On 12/31/21 3:26 PM, Albrecht Schlosser wrote:
Yep, found that too.
Greetings from 2022 (Jan 1, 0:25 am) back to 2021 ;-)
Happy new year to all !
To do so would mean some kind of conditional in the examples/Makefile* and examples/CMakeLists.txt
to only build the example if cairo is enabled.
In the latest 1.4 commits we have <FL/fl_config.h> which is automatically included and defines FLTK_HAVE_CAIRO [..]
Oh wow, so is 2022 is any better, or should I stick with 2021 and hold off on "upgrading"? :DI hope it'll be better (less COVID issues, hopefully), but I can't downgrade anyway. Looking forward to its new features...