diff options
-rw-r--r-- | src/core/frame-private.h | 6 | ||||
-rw-r--r-- | src/core/frame.c | 13 | ||||
-rw-r--r-- | src/include/ui.h | 7 | ||||
-rw-r--r-- | src/ui/frames.c | 34 | ||||
-rw-r--r-- | src/ui/frames.h | 8 | ||||
-rw-r--r-- | src/ui/ui.c | 13 |
6 files changed, 81 insertions, 0 deletions
diff --git a/src/core/frame-private.h b/src/core/frame-private.h index 7908d24e..d0a2176f 100644 --- a/src/core/frame-private.h +++ b/src/core/frame-private.h @@ -57,6 +57,12 @@ void meta_frame_queue_draw (MetaFrame *frame); MetaFrameFlags meta_frame_get_flags (MetaFrame *frame); +void meta_frame_get_corner_radiuses (MetaFrame *frame, + float *top_left, + float *top_right, + float *bottom_left, + float *bottom_right); + gboolean meta_frame_sync_to_window (MetaFrame *frame, int gravity, gboolean need_move, diff --git a/src/core/frame.c b/src/core/frame.c index 65d55a67..99a43b95 100644 --- a/src/core/frame.c +++ b/src/core/frame.c @@ -340,6 +340,19 @@ update_shape (MetaFrame *frame) return FALSE; } +void +meta_frame_get_corner_radiuses (MetaFrame *frame, + float *top_left, + float *top_right, + float *bottom_left, + float *bottom_right) +{ + meta_ui_get_corner_radiuses (frame->window->screen->ui, + frame->xwindow, + top_left, top_right, + bottom_left, bottom_right); +} + gboolean meta_frame_sync_to_window (MetaFrame *frame, int resize_gravity, diff --git a/src/include/ui.h b/src/include/ui.h index d2dd07c0..fb8db68b 100644 --- a/src/include/ui.h +++ b/src/include/ui.h @@ -106,6 +106,13 @@ cairo_region_t *meta_ui_get_frame_bounds (MetaUI *ui, int window_width, int window_height); +void meta_ui_get_corner_radiuses (MetaUI *ui, + Window xwindow, + float *top_left, + float *top_right, + float *bottom_left, + float *bottom_right); + void meta_ui_queue_frame_draw (MetaUI *ui, Window xwindow); diff --git a/src/ui/frames.c b/src/ui/frames.c index 63046b2e..3e495221 100644 --- a/src/ui/frames.c +++ b/src/ui/frames.c @@ -791,6 +791,40 @@ meta_frames_get_borders (MetaFrames *frames, } 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); +} + +void meta_frames_reset_bg (MetaFrames *frames, Window xwindow) { diff --git a/src/ui/frames.h b/src/ui/frames.h index 7f2d69f7..ad6945a9 100644 --- a/src/ui/frames.h +++ b/src/ui/frames.h @@ -152,6 +152,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 a0a8ff5d..e4a54f82 100644 --- a/src/ui/ui.c +++ b/src/ui/ui.c @@ -308,6 +308,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); +} + Window meta_ui_create_frame_window (MetaUI *ui, Display *xdisplay, |