Two patches for the vala binding.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



bindings/vala: Fix deprecated syntax
* s/weak/unowned in gegl-0.0.vapi, babl-0.0.vapi
 2 files changed, 41 insertions(+), 41 deletions(-)

bindings/vala/gegl-0.0.vapi: Add Path, Buffer.linear_open, Buffer.linear_close
 1 files changed, 38 insertions(+), 0 deletions(-)

I also join a vala version of the gegl-paint example.

gegl-paint: gegl-paint-source
    gcc -o gegl-paint gegl-paint.c gegl-view.c `pkg-config --libs --cflags gegl` `pkg-config --libs --cflags gtk+-2.0`

gegl-paint-source: gegl-paint.vala gegl-view.vala
    valac -C gegl-paint.vala gegl-view.vala --pkg=gtk+-2.0 --vapidir=../vapi --pkg=gegl-0.1 --pkg=babl-0.1 --thread


Regards.

   Damien
From d8a9ea7c9bce0cf602e2a9a9794941d3ae1e5e45 Mon Sep 17 00:00:00 2001
From: Damien de Lemeny <d.delemeny@xxxxxxxxx>
Date: Fri, 21 May 2010 10:48:03 +0200
Subject: [PATCH 1/2] bindings/vala: Fix deprecated syntax
 * s/weak/unowned in gegl-0.0.vapi, babl-0.0.vapi

---
 bindings/vala/babl-0.0.vapi |    2 +-
 bindings/vala/gegl-0.0.vapi |   80 +++++++++++++++++++++---------------------
 2 files changed, 41 insertions(+), 41 deletions(-)

diff --git a/bindings/vala/babl-0.0.vapi b/bindings/vala/babl-0.0.vapi
index cc531ac..b76c39d 100644
--- a/bindings/vala/babl-0.0.vapi
+++ b/bindings/vala/babl-0.0.vapi
@@ -15,5 +15,5 @@ namespace Babl {
 	[CCode (cheader_filename = "babl/babl.h")]
 	public static void destroy ();
 	[CCode (cheader_filename = "babl/babl.h")]
-	public static weak Babl.Format format (string name);
+	public static unowned Babl.Format format (string name);
 }
diff --git a/bindings/vala/gegl-0.0.vapi b/bindings/vala/gegl-0.0.vapi
index 8aa7510..8693a21 100644
--- a/bindings/vala/gegl-0.0.vapi
+++ b/bindings/vala/gegl-0.0.vapi
@@ -26,48 +26,48 @@ namespace Gegl {
 		public void set_rectangle (Gegl.Rectangle rectangle);
 		public bool work (out double progress);
 		[NoAccessorMethod]
-		public weak int chunksize { get; construct; }
+		public unowned int chunksize { get; construct; }
 		[NoAccessorMethod]
-		public weak Gegl.Node node { set construct; }
+		public unowned Gegl.Node node { set construct; }
 		[NoAccessorMethod]
-		public weak double progress { get; set; }
+		public unowned double progress { get; set; }
 	}
 	[CCode (cheader_filename = "gegl.h")]
 	public class Node : GLib.Object, Gegl.Visitable {
 		public Node ();
 		public Node.from_file (string path);
 		public Node.from_xml (string xmldata, string path_root);
-		public weak Gegl.Node new_child (...);
-		public weak Gegl.Node create_child (string operation);
-		public weak Gegl.Node adopt_child (Gegl.Node child);
-		public weak Gegl.Node add_child (Gegl.Node child);
-		public weak Gegl.Node remove_child (Gegl.Node child);
+		public unowned Gegl.Node new_child (...);
+		public unowned Gegl.Node create_child (string operation);
+		public unowned Gegl.Node adopt_child (Gegl.Node child);
+		public unowned Gegl.Node add_child (Gegl.Node child);
+		public unowned Gegl.Node remove_child (Gegl.Node child);
 		public bool connect_from (string input_pad_name, Gegl.Node source, string output_pad_name);
 		public bool connect_to (string output_pad_name, Gegl.Node sink, string input_pad_name);
 		public void link (Gegl.Node sink);
 		public void link_many (...);
 		public bool disconnect (string input_pad);
-		public weak GLib.SList<Gegl.Node> get_children ();
-		public int get_consumers (string output_pad, out weak Gegl.Node nodes, string pads);
-		public weak string get_operation ();
-		public weak Gegl.Node get_input_proxy (string pad_name);
-		public weak Gegl.Node get_output_proxy (string pad_name);
-		public weak Gegl.Node get_parent ();
-		public weak Gegl.Node get_producer (string input_pad_name, string output_pad_name);
-		public weak Gegl.Node detect (int x, int y);
+		public unowned GLib.SList<Gegl.Node> get_children ();
+		public int get_consumers (string output_pad, out unowned Gegl.Node nodes, string pads);
+		public unowned string get_operation ();
+		public unowned Gegl.Node get_input_proxy (string pad_name);
+		public unowned Gegl.Node get_output_proxy (string pad_name);
+		public unowned Gegl.Node get_parent ();
+		public unowned Gegl.Node get_producer (string input_pad_name, string output_pad_name);
+		public unowned Gegl.Node detect (int x, int y);
 		public Gegl.Rectangle get_bounding_box ();
 		public void blit (double scale, Gegl.Rectangle roi, void* format, void* destination_buf, int rowstride, Gegl.BlitFlags flags);
 		public void process ();
-		public weak GLib.ParamSpec find_property (string property_name);
+		public unowned GLib.ParamSpec find_property (string property_name);
 		public void get (...);
 		public void set (...);
 		public void get_property (string property_name, GLib.Value value);
 		public void set_property (string property_name, GLib.Value value);
-		public weak string to_xml (string path_root);
+		public unowned string to_xml (string path_root);
 		[NoAccessorMethod]
-		public weak string name { get; set construct; }
+		public unowned string name { get; set construct; }
 		[NoAccessorMethod]
-		public weak string operation { get; set construct; }
+		public unowned string operation { get; set construct; }
 		public signal void computed (Gegl.Rectangle p0);
 		public signal void invalidated (Gegl.Rectangle p0);
 	}
@@ -81,46 +81,46 @@ namespace Gegl {
 		public void get (double scale, Gegl.Rectangle rect, void* format, void* dest, int rowstride);
 		public Gegl.Rectangle get_extent ();
 		public static Gegl.Interpolation interpolation_from_string (string str);
-		public static weak Gegl.Buffer load (string path);
+		public static unowned Gegl.Buffer load (string path);
 		public Buffer (Gegl.Rectangle? extent, void* format);
-		public static weak Gegl.Buffer open (string path);
+		public static unowned Gegl.Buffer open (string path);
 		public void sample (double x, double y, double scale, void* dest, void* format, Gegl.Interpolation interpolation);
 		public void sample_cleanup ();
 		public void save (string path, Gegl.Rectangle roi);
 		public void set (Gegl.Rectangle rect, void* format, void* src, int rowstride);
 		public bool set_extent (Gegl.Rectangle extent);
 		[NoAccessorMethod]
-		public weak int abyss_height { get; construct; }
+		public unowned int abyss_height { get; construct; }
 		[NoAccessorMethod]
-		public weak int abyss_width { get; construct; }
+		public unowned int abyss_width { get; construct; }
 		[NoAccessorMethod]
-		public weak int abyss_x { get; construct; }
+		public unowned int abyss_x { get; construct; }
 		[NoAccessorMethod]
-		public weak int abyss_y { get; construct; }
+		public unowned int abyss_y { get; construct; }
 		[NoAccessorMethod]
-		public weak void* format { get; set construct; }
+		public unowned void* format { get; set construct; }
 		[NoAccessorMethod]
-		public weak int height { get; set construct; }
+		public unowned int height { get; set construct; }
 		[NoAccessorMethod]
-		public weak string path { get; set construct; }
+		public unowned string path { get; set construct; }
 		[NoAccessorMethod]
-		public weak int pixels { get; }
+		public unowned int pixels { get; }
 		[NoAccessorMethod]
-		public weak int px_size { get; }
+		public unowned int px_size { get; }
 		[NoAccessorMethod]
-		public weak int shift_x { get; construct; }
+		public unowned int shift_x { get; construct; }
 		[NoAccessorMethod]
-		public weak int shift_y { get; construct; }
+		public unowned int shift_y { get; construct; }
 		[NoAccessorMethod]
-		public weak int tile_height { get; construct; }
+		public unowned int tile_height { get; construct; }
 		[NoAccessorMethod]
-		public weak int tile_width { get; construct; }
+		public unowned int tile_width { get; construct; }
 		[NoAccessorMethod]
-		public weak int width { get; set construct; }
+		public unowned int width { get; set construct; }
 		[NoAccessorMethod]
-		public weak int x { get; set construct; }
+		public unowned int x { get; set construct; }
 		[NoAccessorMethod]
-		public weak int y { get; set construct; }
+		public unowned int y { get; set construct; }
 		public signal void changed (Gegl.Rectangle p0);
 	}
 	[CCode (cheader_filename = "gegl.h")]
@@ -150,11 +150,11 @@ namespace Gegl {
 	public const int MICRO_VERSION;
 	public const int MINOR_VERSION;
 	[CCode (cheader_filename = "gegl.h")]
-	public static weak GLib.Object config ();
+	public static unowned GLib.Object config ();
 	[CCode (cheader_filename = "gegl.h")]
 	public static void exit ();
 	[CCode (cheader_filename = "gegl.h")]
 	public static void get_version (int major, int minor, int micro);
 	[CCode (cheader_filename = "gegl.h")]
-	public static void init ([CCode (array_length_pos = 0.9)] ref weak string[] argv);
+	public static void init ([CCode (array_length_pos = 0.9)] ref unowned string[] argv);
 }
-- 
1.6.3.3

From 4d18d9fdd1bb2e32091679f4f75f3adc7ec0665b Mon Sep 17 00:00:00 2001
From: Damien de Lemeny <d.delemeny@xxxxxxxxx>
Date: Fri, 21 May 2010 10:51:55 +0200
Subject: [PATCH 2/2] bindings/vala/gegl-0.0.vapi: Add Path, Buffer.linear_open, Buffer.linear_close

---
 bindings/vala/gegl-0.0.vapi |   38 ++++++++++++++++++++++++++++++++++++++
 1 files changed, 38 insertions(+), 0 deletions(-)

diff --git a/bindings/vala/gegl-0.0.vapi b/bindings/vala/gegl-0.0.vapi
index 8693a21..52ba130 100644
--- a/bindings/vala/gegl-0.0.vapi
+++ b/bindings/vala/gegl-0.0.vapi
@@ -72,6 +72,42 @@ namespace Gegl {
 		public signal void invalidated (Gegl.Rectangle p0);
 	}
 	[CCode (cheader_filename = "gegl.h")]
+	public struct Point {
+	    public float x;
+	    public float y;
+	}
+	[CCode (cheader_filename = "gegl.h")]
+	public struct PathItem {
+	    public char type;
+	    public Point point[4];
+	}
+	[CCode (cheader_filename = "gegl.h")]
+	public class Path : GLib.Object {
+	    public Path ();
+	    public Path.from_string (string instructions);
+	    public bool is_empty ();
+	    public int get_n_nodes ();
+	    public double get_length ();
+	    public bool get_node (int index, out unowned Gegl.PathItem node);
+	    public unowned string to_string ();
+	    public double closest_point (double x, double y, 
+	                                 double on_path_x, double on_path_y,
+	                                 int node_pos_before);
+	    public void calc (double pos, double x, double y);
+	    public void calc_values (double num_samples, double xs, double ys);
+	    public void get_bounds (out double min_x, out double max_x,
+	    						out double min_y, out double max_y);
+	    public void clear ();
+	    public void insert_node (int pos, Gegl.PathItem node);
+	    public void replace_node (int pos, Gegl.PathItem node);
+	    public void remove_node (int pos);
+	    public void parse_string (string instructions);
+	    public void append (...);
+	    public void freeze ();
+	    public void thaw ();
+	    public void add_type (int items, string description);
+	}
+	[CCode (cheader_filename = "gegl.h")]
 	public class Buffer : GLib.Object {
 		public void copy (Gegl.Rectangle src_rect, Gegl.Buffer dst, Gegl.Rectangle dst_rect);
 		public Gegl.Buffer create_sub_buffer (Gegl.Rectangle extent);
@@ -88,6 +124,8 @@ namespace Gegl {
 		public void sample_cleanup ();
 		public void save (string path, Gegl.Rectangle roi);
 		public void set (Gegl.Rectangle rect, void* format, void* src, int rowstride);
+		public void* linear_open(Gegl.Rectangle? extent, int? rowstride, Babl.Format format);
+		public void linear_close(void* linear);
 		public bool set_extent (Gegl.Rectangle extent);
 		[NoAccessorMethod]
 		public unowned int abyss_height { get; construct; }
-- 
1.6.3.3

public class View : Gtk.DrawingArea 
{	
	private weak Gegl.Node _node;
    public weak Gegl.Node node
    {
        get{ return _node;}
        set
        {
            _node = (Gegl.Node)value;
            _node.computed.connect((rect)=>
                {
                    int x = (int)(this.scale * rect.x - this.x);
                    int y = (int)(this.scale * rect.y - this.y);
                    int w = (int)Math.ceil(this.scale * rect.width  + 1);
                    int h = (int)Math.ceil(this.scale * rect.height + 1);
                    this.queue_draw_area (x,y,w,h);
                }
            );
            this._node.invalidated.connect((rect)=>this.repaint());
            this.repaint();
        }
    }
    private uint monitor_id;
    private Gegl.Processor processor;


    /* Fields */
    public int x {get; set; default = 0;}
    public int y {get; set; default = 0;}
    private int screen_x;
    private int screen_y;
    private int orig_x;
    private int orig_y;
    private int start_buf_x;
    private int start_buf_y;    
    private int prev_x;
    private int prev_y;

    	
    private double _scale=1.0;
    public double scale 
    {
        get{return _scale;}
        construct set
        {
            if (value > 100) {_scale = double.MAX+1;}
            if (value < 0) {_scale = double.MIN -1;}
        }
    }
    private double prev_scale;

    private bool drag_started;
    public bool block {get; set; default = false;}


    
	public View(Gegl.Node node)
	{
		this.node = node;
		this.set_size_request (300, 200);        
		this.add_events (Gdk.EventMask.BUTTON_PRESS_MASK
						| Gdk.EventMask.BUTTON_RELEASE_MASK
             			| Gdk.EventMask.POINTER_MOTION_MASK);
	}
	public override bool button_press_event(Gdk.EventButton event) 
    {
        int x = (int)event.x;
        int y = (int)event.y;

        this.screen_x = x;
        this.screen_y = y;
        
        this.orig_x = this.x;
        this.orig_y = this.y;

        this.start_buf_x = (int)((this.x + x)/this.scale);
        this.start_buf_y = (int)((this.y + y)/this.scale);

        this.prev_x = x;
        this.prev_y = y;

        x = (int)(x / this.scale + this.x);
        y = (int)(y / this.scale + this.y);
        
        Gegl.Node detected = this.node.detect ((int)((this.x + event.x)/this.scale),
                                               (int)((this.y + event.y)/this.scale));
        if (detected != null)
        {
            this.detected(detected);
        }
    	this.drag_started = true;
		return false;
    }
    public override bool button_release_event(Gdk.EventButton event) 
    {
    	this.drag_started = false;
		return false;
    }
    public override bool motion_notify_event(Gdk.EventMotion event) 
    {        
        int x = (int)event.x;
        int y = (int)event.y;

        if (!this.drag_started) {return false;}
        if ((event.state & Gdk.ModifierType.BUTTON2_MASK) != 0)
        {
            int diff_x = x - this.prev_x;
            int diff_y = y - this.prev_y;

            this.x -= diff_x;
            this.y -= diff_y;

            this.get_window().scroll(diff_x, diff_y);
        }

		this.prev_x = x;
		this.prev_y = y;

		return true;
    }
    public override bool expose_event (Gdk.EventExpose event) 
    {    	
    	if (this.node == null) {return false;}
    	
    	Gdk.Rectangle[] rectangles;
        event.region.get_rectangles(out rectangles);

        foreach (var rectangle in rectangles)
        {
            Gegl.Rectangle roi = Gegl.Rectangle();

            roi.x = this.x + rectangle.x;
            roi.y = this.y + rectangle.y;
            roi.width  = rectangle.width;
            roi.height = rectangle.height;
            
            uchar[] buf = new uchar[roi.width*roi.height*3];

            //uchar *buf = (uchar*)malloc (roi.width * roi.height * 3);
  
            this.node.blit(this.scale,
                           roi,
                           Babl.format ("R'G'B' u8"),
                           (void*)buf,
                           Gegl.AUTO_ROWSTRIDE,
                           Gegl.BlitFlags.CACHE|
                           (this.block?0:Gegl.BlitFlags.DIRTY));

            Gdk.draw_rgb_image(this.get_window(),
                               this.get_style().black_gc,
                               rectangle.x, rectangle.y,
                               rectangle.width, rectangle.height,
                               Gdk.RgbDither.NONE,
                               buf, roi.width*3);
        }    	
		return false;
    }
    public void repaint()
    {
        Gegl.Rectangle roi = Gegl.Rectangle();
        
        roi.x = (int)(this.x / this.scale);
        roi.y = (int)(this.y / this.scale);
        roi.width = (int)Math.ceil(this.allocation.width / this.scale+1);
        roi.height = (int)Math.ceil(this.allocation.height / this.scale+1);

        if (this.monitor_id == 0) 
        {
            this.monitor_id = Idle.add_full(Priority.LOW,task_monitor);

            if (this.processor == null)
            {
                if (this.node != null)
                {
                    this.processor = new Gegl.Processor(node, roi);
                }
            }
        }

        if (this.processor != null) 
        {
            processor.set_rectangle(roi);
        }
    }

    private bool task_monitor ()
    {
        if (this.processor == null) 
        {
            return false;
        }
        if (this.processor.work(null)) 
        {
            return true;
        }

        this.monitor_id = 0;
        return false;
    }
    public signal void detected(Gegl.Node node);
}
const double LINEWIDTH = 60.0;
const double HARDNESS = 0.2;
const string COLOR = "rgba(0.0,0.0,0.0,0.4)";


Gegl.Node n_gegl;
weak Gegl.Node n_out;
weak Gegl.Node n_top;
weak Gegl.Node n_over;
weak Gegl.Node n_stroke;

bool pen_down = false;
Gegl.Path vector;

Gegl.Buffer buffer;


public bool press (Gdk.EventButton event) 
{
    if (event.button == 1)
    {
        vector = new Gegl.Path();

        n_over   = n_gegl.new_child("operation","gegl:over");

        n_stroke = n_gegl.new_child("operation","gegl:path",
                                   "d", vector,
                                   "fill-opacity", 0.0,
                                   "stroke", new Gegl.Color(COLOR),
                                   "stroke-width", LINEWIDTH,
                                   "stroke-hardness", HARDNESS);

        n_top.link_many(n_over, n_out);
        n_stroke.connect_to("output", n_over, "aux");
        
        vector.append('M', event.x, event.y);

        pen_down = true;

        return true;
    }
	return false;
}
public bool motion (Gdk.EventMotion event)
{
    if ((event.state & Gdk.ModifierType.BUTTON1_MASK) !=0)
    {
        if (!pen_down)
        {
            return true;
        }
        vector.append('L',event.x,event.y);
        return true;
    }
	return false;
}
public bool release (Gdk.EventButton event)
{      
	if (event.button == 1)
    {  
        double x0,x1,y0,y1;
        Gegl.Processor processor;
        Gegl.Node writebuf;
        Gegl.Rectangle roi = Gegl.Rectangle();

        vector.get_bounds (out x0, out x1, out y0, out y1);

        roi.x = (int)(x0 - LINEWIDTH);
        roi.y = (int)(y0 - LINEWIDTH);
        roi.width  = (int)(x1 -x0 + LINEWIDTH * 2);
        roi.height = (int)(y1 -y0 + LINEWIDTH * 2);

        writebuf = n_gegl.new_child("operation", "gegl:write-buffer",
                                  "buffer", buffer);
        n_over.link_many(writebuf);

        processor = new Gegl.Processor(writebuf, roi);

        while (processor.work(null));

        n_top.link_many(n_out);

        n_over = null;
        n_stroke = null;
        pen_down = false;

        return true;
    }
    return false;
}


static int main (string[] args)
{
	Gtk.init (ref args);
	Gegl.init (ref args);

	Log.set_always_fatal (GLib.LogLevelFlags.LEVEL_CRITICAL);

	// Setting up main window
	Gtk.Window window = new Gtk.Window ();
	window.title = "GPaint";
	window.destroy.connect (Gtk.main_quit);


	Gegl.Rectangle rect = {0,0,512,512};
	void* buf;

	buffer = new Gegl.Buffer(rect, Babl.format ("RGBA float"));
	buf = buffer.linear_open (null, null, Babl.format("Y' u8"));
	Memory.set (buf, 255, 512*512);
	buffer.linear_close (buf);
		
	n_gegl = new Gegl.Node ();
	Gegl.Node loadbuf = n_gegl.new_child ("operation","gegl:buffer-source",
		                                  "buffer",buffer);
		                                
	n_out = n_gegl.new_child ("operation", "gegl:nop");
	loadbuf.link_many (n_out);
	n_top = loadbuf;

	var view = new View (n_out);

	view.button_press_event.connect (press);
	view.motion_notify_event.connect (motion);
	view.button_release_event.connect (release);
	view.add_events(Gdk.EventMask.BUTTON_RELEASE_MASK);

	window.add (view);

	window.show_all ();

	Gtk.main ();

	n_gegl = null;
	buffer = null;
	loadbuf = null;
	view = null;

	Gegl.exit ();
	return 0;
}

_______________________________________________
Gegl-developer mailing list
Gegl-developer@xxxxxxxxxxxxxxxxxxxxxx
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer

[Index of Archives]     [Yosemite News]     [Yosemite Photos]     [gtk]     [GIMP Users]     [KDE]     [Gimp's Home]     [Gimp on Windows]     [Steve's Art]

  Powered by Linux