From b925581e37b2ac2ffdb97469fbfb284aac93feab Mon Sep 17 00:00:00 2001 From: Victor Kareh Date: Wed, 22 May 2019 11:12:24 -0400 Subject: frame: Add "get_corner_radiuses" chain https://bugzilla.gnome.org/show_bug.cgi?id=628195 upstream commit: https://gitlab.gnome.org/GNOME/metacity/commit/3994d7a0 --- src/ui/frames.c | 34 ++++++++++++++++++++++++++++++++++ src/ui/frames.h | 8 ++++++++ src/ui/ui.c | 13 +++++++++++++ 3 files changed, 55 insertions(+) (limited to 'src/ui') diff --git a/src/ui/frames.c b/src/ui/frames.c index 9c3f3296..1af79765 100644 --- a/src/ui/frames.c +++ b/src/ui/frames.c @@ -806,6 +806,40 @@ meta_frames_get_borders (MetaFrames *frames, borders->visible.right *= scale; } +void +meta_frames_get_corner_radiuses (MetaFrames *frames, + Window xwindow, + float *top_left, + float *top_right, + float *bottom_left, + float *bottom_right) +{ + MetaUIFrame *frame; + MetaFrameGeometry fgeom; + + frame = meta_frames_lookup_window (frames, xwindow); + + meta_frames_calc_geometry (frames, frame, &fgeom); + + /* For compatibility with the code in get_visible_rect(), there's + * a mysterious sqrt() added to the corner radiuses: + * + * const float radius = sqrt(corner) + corner; + * + * It's unclear why the radius is calculated like this, but we + * need to be consistent with it. + */ + + if (top_left) + *top_left = fgeom.top_left_corner_rounded_radius + sqrt(fgeom.top_left_corner_rounded_radius); + if (top_right) + *top_right = fgeom.top_right_corner_rounded_radius + sqrt(fgeom.top_right_corner_rounded_radius); + if (bottom_left) + *bottom_left = fgeom.bottom_left_corner_rounded_radius + sqrt(fgeom.bottom_left_corner_rounded_radius); + if (bottom_right) + *bottom_right = fgeom.bottom_right_corner_rounded_radius + sqrt(fgeom.bottom_right_corner_rounded_radius); +} + #ifdef HAVE_SHAPE static void apply_cairo_region_to_window (Display *display, diff --git a/src/ui/frames.h b/src/ui/frames.h index 0af5ed89..cde51e60 100644 --- a/src/ui/frames.h +++ b/src/ui/frames.h @@ -144,6 +144,14 @@ cairo_region_t *meta_frames_get_frame_bounds (MetaFrames *frames, Window xwindow, int window_width, int window_height); + +void meta_frames_get_corner_radiuses (MetaFrames *frames, + Window xwindow, + float *top_left, + float *top_right, + float *bottom_left, + float *bottom_right); + void meta_frames_move_resize_frame (MetaFrames *frames, Window xwindow, int x, diff --git a/src/ui/ui.c b/src/ui/ui.c index a7058066..c805869f 100644 --- a/src/ui/ui.c +++ b/src/ui/ui.c @@ -302,6 +302,19 @@ meta_ui_get_frame_borders (MetaUI *ui, meta_frames_get_borders (ui->frames, frame_xwindow, borders); } +void +meta_ui_get_corner_radiuses (MetaUI *ui, + Window xwindow, + float *top_left, + float *top_right, + float *bottom_left, + float *bottom_right) +{ + meta_frames_get_corner_radiuses (ui->frames, xwindow, + top_left, top_right, + bottom_left, bottom_right); +} + static void set_background_none (Display *xdisplay, Window xwindow) -- cgit v1.2.1