[seed] Pango: Implement draggable actors.
- From: Tim Horton <hortont src gnome org>
- To: svn-commits-list gnome org
- Subject: [seed] Pango: Implement draggable actors.
- Date: Wed, 13 May 2009 02:37:00 -0400 (EDT)
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]