[seed] Clutter-Shader: More or less a rewrite.
- From: Tim Horton <hortont src gnome org>
- To: svn-commits-list gnome org
- Subject: [seed] Clutter-Shader: More or less a rewrite.
- Date: Wed, 13 May 2009 00:13:26 -0400 (EDT)
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]