{**************************************************** This file is part of the Eye Candy Controls (EC-C) This is *include* file, belongs to ectypes.pas Copyright (C) 2013 Vojtěch Čihák, Czech Republic This library is free software. See the file COPYING.LGPL.txt, included in this distribution, for details about the license. ****************************************************} procedure TCanvasHelper.DrawGlyph(ARect: TRect; AGlyphDesign: TGlyphDesign); var aEvenH, aEvenW, x, y, x2, y2: SmallInt; procedure DrawArrowDown(ATop: SmallInt; ASize: SmallInt = 4); var i: SmallInt; begin for i := 4 - ASize to 2 do begin Line(x + i, ATop, x2 - i, ATop); inc(ATop); end; if aEvenW = 1 then Line(x + 3, ATop, x2 - 3, ATop) else Pixels[x + 3, ATop] := Pen.Color; end; procedure DrawArrowLeft(ALeft: SmallInt; ASize: SmallInt = 4); var i: SmallInt; begin if aEvenH = 1 then Line(ALeft, y + 3, aLeft, y2 - 3) else Pixels[ALeft, y + 3] := Pen.Color; for i := 2 downto 4 - ASize do begin inc(ALeft); Line(ALeft, y + i, ALeft, y2 - i); end; end; procedure DrawArrowRight(ALeft: SmallInt; ASize: SmallInt = 4); var i: SmallInt; begin for i := 4 - ASize to 2 do begin Line(ALeft, y + i, ALeft, y2 - i); inc(ALeft); end; if aEvenH = 1 then Line(ALeft, y + 3, aLeft, y2 - 3) else Pixels[ALeft, y + 3] := Pen.Color; end; procedure DrawArrowUp(ATop: SmallInt; ASize: SmallInt = 4); var i: SmallInt; begin if aEvenW = 1 then Line(x + 3, ATop, x2 - 3, ATop) else Pixels[x + 3, ATop] := Pen.Color; for i := 2 downto 4 - ASize do begin inc(ATop); Line(x + i, ATop, x2 - i, ATop); end; end; procedure DrawArrowUL(ATop: SmallInt); var i: SmallInt; begin i := x + 1; Line(i, ATop, x2 - 1, ATop); inc(ATop); Line(i, ATop, x2 - 2, ATop); inc(ATop); Line(i, ATop, x2 - 3, ATop); inc(ATop); Line(i, ATop, x2 - 4, ATop); inc(ATop); Line(i, ATop, x2 - 5, ATop); if aEvenW = 1 then inc(ATop); Pixels[i, ATop] := Pen.Color; end; procedure DrawArrowUR(ATop: SmallInt); var i: SmallInt; begin i := x2 - 1; Line(x + 1, ATop, i, ATop); inc(ATop); Line(x + 2, ATop, i, ATop); inc(ATop); Line(x + 3, ATop, i, ATop); inc(ATop); Line(x + 4, ATop, i, ATop); inc(ATop); Line(x + 5, ATop, i, ATop); if aEvenW = 1 then inc(ATop); dec(i); Pixels[i, ATop] := Pen.Color; end; procedure DrawArrowDL(ATop: SmallInt); var i: SmallInt; begin i := x + 1; Pixels[i, ATop + 1] := Pen.Color; if aEvenW = 1 then inc(ATop); inc(ATop); Line(i, ATop, x2 - 5, ATop); inc(ATop); Line(i, ATop, x2 - 4, ATop); inc(ATop); Line(i, ATop, x2 - 3, ATop); inc(ATop); Line(i, ATop, x2 - 2, ATop); inc(ATop); Line(i, ATop, x2 - 1, ATop); end; procedure DrawArrowDR(ATop: SmallInt); var i: SmallInt; begin i := x2 - 1; Pixels[i - 1, ATop + 1] := Pen.Color; if aEvenW = 1 then inc(ATop); inc(ATop); Line(x + 5, ATop, i, ATop); inc(ATop); Line(x + 4, ATop, i, ATop); inc(ATop); Line(x + 3, ATop, i, ATop); inc(ATop); Line(x + 2, ATop, i, ATop); inc(ATop); Line(x + 1, ATop, i, ATop); end; procedure DrawArrowBDown(ATop: SmallInt; ASharpOdd: Boolean = True); var i: SmallInt; begin i := x; Line(i, ATop, i, ATop + 2); inc(i); Line(i, ATop, i, ATop + 3); inc(i); Line(i, ATop + 1, i, ATop + 4); inc(i); if (aEvenW = 1) or ASharpOdd then Line(i, ATop + 2, i, ATop + 5) else Line(i, ATop + 2, i, ATop + 4); inc(i); if aEvenW = 1 then begin Line(i, ATop + 2, i, ATop + 5); inc(i); end; Line(i, ATop + 1, i, ATop + 4); inc(i); Line(i, ATop, i, ATop + 3); inc(i); Line(i, ATop, i, ATop + 2); end; procedure DrawArrowBLeft(ALeft: SmallInt; ASharpOdd: Boolean = True); var j: SmallInt; begin j := y; Line(ALeft + 3, j, ALeft + 5, j); inc(j); Line(ALeft + 2, j, ALeft + 5, j); inc(j); Line(ALeft + 1, j, ALeft + 4, j); inc(j); if (aEvenH = 1) or ASharpOdd then Line(ALeft, j, ALeft + 3, j) else Line(ALeft + 1, j, ALeft + 3, j); inc(j); if aEvenH = 1 then begin Line(ALeft, j, ALeft + 3, j); inc(j); end; Line(ALeft + 1, j, ALeft + 4, j); inc(j); Line(ALeft + 2, j, ALeft + 5, j); inc(j); Line(ALeft + 3, j, ALeft + 5, j); end; procedure DrawArrowBRight(ALeft: SmallInt; ASharpOdd: Boolean = True); var j: SmallInt; begin j := y; Line(ALeft, j, ALeft + 2, j); inc(j); Line(ALeft, j, ALeft + 3, j); inc(j); Line(ALeft + 1, j, ALeft + 4, j); inc(j); if (aEvenH = 1) or ASharpOdd then Line(ALeft + 2, j, ALeft + 5, j) else Line(ALeft + 2, j, ALeft + 4, j); inc(j); if aEvenH = 1 then begin Line(ALeft + 2, j, ALeft + 5, j); inc(j); end; Line(ALeft + 1, j, ALeft + 4, j); inc(j); Line(ALeft, j, ALeft + 3, j); inc(j); Line(ALeft, j, ALeft + 2, j); end; procedure DrawArrowBUp(ATop: SmallInt; ASharpOdd: Boolean = True); var i: SmallInt; begin i := x; Line(i, ATop + 3, i, ATop + 5); inc(i); Line(i, ATop + 2, i, ATop + 5); inc(i); Line(i, ATop + 1, i, ATop + 4); inc(i); if (aEvenW = 1) or ASharpOdd then Line(i, ATop, i, ATop + 3) else Line(i, ATop + 1, i, ATop + 3); inc(i); if aEvenW = 1 then begin Line(i, ATop, i, ATop + 3); inc(i); end; Line(i, ATop + 1, i, ATop + 4); inc(i); Line(i, ATop + 2, i, ATop + 5); inc(i); Line(i, ATop + 3, i, ATop + 5); end; begin Pen.Style:=psSolid; Pen.Width:=1; case AGlyphDesign of egdSizeArrUp: begin x := ARect.Left + 1; x2 := ARect.Right - 1; y2 := (ARect.Bottom+ARect.Top) div 2 + (x2 - x) div 4; while x 15 then begin x := x + (ARect.Right - x - 1) div 2; Line(x, ARect.Top + 1, x, ARect.Bottom - 1); end; end; end; { case } end; { case } end;