Hi Jon,

I managed to remove the glitch while drawing.  Patch attached.

Cheers,

-- 
.. manuq ..
From 9c75c9edd3d33d6d4d07e344410fd11d49fc5603 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Manuel=20Qui=C3=B1ones?= <[email protected]>
Date: Tue, 14 Jan 2014 16:51:25 -0300
Subject: [PATCH] Improve GEGL example

By adding the surface node to a graph, the box glitch that appeared
while drawing is gone.

Draw the background as a GEGL node, to show off composition.
---
 mypaint-gegl.py | 47 ++++++++++++++++++++++++++++-------------------
 1 file changed, 28 insertions(+), 19 deletions(-)
 mode change 100644 => 100755 mypaint-gegl.py

diff --git a/mypaint-gegl.py b/mypaint-gegl.py
old mode 100644
new mode 100755
index 3d8c377..26bad7c
--- a/mypaint-gegl.py
+++ b/mypaint-gegl.py
@@ -1,3 +1,4 @@
+#!/usr/bin/env python
 import sys, os.path
 
 import gi
@@ -51,9 +52,21 @@ class MyPaintGeglApplication(object):
 
         self.brush = brush.Brush(self.brush_info)
         self.surface = tiledsurface.GeglSurface()
-        self.display_node = self.surface.get_node()
+        display_node = self.surface.get_node()
+
         self.graph = Gegl.Node();
 
+        background_node = self.graph.create_child("gegl:color")
+        background_node.set_property('value', Gegl.Color.new("#ff7"))
+
+        self.crop = self.graph.create_child("gegl:crop")
+
+        over = self.graph.create_child("gegl:over")
+
+        background_node.connect_to("output", self.crop, "input")
+        self.crop.connect_to("output", over, "input")
+        display_node.connect_to("output", over, "aux")
+
         self.button_pressed = False
         self.last_event = (0.0, 0.0, 0.0) # (x, y, time)
 
@@ -63,6 +76,7 @@ class MyPaintGeglApplication(object):
 
         window = Gtk.Window()
         window.connect("destroy", self.quit)
+        window.connect("configure-event", self.configure_handler)
 
         top_box = Gtk.VBox()
 
@@ -77,16 +91,15 @@ class MyPaintGeglApplication(object):
 
         self.color_selector = Gtk.ColorSelection()
         self.color_selector.connect("color-changed", self.color_change_handler)
-        
+
         # Extract only the color triangle
         hsv_selector = find_widgets(self.color_selector, lambda w: w.get_name() == 'GtkHSV')[0]
         hsv_selector.unparent()
 
         self.view_widget = GeglGtk.View()
-        self.view_widget.set_node(self.display_node)
+        self.view_widget.set_node(self.graph.get_children()[0])
         self.view_widget.set_autoscale_policy(GeglGtk.ViewAutoscale.DISABLED)
         self.view_widget.set_size_request(400, 400)
-        self.view_widget.connect("draw-background", self.draw_background)
 
         event_box = Gtk.EventBox()
         event_box.connect("motion-notify-event", self.motion_to)
@@ -106,7 +119,7 @@ class MyPaintGeglApplication(object):
         top_box.pack_start(event_box, expand=True, fill=True, padding=0)
         window.add(top_box)
         window.show_all()
-        
+
         self.window = window
 
     def run(self):
@@ -115,6 +128,12 @@ class MyPaintGeglApplication(object):
     def quit(self, *ignored):
         Gtk.main_quit()
 
+    def configure_handler(self, widget, event):
+        self.crop.set_property("x", event.x)
+        self.crop.set_property("y", event.y)
+        self.crop.set_property("width", event.width)
+        self.crop.set_property("height", event.height)
+
     def motion_to(self, widget, event):
 
         (x, y, time) = event.x, event.y, event.time
@@ -140,12 +159,6 @@ class MyPaintGeglApplication(object):
         self.button_pressed = False
         self.brush.reset()
 
-    def draw_background(self, widget, cr, rect):
-        # Draw white background
-        cr.set_source_rgba(1.0, 1.0, 1.0, 1.0);
-        cr.rectangle(rect.x, rect.y, rect.width, rect.height);
-        cr.fill();
-
     def load_from_png(self, filename):
         self.surface.load_from_png(filename, 0, 0)
 
@@ -159,7 +172,7 @@ class MyPaintGeglApplication(object):
         action = Gtk.FileChooserAction.SAVE
         chooser = Gtk.FileChooserDialog("Save file", self.window,
                                         action=action, buttons=buttons)
-        
+
         response = chooser.run()
         if response == Gtk.ResponseType.OK:
             self.save_as_png(chooser.get_filename())
@@ -167,13 +180,13 @@ class MyPaintGeglApplication(object):
         chooser.destroy()
 
     def load_handler(self, widget):
-        
+
         buttons = (Gtk.STOCK_OK, Gtk.ResponseType.OK,
                    Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL)
         action = Gtk.FileChooserAction.OPEN
         chooser = Gtk.FileChooserDialog("Load file", self.window,
                                         action=action, buttons=buttons)
-        
+
         response = chooser.run()
         if response == Gtk.ResponseType.OK:
             self.load_from_png(chooser.get_filename())
@@ -186,7 +199,7 @@ class MyPaintGeglApplication(object):
                    Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL)
         chooser = Gtk.FileChooserDialog("Load brush", self.window, buttons=buttons)
         chooser.set_current_folder("brushes/deevad")
-        
+
         response = chooser.run()
         if response == Gtk.ResponseType.OK:
             brush_settings = open(chooser.get_filename()).read()
@@ -211,7 +224,3 @@ if __name__ == '__main__':
     # TEMP:
     #app.save_as_png("mypaint-gegl.png")
     app.run()
-
-
-
-
-- 
1.8.3.1

_______________________________________________
Mypaint-discuss mailing list
[email protected]
https://mail.gna.org/listinfo/mypaint-discuss

Reply via email to