[seed] Clutter-Shader: More or less a rewrite.



commit b5091d847bd043d0f8fd9991865413d55e212e0c
Author: Tim Horton <hortont svn gnome org>
Date:   Wed May 13 00:12:29 2009 -0400

    Clutter-Shader: More or less a rewrite.
    
    Now with more GObject, a picture of Bob of the correct size (smaller tarball, too), much cleaner overall. No more unused tab view, etc.
---
 examples/clutter-shader/ShaderEditor.js |   48 ++++++++++++++++++
 examples/clutter-shader/ShaderView.js   |   81 +++++++++++++++++--------------
 examples/clutter-shader/bob.jpg         |  Bin 59229 -> 26580 bytes
 examples/clutter-shader/default.glsl    |    2 +-
 examples/clutter-shader/main.js         |   51 +++++++-------------
 5 files changed, 110 insertions(+), 72 deletions(-)

diff --git a/examples/clutter-shader/ShaderEditor.js b/examples/clutter-shader/ShaderEditor.js
new file mode 100644
index 0000000..ba6d44e
--- /dev/null
+++ b/examples/clutter-shader/ShaderEditor.js
@@ -0,0 +1,48 @@
+#!/usr/bin/env seed
+
+imports.gi.versions.Clutter = "0.9";
+
+Gtk = imports.gi.Gtk;
+Clutter = imports.gi.Clutter;
+GtkSource = imports.gi.GtkSource;
+Gio = imports.gi.Gio;
+
+var source_lang_mgr = new GtkSource.SourceLanguageManager();
+var js_lang = source_lang_mgr.get_language("c"); // JavaScript!?
+
+ShaderEditor = new GType({
+	parent: Gtk.HBox.type,
+	name: "ShaderEditor",
+	init: function()
+	{
+		// Private
+		
+		var source_buffer = new GtkSource.SourceBuffer({language: js_lang});
+		var source_view = new GtkSource.SourceView.with_buffer(source_buffer);
+		var compile_button = new Gtk.Button({label: "Compile"});
+		var scrolled_window = new Gtk.ScrolledWindow({vscrollbar_policy: Gtk.PolicyType.AUTOMATIC,
+													  hscrollbar_policy: Gtk.PolicyType.AUTOMATIC});
+		
+		// Public
+		
+		this.connect_shader_view = function (shader_view)
+		{
+			compile_button.signal.clicked.connect(shader_view.run_shader, source_buffer);
+		};
+		
+		// Implementation
+		
+		source_buffer.text = Gio.simple_read("default.glsl");
+		
+		source_view.set_show_line_numbers(true);
+		source_view.set_show_right_margin(true);
+		source_view.set_highlight_current_line(true);
+		source_view.set_right_margin_position(80);
+		
+		scrolled_window.add(source_view);
+		
+		this.pack_start(scrolled_window, true, true);
+		this.pack_start(compile_button);
+	}
+});
+
diff --git a/examples/clutter-shader/ShaderView.js b/examples/clutter-shader/ShaderView.js
index fa1d351..058a431 100644
--- a/examples/clutter-shader/ShaderView.js
+++ b/examples/clutter-shader/ShaderView.js
@@ -1,50 +1,57 @@
 #!/usr/bin/env seed
+
+imports.gi.versions.Clutter = "0.9";
+
 Gtk = imports.gi.Gtk;
 Clutter = imports.gi.Clutter;
 GtkSource = imports.gi.GtkSource;
 Gio = imports.gi.Gio;
 
-function ShaderView(source_type, actor, reflection)
-{
-	this.hbox = new Gtk.HBox();
-
-	var source_lang_mgr = new GtkSource.SourceLanguageManager();
-	var js_lang = source_lang_mgr.get_language("c");
-
-	var source_buf = new GtkSource.SourceBuffer({language: js_lang});
-	source_buf.text = Gio.simple_read("default.glsl");
-	var source_view = new GtkSource.SourceView.with_buffer(source_buf);
-	source_view.set_show_line_numbers(true);
-	source_view.set_show_right_margin(true);
-	source_view.set_highlight_current_line(true);
-	source_view.set_right_margin_position(80);
-
-	this.source_type = source_type;
-
-	var compile = new Gtk.Button({label: "Compile"});
-
-	var scrolled_window = new Gtk.ScrolledWindow(
-												 {vscrollbar_policy: Gtk.PolicyType.AUTOMATIC,
-												  hscrollbar_policy: Gtk.PolicyType.AUTOMATIC});
-	scrolled_window.add(source_view);
-
-	this.hbox.pack_start(scrolled_window, true, true);
-	this.hbox.pack_start(compile);
-	this.actor = actor;
-	this.reflection = reflection;
+ShaderView = new GType({
+	parent: Clutter.Group.type,
+	name: "ShaderView",
+	init: function()
+	{
+		// Private
+
+		var texture = new Clutter.Texture({filename: "bob.jpg"});
+		var reflection = new Clutter.Clone({source: texture});
+		var shader = new Clutter.Shader();
+		
+		// Public
+		
+		this.resize = function (width, height)
+		{
+			texture.x = width / 2;
+			texture.y = height / 2;
 
-	this.make_shader = function(button, that)
+			reflection.x = width / 2;
+			reflection.y = (height / 2) + texture.height;
+		};
+				
+		this.run_shader = function(button, editor)
 		{
 			shader.enabled = false;
-			if (that.source_type == "fragment_source")
-				shader.fragment_source = source_buf.text;
-			else
-				shader.vertex_source = source_buf.text;
+			shader.fragment_source = editor.text;
 			shader.compile();
 			shader.enabled = true;
-			that.actor.set_shader(shader);
-			that.reflection.set_shader(shader);
+			
+			texture.set_shader(shader);
+			reflection.set_shader(shader);
 		};
+		
+		// Implementation
+		
+		reflection.width = reflection.height = texture.width = texture.height = 300;
+		
+		reflection.anchor_x = texture.anchor_x = texture.width / 2;
+		reflection.anchor_y = texture.anchor_y = texture.height / 2;
+		
+		reflection.rotation_angle_z = 180;
+		reflection.opacity = 80;
+		
+		this.add_actor(texture);
+		this.add_actor(reflection);
+	}
+});
 
-	compile.signal.clicked.connect(this.make_shader, this);
-}
diff --git a/examples/clutter-shader/bob.jpg b/examples/clutter-shader/bob.jpg
index 77403ba..dc3d376 100644
Binary files a/examples/clutter-shader/bob.jpg and b/examples/clutter-shader/bob.jpg differ
diff --git a/examples/clutter-shader/default.glsl b/examples/clutter-shader/default.glsl
index 18ff041..f303cb7 100644
--- a/examples/clutter-shader/default.glsl
+++ b/examples/clutter-shader/default.glsl
@@ -1,4 +1,4 @@
-uniform float radius = 30;
+uniform float radius = 50;
 uniform sampler2D rectTexture;
 uniform float x_step = 0.0001, y_step = 0.0001;
         
diff --git a/examples/clutter-shader/main.js b/examples/clutter-shader/main.js
index 79bee74..fd80303 100755
--- a/examples/clutter-shader/main.js
+++ b/examples/clutter-shader/main.js
@@ -1,59 +1,42 @@
 #!/usr/bin/env seed
-imports.gi.versions.Clutter = "0.8";
-imports.gi.versions.GtkClutter = "0.8";
+
+imports.gi.versions.Clutter = "0.9";
+imports.gi.versions.GtkClutter = "0.9";
 
 Clutter = imports.gi.Clutter;
 Gtk = imports.gi.Gtk;
 GtkSource = imports.gi.GtkSource;
 GtkClutter = imports.gi.GtkClutter;
 Gio = imports.gi.Gio;
+ShaderEditor = imports.ShaderEditor;
 ShaderView = imports.ShaderView;
 
 Gtk.init(Seed.argv);
 GtkClutter.init(Seed.argv);
 
 var window = new Gtk.Window();
+window.signal.hide.connect(Gtk.main_quit);
+
 var gtkstage = new GtkClutter.Embed();
 var stage = gtkstage.get_stage();
-var texture = new Clutter.Texture({filename:"bob.jpg"});
-var reflection = new Clutter.CloneTexture({parent_texture: texture});
-ShaderView.shader = new Clutter.Shader();
-var shaderfield = new ShaderView.ShaderView("fragment_source", texture,reflection);
-var vbox = new Gtk.VBox();
-var notebook = new Gtk.Notebook();
-var c = new Clutter.Color();
-Clutter.color_parse("Black",c);
-
-notebook.append_page(shaderfield.hbox, new Gtk.Label({label:"Fragment"}));
-reflection.width = reflection.height = texture.width = texture.height = 300;
 
-var pane = new Gtk.VPaned();
+gtkstage.set_size_request(500,500);
+stage.color = {alpha: 1};
 
-pane.add1(gtkstage);
-pane.add2(notebook);
+var shader_view = new ShaderView.ShaderView();
 
-pane.set_position(400);
+var editor = new ShaderEditor.ShaderEditor();
+editor.connect_shader_view(shader_view);
 
-gtkstage.set_size_request(500,500);
-vbox.pack_start(pane, true, true);
+var pane = new Gtk.VPaned({position: 400});
+pane.add1(gtkstage);
+pane.add2(editor);
+window.add(pane);
 
-window.add(vbox);
-stage.add_actor(texture);
-stage.add_actor(reflection);
+stage.add_actor(shader_view);
 
 window.show_all();
-stage.show_all();
-
-reflection.anchor_x = texture.anchor_x = texture.width/2;
-reflection.anchor_y = texture.anchor_y = texture.height/2;
-texture.x = stage.width/2;
-texture.y = stage.height/2;
-
-reflection.x = stage.width/2;
-reflection.y = stage.height/2+texture.height;
-reflection.rotation_angle_z = 180;
-reflection.opacity = 80;
 
-stage.color = c;
+shader_view.resize(stage.width, stage.height);
 
 Gtk.main();



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