diff --git a/.gitmodules b/.gitmodules index 902c96c..5700706 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,6 @@ [submodule "templates/umap/maki"] path = templates/umap/maki url = https://github.com/mapbox/maki.git +[submodule "templates/poi_markers/Font-Awesome-SVG-PNG"] + path = templates/poi_markers/Font-Awesome-SVG-PNG + url = https://github.com/encharm/Font-Awesome-SVG-PNG diff --git a/ocitysmap/indexlib/renderer.py b/ocitysmap/indexlib/renderer.py index 2dfc189..a37a19e 100644 --- a/ocitysmap/indexlib/renderer.py +++ b/ocitysmap/indexlib/renderer.py @@ -123,49 +123,53 @@ class PoiIndexRenderer: return area def _render_header(self, ctx, area, dpi, color, label, logo = None): + f = dpi / UTILS.PT_PER_INCH; + ctx.save() - ctx.translate(10, 10) + ctx.translate(10*f, 10*f) c = Color(color); ctx.set_source_rgb(c.red, c.green, c.blue) - ctx.rectangle( 0, 0, area.w - 20, dpi * 0.8) + ctx.rectangle( 0, 0, (area.w - 20)*f, dpi * 0.8) ctx.fill() - x = 5 + x = 5*f if logo != None: logo_path = os.path.abspath(os.path.join( - os.path.dirname(__file__), '..', '..', '..', 'Font-Awesome-SVG-PNG', 'white', 'svg', logo + '.svg')) + os.path.dirname(__file__), '..', '..', 'templates', 'poi_markers', 'Font-Awesome-SVG-PNG', 'white', 'svg', logo + '.svg')) if os.path.isfile(logo_path): rsvg = Rsvg.Handle() svg = rsvg.new_from_file(logo_path) scale = dpi * 0.6 / svg.props.height; - x += svg.props.width * scale + 10 + x += svg.props.width * scale + 10*f ctx.save() - ctx.translate(5, 5) + ctx.translate(5*f, 5*f) ctx.scale(scale, scale) svg.render_cairo(ctx) ctx.restore() else: - LOG.debug("icon not found %s" % logo_path) + LOG.warning("icon not found %s" % logo_path) ctx.set_source_rgb(1, 1, 1) ctx.select_font_face("Droid Sans Bold", cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_BOLD) - ctx.set_font_size(dpi - 30) + ctx.set_font_size(dpi*0.6) x_bearing, y_bearing, width, height = ctx.text_extents(label)[:4] - ctx.move_to(x, 10 - y_bearing) + ctx.move_to(x, 10*f - y_bearing) ctx.show_text(label) ctx.restore() return dpi * 0.8 def _render_item(self, ctx, area, dpi, color, number, label, gridlabel, logo = None): - x = 5 + f = dpi / UTILS.PT_PER_INCH; + + x = 5*f marker_path = os.path.abspath(os.path.join( os.path.dirname(__file__), '..', '..', 'images', 'marker.svg')) @@ -183,8 +187,8 @@ class PoiIndexRenderer: rsvg = Rsvg.Handle() svg = rsvg.new_from_data(data.encode()) - scale = 50.0 / svg.props.height; - x += 35 + scale = 50.0 * f/ svg.props.height; + x += 35*f ctx.save() @@ -199,38 +203,39 @@ class PoiIndexRenderer: cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_BOLD) x_bearing, y_bearing, width, height = ctx.text_extents(number)[:4] - ctx.set_font_size((dpi - 30)/(len(number)+1)) - ctx.move_to(20 - width/2, 25) + ctx.set_font_size((dpi*0.6)/(len(number)+1)) + ctx.move_to(20*f - f*width/2, 25*f) ctx.show_text(number) ctx.restore() if logo != None: logo_path = os.path.abspath(os.path.join( - os.path.dirname(__file__), '..', '..', '..', 'Font-Awesome-SVG-PNG', 'black', 'svg', logo + '.svg')) + os.path.dirname(__file__), '..', '..', 'templates', 'poi_markers', 'Font-Awesome-SVG-PNG', 'black', 'svg', logo + '.svg')) if os.path.isfile(logo_path): - svg = rsvg.Handle(logo_path) + rsvg = Rsvg.Handle() + svg = rsvg.new_from_file(logo_path) scale = min(dpi * 0.6 / svg.props.height, dpi * 0.6 / svg.props.width); ctx.save() - ctx.translate(x + 5, 5) + ctx.translate(x + 5, 5*f) ctx.scale(scale, scale) svg.render_cairo(ctx) ctx.restore() - x += svg.props.width * scale + 10 + x += svg.props.width * scale + 10*f else: - LOG.debug("icon not found %s" % logo_path) + LOG.warning("icon not found %s" % logo_path) ctx.save() ctx.set_source_rgb(0, 0, 0) ctx.select_font_face("Droid Sans", cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_NORMAL) - ctx.set_font_size(dpi - 30) + ctx.set_font_size(dpi*0.6) x_bearing, y_bearing, width, height = ctx.text_extents(label)[:4] - ctx.move_to(x, 10 - y_bearing) + ctx.move_to(x, 10*f - y_bearing) ctx.show_text(label) ctx.select_font_face("Droid Sans Mono", @@ -240,7 +245,7 @@ class PoiIndexRenderer: gridlabel = gridParts.group(1) + '-' + gridParts.group(2) x_bearing, y_bearing, width, height = ctx.text_extents(gridlabel)[:4] - ctx.move_to(area.w - width - 15, 10 + height) + ctx.move_to((area.w - 15)*f - width, 10*f + height) ctx.show_text(gridlabel) ctx.restore() @@ -248,10 +253,12 @@ class PoiIndexRenderer: return dpi * 0.7 def render(self, ctx, area, dpi = UTILS.PT_PER_INCH): + f = dpi / UTILS.PT_PER_INCH; + ctx.save() - ctx.translate(area.x, area.y) + ctx.translate(area.x*f, area.y*f) ctx.set_source_rgb(1, 1, 1) - ctx.rectangle(0, 0, area.w, area.h) + ctx.rectangle(0, 0, area.w*f, area.h*f) ctx.fill() n = 0 diff --git a/ocitysmap/layoutlib/render_plugins/poi_markers/__init__.py b/ocitysmap/layoutlib/render_plugins/poi_markers/__init__.py index b68a159..2ade781 100644 --- a/ocitysmap/layoutlib/render_plugins/poi_markers/__init__.py +++ b/ocitysmap/layoutlib/render_plugins/poi_markers/__init__.py @@ -1,6 +1,7 @@ import cairo import os import sys +import math import qrcode import qrcode.image.svg import gi @@ -20,19 +21,19 @@ def render(renderer, ctx): ## ## Draw the creator notice ## - ctx.save() - + #ctx.save() + # # Move to the right position - ctx.translate(safe_margin_dots + usable_area_width_dots/2.3, - ( safe_margin_dots + title_margin_dots - + usable_area_height_dots - + copyright_margin_dots/4. ) ) + #ctx.translate(safe_margin_dots + usable_area_width_dots/2.3, + # ( safe_margin_dots + title_margin_dots + # + usable_area_height_dots + # + copyright_margin_dots/4. ) ) # Draw the copyright notice - self._draw_creator_notice(ctx, usable_area_width_dots, - copyright_margin_dots, - osm_date=osm_date) - ctx.restore() + #self._draw_creator_notice(ctx, usable_area_width_dots, + # copyright_margin_dots, + # osm_date=osm_date) + #ctx.restore() # place POI markers on map canvas n = 0 @@ -40,11 +41,11 @@ def render(renderer, ctx): for poi in category.items: n = n + 1 lat, lon = poi.endpoint1.get_latlong() - renderer._marker(category.color, str(n), lat, lon, ctx, dpi) + renderer._marker(category.color, str(n), lat, lon, ctx, renderer.dpi) # place "you are here" circle if coordinates are given if renderer.street_index.lat != False: - x,y = renderer._latlon2xy(renderer.street_index.lat, renderer.street_index.lon, dpi) + x,y = renderer._latlon2xy(renderer.street_index.lat, renderer.street_index.lon, renderer.dpi) ctx.save() ctx.translate(x, y) ctx.set_source_rgba(1, 0, 0, 0.8) diff --git a/ocitysmap/layoutlib/single_page_renderers.py b/ocitysmap/layoutlib/single_page_renderers.py index 909a813..e09723a 100644 --- a/ocitysmap/layoutlib/single_page_renderers.py +++ b/ocitysmap/layoutlib/single_page_renderers.py @@ -83,10 +83,10 @@ class SinglePageRenderer(Renderer): index_position (str): None or 'side' (index on side), 'bottom' (index at bottom). """ + Renderer.__init__(self, db, rc, tmpdir, dpi) # Prepare the index - if rc.poi_file: self.street_index = PoiIndex(rc.poi_file) else: @@ -194,6 +194,9 @@ class SinglePageRenderer(Renderer): float(self._map_coords[3]), # H dpi)) + if self.rc.poi_file: + self._overlay_effects.append('poi_markers') + # Prepare the grid if index_position: self.grid = self._create_grid(self._map_canvas, dpi)