| FlowchartLoopLimitPainter.java |
1 /****************************************************************************
2 * This demo file is part of yFiles for Java 2.14.
3 * Copyright (c) 2000-2017 by yWorks GmbH, Vor dem Kreuzberg 28,
4 * 72070 Tuebingen, Germany. All rights reserved.
5 *
6 * yFiles demo files exhibit yFiles for Java functionalities. Any redistribution
7 * of demo files in source code or binary form, with or without
8 * modification, is not permitted.
9 *
10 * Owners of a valid software license for a yFiles for Java version that this
11 * demo is shipped with are allowed to use the demo source code as basis
12 * for their own yFiles for Java powered applications. Use of such programs is
13 * governed by the rights and conditions as set out in the yFiles for Java
14 * license agreement.
15 *
16 * THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY EXPRESS OR IMPLIED
17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
19 * NO EVENT SHALL yWorks BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
21 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
22 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
23 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
24 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 *
27 ***************************************************************************/
28 package demo.view.flowchart.painters;
29
30 import y.view.NodeRealizer;
31
32 import java.awt.Shape;
33 import java.awt.geom.GeneralPath;
34
35 /**
36 * Draws the loop limit symbol of flowchart diagrams.
37 */
38 public class FlowchartLoopLimitPainter extends AbstractFlowchartPainter {
39
40 /**
41 * Determines if this painter will paint a flowchart loop start symbol
42 * or a flowchart loop end symbol.
43 */
44 private final boolean isLoopStart;
45
46 /**
47 * Initializes a new <code>FlowchartLoopLimitPainter</code> instance
48 * for loop start visualization.
49 */
50 public FlowchartLoopLimitPainter() {
51 this(true);
52 }
53
54 /**
55 * Initializes a new <code>FlowchartLoopLimitPainter</code> instance
56 * for loop start or loop end visualization.
57 * @param isStart if <code>true</code>, this painter will paint the flowchart
58 * loop start symbol; otherwise it will paint the flowchart loop end symbol.
59 */
60 public FlowchartLoopLimitPainter(boolean isStart) {
61 this.isLoopStart = isStart;
62 }
63
64 protected Shape newShape( NodeRealizer context ) {
65 double height = context.getHeight();
66 double width = context.getWidth();
67 double x = context.getX();
68 double y = context.getY();
69 double borderDistance = Math.min(Math.min(10, width/2), height/2);
70
71 GeneralPath shape = new GeneralPath();
72 if (isLoopStart) {
73 shape.moveTo((float)(x + borderDistance), (float)y);
74 shape.lineTo((float)(x + width - borderDistance), (float)y);
75 shape.lineTo((float)(x+ width), (float)(y + borderDistance));
76 shape.lineTo((float)(x + width), (float)(y + height));
77 shape.lineTo((float)x, (float)(y + height));
78 shape.lineTo((float)x, (float)(y + borderDistance));
79 shape.closePath();
80 } else { //is loop end
81 shape.moveTo((float) x, (float) y);
82 shape.lineTo((float)(x + width), (float) y);
83 shape.lineTo((float)(x + width), (float)(y + height - borderDistance));
84 shape.lineTo((float)(x + width - borderDistance), (float)(y + height));
85 shape.lineTo((float)(x + borderDistance), (float)(y + height));
86 shape.lineTo((float) x, (float)(y + height -borderDistance));
87 shape.closePath();
88 }
89 return shape;
90 }
91 }
92