[seed] Pango: Implement draggable actors.



commit 24c4f6e52ed021b0bccba8be0dc9072c6a3aa342
Author: Tim Horton <hortont svn gnome org>
Date:   Wed May 13 02:23:05 2009 -0400

    Pango: Implement draggable actors.
---
 examples/pango.js |   81 ++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 68 insertions(+), 13 deletions(-)

diff --git a/examples/pango.js b/examples/pango.js
index 4ff75e5..7067310 100755
--- a/examples/pango.js
+++ b/examples/pango.js
@@ -8,10 +8,13 @@ Gtk = imports.gi.Gtk;
 GtkClutter = imports.gi.GtkClutter;
 Pango = imports.gi.Pango;
 PangoFT2 = imports.gi.PangoFT2;
+GObject = imports.gi.GObject;
 
 Gtk.init(Seed.argv);
 GtkClutter.init(Seed.argv);
 
+selected_actor = null;
+
 PangoWidget = new GType({
 	parent: Clutter.Text.type,
 	name: "PangoWidget",
@@ -19,25 +22,67 @@ PangoWidget = new GType({
 	{
 		// Private
 		
+		var dx, dy, dragging;
+		
 		var widget_clicked = function (actor, event)
 		{
-			Seed.print(actor.text);
+			//Seed.print(event.mouse);
+			dx = event.button.x - actor.x;
+			dy = event.button.y - actor.y;
+			dragging = true;
+	
 			actor.set_selected(true);
 			return false;
 		};
 		
+		var widget_dragged = function (actor, event)
+		{
+			if(!dragging)
+				return false;
+		
+			actor.x = event.motion.x - dx;
+			actor.y = event.motion.y - dy;
+		
+			return false;
+		};
+		
+		var widget_unclicked = function ()
+		{
+			dragging = false;
+			
+			return false;
+		};
+		
 		// Public
 		
 		this.set_selected = function (selected)
 		{
-			Seed.print(this);
 			if(selected)
 			{
-				this.opacity = 0.0;
+				var children = stage.get_children();
+				
+				for(var id in children)
+				{
+					children[id].set_selected(false);
+				}
+				
+				this.timeline = new Clutter.Timeline({fps:30, num_frames:628, loop:true});
+				this.timeline.signal.new_frame.connect(function(timeline, frame_num, ud)
+				{
+					ud.opacity = ((Math.sin(frame_num/7)+1) * 67) + 120;
+				}, this);
+			
+				this.timeline.start();
+				
+				selected_actor = this;
 			}
 			else
 			{
-				this.opacity = 255.0;
+				if(this.timeline)
+				{
+					this.timeline.stop();
+					this.opacity = 255;
+				}
 			}
 		};
 		
@@ -46,6 +91,8 @@ PangoWidget = new GType({
 		this.text = "Hello, world!";
 		this.reactive = true;
 		this.signal.button_press_event.connect(widget_clicked);
+		this.signal.button_release_event.connect(widget_unclicked);
+		this.signal.motion_event.connect(widget_dragged);
 	}
 });
 
@@ -123,12 +170,24 @@ function update_font()
     //current_actor.font_name = font_list[properties.font_combo.get_active()] + " " + parseFloat(properties.size_entry.text,10);
 }
 
-/*function clear_selected(stg, evt)
+function clear_selected(stg, evt)
 {
-    if(stg.equals(stage.get_actor_at_pos(evt.x, evt.y)))
-        select_actor(null);
+    if(stg.equals(stage.get_actor_at_pos(evt.button.x, evt.button.y)))
+    {
+    	var children = stage.get_children();
+				
+		for(var id in children)
+		{
+			children[id].set_selected(false);
+		}
+	}
+	
+	selected_actor = null;
+	
+	return false;
 }
 
+/*
 function select_actor(actor)
 {
     timeline.rewind();
@@ -226,13 +285,9 @@ function pangotest_init()
 {
     stage = ui_setup().get_stage();
     
-    Clutter.set_motion_events_frequency(60);
+    stage.signal.button_press_event.connect(clear_selected);
     
-    //stage.signal.motion_event.connect(mouse_moved);
-    //stage.signal.button_release_event.connect(mouse_release);
-    //stage.signal.button_press_event.connect(clear_selected);
-    
-    //pulser();
+    Clutter.set_motion_events_frequency(60);
     
     create_default_actors();
 



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