From 1676db749dc23da9fcd9c767de2f1e9a0c61b2b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Frings-F=C3=BCrst?= Date: Thu, 23 Mar 2023 19:39:03 +0100 Subject: New upstream version 44.0 --- src/app-window.vala | 39 +++++++++++++++++++++++++++++++++------ src/book.vala | 26 ++++++++++++++++++++++++++ src/page-icon.vala | 21 +++++++++++++++++++-- src/page.vala | 16 ++++++++-------- 4 files changed, 86 insertions(+), 16 deletions(-) (limited to 'src') diff --git a/src/app-window.vala b/src/app-window.vala index cea6837..c4f9af7 100644 --- a/src/app-window.vala +++ b/src/app-window.vala @@ -1343,6 +1343,27 @@ public class AppWindow : Hdy.ApplicationWindow b.visible = true; g.attach (b, 1, 2, 1, 1); + /* Label on button for keeping the ordering, but flip every second upside down */ + b = make_reorder_button (_("Flip even pages upside-down"), "R1U2R3U4R5U6-R1R2R3R4R5R6"); + b.clicked.connect (() => + { + book.flip_every_second(FlipEverySecond.Even); + dialog.destroy (); + }); + b.visible = true; + g.attach (b, 0, 3, 1, 1); + + + /* Label on button for keeping the ordering, but flip every second upside down */ + b = make_reorder_button (_("Flip odd pages upside-down"), "U1R2U3R4U5R6-R1R2R3R4R5R6"); + b.clicked.connect (() => + { + book.flip_every_second(FlipEverySecond.Odd); + dialog.destroy (); + }); + b.visible = true; + g.attach (b, 1, 3, 1, 1); + dialog.present (); } @@ -1401,10 +1422,15 @@ public class AppWindow : Hdy.ApplicationWindow page_box.visible = true; box.add (page_box); } - - var icon = new PageIcon (side, items[i] - '1'); - icon.visible = true; - page_box.add (icon); + if (side == 'U') { + var icon = new PageIcon (side, items[i] - '1', 180); + icon.visible = true; + page_box.add (icon); + } else { + var icon = new PageIcon (side, items[i] - '1', 0); + icon.visible = true; + page_box.add (icon); + } } return box; @@ -1650,8 +1676,8 @@ public class AppWindow : Hdy.ApplicationWindow instructions = _("Drivers for this are available on the Epson website."); break; case "lexmark_nscan": - /* Message to indicate an Lexmark scanner has been detected */ - message = _("You appear to have an Lexmark scanner."); + /* Message to indicate a Lexmark scanner has been detected */ + message = _("You appear to have a Lexmark scanner."); /* Instructions on how to install Lexmark scanner drivers */ instructions = _("Drivers for this are available on the Lexmark website."); break; @@ -1849,6 +1875,7 @@ public class AppWindow : Hdy.ApplicationWindow app.set_accels_for_action ("app.print", { "P" }); app.set_accels_for_action ("app.help", { "F1" }); app.set_accels_for_action ("app.quit", { "Q" }); + app.set_accels_for_action ("app.preferences", { "comma" }); app.set_accels_for_action ("win.show-help-overlay", { "question" }); var gear_menu = new Menu (); diff --git a/src/book.vala b/src/book.vala index d2aa54d..e25eb35 100644 --- a/src/book.vala +++ b/src/book.vala @@ -11,6 +11,12 @@ public delegate void ProgressionCallback (double fraction); +// Assumes first page has index 0 +public enum FlipEverySecond { + Even = 1, + Odd = 0, +} + public class Book : Object { private List pages; @@ -99,6 +105,26 @@ public class Book : Object changed (); } + public void flip_every_second (FlipEverySecond flip) + { + var new_pages = new List (); + for (var i = 0; i < n_pages; i++) + { + var page = pages.nth_data (i); + if (i % 2 == (int)flip) { + page.rotate_left(); + page.rotate_left(); + new_pages.append (page); + } else { + new_pages.append (page); + } + } + pages = (owned) new_pages; + + reordered (); + changed (); + } + public void combine_sides_reverse () { var new_pages = new List (); diff --git a/src/page-icon.vala b/src/page-icon.vala index f1a25ea..3e3fa93 100644 --- a/src/page-icon.vala +++ b/src/page-icon.vala @@ -14,12 +14,14 @@ public class PageIcon : Gtk.DrawingArea { private char side; private int position; + private int angle; private const int MINIMUM_WIDTH = 20; - public PageIcon (char side, int position) + public PageIcon (char side, int position, int angle) { this.side = side; this.position = position; + this.angle = angle; } public override void get_preferred_width (out int minimum_width, out int natural_width) @@ -73,6 +75,14 @@ public class PageIcon : Gtk.DrawingArea /* Orange 3 */ rgba.parse ("#ff7800"); break; + case 'U': + /* green 4 */ + rgba.parse ("#5cc02e"); + break; + case 'R': + /* blue 4 */ + rgba.parse ("#0deee7"); + break; default: /* Yellow 3 to Red 2 */ Gdk.RGBA start = {}, end = {}; @@ -109,8 +119,15 @@ public class PageIcon : Gtk.DrawingArea var text = @"$(position + 1)"; Cairo.TextExtents extents; + + var rad = Math.PI / 180.0 * angle; c.text_extents (text, out extents); - c.translate ((w - extents.width) * 0.5 - 0.5, (h + extents.height) * 0.5 - 0.5); + c.translate ((w - extents.width) * 0.5 - 0.5, extents.height + (h - extents.height) * 0.5 - 0.5); + c.rotate(rad); + // only correct for 0 and 180 degree + var tx = (1.0 - Math.sin(rad)) * extents.width / 2; + var ty = (1.0 - Math.sin(rad)) * extents.height / 2; + c.translate(-tx, +ty); c.show_text (text); return true; diff --git a/src/page.vala b/src/page.vala index 62af773..cfe70e1 100644 --- a/src/page.vala +++ b/src/page.vala @@ -400,20 +400,20 @@ public class Page : Object switch (name) { case "A3": - w = 11.7; - h = 16.5; + w = 11.692; + h = 16.535; break; case "A4": - w = 8.3; - h = 11.7; + w = 8.267; + h = 11.692; break; case "A5": - w = 5.8; - h = 8.3; + w = 5.846; + h = 8.267; break; case "A6": - w = 4.1; - h = 5.8; + w = 4.1335; + h = 5.846; break; case "letter": w = 8.5; -- cgit v1.2.3