src/main/java/com/mxgraph/shape/mxSwimlaneShape.java
protected void paintRoundedSwimlane(mxGraphics2DCanvas canvas,
			mxCellState state, double start, double r, String fill,
			boolean swimlaneLine)
	{
		mxGraphicsCanvas2D c = configureCanvas(canvas, state,
				new mxGraphicsCanvas2D(canvas.getGraphics()));
		double w = state.getWidth();
		double h = state.getHeight();

		if (!mxConstants.NONE.equals(fill))
		{
			c.save();
			c.setFillColor(fill);
			c.roundrect(0, 0, w, h, r, r);
			c.fillAndStroke();
			c.restore();
			c.setShadow(false);
		}

		c.begin();

		if (mxUtils
				.isTrue(state.getStyle(), mxConstants.STYLE_HORIZONTAL, true))
		{
			c.moveTo(w, start);
			c.lineTo(w, r);
			c.quadTo(w, 0, w - Math.min(w / 2, r), 0);
			c.lineTo(Math.min(w / 2, r), 0);
			c.quadTo(0, 0, 0, r);
			c.lineTo(0, start);

			if (swimlaneLine || start >= h)
			{
				c.close();
			}

			c.fillAndStroke();

			// Transparent content area
			if (start < h && mxConstants.NONE.equals(fill))
			{
				c.begin();
				c.moveTo(0, start);
				c.lineTo(0, h - r);
				c.quadTo(0, h, Math.min(w / 2, r), h);
				c.lineTo(w - Math.min(w / 2, r), h);
				c.quadTo(w, h, w, h - r);
				c.lineTo(w, start);
				c.stroke();
			}
		}
		else
		{
			c.moveTo(start, 0);
			c.lineTo(r, 0);
			c.quadTo(0, 0, 0, Math.min(h / 2, r));
			c.lineTo(0, h - Math.min(h / 2, r));
			c.quadTo(0, h, r, h);
			c.lineTo(start, h);

			if (swimlaneLine || start >= w)
			{
				c.close();
			}

			c.fillAndStroke();

			// Transparent content area
			if (start < w && mxConstants.NONE.equals(fill))
			{
				c.begin();
				c.moveTo(start, h);
				c.lineTo(w - r, h);
				c.quadTo(w, h, w, h - Math.min(h / 2, r));
				c.lineTo(w, Math.min(h / 2, r));
				c.quadTo(w, 0, w - r, 0);
				c.lineTo(start, 0);
				c.stroke();
			}
		}
	}
/**
	 * Function: paintRoundedSwimlane
	 *
	 * Paints the swimlane vertex shape.
	 */
paintRoundedSwimlane
Paints the swimlane vertex shape.
paintRoundedSwimlane Paints the swimlane vertex shape .
protected void paintRoundedSwimlane(mxGraphics2DCanvas canvas,
			mxCellState state, double start, double r, String fill,
			boolean swimlaneLine)
	{
		mxGraphicsCanvas2D c = configureCanvas(canvas, state,
				new mxGraphicsCanvas2D(canvas.getGraphics()));
		double w = state.getWidth();
		double h = state.getHeight();
		if (!mxConstants.NONE.equals(fill))
		{
			c.save();
			c.setFillColor(fill);
			c.roundrect(0, 0, w, h, r, r);
			c.fillAndStroke();
			c.restore();
			c.setShadow(false);
		}
		c.begin();
		if (mxUtils
				.isTrue(state.getStyle(), mxConstants.STYLE_HORIZONTAL, true))
		{
			c.moveTo(w, start);
			c.lineTo(w, r);
			c.quadTo(w, 0, w - Math.min(w / 2, r), 0);
			c.lineTo(Math.min(w / 2, r), 0);
			c.quadTo(0, 0, 0, r);
			c.lineTo(0, start);
			if (swimlaneLine || start >= h)
			{
				c.close();
			}
			c.fillAndStroke();
			if (start < h && mxConstants.NONE.equals(fill))
			{
				c.begin();
				c.moveTo(0, start);
				c.lineTo(0, h - r);
				c.quadTo(0, h, Math.min(w / 2, r), h);
				c.lineTo(w - Math.min(w / 2, r), h);
				c.quadTo(w, h, w, h - r);
				c.lineTo(w, start);
				c.stroke();
			}
		}
		else
		{
			c.moveTo(start, 0);
			c.lineTo(r, 0);
			c.quadTo(0, 0, 0, Math.min(h / 2, r));
			c.lineTo(0, h - Math.min(h / 2, r));
			c.quadTo(0, h, r, h);
			c.lineTo(start, h);
			if (swimlaneLine || start >= w)
			{
				c.close();
			}
			c.fillAndStroke();
			if (start < w && mxConstants.NONE.equals(fill))
			{
				c.begin();
				c.moveTo(start, h);
				c.lineTo(w - r, h);
				c.quadTo(w, h, w, h - Math.min(h / 2, r));
				c.lineTo(w, Math.min(h / 2, r));
				c.quadTo(w, 0, w - r, 0);
				c.lineTo(start, 0);
				c.stroke();
			}
		}
	}
protected void paintRoundedSwimlane ( mxGraphics2DCanvas canvas , mxCellState state , double start , double r , String fill , boolean swimlaneLine ) { mxGraphicsCanvas2D c = configureCanvas ( canvas , state , new mxGraphicsCanvas2D ( canvas . getGraphics ( ) ) ) ; double w = state . getWidth ( ) ; double h = state . getHeight ( ) ; if ( ! mxConstants . NONE . equals ( fill ) ) { c . save ( ) ; c . setFillColor ( fill ) ; c . roundrect ( 0 , 0 , w , h , r , r ) ; c . fillAndStroke ( ) ; c . restore ( ) ; c . setShadow ( false ) ; } c . begin ( ) ; if ( mxUtils . isTrue ( state . getStyle ( ) , mxConstants . STYLE_HORIZONTAL , true ) ) { c . moveTo ( w , start ) ; c . lineTo ( w , r ) ; c . quadTo ( w , 0 , w - Math . min ( w / 2 , r ) , 0 ) ; c . lineTo ( Math . min ( w / 2 , r ) , 0 ) ; c . quadTo ( 0 , 0 , 0 , r ) ; c . lineTo ( 0 , start ) ; if ( swimlaneLine || start >= h ) { c . close ( ) ; } c . fillAndStroke ( ) ; if ( start < h && mxConstants . NONE . equals ( fill ) ) { c . begin ( ) ; c . moveTo ( 0 , start ) ; c . lineTo ( 0 , h - r ) ; c . quadTo ( 0 , h , Math . min ( w / 2 , r ) , h ) ; c . lineTo ( w - Math . min ( w / 2 , r ) , h ) ; c . quadTo ( w , h , w , h - r ) ; c . lineTo ( w , start ) ; c . stroke ( ) ; } } else { c . moveTo ( start , 0 ) ; c . lineTo ( r , 0 ) ; c . quadTo ( 0 , 0 , 0 , Math . min ( h / 2 , r ) ) ; c . lineTo ( 0 , h - Math . min ( h / 2 , r ) ) ; c . quadTo ( 0 , h , r , h ) ; c . lineTo ( start , h ) ; if ( swimlaneLine || start >= w ) { c . close ( ) ; } c . fillAndStroke ( ) ; if ( start < w && mxConstants . NONE . equals ( fill ) ) { c . begin ( ) ; c . moveTo ( start , h ) ; c . lineTo ( w - r , h ) ; c . quadTo ( w , h , w , h - Math . min ( h / 2 , r ) ) ; c . lineTo ( w , Math . min ( h / 2 , r ) ) ; c . quadTo ( w , 0 , w - r , 0 ) ; c . lineTo ( start , 0 ) ; c . stroke ( ) ; } } }
Function: paintRoundedSwimlane
 Paints the swimlane vertex shape.
Function : paintRoundedSwimlane Paints the swimlane vertex shape .
// Transparent content area // Transparent content area