*******************************************************************************/\r
package org.simantics.diagram.elements;\r
\r
-import gnu.trove.list.array.TIntArrayList;\r
-\r
import java.awt.AlphaComposite;\r
import java.awt.BasicStroke;\r
import java.awt.Color;\r
import java.util.ArrayList;\r
import java.util.Arrays;\r
import java.util.Hashtable;\r
+import java.util.List;\r
\r
import org.simantics.datatypes.literal.RGB;\r
import org.simantics.db.layer0.variable.RVI;\r
import org.simantics.scenegraph.g2d.events.MouseEvent.MouseDoubleClickedEvent;\r
import org.simantics.scenegraph.g2d.events.MouseEvent.MouseDragBegin;\r
import org.simantics.scenegraph.g2d.events.MouseEvent.MouseMovedEvent;\r
+import org.simantics.scenegraph.g2d.events.NodeEventHandler;\r
import org.simantics.scenegraph.g2d.events.command.CommandEvent;\r
import org.simantics.scenegraph.g2d.events.command.Commands;\r
-import org.simantics.scenegraph.g2d.events.NodeEventHandler;\r
import org.simantics.scenegraph.utils.GeometryUtils;\r
import org.simantics.scenegraph.utils.NodeUtil;\r
import org.simantics.scl.runtime.function.Function1;\r
import org.simantics.scl.runtime.function.Function2;\r
import org.simantics.ui.colors.Colors;\r
import org.simantics.ui.dnd.LocalObjectTransferable;\r
+import org.simantics.ui.dnd.MultiTransferable;\r
+import org.simantics.ui.dnd.PlaintextTransfer;\r
import org.simantics.ui.fonts.Fonts;\r
import org.simantics.utils.threads.AWTThread;\r
\r
import com.lowagie.text.pdf.PdfWriter;\r
import com.lowagie.text.pdf.TextField;\r
\r
+import gnu.trove.list.array.TIntArrayList;\r
+\r
\r
/**\r
* TextNode which supports in-line editing.\r
return null;\r
if (hasState(STATE_EDITING) == edit)\r
return null;\r
- setState(STATE_EDITING);\r
+ setState(STATE_EDITING, edit);\r
if (edit) {\r
caret = text != null ? text.length() : 0;\r
selectionTail = 0;\r
\r
// PDF \r
PdfWriter writer = (PdfWriter) g.getRenderingHint(G2DPDFRenderingHints.KEY_PDF_WRITER);\r
+ boolean isRenderingPdf = writer != null;\r
boolean isPdfField = false;\r
String fieldName = null;\r
if (writer != null) {\r
\r
// Base text\r
g.setColor(color);\r
- renderText(g, xOffset);\r
+ renderText(g, xOffset, isRenderingPdf);\r
\r
Shape clip = g.getClip();\r
\r
g.setColor(SELECTION_BACKGROUND_COLOR);\r
g.fill(selShape);\r
g.setColor(Color.WHITE);\r
- //line.layout.draw(g, 0, 0);\r
- g.drawString(line.getText(), 0, 0);\r
+ // #6459: render as text in PDF and paths on screen\r
+ if (isRenderingPdf)\r
+ g.drawString(line.getText(), 0, 0);\r
+ else\r
+ line.layout.draw(g, 0, 0);\r
line.translateInv(g, xOffset, 0);\r
}\r
}\r
\r
if (renderText) {\r
g.setColor(color);\r
- renderText(g, 0);\r
+ renderText(g, 0, isRenderingPdf);\r
}\r
\r
}\r
}\r
}\r
}\r
- private void renderText(Graphics2D g, float xOffset) {\r
+ private void renderText(Graphics2D g, float xOffset, boolean isRenderingPdf) {\r
//g.draw(tightBoundsCache); // DEBUG\r
for (Line line : lines) {\r
- //line.layout.draw(g, line.alignedPosX + xOffset, line.alignedPosY);\r
- g.drawString(line.getText(), line.alignedPosX + xOffset, line.alignedPosY);\r
+ // #6459: render as text in PDF and paths on screen\r
+ if (isRenderingPdf)\r
+ g.drawString(line.getText(), line.alignedPosX + xOffset, line.alignedPosY);\r
+ else\r
+ line.layout.draw(g, line.alignedPosX + xOffset, line.alignedPosY);\r
//g.draw(line.abbox); // DEBUG\r
}\r
}\r
if (isHovering()\r
&& (isControlDown(e) || isShiftDown(e))\r
&& e.context instanceof NodeEventHandler\r
- && dataRVI != null)\r
+ && (dataRVI != null || text != null))\r
{\r
- e.transferable = new LocalObjectTransferable(dataRVI);\r
+ List<Transferable> trs = new ArrayList<>(2);\r
+ if (dataRVI != null) {\r
+ trs.add(new LocalObjectTransferable(dataRVI));\r
+ trs.add(new PlaintextTransfer(dataRVI.toString()));\r
+ } else if (text != null && !text.isEmpty()) {\r
+ trs.add(new PlaintextTransfer(text));\r
+ }\r
+ if (!trs.isEmpty()) {\r
+ e.transferable = new MultiTransferable(trs);\r
+ return true;\r
+ }\r
}\r
return false;\r
}\r
@Override\r
public int getEventMask() {\r
return EventTypes.KeyPressedMask | EventTypes.MouseMovedMask | EventTypes.MouseButtonPressedMask\r
- | EventTypes.MouseClickMask | EventTypes.CommandMask;\r
+ | EventTypes.MouseClickMask | EventTypes.MouseDragBeginMask | EventTypes.CommandMask;\r
}\r
\r
private MouseEvent lastMouseEvent = null;\r