FLTK logo

[master] 98cf7b2 - Wayland platform: remove unessential cairo_surface_t member variables

FLTK matrix user chat room
(using Element browser app)   FLTK gitter user chat room   GitHub FLTK Project   FLTK News RSS Feed  
  FLTK Apps      FLTK Library      Forums      Links     Login 
 All Forums  |  Back to fltk.commit  ]
 
Previous Message ]Next Message ]

[master] 98cf7b2 - Wayland platform: remove unessential cairo_surface_t member variables "ManoloFLTK" Dec 02, 2021  
 
commit 98cf7b2adb198df69aec698599f0d07cbaf0a3a4
Author:     ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>
AuthorDate: Thu Jun 3 08:43:40 2021 +0200
Commit:     ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>
CommitDate: Wed Sep 29 12:14:55 2021 +0200

    Wayland platform: remove unessential cairo_surface_t member variables

 src/drivers/Wayland/Fl_Wayland_Graphics_Driver.H   |  2 --
 src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx | 22 +++++++++++++---------
 2 files changed, 13 insertions(+), 11 deletions(-)

diff --git src/drivers/Wayland/Fl_Wayland_Graphics_Driver.H src/drivers/Wayland/Fl_Wayland_Graphics_Driver.H
index ac079fb..a983e34 100644
--- src/drivers/Wayland/Fl_Wayland_Graphics_Driver.H
+++ src/drivers/Wayland/Fl_Wayland_Graphics_Driver.H
@@ -36,7 +36,6 @@ struct buffer {
   unsigned char *draw_buffer;
   bool wl_buffer_ready;
   bool draw_buffer_needs_commit;
-  cairo_surface_t *cairo_surface_;
   cairo_t *cairo_;
   PangoLayout *pango_layout_;
 };
@@ -44,7 +43,6 @@ struct wld_window;
 
 class Fl_Wayland_Graphics_Driver : public Fl_Cairo_Graphics_Driver {
 private:
-  cairo_surface_t *cairo_surface_;
   PangoLayout *dummy_pango_layout_; // used to measure text width before showing a window
   void draw_cached_pattern_(Fl_Image *img, cairo_pattern_t *pat, int X, int Y, int W, int H, int cx, int cy);
 public:
diff --git src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx
index 60d80e6..688a2fe 100644
--- src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx
+++ src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx
@@ -105,7 +105,8 @@ struct buffer *Fl_Wayland_Graphics_Driver::create_shm_buffer(int width, int heig
 
 
 void Fl_Wayland_Graphics_Driver::buffer_commit(struct wld_window *window) {
-  cairo_surface_flush(window->buffer->cairo_surface_);
+  cairo_surface_t *surf = cairo_get_target(window->buffer->cairo_);
+  cairo_surface_flush(surf);
   memcpy(window->buffer->data, window->buffer->draw_buffer, window->buffer->data_size);
   wl_surface_attach(window->wl_surface, window->buffer->wl_buffer, 0, 0);
   wl_surface_set_buffer_scale(window->wl_surface, window->scale);
@@ -116,15 +117,17 @@ void Fl_Wayland_Graphics_Driver::buffer_commit(struct wld_window *window) {
 
 
 void Fl_Wayland_Graphics_Driver::cairo_init(struct buffer *buffer, int width, int height, int stride) {
-  buffer->cairo_surface_ = cairo_image_surface_create_for_data (buffer->draw_buffer, CAIRO_FORMAT_ARGB32,
+  cairo_surface_t *surf = cairo_image_surface_create_for_data (buffer->draw_buffer, CAIRO_FORMAT_ARGB32,
                                                         width, height, stride);
-  if (cairo_surface_status(buffer->cairo_surface_) != CAIRO_STATUS_SUCCESS) {
+  if (cairo_surface_status(surf) != CAIRO_STATUS_SUCCESS) {
     fprintf(stderr, "Can't create Cairo surface\n");
+    return;
   }
-  buffer->cairo_ = cairo_create(buffer->cairo_surface_);
+  buffer->cairo_ = cairo_create(surf);
   cairo_status_t err;
   if ((err = cairo_status(buffer->cairo_)) != CAIRO_STATUS_SUCCESS) {
     fprintf(stderr, "Cairo error on create %s\n", cairo_status_to_string(err));
+    return;
   }
   cairo_set_source_rgba(buffer->cairo_, 1.0, 1.0, 1.0, 0.);
   cairo_paint(buffer->cairo_);
@@ -141,8 +144,9 @@ void Fl_Wayland_Graphics_Driver::buffer_release(struct wld_window *window)
     munmap(window->buffer->data, window->buffer->data_size);
     delete[] window->buffer->draw_buffer;
     window->buffer->draw_buffer = NULL;
+    cairo_surface_t *surf = cairo_get_target(window->buffer->cairo_);
     cairo_destroy(window->buffer->cairo_);
-    cairo_surface_destroy(window->buffer->cairo_surface_);
+    cairo_surface_destroy(surf);
     g_object_unref(window->buffer->pango_layout_);
     free(window->buffer);
     window->buffer = NULL;
@@ -171,13 +175,13 @@ Fl_Wayland_Graphics_Driver::~Fl_Wayland_Graphics_Driver() {
 
 void Fl_Wayland_Graphics_Driver::activate(struct buffer *buffer, int scale) {
   if (dummy_pango_layout_) {
+    cairo_surface_t *surf = cairo_get_target(cairo_);
     cairo_destroy(cairo_);
-    cairo_surface_destroy(cairo_surface_);
+    cairo_surface_destroy(surf);
     g_object_unref(dummy_pango_layout_);
     dummy_pango_layout_ = NULL;
     pango_layout_ = NULL;
   }
-  cairo_surface_ = buffer->cairo_surface_;
   cairo_ = buffer->cairo_;
   if (pango_layout_ != buffer->pango_layout_) {
     if (pango_layout_) g_object_unref(pango_layout_);
@@ -271,8 +275,8 @@ void Fl_Wayland_Graphics_Driver::font(Fl_Font fnum, Fl_Fontsize s) {
   if (font() == fnum && size() == s) return;
   if (!font_descriptor()) fl_open_display();
   if (!pango_layout_) {
-    cairo_surface_ = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 100, 100);
-    cairo_ = cairo_create(cairo_surface_);
+    cairo_surface_t *surf = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 100, 100);
+    cairo_ = cairo_create(surf);
     dummy_pango_layout_ = pango_cairo_create_layout(cairo_);
     pango_layout_ = dummy_pango_layout_;
   }
Direct Link to Message ]
 
     
Previous Message ]Next Message ]
 
 

Comments are owned by the poster. All other content is copyright 1998-2024 by Bill Spitzak and others. This project is hosted by The FLTK Team. Please report site problems to 'erco@seriss.com'.