gaphorconvert now uses DiagramExport for exporting diagrams
No need to implement this in 2 places.
This commit is contained in:
parent
84848137d2
commit
8194acfb8a
@ -52,7 +52,7 @@ def init_entrypoints(
|
||||
if depcls:
|
||||
kwargs[dep] = init(dep, depcls)
|
||||
else:
|
||||
logger.info(
|
||||
logger.debug(
|
||||
f"Entrypont {name} parameter {dep} does not reference a resolved dependency"
|
||||
)
|
||||
else:
|
||||
|
@ -26,14 +26,15 @@ class DiagramExport(Service, ActionProvider):
|
||||
Service for exporting diagrams as images (SVG, PNG, PDF).
|
||||
"""
|
||||
|
||||
def __init__(self, diagrams, properties, export_menu):
|
||||
def __init__(self, diagrams=None, export_menu=None):
|
||||
self.diagrams = diagrams
|
||||
self.properties = properties
|
||||
self.export_menu = export_menu
|
||||
export_menu.add_actions(self)
|
||||
if export_menu:
|
||||
export_menu.add_actions(self)
|
||||
|
||||
def shutdown(self):
|
||||
self.export_menu.remove_actions(self)
|
||||
if self.export_menu:
|
||||
self.export_menu.remove_actions(self)
|
||||
|
||||
def save_dialog(self, diagram, title, ext):
|
||||
|
||||
|
@ -1,18 +1,12 @@
|
||||
from typing import Dict
|
||||
|
||||
import pytest
|
||||
|
||||
import gaphor.ui.menufragment
|
||||
from gaphor.diagram.general import Box
|
||||
from gaphor.plugins.diagramexport import DiagramExport
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def diagram_export():
|
||||
properties: Dict[str, str] = {}
|
||||
export_menu = gaphor.ui.menufragment.MenuFragment()
|
||||
|
||||
return DiagramExport(diagrams=None, properties=properties, export_menu=export_menu)
|
||||
return DiagramExport(diagrams=None)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
|
@ -5,13 +5,8 @@ import os
|
||||
import re
|
||||
import sys
|
||||
|
||||
import cairo
|
||||
from gaphas.painter import BoundingBoxPainter
|
||||
from gaphas.view import Context, View
|
||||
|
||||
from gaphor.application import Session
|
||||
from gaphor.core.modeling import Diagram
|
||||
from gaphor.diagram.painter import ItemPainter
|
||||
from gaphor.storage import storage
|
||||
|
||||
|
||||
@ -26,17 +21,7 @@ def pkg2dir(package):
|
||||
return "/".join(name)
|
||||
|
||||
|
||||
def paint(view, cr):
|
||||
view.painter.paint(Context(cairo=cr, items=view.canvas.get_all_items(), area=None))
|
||||
|
||||
|
||||
def main(argv=sys.argv[1:]):
|
||||
def message(msg):
|
||||
"""
|
||||
Print message if user set verbose mode.
|
||||
"""
|
||||
if options.verbose:
|
||||
print(msg, file=sys.stderr)
|
||||
def parse_options(argv):
|
||||
|
||||
usage = "usage: %prog [options] file1 file2..."
|
||||
|
||||
@ -73,11 +58,22 @@ def main(argv=sys.argv[1:]):
|
||||
" name includes package name; regular expressions are case insensitive",
|
||||
)
|
||||
|
||||
(options, args) = parser.parse_args(argv)
|
||||
options, args = parser.parse_args(argv)
|
||||
|
||||
if not args:
|
||||
parser.print_help()
|
||||
|
||||
return options, args
|
||||
|
||||
|
||||
def main(argv=sys.argv[1:]):
|
||||
|
||||
options, args = parse_options(argv)
|
||||
|
||||
def message(msg):
|
||||
if options.verbose:
|
||||
print(msg, file=sys.stderr)
|
||||
|
||||
session = Session(
|
||||
services=[
|
||||
"event_manager",
|
||||
@ -85,10 +81,12 @@ def main(argv=sys.argv[1:]):
|
||||
"element_factory",
|
||||
"element_dispatcher",
|
||||
"modeling_language",
|
||||
"diagram_export",
|
||||
]
|
||||
)
|
||||
factory = session.get_service("element_factory")
|
||||
modeling_language = session.get_service("modeling_language")
|
||||
diagram_export = session.get_service("diagram_export")
|
||||
|
||||
name_re = None
|
||||
if options.regex:
|
||||
@ -127,34 +125,11 @@ def main(argv=sys.argv[1:]):
|
||||
|
||||
message(f"rendering: {pname} -> {outfilename}...")
|
||||
|
||||
view = View(diagram.canvas)
|
||||
view.painter = ItemPainter()
|
||||
view.bounding_box_painter = BoundingBoxPainter(view.painter)
|
||||
|
||||
tmpsurface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 0, 0)
|
||||
tmpcr = cairo.Context(tmpsurface)
|
||||
view.update_bounding_box(tmpcr)
|
||||
tmpcr.show_page()
|
||||
tmpsurface.flush()
|
||||
|
||||
w, h = view.bounding_box.width, view.bounding_box.height
|
||||
if options.format == "pdf":
|
||||
surface = cairo.PDFSurface(outfilename, w, h)
|
||||
diagram_export.save_pdf(outfilename, diagram)
|
||||
elif options.format == "svg":
|
||||
surface = cairo.SVGSurface(outfilename, w, h)
|
||||
diagram_export.save_svg(outfilename, diagram)
|
||||
elif options.format == "png":
|
||||
surface = cairo.ImageSurface(
|
||||
cairo.FORMAT_ARGB32, int(w + 1), int(h + 1)
|
||||
)
|
||||
diagram_export.save_png(outfilename, diagram)
|
||||
else:
|
||||
assert False, f"unknown format {options.format}"
|
||||
cr = cairo.Context(surface)
|
||||
view.matrix.translate(-view.bounding_box.x, -view.bounding_box.y)
|
||||
paint(view, cr)
|
||||
cr.show_page()
|
||||
|
||||
if options.format == "png":
|
||||
surface.write_to_png(outfilename)
|
||||
|
||||
surface.flush()
|
||||
surface.finish()
|
||||
raise RuntimeError(f"Unknown file format: {options.format}")
|
||||
|
Loading…
x
Reference in New Issue
Block a user