[gnome-maps/wip/mlundblad/dont-use-offscreen-window] WIP: transitPrintLayout: Use Cairo and Pango to render



commit 76a79cc55ebf135fc790b316d61590be75b6ae90
Author: Marcus Lundblad <ml update uu se>
Date:   Sun Mar 17 22:22:29 2019 +0100

    WIP: transitPrintLayout: Use Cairo and Pango to render

 src/transitPrintLayout.js | 54 ++++++++++++++++++++++++++++++++++-------------
 1 file changed, 39 insertions(+), 15 deletions(-)
---
diff --git a/src/transitPrintLayout.js b/src/transitPrintLayout.js
index 5648390..bcb7c28 100644
--- a/src/transitPrintLayout.js
+++ b/src/transitPrintLayout.js
@@ -25,9 +25,12 @@ const Clutter = imports.gi.Clutter;
 const Gdk = imports.gi.Gdk;
 const GObject = imports.gi.GObject;
 const Gtk = imports.gi.Gtk;
+const Pango = imports.gi.Pango;
 
+const Gfx = imports.gfx;
 const MapSource = imports.mapSource;
 const PrintLayout = imports.printLayout;
+const Transit = imports.transit;
 const TransitArrivalMarker = imports.transitArrivalMarker;
 const TransitArrivalRow = imports.transitArrivalRow;
 const TransitBoardMarker = imports.transitBoardMarker;
@@ -214,24 +217,45 @@ class TransitPrintLayout extends PrintLayout.PrintLayout {
     }
 
     _drawInstruction(width, height, leg, start) {
-        let legRow = new TransitLegRow.TransitLegRow({
-            visible: true,
-            leg: leg,
-            start: start,
-            print: true
-        });
-
-        this._renderWidget(legRow, width, height);
+        let pageNum = this.numPages - 1;
+        let x = this._cursorX;
+        let y = this._cursorY;
+        let surface = new Cairo.ImageSurface(Cairo.Format.ARGB32, width, height);
+        let cr = new Cairo.Context(surface);
+        let timeWidth = !leg.transit && start ? height * 2 : height * 4;
+
+        this._drawIcon(cr, leg.iconName, width, height);
+        this._drawTextVerticallyCentered(cr, leg.prettyPrintTime({ start: start }),
+                                         timeWidth, height,
+                                         this._rtl ? 0 : width - timeWidth - 1,
+                                         this._rtl ? Pango.Alignment.LEFT :
+                                                     Pango.Alignment.RIGHT);
+
+        this._addSurface(surface, x, y, pageNum);
     }
 
     _drawArrival(width, height) {
-        let arrivalRow = new TransitArrivalRow.TransitArrivalRow({
-            visible: true,
-            itinerary: this._itinerary,
-            print: true
-        });
-
-        this._renderWidget(arrivalRow, width, height);
+        let pageNum = this.numPages - 1;
+        let x = this._cursorX;
+        let y = this._cursorY;
+        let surface = new Cairo.ImageSurface(Cairo.Format.ARGB32, width, height);
+        let cr = new Cairo.Context(surface);
+        let lastLeg = this._itinerary.legs[this._itinerary.legs.length - 1];
+
+        this._drawIcon(cr, 'maps-point-end-symbolic', width, height);
+        // draw the arrival text
+        this._drawTextVerticallyCentered(cr, Transit.getArrivalLabel(lastLeg),
+                                         width - height * 3,
+                                         height, this._rtl ? height * 2 : height,
+                                         Pango.Alignment.LEFT);
+        // draw arrival time
+        this._drawTextVerticallyCentered(cr, lastLeg.prettyPrintArrivalTime(),
+                                         height * 2, height,
+                                         this._rtl ? 0 : width - height * 2 - 1,
+                                         this._rtl ? Pango.Alignment.LEFT :
+                                                     Pango.Alignment.RIGHT);
+
+        this._addSurface(surface, x, y, pageNum);
     }
 
     _legHasMiniMap(index) {


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