From a118732f7c10da03196ebd9207007686163114f4 Mon Sep 17 00:00:00 2001 From: ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> Date: Wed, 25 May 2022 16:05:36 +0200 Subject: Improve rectf() and push_clip() under cairo and GUI scaling. --- src/drivers/Cairo/Fl_Cairo_Graphics_Driver.cxx | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/drivers/Cairo/Fl_Cairo_Graphics_Driver.cxx b/src/drivers/Cairo/Fl_Cairo_Graphics_Driver.cxx index 9c5d8292c..5a099024d 100644 --- a/src/drivers/Cairo/Fl_Cairo_Graphics_Driver.cxx +++ b/src/drivers/Cairo/Fl_Cairo_Graphics_Driver.cxx @@ -104,7 +104,10 @@ void Fl_Cairo_Graphics_Driver::set_cairo(cairo_t *cr, float s) { void Fl_Cairo_Graphics_Driver::rectf(int x, int y, int w, int h) { - cairo_rectangle(cairo_, x-0.5, y-0.5, w, h); + cairo_matrix_t mat; + cairo_get_matrix(cairo_, &mat); + double s = 1 / mat.xx; + cairo_rectangle(cairo_, x - 0.5, y - 0.5, w + s, h + s); cairo_fill(cairo_); check_status(); surface_needs_commit(); @@ -499,7 +502,12 @@ void Fl_Cairo_Graphics_Driver::push_clip(int x, int y, int w, int h) { c->prev = clip_; clip_ = c; cairo_save(cairo_); - cairo_rectangle(cairo_, clip_->x-0.5 , clip_->y-0.5 , clip_->w , clip_->h); + cairo_matrix_t mat; + cairo_get_matrix(cairo_, &mat); + double s = 1 / mat.xx; + double ss = (2 * s < 1 ? s : 1/2.); + cairo_rectangle(cairo_, clip_->x - 0.5 - ss, clip_->y - 0.5 - ss , + clip_->w + s + 2 * ss, clip_->h + s + 2 * ss); cairo_clip(cairo_); check_status(); } -- cgit v1.2.3