summaryrefslogtreecommitdiff
path: root/test/smoke-tests/frame-rate-tests/clutter.js
diff options
context:
space:
mode:
Diffstat (limited to 'test/smoke-tests/frame-rate-tests/clutter.js')
-rw-r--r--test/smoke-tests/frame-rate-tests/clutter.js109
1 files changed, 109 insertions, 0 deletions
diff --git a/test/smoke-tests/frame-rate-tests/clutter.js b/test/smoke-tests/frame-rate-tests/clutter.js
new file mode 100644
index 0000000..d3abb4b
--- /dev/null
+++ b/test/smoke-tests/frame-rate-tests/clutter.js
@@ -0,0 +1,109 @@
+const Clutter = imports.gi.Clutter;
+const GdkPixbuf = imports.gi.GdkPixbuf;
+const Cogl = imports.gi.Cogl;
+const Lang = imports.lang;
+const Endless = imports.gi.Endless;
+Clutter.init(null, null);
+
+let crossfade = ARGV[0] === "crossfade";
+
+let file_dir = Endless.getCurrentFileDir();
+
+let BACKGROUND1_PATH = file_dir + '/1080/background1.jpg';
+let BACKGROUND2_PATH = file_dir + '/1080/background2.jpg';
+if (ARGV[1] === "720") {
+ BACKGROUND1_PATH = file_dir + '/720/background1.jpg';
+ BACKGROUND2_PATH = file_dir + '/720/background2.jpg';
+}
+
+// Convenience function to load a gresource image into a Clutter.Image
+function load_clutter_image(path) {
+ let pixbuf = GdkPixbuf.Pixbuf.new_from_file(path);
+ let image = new Clutter.Image();
+ if (pixbuf != null) {
+ image.set_data(pixbuf.get_pixels(),
+ pixbuf.get_has_alpha()
+ ? Cogl.PixelFormat.RGBA_8888
+ : Cogl.PixelFormat.RGB_888,
+ pixbuf.get_width(),
+ pixbuf.get_height(),
+ pixbuf.get_rowstride());
+ }
+ return image;
+}
+
+const TestStage = new Lang.Class ({
+ Name: 'TestStage',
+ Extends: Clutter.Stage,
+
+ _init: function(params) {
+ this.parent(params);
+ this.set_fullscreen(true);
+ this.connect("allocation-changed", Lang.bind(this, function(actor, allocation) {
+ this._update_actors();
+ }));
+
+ this._page1 = new Clutter.Actor({
+ "x-expand": true,
+ "y-expand": true,
+ "content": load_clutter_image(BACKGROUND1_PATH),
+ "reactive": true
+ });
+ this.add_child(this._page1);
+ this._page1.connect("button-press-event", Lang.bind(this, function(actor, event) {
+ this._swap();
+ }));
+
+ this._page2 = new Clutter.Actor({
+ "x-expand": true,
+ "y-expand": true,
+ "content": load_clutter_image(BACKGROUND2_PATH),
+ "reactive": true
+ });
+ this.add_child(this._page2);
+ this._page2.connect("button-press-event", Lang.bind(this, function(actor, event) {
+ this._swap();
+ }));
+
+ this._update_actors();
+ this.connect("key-press-event", Clutter.main_quit);
+ },
+
+ _swap: function() {
+ this._swapped = !this._swapped;
+ this._page1.save_easing_state();
+ this._page2.save_easing_state();
+ this._page1.set_easing_duration(10000);
+ this._page2.set_easing_duration(10000);
+ this._update_actors();
+ this._page1.restore_easing_state();
+ this._page2.restore_easing_state();
+ },
+
+ _update_actors: function() {
+ this._page1.x = 0;
+ this._page1.width = this.get_width();
+ this._page1.height = this.get_height();
+ this._page2.x = 0;
+ this._page2.width = this.get_width();
+ this._page2.height = this.get_height();
+ if (crossfade) {
+ if(this._swapped)
+ this._page2.opacity = 255;
+ else
+ this._page2.opacity = 0;
+ }
+ else {
+ if(this._swapped)
+ this._page1.x = -this.get_width();
+ else
+ this._page2.x = this.get_width();
+ }
+ }
+});
+
+
+let stage = new TestStage();
+stage.show();
+Clutter.main();
+stage.destroy();