void Touch_Fader::DRAW_ROUND_PATH(TRectF IN_RECT, LongBool ROUNDED, float ROUND_SIZE, float RATIO, float ROUND_SMOOTHNESS)
{
float L, R, T, B;
L = IN_RECT.left;
R = IN_RECT.right;
T = IN_RECT.top;
B = IN_RECT.bottom;
if (!ROUNDED)
{
sdkDrawPathStart();
sdkDrawPathMoveTo(sdkPointF(L, B));
sdkDrawPathLineTo(sdkPointF(L, T));
sdkDrawPathLineTo(sdkPointF(R, T));
sdkDrawPathLineTo(sdkPointF(R, B));
sdkDrawPathClose();
}
else //rounded
{
float ROUND_SIZE_Y = ROUND_SIZE;
float ROUND_SIZE_X = ROUND_SIZE_Y*RATIO;
ROUND_SIZE_Y = fminf(ROUND_SIZE_Y, (B - T) / 2.0);
ROUND_SIZE_X = fminf(ROUND_SIZE_X, (R - L) / 2.0);
sdkDrawPathStart();
sdkDrawPathMoveTo(sdkPointF(L, B - ROUND_SIZE_Y));
sdkDrawPathQuadCurveTo(sdkPointF(L, T + ROUND_SIZE_Y), sdkPointF(L, T + ROUND_SIZE_Y));
sdkDrawPathQuadCurveTo(sdkPointF(L + (ROUND_SIZE_X * ROUND_SMOOTHNESS), T), sdkPointF(L + ROUND_SIZE_X, T));
sdkDrawPathQuadCurveTo(sdkPointF(R - ROUND_SIZE_X, T), sdkPointF(R - ROUND_SIZE_X, T));
sdkDrawPathQuadCurveTo(sdkPointF(R, T + (ROUND_SIZE_Y * ROUND_SMOOTHNESS)), sdkPointF(R, T + ROUND_SIZE_Y));
sdkDrawPathQuadCurveTo(sdkPointF(R, B - ROUND_SIZE_Y), sdkPointF(R, B - ROUND_SIZE_Y));
sdkDrawPathQuadCurveTo(sdkPointF(R - (ROUND_SIZE_X * ROUND_SMOOTHNESS), B), sdkPointF(R - ROUND_SIZE_X, B));
sdkDrawPathQuadCurveTo(sdkPointF(L + ROUND_SIZE_X, B), sdkPointF(L + ROUND_SIZE_X, B));
sdkDrawPathQuadCurveTo(sdkPointF(L, B - (ROUND_SIZE_Y * ROUND_SMOOTHNESS)), sdkPointF(L, B - ROUND_SIZE_Y));
sdkDrawPathClose();
}
}// end draw path
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
then on the onPaint procedure when i want to draw i call the function , fill it and/or draw the border like this:
DRAW_ROUND_PATH(MY_RECT, RECT_IS_ROUND, RECT_ROUND_SIZE, XY_RATIO, ROUND_SMOOTHNESS);
sdkDrawPathFill(FILL_COLOR);
sdkDrawPathDraw(BORDER_COLOR, BORDER_SIZE);
it has the advantage of chosing if round or not, chosing to fill or only draw border or both, and behaves as you would expect regarding transparency as there are no ovelaps of two shapes.
nb: XYratio is 1 for square but can be different if playing with rectangle of various xy ratios. round_smoothness allow to vary from hexagonal shapes to rounded shapes.Statistics: Posted by 23fx23 — 26 Dec 2015, 12:16
]]>