Changeset 13 for trunk/Packages/Kernel/UScreen.pas
- Timestamp:
- Sep 25, 2017, 2:48:08 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Packages/Kernel/UScreen.pas
r8 r13 6 6 7 7 uses 8 Classes, SysUtils, Math;8 SysUtils, Math, UGraphics; 9 9 10 10 type 11 TColorFormat = (cfRGBA8, cfGray8); 12 TColor = Integer; 11 TScreen = class; 12 13 TScreenCanvas = class(TCanvas) 14 Screen: TScreen; 15 procedure DrawText(Pos: TPoint; Text: string; Color: TColor); override; 16 procedure DrawLine(P1, P2: TPoint; Color: TColor); override; 17 procedure DrawRect(Rect: TRectangle; Color: TColor); override; 18 procedure SetPixel(P: TPoint; Color: TColor); override; 19 end; 13 20 14 21 { TScreen } … … 22 29 BytesPerLine: Integer; 23 30 VideoMemory: PByte; 24 procedure DrawText(Pos: TPoint; Text: string; Color: TColor); 25 procedure DrawLine(P1, P2: TPoint; Color: TColor); 26 procedure DrawRect(Rect: TRect; Color: TColor); 27 procedure SetPixel(P: TPoint; Color: TColor); 31 Canvas: TCanvas; 28 32 procedure VideoMemoryUpdated; 29 33 end; … … 34 38 UDevice; 35 39 36 { TScreen }40 { TScreenCanvas } 37 41 38 procedure TScreen .DrawText(Pos: TPoint; Text: string; Color: TColor);42 procedure TScreenCanvas.DrawText(Pos: TPoint; Text: string; Color: TColor); 39 43 begin 40 44 41 45 end; 42 46 43 procedure TScreen .DrawLine(P1, P2: TPoint; Color: TColor);47 procedure TScreenCanvas.DrawLine(P1, P2: TPoint; Color: TColor); 44 48 var 45 49 I: Integer; … … 47 51 if Abs(P2.X - P1.X) > Abs(P2.Y - P1.Y) then begin 48 52 for I := 0 to Abs(P2.X - P1.X) - 1 do 49 SetPixel( Point(Trunc(P1.X + I * Sign(P2.X - P1.X)),53 SetPixel(TPoint.Create(Trunc(P1.X + I * Sign(P2.X - P1.X)), 50 54 Trunc(P1.Y + (P2.Y - P1.Y) / Abs(P2.X - P1.X) * I)), Color); 51 55 end else begin 52 56 for I := 0 to Abs(P2.Y - P1.Y) - 1 do 53 SetPixel( Point(Trunc(P1.X + (P2.X - P1.X) / Abs(P2.Y - P1.Y) * I),57 SetPixel(TPoint.Create(Trunc(P1.X + (P2.X - P1.X) / Abs(P2.Y - P1.Y) * I), 54 58 Trunc(P1.Y + I * Sign(P2.Y - P1.Y))), Color); 55 59 end; 56 VideoMemoryUpdated;60 Screen.VideoMemoryUpdated; 57 61 end; 58 62 59 procedure TScreen .DrawRect(Rect: TRect; Color: TColor);63 procedure TScreenCanvas.DrawRect(Rect: TRectangle; Color: TColor); 60 64 var 61 65 X, Y: Integer; … … 63 67 for Y := Rect.Top to Rect.Bottom do 64 68 for X := Rect.Left to Rect.Right do 65 SetPixel( Point(X, Y), Color);69 SetPixel(TPoint.Create(X, Y), Color); 66 70 end; 67 71 68 procedure TScreen .SetPixel(P: TPoint; Color: TColor);72 procedure TScreenCanvas.SetPixel(P: TPoint; Color: TColor); 69 73 begin 70 if Assigned(VideoMemory) then 71 PInteger(VideoMemory + P.X * BytesPerPixel + P.Y * BytesPerLine)^ := Color; 74 if Assigned(Screen.VideoMemory) and 75 TRectangle.Create(TPoint.Create(0, 0), Screen.Size).PointInside(P) then 76 PInteger(Screen.VideoMemory + P.X * Screen.BytesPerPixel + P.Y * Screen.BytesPerLine)^ := Color; 72 77 end; 78 79 80 { TScreen } 73 81 74 82 procedure TScreen.VideoMemoryUpdated;
Note:
See TracChangeset
for help on using the changeset viewer.