The description of Cairo::ImageSurface, http://cairographics.org/documentation/cairomm/reference/classCairo_1_1ImageSurface.html#_details, says "if you modify anything and later want to continue to draw to the surface with cairo, you must let cairo know via Cairo::Surface::mark_dirty() <http://cairographics.org/documentation/cairomm/reference/classCairo_1_1Surface.html#a77b1f860cc55f4ad168e100108e0b7bb>."

I added
  surface->mark_dirty();
before
  m_face_image.set(surface);
and suddenly it works.

Kjell

Den 2015-08-01 09:50, Adam Nielsen skrev:
Interesting, thanks for checking.  Here is a patch for examplewindow.cc
that demonstrates the problem.  Must be something to do with the way the
surface is created?

Thanks again,
Adam.


diff -Nru gtk.orig/examplewindow.cc gtk/examplewindow.cc
--- gtk.orig/examplewindow.cc   2015-08-01 17:34:59.000000000 +1000
+++ gtk/examplewindow.cc        2015-08-01 17:44:54.682482453 +1000
@@ -14,6 +14,7 @@
   * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
   */
+#include <cairomm/cairomm.h>
  #include "examplewindow.h"
ExampleWindow::ExampleWindow()
@@ -31,7 +32,19 @@
    settings->property_gtk_application_prefer_dark_theme().set_value(true);
// Face
-  m_face_image.set_from_icon_name("face-cool", Gtk::ICON_SIZE_DIALOG);
+  auto surface = Cairo::ImageSurface::create(Cairo::FORMAT_ARGB32, 16, 16);
+
+  // Draw something onto the Cairo surface so you can see whether it worked
+  auto content = surface->get_data();
+  for (int i = 0; i < 16*16*4; i+=4) {
+    content[i+0] = content[i+1] = content[i+2] = ((i/4)%16)<<4;
+    content[i+3] = 255;
+  }
+  // Set the Cairo surface - this doesn't work
+  m_face_image.set(surface);
+  // Convert the Cairo surface to a GDK pixbuf and set that, this does work
+  //auto gdkimg = Gdk::Pixbuf::create(surface, 0, 0, 16, 16);
+  //m_face_image.set(gdkimg);
// Center widget layout
    m_prev_button.set_image_from_icon_name("go-previous-symbolic",
    Gtk::ICON_SIZE_BUTTON, true);


_______________________________________________
gtkmm-list mailing list
gtkmm-list@gnome.org
https://mail.gnome.org/mailman/listinfo/gtkmm-list

Reply via email to