FLTK logo

[master] f77affe - Wayland platform: set draw_buffer_needs_commit to true only once graphics have been performed

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] f77affe - Wayland platform: set draw_buffer_needs_commit to true only once graphics have been performed "ManoloFLTK" Dec 02, 2021  
 
commit f77affe08f85fdecd7429ee1dd2e6be7fe19a02f
Author:     ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>
AuthorDate: Tue Jun 1 16:32:05 2021 +0200
Commit:     ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>
CommitDate: Wed Sep 29 12:14:55 2021 +0200

    Wayland platform: set draw_buffer_needs_commit to true only once graphics have been performed

 src/drivers/Wayland/Fl_Wayland_Graphics_Driver.H   | 18 +++++
 src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx | 94 ++++++++++++++++++++++
 src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx   |  1 -
 3 files changed, 112 insertions(+), 1 deletion(-)

diff --git src/drivers/Wayland/Fl_Wayland_Graphics_Driver.H src/drivers/Wayland/Fl_Wayland_Graphics_Driver.H
index 2bf11f8..ac079fb 100644
--- src/drivers/Wayland/Fl_Wayland_Graphics_Driver.H
+++ src/drivers/Wayland/Fl_Wayland_Graphics_Driver.H
@@ -56,6 +56,7 @@ public:
   void draw(const char* s, int nBytes, int x, int y) { draw(s, nBytes, float(x), float(y)); }
   void draw(const char* s, int nBytes, float x, float y);
   void draw(int angle, const char *str, int n, int x, int y);
+  void rtl_draw(const char* str, int n, int x, int y);
   int height();
   int descent();
   double width(const char *str, int n);
@@ -94,6 +95,23 @@ public:
   static void buffer_release(struct wld_window *window);
   static void buffer_commit(struct wld_window *window);
   static void cairo_init(struct buffer *buffer, int width, int height, int stride);
+void line(int x1, int y1, int x2, int y2);
+void line(int x1, int y1, int x2, int y2, int x3, int y3);
+void xyline(int x, int y, int x1);
+void xyline(int x, int y, int x1, int y2);
+void xyline(int x, int y, int x1, int y2, int x3);
+void yxline(int x, int y, int y1);
+void yxline(int x, int y, int y1, int x2);
+void yxline(int x, int y, int y1, int x2, int y3);
+void loop(int x0, int y0, int x1, int y1, int x2, int y2);
+void loop(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
+void rect(int x, int y, int w, int h);
+void rectf(int x, int y, int w, int h);
+void polygon(int x0, int y0, int x1, int y1, int x2, int y2);
+void polygon(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3);
+void end_loop();
+void end_line();
+void end_polygon();
 };
 
 #endif // FL_WAYLAND_GRAPHICS_DRIVER_H
diff --git src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx
index 60fb0f4..d4070aa 100644
--- src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx
+++ src/drivers/Wayland/Fl_Wayland_Graphics_Driver.cxx
@@ -410,6 +410,7 @@ void Fl_Wayland_Graphics_Driver::draw(const char* str, int n, float x, float y)
   pango_layout_set_text(pango_layout_, str, n);
   pango_cairo_show_layout(cairo_, pango_layout_);
   cairo_restore(cairo_);
+  if (fl_window) fl_window->buffer->draw_buffer_needs_commit = true;
 }
 
 
@@ -423,6 +424,12 @@ void Fl_Wayland_Graphics_Driver::draw(int rotation, const char *str, int n, int
 }
 
 
+void Fl_Wayland_Graphics_Driver::rtl_draw(const char* str, int n, int x, int y) {
+  int w = (int)width(str, n);
+  draw(str, n, x - w, y);
+}
+
+
 double Fl_Wayland_Graphics_Driver::width(const char* c, int n) {
   if (!font_descriptor()) return -1.0;
   int i = 0, w = 0, l;
@@ -675,6 +682,7 @@ void Fl_Wayland_Graphics_Driver::draw_cached_pattern_(Fl_Image *img, cairo_patte
   cairo_pattern_set_matrix(pat, &matrix);
   cairo_mask(cairo_, pat);
   cairo_restore(cairo_);
+  if (fl_window) fl_window->buffer->draw_buffer_needs_commit = true;
 }
 
 
@@ -862,3 +870,89 @@ void Fl_Wayland_Graphics_Driver::uncache_pixmap(fl_uintptr_t p) {
     cairo_surface_destroy(surf);
   }
 }
+
+
+void Fl_Wayland_Graphics_Driver::line(int x1, int y1, int x2, int y2) {
+  Fl_Cairo_Graphics_Driver::line(x1, y1, x2, y2);
+  if (fl_window) fl_window->buffer->draw_buffer_needs_commit = true;
+}
+
+void Fl_Wayland_Graphics_Driver::line(int x1, int y1, int x2, int y2, int x3, int y3) {
+  Fl_Cairo_Graphics_Driver::line(x1, y1, x2, y2, x3, y3);
+  if (fl_window) fl_window->buffer->draw_buffer_needs_commit = true;
+}
+
+void Fl_Wayland_Graphics_Driver::xyline(int x, int y, int x1) {
+  Fl_Cairo_Graphics_Driver::xyline(x, y, x1);
+  if (fl_window) fl_window->buffer->draw_buffer_needs_commit = true;
+}
+
+void Fl_Wayland_Graphics_Driver::xyline(int x, int y, int x1, int y2) {
+  Fl_Cairo_Graphics_Driver::xyline(x, y, x1, y2);
+  if (fl_window) fl_window->buffer->draw_buffer_needs_commit = true;
+}
+
+void Fl_Wayland_Graphics_Driver::xyline(int x, int y, int x1, int y2, int x3) {
+  Fl_Cairo_Graphics_Driver::xyline(x, y, x1, y2, x3);
+  if (fl_window) fl_window->buffer->draw_buffer_needs_commit = true;
+}
+
+void Fl_Wayland_Graphics_Driver::yxline(int x, int y, int y1) {
+  Fl_Cairo_Graphics_Driver::yxline(x, y, y1);
+  if (fl_window) fl_window->buffer->draw_buffer_needs_commit = true;
+}
+
+void Fl_Wayland_Graphics_Driver::yxline(int x, int y, int y1, int x2) {
+  Fl_Cairo_Graphics_Driver::yxline(x, y, y1, x2);
+  if (fl_window) fl_window->buffer->draw_buffer_needs_commit = true;
+}
+
+void Fl_Wayland_Graphics_Driver::yxline(int x, int y, int y1, int x2, int y3) {
+  Fl_Cairo_Graphics_Driver::yxline(x, y, y1, x2, y3);
+  if (fl_window) fl_window->buffer->draw_buffer_needs_commit = true;
+}
+
+void Fl_Wayland_Graphics_Driver::loop(int x0, int y0, int x1, int y1, int x2, int y2) {
+  Fl_Cairo_Graphics_Driver::loop(x0, y0, x1, y1, x2, y2);
+  if (fl_window) fl_window->buffer->draw_buffer_needs_commit = true;
+}
+
+void Fl_Wayland_Graphics_Driver::loop(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3) {
+  Fl_Cairo_Graphics_Driver::loop(x0, y0, x1, y1, x2, y2, x3, y3);
+  if (fl_window) fl_window->buffer->draw_buffer_needs_commit = true;
+}
+
+void Fl_Wayland_Graphics_Driver::rectf(int x, int y, int w, int h) {
+  Fl_Cairo_Graphics_Driver::rectf(x, y, w, h);
+  if (fl_window) fl_window->buffer->draw_buffer_needs_commit = true;
+}
+
+void Fl_Wayland_Graphics_Driver::rect(int x, int y, int w, int h) {
+  Fl_Cairo_Graphics_Driver::rect(x, y, w, h);
+  if (fl_window) fl_window->buffer->draw_buffer_needs_commit = true;
+}
+
+void Fl_Wayland_Graphics_Driver::polygon(int x0, int y0, int x1, int y1, int x2, int y2) {
+  Fl_Cairo_Graphics_Driver::polygon(x0, y0, x1, y1, x2, y2);
+  if (fl_window) fl_window->buffer->draw_buffer_needs_commit = true;
+}
+
+void Fl_Wayland_Graphics_Driver::polygon(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3) {
+  Fl_Cairo_Graphics_Driver::polygon(x0, y0, x1, y1, x2, y2, x3, y3);
+  if (fl_window) fl_window->buffer->draw_buffer_needs_commit = true;
+}
+
+void Fl_Wayland_Graphics_Driver::end_line() {
+  Fl_Cairo_Graphics_Driver::end_line();
+  if (fl_window) fl_window->buffer->draw_buffer_needs_commit = true;
+}
+
+void Fl_Wayland_Graphics_Driver::end_loop(){
+  Fl_Cairo_Graphics_Driver::end_loop();
+  if (fl_window) fl_window->buffer->draw_buffer_needs_commit = true;
+}
+
+void Fl_Wayland_Graphics_Driver::end_polygon() {
+  Fl_Cairo_Graphics_Driver::end_polygon();
+  if (fl_window) fl_window->buffer->draw_buffer_needs_commit = true;
+}
diff --git src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx
index 8b8313f..6380897 100644
--- src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx
+++ src/drivers/Wayland/Fl_Wayland_Window_Driver.cxx
@@ -355,7 +355,6 @@ void Fl_Wayland_Window_Driver::make_current() {
   if (!window->buffer) window->buffer = Fl_Wayland_Graphics_Driver::create_shm_buffer(
           pWindow->w() * window->scale, pWindow->h() * window->scale, WL_SHM_FORMAT_ARGB8888, window);
   ((Fl_Wayland_Graphics_Driver*)fl_graphics_driver)->activate(window->buffer, window->scale);
-  window->buffer->draw_buffer_needs_commit = true;
 
 #ifdef FLTK_USE_CAIRO
   // update the cairo_t context
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'.