[ease] Use smaller versions when resizing CairoActors.



commit e3f83f8b76ec131d5a9c5f25a4cd3d85d114b09c
Author: Nate Stedman <natesm gmail com>
Date:   Sun Nov 28 17:01:49 2010 -0500

    Use smaller versions when resizing CairoActors.

 ease-core/ease-actor.vala       |    8 ++++++++
 ease-core/ease-cairo-actor.vala |    6 ++++--
 ease/ease-editor-embed.vala     |    2 ++
 3 files changed, 14 insertions(+), 2 deletions(-)
---
diff --git a/ease-core/ease-actor.vala b/ease-core/ease-actor.vala
index 7e017bb..c7f5224 100644
--- a/ease-core/ease-actor.vala
+++ b/ease-core/ease-actor.vala
@@ -62,6 +62,14 @@ public abstract class Ease.Actor : Clutter.Group
 	 * The widget of the surrounding rectangle in the editor.
 	 */
 	private const uint RECT_WIDTH = 1;
+	
+	/**
+	 * Whether or not the actor is currently being manually resized by the user.
+	 * In subclasses (namely { link CairoActor}), this can cause frequent redraw
+	 * calls. Therefore, these subclasses can make optimizations and use lower
+	 * resolution media caches (such as that in { link Image}.
+	 */
+	public bool resizing { get; set; default = false; }
 
 	/**
 	 * Instantiate a new Actor
diff --git a/ease-core/ease-cairo-actor.vala b/ease-core/ease-cairo-actor.vala
index 11c9b6f..2a98bb4 100644
--- a/ease-core/ease-cairo-actor.vala
+++ b/ease-core/ease-cairo-actor.vala
@@ -36,17 +36,19 @@ public class Ease.CairoActor : Actor
 		e.changed.connect(draw);
 		
 		draw();
+		
+		// draw at full resolution again once redraw is complete
+		notify["resizing"].connect(() => { if (!resizing) draw(); });
 	}
 	
 	internal void draw()
 	{
-		//debug("drawing");
 		tex.set_surface_size((uint)element.width, (uint)element.height);
 		tex.clear();
 		var cr = tex.create();
 		try
 		{
-			element.cairo_render(cr, false);
+			element.cairo_render(cr, resizing);
 		}
 		catch (Error e)
 		{
diff --git a/ease/ease-editor-embed.vala b/ease/ease-editor-embed.vala
index 8de2ac1..61b62fe 100644
--- a/ease/ease-editor-embed.vala
+++ b/ease/ease-editor-embed.vala
@@ -638,6 +638,7 @@ internal class Ease.EditorEmbed : ScrolledEmbedWindow, UndoSource
 		is_drag_initialized = false;
 		sender.motion_event.connect(handle_motion);
 		Clutter.grab_pointer(sender);
+		selected.resizing = true;
 		
 		// create an UndoAction for this resize
 		move_undo = new UndoAction(selected.element, "x");
@@ -667,6 +668,7 @@ internal class Ease.EditorEmbed : ScrolledEmbedWindow, UndoSource
 			is_dragging = false;
 			sender.motion_event.disconnect(handle_motion);
 			undo(move_undo);
+			selected.resizing = false;
 		}
 		
 		Clutter.ungrab_pointer();



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