Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaxime Porhel2015-06-23 15:07:40 +0000
committerMaxime Porhel2015-08-07 09:31:06 +0000
commite3b64dff58c55dc03ad23824a6dca603b474825c (patch)
treea289bc2d5b552c0f3ba8aca5cae6f7e513bedd3f
parentd5d1e8629473df6f99be9e7b3a20880353e4879a (diff)
downloadorg.eclipse.sirius-e3b64dff58c55dc03ad23824a6dca603b474825c.tar.gz
org.eclipse.sirius-e3b64dff58c55dc03ad23824a6dca603b474825c.tar.xz
org.eclipse.sirius-e3b64dff58c55dc03ad23824a6dca603b474825c.zip
[470770] Rounded OneLineMarginBorder
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractDiagramElementContainerEditPart.java6
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/internal/part/DiagramContainerEditPartOperation.java7
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/api/figure/OneLineMarginBorder.java4
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/figure/RoundedCornerMarginBorder.java120
4 files changed, 131 insertions, 6 deletions
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractDiagramElementContainerEditPart.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractDiagramElementContainerEditPart.java
index 8f6f8ffe24..1305a83e40 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractDiagramElementContainerEditPart.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractDiagramElementContainerEditPart.java
@@ -83,7 +83,6 @@ import org.eclipse.sirius.diagram.ui.tools.api.figure.AlphaDropShadowBorder;
import org.eclipse.sirius.diagram.ui.tools.api.figure.FoldingToggleAwareClippingStrategy;
import org.eclipse.sirius.diagram.ui.tools.api.figure.FoldingToggleImageFigure;
import org.eclipse.sirius.diagram.ui.tools.api.figure.GradientRoundedRectangle;
-import org.eclipse.sirius.diagram.ui.tools.api.figure.OneLineMarginBorder;
import org.eclipse.sirius.diagram.ui.tools.api.figure.SiriusWrapLabel;
import org.eclipse.sirius.diagram.ui.tools.api.figure.ViewNodeContainerFigureDesc;
import org.eclipse.sirius.diagram.ui.tools.api.figure.ViewNodeContainerParallelogram;
@@ -91,6 +90,7 @@ import org.eclipse.sirius.diagram.ui.tools.api.figure.ViewNodeContainerRectangle
import org.eclipse.sirius.diagram.ui.tools.api.graphical.edit.styles.IContainerLabelOffsets;
import org.eclipse.sirius.diagram.ui.tools.api.layout.LayoutUtils;
import org.eclipse.sirius.diagram.ui.tools.internal.figure.ContainerWithTitleBlockFigure;
+import org.eclipse.sirius.diagram.ui.tools.internal.figure.RoundedCornerMarginBorder;
import org.eclipse.sirius.ext.base.Option;
import org.eclipse.sirius.ext.base.Options;
import org.eclipse.sirius.viewpoint.DStylizable;
@@ -335,10 +335,10 @@ public abstract class AbstractDiagramElementContainerEditPart extends AbstractBo
if (isFirstRegionPart()) {
shapeFigure.setBorder(new MarginBorder(IContainerLabelOffsets.LABEL_OFFSET, 0, 0, 0));
} else {
- OneLineMarginBorder oneLineBorder = new OneLineMarginBorder(PositionConstants.TOP);
+ RoundedCornerMarginBorder oneLineBorder = new RoundedCornerMarginBorder(PositionConstants.TOP);
shapeFigure.setBorder(oneLineBorder);
+ oneLineBorder.setCornerDimensions(DiagramContainerEditPartOperation.getCornerDimension(this));
oneLineBorder.setMargin(IContainerLabelOffsets.LABEL_OFFSET, 0, 0, 0);
-
if (getParentStackDirection() == PositionConstants.EAST_WEST) {
oneLineBorder.setPosition(PositionConstants.LEFT);
}
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/internal/part/DiagramContainerEditPartOperation.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/internal/part/DiagramContainerEditPartOperation.java
index 9e0823a895..06210a28d1 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/internal/part/DiagramContainerEditPartOperation.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/internal/part/DiagramContainerEditPartOperation.java
@@ -48,6 +48,7 @@ import org.eclipse.sirius.diagram.ui.tools.api.figure.ViewNodeContainerParallelo
import org.eclipse.sirius.diagram.ui.tools.api.figure.ViewNodeContainerRectangleFigureDesc;
import org.eclipse.sirius.diagram.ui.tools.api.figure.WorkspaceImageFigure;
import org.eclipse.sirius.diagram.ui.tools.api.graphical.edit.styles.IContainerLabelOffsets;
+import org.eclipse.sirius.diagram.ui.tools.internal.figure.RoundedCornerMarginBorder;
import org.eclipse.sirius.ui.tools.api.color.VisualBindingManager;
import org.eclipse.sirius.viewpoint.DStylizable;
import org.eclipse.sirius.viewpoint.LabelAlignment;
@@ -246,7 +247,11 @@ public final class DiagramContainerEditPartOperation {
if (primaryShape != null && primaryShape.getBorder() instanceof LineBorder) {
((LineBorder) primaryShape.getBorder()).setWidth(borderSize);
if (primaryShape.getBorder() instanceof OneLineMarginBorder) {
- ((OneLineMarginBorder) primaryShape.getBorder()).setMargin(labelOffset, 0, 0, 0);
+ OneLineMarginBorder border = (OneLineMarginBorder) primaryShape.getBorder();
+ border.setMargin(labelOffset, 0, 0, 0);
+ if (self.isRegion() && border instanceof RoundedCornerMarginBorder) {
+ ((RoundedCornerMarginBorder) border).setCornerDimensions(getCornerDimension(self));
+ }
}
} else if (primaryShape != null && primaryShape.getBorder() instanceof MarginBorder) {
MarginBorder margin = null;
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/api/figure/OneLineMarginBorder.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/api/figure/OneLineMarginBorder.java
index dd4a904eb2..562c4468a3 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/api/figure/OneLineMarginBorder.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/api/figure/OneLineMarginBorder.java
@@ -63,13 +63,13 @@ public class OneLineMarginBorder extends OneLineBorder {
switch (getPosition()) {
case PositionConstants.MIDDLE:
- //See PositionConstants.TOP_MIDDLE_BOTTOM = TOP | MIDDLE | BOTTOM;
+ // See PositionConstants.TOP_MIDDLE_BOTTOM = TOP | MIDDLE | BOTTOM;
tempRect.y += halfWidthInLP;
tempRect.height -= getWidth();
graphics.drawLine(tempRect.getLeft(), tempRect.getRight());
break;
case PositionConstants.CENTER:
- //See PositionConstants.LEFT_CENTER_RIGHT = LEFT | CENTER | RIGHT;
+ // See PositionConstants.LEFT_CENTER_RIGHT = LEFT | CENTER | RIGHT;
tempRect.x += halfWidthInLP;
tempRect.width -= getWidth();
graphics.drawLine(tempRect.getTop(), tempRect.getBottom());
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/figure/RoundedCornerMarginBorder.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/figure/RoundedCornerMarginBorder.java
new file mode 100644
index 0000000000..de14d08435
--- /dev/null
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/figure/RoundedCornerMarginBorder.java
@@ -0,0 +1,120 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Obeo.
+ * 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:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.sirius.diagram.ui.tools.internal.figure;
+
+import org.eclipse.draw2d.Graphics;
+import org.eclipse.draw2d.IFigure;
+import org.eclipse.draw2d.PositionConstants;
+import org.eclipse.draw2d.geometry.Dimension;
+import org.eclipse.draw2d.geometry.Insets;
+import org.eclipse.gmf.runtime.draw2d.ui.mapmode.MapModeUtil;
+import org.eclipse.sirius.diagram.ui.tools.api.figure.OneLineMarginBorder;
+
+/**
+ * Specific {@link OneLineMarginBorder} with rounded corner capabilities.
+ *
+ * @author mporhel
+ */
+public class RoundedCornerMarginBorder extends OneLineMarginBorder {
+
+ private final Dimension corner = new Dimension(0, 0);
+
+ /**
+ * Constructor.
+ *
+ * @param position
+ * The position to set.
+ */
+ public RoundedCornerMarginBorder(int position) {
+ super(position);
+ }
+
+ /**
+ * Paints the border based on the inputs given.
+ *
+ * @param figure
+ * <code>IFigure</code> for which this is the border.
+ * @param graphics
+ * <code>Graphics</code> handle for drawing the border.
+ * @param insets
+ * Space to be taken up by this border.
+ */
+ @Override
+ public void paint(IFigure figure, Graphics graphics, Insets insets) {
+ int hRadius = corner.width / 2;
+ int vRadius = corner.height / 2;
+ Insets cornerAwareInsets = insets;
+ switch (getPosition()) {
+ case PositionConstants.TOP:
+ case PositionConstants.BOTTOM:
+ cornerAwareInsets = insets.getAdded(new Insets(0, hRadius, 0, hRadius));
+ break;
+ case PositionConstants.LEFT:
+ case PositionConstants.RIGHT:
+ cornerAwareInsets = insets.getAdded(new Insets(vRadius, 0, vRadius, 0));
+ break;
+ default:
+ break;
+ }
+ super.paint(figure, graphics, cornerAwareInsets);
+
+ int one = MapModeUtil.getMapMode(figure).DPtoLP(1);
+ int widthInDP = getWidth() / one;
+ int halfWidthInLP = MapModeUtil.getMapMode(figure).DPtoLP(widthInDP / 2);
+
+ if (!corner.isEmpty()) {
+ switch (getPosition()) {
+ case PositionConstants.TOP:
+ tempRect.x += halfWidthInLP;
+ tempRect.width -= getWidth();
+ graphics.drawArc(tempRect.getTopRight().x - hRadius, tempRect.getTopRight().y, corner.width, corner.height, 5, 85);
+ graphics.drawArc(tempRect.getTopLeft().x - hRadius, tempRect.getTopLeft().y, corner.width, corner.height, 90, 85);
+ break;
+ case PositionConstants.BOTTOM:
+ tempRect.x += halfWidthInLP;
+ tempRect.width -= getWidth();
+ graphics.drawArc(tempRect.getBottomLeft().x - hRadius, tempRect.getBottomLeft().y - corner.height, corner.width, corner.height, 185, 85);
+ graphics.drawArc(tempRect.getBottomRight().x - hRadius, tempRect.getBottomRight().y - corner.height, corner.width, corner.height, 270, 85);
+ break;
+ case PositionConstants.LEFT:
+ tempRect.y += halfWidthInLP;
+ tempRect.height -= getWidth();
+ graphics.drawArc(tempRect.getTopLeft().x, tempRect.getTopLeft().y - vRadius, corner.width, corner.height, 95, 85);
+ graphics.drawArc(tempRect.getBottomLeft().x, tempRect.getBottomLeft().y - vRadius, corner.width, corner.height, 180, 85);
+ break;
+ case PositionConstants.RIGHT:
+ tempRect.y += halfWidthInLP;
+ tempRect.height -= getWidth();
+ graphics.drawArc(tempRect.getTopRight().x - corner.width, tempRect.getTopRight().y - vRadius, corner.width, corner.height, 0, 85);
+ graphics.drawArc(tempRect.getBottomRight().x - corner.width, tempRect.getBottomRight().y - vRadius, corner.width, corner.height, 270, 85);
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ /**
+ * Sets the dimensions of each corner. This will form the radii of the arcs
+ * which form the corners.
+ *
+ * @param d
+ * the dimensions of the corner
+ */
+ public void setCornerDimensions(Dimension d) {
+ if (d == null) {
+ corner.width = 0;
+ corner.height = 0;
+ }
+ corner.width = d.width;
+ corner.height = d.height;
+ }
+}

Back to the top