X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.diagram%2Fsrc%2Forg%2Fsimantics%2Fdiagram%2Felements%2FTextNode.java;h=b407796e7b814736614dc620e0274fc4987b3aa1;hp=ed8df095a72b587f297002fcc3ecca9d80852e04;hb=d1860919acc0768cf723960406d2bea078bcb621;hpb=9d2bb8dcd354eaa14d2ce710ec7de46dc0a9ef7b diff --git a/bundles/org.simantics.diagram/src/org/simantics/diagram/elements/TextNode.java b/bundles/org.simantics.diagram/src/org/simantics/diagram/elements/TextNode.java index ed8df095a..b407796e7 100644 --- a/bundles/org.simantics.diagram/src/org/simantics/diagram/elements/TextNode.java +++ b/bundles/org.simantics.diagram/src/org/simantics/diagram/elements/TextNode.java @@ -11,8 +11,6 @@ *******************************************************************************/ package org.simantics.diagram.elements; -import gnu.trove.list.array.TIntArrayList; - import java.awt.AlphaComposite; import java.awt.BasicStroke; import java.awt.Color; @@ -42,6 +40,7 @@ import java.text.AttributedString; import java.util.ArrayList; import java.util.Arrays; import java.util.Hashtable; +import java.util.List; import org.simantics.datatypes.literal.RGB; import org.simantics.db.layer0.variable.RVI; @@ -62,15 +61,17 @@ import org.simantics.scenegraph.g2d.events.MouseEvent.MouseClickEvent; import org.simantics.scenegraph.g2d.events.MouseEvent.MouseDoubleClickedEvent; import org.simantics.scenegraph.g2d.events.MouseEvent.MouseDragBegin; import org.simantics.scenegraph.g2d.events.MouseEvent.MouseMovedEvent; +import org.simantics.scenegraph.g2d.events.NodeEventHandler; import org.simantics.scenegraph.g2d.events.command.CommandEvent; import org.simantics.scenegraph.g2d.events.command.Commands; -import org.simantics.scenegraph.g2d.events.NodeEventHandler; import org.simantics.scenegraph.utils.GeometryUtils; import org.simantics.scenegraph.utils.NodeUtil; import org.simantics.scl.runtime.function.Function1; import org.simantics.scl.runtime.function.Function2; import org.simantics.ui.colors.Colors; import org.simantics.ui.dnd.LocalObjectTransferable; +import org.simantics.ui.dnd.MultiTransferable; +import org.simantics.ui.dnd.PlaintextTransfer; import org.simantics.ui.fonts.Fonts; import org.simantics.utils.threads.AWTThread; @@ -82,6 +83,8 @@ import com.lowagie.text.pdf.PdfFormField; import com.lowagie.text.pdf.PdfWriter; import com.lowagie.text.pdf.TextField; +import gnu.trove.list.array.TIntArrayList; + /** * TextNode which supports in-line editing. @@ -670,6 +673,7 @@ public class TextNode extends G2DNode implements IDynamicSelectionPainterNode, L // PDF PdfWriter writer = (PdfWriter) g.getRenderingHint(G2DPDFRenderingHints.KEY_PDF_WRITER); + boolean isRenderingPdf = writer != null; boolean isPdfField = false; String fieldName = null; if (writer != null) { @@ -699,7 +703,7 @@ public class TextNode extends G2DNode implements IDynamicSelectionPainterNode, L // Base text g.setColor(color); - renderText(g, xOffset); + renderText(g, xOffset, isRenderingPdf); Shape clip = g.getClip(); @@ -712,8 +716,11 @@ public class TextNode extends G2DNode implements IDynamicSelectionPainterNode, L g.setColor(SELECTION_BACKGROUND_COLOR); g.fill(selShape); g.setColor(Color.WHITE); - //line.layout.draw(g, 0, 0); - g.drawString(line.getText(), 0, 0); + // #6459: render as text in PDF and paths on screen + if (isRenderingPdf) + g.drawString(line.getText(), 0, 0); + else + line.layout.draw(g, 0, 0); line.translateInv(g, xOffset, 0); } } @@ -729,7 +736,7 @@ public class TextNode extends G2DNode implements IDynamicSelectionPainterNode, L if (renderText) { g.setColor(color); - renderText(g, 0); + renderText(g, 0, isRenderingPdf); } } @@ -880,11 +887,14 @@ public class TextNode extends G2DNode implements IDynamicSelectionPainterNode, L } } } - private void renderText(Graphics2D g, float xOffset) { + private void renderText(Graphics2D g, float xOffset, boolean isRenderingPdf) { //g.draw(tightBoundsCache); // DEBUG for (Line line : lines) { - //line.layout.draw(g, line.alignedPosX + xOffset, line.alignedPosY); - g.drawString(line.getText(), line.alignedPosX + xOffset, line.alignedPosY); + // #6459: render as text in PDF and paths on screen + if (isRenderingPdf) + g.drawString(line.getText(), line.alignedPosX + xOffset, line.alignedPosY); + else + line.layout.draw(g, line.alignedPosX + xOffset, line.alignedPosY); //g.draw(line.abbox); // DEBUG } } @@ -1858,9 +1868,19 @@ public class TextNode extends G2DNode implements IDynamicSelectionPainterNode, L if (isHovering() && (isControlDown(e) || isShiftDown(e)) && e.context instanceof NodeEventHandler - && dataRVI != null) + && (dataRVI != null || text != null)) { - e.transferable = new LocalObjectTransferable(dataRVI); + List trs = new ArrayList<>(2); + if (dataRVI != null) { + trs.add(new LocalObjectTransferable(dataRVI)); + trs.add(new PlaintextTransfer(dataRVI.toString())); + } else if (text != null && !text.isEmpty()) { + trs.add(new PlaintextTransfer(text)); + } + if (!trs.isEmpty()) { + e.transferable = new MultiTransferable(trs); + return true; + } } return false; } @@ -1930,7 +1950,7 @@ public class TextNode extends G2DNode implements IDynamicSelectionPainterNode, L @Override public int getEventMask() { return EventTypes.KeyPressedMask | EventTypes.MouseMovedMask | EventTypes.MouseButtonPressedMask - | EventTypes.MouseClickMask | EventTypes.CommandMask; + | EventTypes.MouseClickMask | EventTypes.MouseDragBeginMask | EventTypes.CommandMask; } private MouseEvent lastMouseEvent = null;