[gnome-shell/wip/carlosg/pad-osd-fixes: 5/6] padOsd: Keep label coordinates in image coordinates



commit fbea47e63da7b7d96e022212bd28d9b08b6dc3a4
Author: Carlos Garnacho <carlosg gnome org>
Date:   Fri May 29 16:59:46 2020 +0200

    padOsd: Keep label coordinates in image coordinates
    
    Apply the necessary transforms to map those coordinates to actor
    positions in the allocate phase. This all fits since it's the place
    where we do know the size the actor will have.
    
    https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1290

 js/ui/padOsd.js | 26 +++++++++-----------------
 1 file changed, 9 insertions(+), 17 deletions(-)
---
diff --git a/js/ui/padOsd.js b/js/ui/padOsd.js
index 0809dfbfee..9b0170d7d5 100644
--- a/js/ui/padOsd.js
+++ b/js/ui/padOsd.js
@@ -411,9 +411,6 @@ var PadDiagram = GObject.registerClass({
     }
 
     _updateDiagramScale() {
-        if (this._handle == null)
-            return;
-
         [this._actorWidth, this._actorHeight] = this.get_size();
         let dimensions = this._handle.get_dimensions();
         let scaleX = this._actorWidth / dimensions.width;
@@ -426,6 +423,11 @@ var PadDiagram = GObject.registerClass({
         let [, natWidth] = child.get_preferred_width(natHeight);
         let childBox = new Clutter.ActorBox();
 
+        // I miss Cairo.Matrix
+        let dimensions = this._handle.get_dimensions();
+        x = x * this._scale + this._actorWidth / 2 - dimensions.width / 2 * this._scale;
+        y = y * this._scale + this._actorHeight / 2 - dimensions.height / 2 * this._scale;
+
         if (direction == LTR) {
             childBox.x1 = x;
             childBox.x2 = x + natWidth;
@@ -441,6 +443,9 @@ var PadDiagram = GObject.registerClass({
 
     vfunc_allocate(box) {
         super.vfunc_allocate(box);
+        if (this._handle === null)
+            return;
+
         this._updateDiagramScale();
 
         for (let i = 0; i < this._labels.length; i++) {
@@ -476,17 +481,6 @@ var PadDiagram = GObject.registerClass({
         cr.$dispose();
     }
 
-    _transformPoint(x, y) {
-        if (this._handle == null || this._scale == null)
-            return [x, y];
-
-        // I miss Cairo.Matrix
-        let dimensions = this._handle.get_dimensions();
-        x = x * this._scale + this._actorWidth / 2 - dimensions.width / 2 * this._scale;
-        y = y * this._scale + this._actorHeight / 2 - dimensions.height / 2 * this._scale;
-        return [Math.round(x), Math.round(y)];
-    }
-
     _getItemLabelCoords(labelName, leaderName) {
         if (this._handle == null)
             return [false];
@@ -514,9 +508,7 @@ var PadDiagram = GObject.registerClass({
             pos.y = this._imageHeight - pos.y;
         }
 
-        let [x, y] = this._transformPoint(pos.x, pos.y);
-
-        return [true, x, y, direction];
+        return [true, pos.x, pos.y, direction];
     }
 
     _getButtonLabels(button) {


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