maposmatic-dev
[Top][All Lists]
Advanced

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

[Maposmatic-dev] [PATCH] Propose a default amongst compatible paper size


From: gael . utard
Subject: [Maposmatic-dev] [PATCH] Propose a default amongst compatible paper sizes
Date: Sat, 31 Mar 2012 23:55:25 +0200

From: Gael UTARD <address@hidden>

Signed-off-by: Gael UTARD <address@hidden>
---
 ocitysmap2-render                             |   24 +++++++++++-------------
 ocitysmap2/layoutlib/abstract_renderer.py     |    4 ++--
 ocitysmap2/layoutlib/multi_page_renderer.py   |    3 ++-
 ocitysmap2/layoutlib/single_page_renderers.py |   14 +++++++++-----
 4 files changed, 24 insertions(+), 21 deletions(-)

diff --git a/ocitysmap2-render b/ocitysmap2-render
index 4961c8c..8f34d6a 100755
--- a/ocitysmap2-render
+++ b/ocitysmap2-render
@@ -88,10 +88,9 @@ def main():
                              % (', '.join(KNOWN_RENDERERS_NAMES),
                                 KNOWN_RENDERERS_NAMES[0].split()[0])))
     parser.add_option('--paper-format', metavar='FMT',
-                      help='Either "first" for the first allowed (default), '
-                      'or one of %s.'\
+                      help='Either "default", or one of %s.'\
                           % ', '.join(KNOWN_PAPER_SIZE_NAMES),
-                      default='first')
+                      default='default')
     parser.add_option('--orientation', metavar='ORIENTATION',
                       help='Either "portrait" or "landscape".',
                       default='portrait')
@@ -173,24 +172,23 @@ def main():
                          (format, cls_renderer.name))
 
     # Parse paper size
-    if (options.paper_format != 'first') \
+    if (options.paper_format != 'default') \
             and options.paper_format not in KNOWN_PAPER_SIZE_NAMES:
-        parser.error("Invalid paper format. Allowed formats = first, %s"
+        parser.error("Invalid paper format. Allowed formats = default, %s"
                      % ', '.join(KNOWN_PAPER_SIZE_NAMES))
 
     # Determine actual paper size
-    compat_papers = sorted(cls_renderer.get_compatible_paper_sizes(bbox,
-         stylesheet.zoom_level),
-         key = lambda p: p[1])
+    compat_papers = cls_renderer.get_compatible_paper_sizes(bbox,
+         stylesheet.zoom_level)
     if not compat_papers:
         parser.error("No paper size compatible with this rendering.")
 
     paper_descr = None
-    if options.paper_format == 'first':
-        if len(compat_papers) > 1:
-            paper_descr = compat_papers[1] # First non-Best-fit
-        else:
-            paper_descr = compat_papers[0] # Best Fit
+    if options.paper_format == 'default':
+        for p in compat_papers:
+            if p[5]:
+                paper_descr = p
+                break
     else:
         # Make sure the requested paper size is in list
         for p in compat_papers:
diff --git a/ocitysmap2/layoutlib/abstract_renderer.py 
b/ocitysmap2/layoutlib/abstract_renderer.py
index 11aed7d..3811b5a 100644
--- a/ocitysmap2/layoutlib/abstract_renderer.py
+++ b/ocitysmap2/layoutlib/abstract_renderer.py
@@ -313,7 +313,7 @@ class Renderer:
                 milimeters on the rendered map.
 
         Returns a list of tuples (paper name, width in mm, height in
-        mm, portrait_ok, landscape_ok). Paper sizes are represented in
-        portrait mode.
+        mm, portrait_ok, landscape_ok, is_default). Paper sizes are
+        represented in portrait mode.
         """
         raise NotImplementedError
diff --git a/ocitysmap2/layoutlib/multi_page_renderer.py 
b/ocitysmap2/layoutlib/multi_page_renderer.py
index f66ba94..6df10f8 100644
--- a/ocitysmap2/layoutlib/multi_page_renderer.py
+++ b/ocitysmap2/layoutlib/multi_page_renderer.py
@@ -763,6 +763,7 @@ class MultiPageRenderer(Renderer):
 
     # In multi-page mode, we only accept A4, A5 and US letter as paper
     # sizes. The goal is to render booklets, not posters.
+    # The default paper size is A4 portrait
     @staticmethod
     def get_compatible_paper_sizes(bounding_box, zoom_level,
                                    
resolution_km_in_mm=Renderer.DEFAULT_KM_IN_MM,
@@ -773,7 +774,7 @@ class MultiPageRenderer(Renderer):
             # Skip unsupported paper formats
             if sz[0] not in acceptable_formats:
                 continue
-            valid_sizes.append((sz[0], sz[1], sz[2], True, True))
+            valid_sizes.append((sz[0], sz[1], sz[2], True, True, sz[0] == 
'A4'))
         return valid_sizes
 
     @classmethod
diff --git a/ocitysmap2/layoutlib/single_page_renderers.py 
b/ocitysmap2/layoutlib/single_page_renderers.py
index 0ac066c..4a564ba 100644
--- a/ocitysmap2/layoutlib/single_page_renderers.py
+++ b/ocitysmap2/layoutlib/single_page_renderers.py
@@ -448,8 +448,8 @@ class SinglePageRenderer(Renderer):
               'bottom' (index at bottom).
 
         Returns a list of tuples (paper name, width in mm, height in
-        mm, portrait_ok, landscape_ok). Paper sizes are represented in
-        portrait mode.
+        mm, portrait_ok, landscape_ok, is_default). Paper sizes are
+        represented in portrait mode.
         """
         geo_height_m, geo_width_m = bounding_box.spheric_sizes()
         paper_width_mm = int(geo_width_m/1000.0 * resolution_km_in_mm)
@@ -479,15 +479,19 @@ class SinglePageRenderer(Renderer):
             landscape_ok = paper_width_mm <= h and paper_height_mm <= w
 
             if portrait_ok or landscape_ok:
-                valid_sizes.append((name, w, h, portrait_ok, landscape_ok))
+                valid_sizes.append([name, w, h, portrait_ok, landscape_ok, 
False])
 
         # Add a 'Custom' paper format to the list that perfectly matches the
         # bounding box.
-        valid_sizes.append(('Best fit',
+        valid_sizes.append(['Best fit',
                             min(paper_width_mm, paper_height_mm),
                             max(paper_width_mm, paper_height_mm),
                             paper_width_mm < paper_height_mm,
-                            paper_width_mm > paper_height_mm))
+                            paper_width_mm > paper_height_mm,
+                            False])
+
+        # select the first one as default
+        valid_sizes[0][5] = True
 
         return valid_sizes
 
-- 
1.7.5.4




reply via email to

[Prev in Thread] Current Thread [Next in Thread]