[gnome-maps/wip/jonasdn/service-gnome-3-12: 3/3] Use GtkClutter for attribution logo



commit 81056144bb6cf0026a8f9b2d6e35c5d6fd24b3c4
Author: Jonas Danielsson <jonas threetimestwo org>
Date:   Wed Aug 17 12:57:05 2016 +0200

    Use GtkClutter for attribution logo
    
    https://bugzilla.gnome.org/show_bug.cgi?id=769352

 src/mainWindow.js |    3 ---
 src/mapSource.js  |   47 ++++++++++++++++++++++++++++++++++-------------
 src/mapView.js    |    5 +++++
 3 files changed, 39 insertions(+), 16 deletions(-)
---
diff --git a/src/mainWindow.js b/src/mainWindow.js
index f315504..6853b10 100644
--- a/src/mainWindow.js
+++ b/src/mainWindow.js
@@ -30,7 +30,6 @@ const Lang = imports.lang;
 const Mainloop = imports.mainloop;
 
 const Application = imports.application;
-const MapSource = imports.mapSource;
 const MapView = imports.mapView;
 const SearchPopup = imports.searchPopup;
 const ContextMenu = imports.contextMenu;
@@ -74,8 +73,6 @@ const MainWindow = new Lang.Class({
         this._restoreWindowGeometry();
 
         this._windowContent.add_overlay(new ZoomControl.ZoomControl(this.mapView));
-        this._windowContent.add_overlay(new MapSource.AttributionLogo());
-
         this._windowContent.show_all();
     },
 
diff --git a/src/mapSource.js b/src/mapSource.js
index ac9cd2b..29b1c1f 100644
--- a/src/mapSource.js
+++ b/src/mapSource.js
@@ -22,6 +22,7 @@ const GdkPixbuf = imports.gi.GdkPixbuf;
 const Gio = imports.gi.Gio;
 const GLib = imports.gi.GLib;
 const Gtk = imports.gi.Gtk;
+const GtkClutter = imports.gi.GtkClutter;
 const Lang = imports.lang;
 const Soup = imports.gi.Soup;
 
@@ -38,28 +39,48 @@ const _DEFAULT_SERVICE_FILE = 'maps-service.json';
 const _FILE_CACHE_SIZE_LIMIT = (10 * 1024 * 1024); /* 10Mb */
 const _MEMORY_CACHE_SIZE_LIMIT = 100; /* number of tiles */
 
+const _LOGO_PADDING_X = 10;
+const _LOGO_PADDING_Y = 25;
+
 const AttributionLogo = new Lang.Class({
     Name: 'AttributionLogo',
-    Extends: Gtk.Bin,
-
-    _init: function() {
-        this.parent({ halign: Gtk.Align.END,
-                      valign: Gtk.Align.END,
-                      margin_bottom: 6,
-                      margin_end: 6 });
-        this.add(_attributionImage);
+    Extends: GtkClutter.Actor,
+
+    _init: function(view) {
+        this.parent();
+
+        if (_attributionImage)
+            this.contents = _attributionImage;
+        else
+            return;
+
+        view.connect('notify::width', (function() {
+            this._updatePosition(view);
+        }).bind(this));
+
+        view.connect('notify::height', (function() {
+            this._updatePosition(view);
+        }).bind(this));
+
+        this._updatePosition(view);
+    },
+
+    _updatePosition: function(view) {
+        let width = _attributionImage.pixbuf.width;
+        let height = _attributionImage.pixbuf.height;
+
+        this.set_position(view.width  - width  - _LOGO_PADDING_X,
+                          view.height - height - _LOGO_PADDING_Y);
     }
 });
 
 function _updateAttributionImage(source) {
+    if (!source.attribution_logo || source.attribution_logo === "")
+        return;
+
     if (!_attributionImage)
         _attributionImage = new Gtk.Image();
 
-    if (!source.attribution_logo || source.attribution_logo === "") {
-        _attributionImage.visible = false;
-        return;
-    }
-
     let data = GLib.base64_decode(source.attribution_logo);
     let stream = Gio.MemoryInputStream.new_from_bytes(GLib.Bytes.new(data));
     _attributionImage.pixbuf = GdkPixbuf.Pixbuf.new_from_stream(stream, null);
diff --git a/src/mapView.js b/src/mapView.js
index ac4e8b1..8e705c4 100644
--- a/src/mapView.js
+++ b/src/mapView.js
@@ -100,6 +100,11 @@ const MapView = new Lang.Class({
             this.view.map_source = MapSource.createAerialSource();
         else
             this.view.map_source = MapSource.createStreetSource();
+
+        if (!this._attribution) {
+                this._attribution = new MapSource.AttributionLogo(this.view);
+                this.view.add_child(this._attribution);
+        }
     },
 
     geocodeSearch: function(searchString, searchCompleteCallback) {


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