From 5bd467fa17be55397f433dddc065b57cbb7a0615 Mon Sep 17 00:00:00 2001 From: ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> Date: Thu, 25 Feb 2021 11:06:54 +0100 Subject: Add fl_remove_scale()/fl_restore_scale() to transiently draw without scaling factor. This new API is a response to this message in fltk.general : Can custom box type functions handle their own high-DPI screen scaling? --- src/Fl_Graphics_Driver.cxx | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'src/Fl_Graphics_Driver.cxx') diff --git a/src/Fl_Graphics_Driver.cxx b/src/Fl_Graphics_Driver.cxx index 2f687e151..00eaf5a15 100644 --- a/src/Fl_Graphics_Driver.cxx +++ b/src/Fl_Graphics_Driver.cxx @@ -626,6 +626,9 @@ void Fl_Graphics_Driver::overlay_rect(int x, int y, int w , int h) { loop(x, y, x+w-1, y, x+w-1, y+h-1, x, y+h-1); } +float Fl_Graphics_Driver::remove_scale() { return 1.f;} + +void Fl_Graphics_Driver::restore_scale(float) { } /** \} @@ -976,4 +979,20 @@ void Fl_Scalable_Graphics_Driver::draw_image_mono_unscaled(Fl_Draw_Image_Cb cb, void Fl_Scalable_Graphics_Driver::transformed_vertex0(float x, float y) {} +float Fl_Scalable_Graphics_Driver::remove_scale() { + float s = scale(); + if (s != 1.f) { + push_no_clip(); + scale(1.f); + } + return s; +} + +void Fl_Scalable_Graphics_Driver::restore_scale(float s) { + if (s != 1.f) { + scale(s); + pop_clip(); + } +} + #endif -- cgit v1.2.3