diff options
| author | ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> | 2024-03-20 15:20:31 +0100 |
|---|---|---|
| committer | ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> | 2024-03-20 15:20:31 +0100 |
| commit | 0fa49f0ab4136262dc16c1b30bf07e3fcef36be5 (patch) | |
| tree | d5ab5146b28aee9facb6544901229802024dd031 /src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx | |
| parent | af90841fbc0a7090d7f3979c4d71aeeec1fbcb4b (diff) | |
Use type cairo_region_t* for Fl_Region under Wayland platform
Diffstat (limited to 'src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx')
| -rw-r--r-- | src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx b/src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx index ce9dcaf4e..1855bc20f 100644 --- a/src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx +++ b/src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx @@ -22,7 +22,7 @@ #include <unistd.h> // for close() #include <errno.h> #include <string.h> // for strerror() - +#include <cairo/cairo.h> extern "C" { # include "../../../libdecor/src/os-compatibility.h" // for libdecor_os_create_anonymous_file() @@ -139,15 +139,18 @@ const struct wl_callback_listener *Fl_Wayland_Graphics_Driver::p_surface_frame_l // copy pixels in region r from the Cairo surface to the Wayland buffer -static void copy_region(struct wld_window *window, struct flCairoRegion *r) { +static void copy_region(struct wld_window *window, cairo_region_t *r) { struct Fl_Wayland_Graphics_Driver::wld_buffer *buffer = window->buffer; float f = Fl::screen_scale(window->fl_win->screen_num()) * Fl_Wayland_Window_Driver::driver(window->fl_win)->wld_scale(); - for (int i = 0; i < r->count; i++) { - int left = r->rects[i].x * f; - int top = r->rects[i].y * f; - int width = r->rects[i].width * f; - int height = r->rects[i].height * f; + int count = cairo_region_num_rectangles(r); + cairo_rectangle_int_t rect; + for (int i = 0; i < count; i++) { + cairo_region_get_rectangle(r, i, &rect); + int left = rect.x * f; + int top = rect.y * f; + int width = rect.width * f; + int height = rect.height * f; int offset = top * buffer->draw_buffer.stride + 4 * left; int W4 = 4 * width; for (int l = 0; l < height; l++) { @@ -163,7 +166,7 @@ static void copy_region(struct wld_window *window, struct flCairoRegion *r) { } -void Fl_Wayland_Graphics_Driver::buffer_commit(struct wld_window *window, struct flCairoRegion *r) +void Fl_Wayland_Graphics_Driver::buffer_commit(struct wld_window *window, cairo_region_t *r) { if (!window->buffer->wl_buffer) create_shm_buffer(window->buffer); cairo_surface_t *surf = cairo_get_target(window->buffer->draw_buffer.cairo_); |
