-/*******************************************************************************\r
- * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
- * in Industry THTH ry.\r
- * All rights reserved. This program and the accompanying materials\r
- * are made available under the terms of the Eclipse Public License v1.0\r
- * which accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- * Contributors:\r
- * VTT Technical Research Centre of Finland - initial API and implementation\r
- *******************************************************************************/\r
-package org.simantics.scenegraph.g2d.nodes;\r
-\r
-import java.awt.BasicStroke;\r
-import java.awt.Color;\r
-import java.awt.Graphics2D;\r
-import java.awt.Paint;\r
-import java.awt.Stroke;\r
-import java.awt.geom.Line2D;\r
-import java.awt.geom.Rectangle2D;\r
-\r
-import org.simantics.scenegraph.g2d.G2DNode;\r
-import org.simantics.scenegraph.utils.GeometryUtils;\r
-\r
-/**\r
- * @author Tuukka Lehtonen\r
- */\r
-public class PageBorderNode extends G2DNode {\r
-\r
- private static final long serialVersionUID = -5969105979396122487L;\r
-\r
- private static final Paint MARGIN_COLOR = new Color(192, 128, 128);\r
-\r
- protected Rectangle2D border = null;\r
- protected Rectangle2D margin = null;\r
- protected Boolean enabled = null;\r
-\r
- @SyncField( { "border", "margin", "enabled" })\r
- public void init(Rectangle2D border, Rectangle2D margin, Boolean enabled) {\r
- //System.out.println("PageBorderNode.init(" + border + ", " + margin + ", " + enabled);\r
- this.border = border;\r
- this.margin = margin;\r
- this.enabled = enabled;\r
- }\r
-\r
- @SyncField("enabled")\r
- public void setEnabled(Boolean enabled) {\r
- this.enabled = enabled;\r
- }\r
-\r
- @Override\r
- public Rectangle2D getBounds() {\r
- if (border != null)\r
- return border;\r
- if (margin != null)\r
- return margin;\r
- return null;\r
- }\r
-\r
- @Override\r
- public void render(Graphics2D g) {\r
- if (Boolean.FALSE.equals(enabled))\r
- return;\r
-\r
- boolean borderPaintable = isPaintable(border);\r
- boolean marginPaintable = isPaintable(margin);\r
- if (!borderPaintable && !marginPaintable)\r
- return;\r
-\r
- double scaleRecip = 1 / GeometryUtils.getScale(g.getTransform());\r
- Stroke s = new BasicStroke((float) (1 * scaleRecip));\r
-\r
- boolean borderPainted = false;\r
- if (borderPaintable) {\r
- Stroke ss = new BasicStroke((float) (2 * scaleRecip));\r
- paintRectangle(g, scaleRecip, border, s, Color.BLACK, ss, Color.GRAY);\r
- borderPainted = true;\r
- }\r
-\r
- if (marginPaintable && (!borderPainted || !margin.equals(border))) {\r
- paintRectangle(g, scaleRecip, margin, s, MARGIN_COLOR, null, null);\r
- }\r
- }\r
-\r
- boolean isPaintable(Rectangle2D r) {\r
- return r != null && !r.isEmpty() && r.getWidth() != Double.POSITIVE_INFINITY\r
- && r.getHeight() != Double.POSITIVE_INFINITY;\r
- }\r
-\r
- void paintRectangle(Graphics2D g, double scaleRecip, Rectangle2D r, Stroke stroke, Paint strokePaint,\r
- Stroke shadowStroke, Paint shadowPaint) {\r
- g.setPaint(strokePaint);\r
- g.setStroke(stroke);\r
- g.draw(r);\r
-\r
- if (shadowStroke != null) {\r
- g.setPaint(shadowPaint);\r
- g.setStroke(shadowStroke);\r
- double offset = 2 * scaleRecip;\r
- double w = r.getWidth();\r
- double h = r.getHeight();\r
- double x = r.getMaxX() + offset;\r
- double x1 = r.getMinX() + offset * 2;\r
- double y1 = r.getMinY() + offset * 2;\r
- g.draw(new Line2D.Double(x, y1, x, y1 + h - offset));\r
- double y = r.getMaxY() + offset;\r
- g.draw(new Line2D.Double(x1, y, x1 + w - offset, y));\r
- }\r
- }\r
-\r
- @Override\r
- public Rectangle2D getBoundsInLocal() {\r
- return border;\r
- }\r
-\r
- @Override\r
- public String toString() {\r
- return super.toString() + " [enabled=" + enabled + ", border=" + border + ", margin=" + margin + "]";\r
- }\r
-\r
-}\r
+/*******************************************************************************
+ * Copyright (c) 2007, 2010 Association for Decentralized Information Management
+ * in Industry THTH ry.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * VTT Technical Research Centre of Finland - initial API and implementation
+ *******************************************************************************/
+package org.simantics.scenegraph.g2d.nodes;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.Paint;
+import java.awt.Stroke;
+import java.awt.geom.Line2D;
+import java.awt.geom.Rectangle2D;
+
+import org.simantics.scenegraph.g2d.G2DNode;
+import org.simantics.scenegraph.utils.GeometryUtils;
+
+/**
+ * @author Tuukka Lehtonen
+ */
+public class PageBorderNode extends G2DNode {
+
+ private static final long serialVersionUID = -5969105979396122487L;
+
+ private static final Paint MARGIN_COLOR = new Color(192, 128, 128);
+
+ protected Rectangle2D border = null;
+ protected Rectangle2D margin = null;
+ protected Boolean enabled = null;
+
+ @SyncField( { "border", "margin", "enabled" })
+ public void init(Rectangle2D border, Rectangle2D margin, Boolean enabled) {
+ //System.out.println("PageBorderNode.init(" + border + ", " + margin + ", " + enabled);
+ this.border = border;
+ this.margin = margin;
+ this.enabled = enabled;
+ }
+
+ @SyncField("enabled")
+ public void setEnabled(Boolean enabled) {
+ this.enabled = enabled;
+ }
+
+ @Override
+ public Rectangle2D getBounds() {
+ if (border != null)
+ return border;
+ if (margin != null)
+ return margin;
+ return null;
+ }
+
+ @Override
+ public void render(Graphics2D g) {
+ if (Boolean.FALSE.equals(enabled))
+ return;
+
+ boolean borderPaintable = isPaintable(border);
+ boolean marginPaintable = isPaintable(margin);
+ if (!borderPaintable && !marginPaintable)
+ return;
+
+ double scaleRecip = 1 / GeometryUtils.getScale(g.getTransform());
+ Stroke s = new BasicStroke((float) (1 * scaleRecip));
+
+ boolean borderPainted = false;
+ if (borderPaintable) {
+ Stroke ss = new BasicStroke((float) (2 * scaleRecip));
+ paintRectangle(g, scaleRecip, border, s, Color.BLACK, ss, Color.GRAY);
+ borderPainted = true;
+ }
+
+ if (marginPaintable && (!borderPainted || !margin.equals(border))) {
+ paintRectangle(g, scaleRecip, margin, s, MARGIN_COLOR, null, null);
+ }
+ }
+
+ boolean isPaintable(Rectangle2D r) {
+ return r != null && !r.isEmpty() && r.getWidth() != Double.POSITIVE_INFINITY
+ && r.getHeight() != Double.POSITIVE_INFINITY;
+ }
+
+ void paintRectangle(Graphics2D g, double scaleRecip, Rectangle2D r, Stroke stroke, Paint strokePaint,
+ Stroke shadowStroke, Paint shadowPaint) {
+ g.setPaint(strokePaint);
+ g.setStroke(stroke);
+ g.draw(r);
+
+ if (shadowStroke != null) {
+ g.setPaint(shadowPaint);
+ g.setStroke(shadowStroke);
+ double offset = 2 * scaleRecip;
+ double w = r.getWidth();
+ double h = r.getHeight();
+ double x = r.getMaxX() + offset;
+ double x1 = r.getMinX() + offset * 2;
+ double y1 = r.getMinY() + offset * 2;
+ g.draw(new Line2D.Double(x, y1, x, y1 + h - offset));
+ double y = r.getMaxY() + offset;
+ g.draw(new Line2D.Double(x1, y, x1 + w - offset, y));
+ }
+ }
+
+ @Override
+ public Rectangle2D getBoundsInLocal() {
+ return border;
+ }
+
+ @Override
+ public String toString() {
+ return super.toString() + " [enabled=" + enabled + ", border=" + border + ", margin=" + margin + "]";
+ }
+
+}