]> gerrit.simantics Code Review - simantics/platform.git/commitdiff
Listen to changes in page settings in DiagramSceneGraphProvider
authorTuukka Lehtonen <tuukka.lehtonen@semantum.fi>
Fri, 14 Aug 2020 08:37:58 +0000 (11:37 +0300)
committerTuukka Lehtonen <tuukka.lehtonen@semantum.fi>
Fri, 14 Aug 2020 08:48:48 +0000 (11:48 +0300)
This is needed for use cases where diagrams are transformed to SVG and
viewed through browsers.

These changes also fix PDF printing to force page border rendering off
when not fitting PDF pages to diagram content, but to diagram page size.
This avoids printing ugly black half-visible borders around diagrams
where page borders are enabled.

gitlab #563

Change-Id: I7f666dec34c650489264f3d23cbd72d5102b2f14
(cherry picked from commit 2ccc058ac6c303b64a70ad0f0c48ca501bf4aa6a)

bundles/org.simantics.diagram/src/org/simantics/diagram/export/ExportDiagramPdf.java
bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/pdf/PDFPainter.java
bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/sg/DiagramSceneGraphProvider.java

index 23cb9f970f36acd3761e1ee009b3375250125b6d..25e72d984b81a277a7eda60dc1cf0ca656dae37a 100644 (file)
@@ -183,8 +183,14 @@ public class ExportDiagramPdf implements ExportClass {
                 ThreadUtils.syncExec(workerThread, new Runnable() {
                     @Override
                     public void run() {
-                               try {                                                                   
+                               try {
                                        cctx.getDefaultHintContext().setHint(Hints.KEY_PAGE_DESC, _marginaaliViiva);
+                            if (!fitDiagramContentsToPageMargins) {
+                                // Prevent PDF printing from drawing page borders if the
+                                // print area is fitted directly to the page size.
+                                // This avoids unwanted black half-visible edges.
+                                cctx.getDefaultHintContext().setHint(Hints.KEY_DISPLAY_PAGE, false);
+                            }
                                        
                                        String bottomLabel = diagramName;
                                        if ( drawingTemplate != null && activeProfileEntries.contains(TMPL.DrawingTemplate) ) bottomLabel = null;
index bec1e5408ae414c82c568b102cff6743cefec5ac..0b7cd63e4c55eed107eb552c9707a382beffc974 100644 (file)
@@ -89,7 +89,15 @@ public class PDFPainter {
 
                     ThreadUtils.asyncExec(thread, () -> {
                         try {
-                            PDFBuilder chassis = new PDFBuilder(writer, mapper, pageSize, pageDesc, fitDiagramContentsToPageMargins || isSymbol);
+                            boolean fitToContent = fitDiagramContentsToPageMargins || isSymbol;
+                            if (!fitToContent) {
+                                // Prevent PDF printing from drawing page borders if the
+                                // print area is fitted directly to the page size.
+                                // This avoids unwanted black half-visible edges.
+                                ctx.getDefaultHintContext().setHint(Hints.KEY_DISPLAY_PAGE, false);
+                            }
+
+                            PDFBuilder chassis = new PDFBuilder(writer, mapper, pageSize, pageDesc, fitToContent);
                             chassis.paint(ctx, true);
                         } catch (Throwable e) {
                             exception[0] = new DatabaseException(e);
index ca6d6d04cfa2ea1feeb8572ab3d256acb9de5ec9..3ca0cf698f482d1b768c063c5e538285c0d35469 100644 (file)
@@ -293,16 +293,12 @@ public class DiagramSceneGraphProvider implements ICanvasSceneGraphProvider, IDi
 
             // Create a listener to react to page setting changes.
             Simantics.getSession().asyncRequest(DiagramRequests.getDiagramDesc(diagramResource), new Listener<DiagramDesc>() {
-
                 @Override
                 public void execute(DiagramDesc result) {
                     if (result != null && ctx != null) {
-                        ThreadUtils.asyncExec(ctx.getThreadAccess(), new Runnable() {
-                            @Override
-                            public void run() {
-                                if (ctx != null) {
-                                    setDiagramDesc(ctx, result);
-                                }
+                        ThreadUtils.asyncExec(ctx.getThreadAccess(), () -> {
+                            if (ctx != null) {
+                                setDiagramDesc(ctx, result);
                             }
                         });
                     }
@@ -315,9 +311,8 @@ public class DiagramSceneGraphProvider implements ICanvasSceneGraphProvider, IDi
 
                 @Override
                 public boolean isDisposed() {
-                    return ctx == null;
+                    return DiagramSceneGraphProvider.this.ctx == null;
                 }
-                
             });
         } catch (DatabaseException e) {
             ErrorLogger.defaultLogError(e);