Changeset 13 for trunk/Packages/Kernel/UAPI.pas
- Timestamp:
- Sep 25, 2017, 2:48:08 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Packages/Kernel/UAPI.pas
r12 r13 6 6 7 7 uses 8 Classes, SysUtils, UList, DateUtils, UMemory, UScreen, UDevice, UIPC,9 UScheduler ;8 SysUtils, UList, DateUtils, UMemory, UGraphics, UDevice, UIPC, 9 UScheduler, UScreen; 10 10 11 11 type 12 12 TApiCommand = (acNone, acWriteText, acDrawText, acDrawLine, acDrawRect, acSleep, 13 acReadMessage, acWindowCreate, acWindowSetAttr );13 acReadMessage, acWindowCreate, acWindowSetAttr, acGetWindowCanvas); 14 14 15 15 TDrawTextParams = record 16 CanvasId: Integer; 16 17 P: TPoint; 17 18 Text: string; … … 20 21 21 22 TDrawLineParams = record 23 CanvasId: Integer; 22 24 P1: TPoint; 23 25 P2: TPoint; … … 26 28 27 29 TWindowSetAttrParams = record 28 Size: TPoint; 30 WindowId: Integer; 31 Bounds: TRectangle; 29 32 Visible: Boolean; 30 33 end; 31 34 32 35 TDrawRectParams = record 33 Rect: TRect; 36 CanvasId: Integer; 37 Rect: TRectangle; 34 38 Color: TColor; 35 39 end; … … 41 45 function Call(Command: TApiCommand; Data: Pointer): Pointer; 42 46 procedure WriteText(Text: string); 43 procedure DrawText( P: TPoint; Text: string; Color: TColor);44 procedure DrawLine( P1, P2: TPoint; Color: TColor);45 procedure DrawRect( Rect: TRect; Color: TColor);47 procedure DrawText(CanvasId: Integer; P: TPoint; Text: string; Color: TColor); 48 procedure DrawLine(CanvasId: Integer; P1, P2: TPoint; Color: TColor); 49 procedure DrawRect(CanvasId: Integer; Rect: TRectangle; Color: TColor); 46 50 procedure Sleep(Time: TDateTime); 47 51 procedure ReadMessage(Message: TIPCMessage); 48 52 function WindowCreate: Integer; 49 procedure WindowSetAttr(Size: TPoint; Visible: Boolean); 53 function GetWindowCanvas(WindowId: Integer): Integer; 54 procedure WindowSetAttr(WindowId: Integer; Bounds: TRectangle; Visible: Boolean); 50 55 end; 51 56 … … 58 63 function Call(Command: TApiCommand; Data: Pointer): Pointer; 59 64 procedure WriteText(Text: string); 60 procedure DrawText( P: TPoint; Text: string; Color: TColor);61 procedure DrawLine( P1, P2: TPoint; Color: TColor);62 procedure DrawRect( Rect: TRect; Color: TColor);65 procedure DrawText(CanvasId: Integer; P: TPoint; Text: string; Color: TColor); 66 procedure DrawLine(CanvasId: Integer; P1, P2: TPoint; Color: TColor); 67 procedure DrawRect(CanvasId: Integer; Rect: TRectangle; Color: TColor); 63 68 procedure Sleep(Time: TDateTime); 64 69 procedure ReadMessage(Message: TIPCMessage); 65 70 function WindowCreate: Integer; 66 procedure WindowSetAttr(Size: TPoint; Visible: Boolean); 71 function GetWindowCanvas(WindowId: Integer): Integer; 72 procedure WindowSetAttr(WindowId: Integer; Bounds: TRectangle; Visible: Boolean); 67 73 end; 68 74 … … 86 92 end; 87 93 88 procedure TUserApi.DrawText( P: TPoint; Text: string; Color: TColor);94 procedure TUserApi.DrawText(CanvasId: Integer; P: TPoint; Text: string; Color: TColor); 89 95 var 90 96 Params: TDrawTextParams; 91 97 begin 98 Params.CanvasId := CanvasId; 92 99 Params.P := P; 93 100 Params.Text := Text; … … 96 103 end; 97 104 98 procedure TUserApi.DrawLine( P1, P2: TPoint; Color: TColor);105 procedure TUserApi.DrawLine(CanvasId: Integer; P1, P2: TPoint; Color: TColor); 99 106 var 100 107 Params: TDrawLineParams; 101 108 begin 109 Params.CanvasId := CanvasId; 102 110 Params.P1 := P1; 103 111 Params.P2 := P2; … … 106 114 end; 107 115 108 procedure TUserApi.DrawRect( Rect: TRect; Color: TColor);116 procedure TUserApi.DrawRect(CanvasId: Integer; Rect: TRectangle; Color: TColor); 109 117 var 110 118 Params: TDrawRectParams; 111 119 begin 120 Params.CanvasId := CanvasId; 112 121 Params.Rect := Rect; 113 122 Params.Color := Color; … … 127 136 function TUserApi.WindowCreate: Integer; 128 137 begin 129 Call(acWindowCreate, nil); 130 end; 131 132 procedure TUserApi.WindowSetAttr(Size: TPoint; Visible: Boolean); 138 Result := Integer(Call(acWindowCreate, nil)); 139 end; 140 141 function TUserApi.GetWindowCanvas(WindowId: Integer): Integer; 142 begin 143 Call(acGetWindowCanvas, Pointer(WindowId)); 144 end; 145 146 procedure TUserApi.WindowSetAttr(WindowId: Integer; Bounds: TRectangle; Visible: Boolean); 133 147 var 134 148 Params: TWindowSetAttrParams; 135 149 begin 136 Params.Size := Size; 150 Params.WindowId := WindowId; 151 Params.Bounds := Bounds; 137 152 Params.Visible := Visible; 138 153 Call(acWindowSetAttr, @Params); … … 145 160 begin 146 161 case Command of 147 acDrawLine: DrawLine(TDrawLineParams(Data^).P1, TDrawLineParams(Data^).P2, 148 TDrawLineParams(Data^).Color); 149 acDrawRect: DrawRect(TDrawRectParams(Data^).Rect, TDrawRectParams(Data^).Color); 150 acDrawText: DrawText(TDrawTextParams(Data^).P, TDrawTextParams(Data^).Text, 151 TDrawTextParams(Data^).Color); 162 acDrawLine: DrawLine(TDrawLineParams(Data^).CanvasId, TDrawLineParams(Data^).P1, 163 TDrawLineParams(Data^).P2, TDrawLineParams(Data^).Color); 164 acDrawRect: DrawRect(TDrawRectParams(Data^).CanvasId, TDrawRectParams(Data^).Rect, 165 TDrawRectParams(Data^).Color); 166 acDrawText: DrawText(TDrawTextParams(Data^).CanvasId, TDrawTextParams(Data^).P, 167 TDrawTextParams(Data^).Text, TDrawTextParams(Data^).Color); 152 168 acSleep: Sleep(TDateTime(Data^)); 153 169 acWindowCreate: Result := Pointer(WindowCreate); 154 acWindowSetAttr: WindowSetAttr(TWindowSetAttrParams(Data^). Size,155 TWindowSetAttrParams(Data^). Visible);170 acWindowSetAttr: WindowSetAttr(TWindowSetAttrParams(Data^).WindowId, 171 TWindowSetAttrParams(Data^).Bounds, TWindowSetAttrParams(Data^).Visible); 156 172 acWriteText: WriteText(string(Data)); 157 173 acReadMessage: ReadMessage(Data); 174 acGetWindowCanvas: Result := Pointer(GetWindowCanvas(Integer(Data))); 158 175 end; 159 176 end; … … 169 186 end; 170 187 171 procedure TKernelApi.DrawText( P: TPoint; Text: string; Color: TColor);188 procedure TKernelApi.DrawText(CanvasId: Integer; P: TPoint; Text: string; Color: TColor); 172 189 var 173 190 Screen: TScreen; 174 begin 175 Screen := TScreen(TKernel(Kernel).Screens.First); 176 Screen.DrawText(P, Text, Color); 177 end; 178 179 procedure TKernelApi.DrawLine(P1, P2: TPoint; Color: TColor); 191 Canvas: TCanvas; 192 begin 193 Canvas := TKernel(Kernel).Desktop.FindCanvasById(CanvasId); 194 if Assigned(Canvas) then begin 195 Canvas.DrawText(P, Text, Color); 196 end; 197 end; 198 199 procedure TKernelApi.DrawLine(CanvasId: Integer; P1, P2: TPoint; Color: TColor); 180 200 var 181 201 Screen: TScreen; 182 begin 183 Screen := TScreen(TKernel(Kernel).Screens.First); 184 Screen.DrawLine(P1, P2, Color); 185 end; 186 187 procedure TKernelApi.DrawRect(Rect: TRect; Color: TColor); 202 Canvas: TCanvas; 203 begin 204 Canvas := TKernel(Kernel).Desktop.FindCanvasById(CanvasId); 205 if Assigned(Canvas) then begin 206 Canvas.DrawLine(P1.Add(Canvas.Position), P2.Add(Canvas.Position), Color); 207 end; 208 end; 209 210 procedure TKernelApi.DrawRect(CanvasId: Integer; Rect: TRectangle; Color: TColor); 188 211 var 189 212 Screen: TScreen; 190 begin 191 Screen := TScreen(TKernel(Kernel).Screens.First); 192 Screen.DrawRect(Rect, Color); 213 Canvas: TCanvas; 214 begin 215 Canvas := TKernel(Kernel).Desktop.FindCanvasById(CanvasId); 216 if Assigned(Canvas) then begin 217 Canvas.DrawRect(Rect, Color); 218 end; 193 219 end; 194 220 … … 210 236 211 237 function TKernelApi.WindowCreate: Integer; 212 begin 213 214 end; 215 216 procedure TKernelApi.WindowSetAttr(Size: TPoint; Visible: Boolean); 217 begin 218 238 var 239 Window: TWindow; 240 begin 241 Window := TKernel(Kernel).Desktop.CreateWindow; 242 Window.Desktop := TKernel(Kernel).Desktop; 243 Result := Window.Id; 244 end; 245 246 function TKernelApi.GetWindowCanvas(WindowId: Integer): Integer; 247 var 248 Window: TWindow; 249 Canvas: TCanvas; 250 begin 251 Window := TWindow(TKernel(Kernel).Desktop.FindObjectById(WindowId)); 252 if Assigned(Window) then begin 253 Canvas := Window.Canvas; 254 Canvas.Parent := TKernel(Kernel).Screens.First.Canvas; 255 Result := Canvas.Id; 256 end else Result := -1; 257 end; 258 259 procedure TKernelApi.WindowSetAttr(WindowId: Integer; Bounds: TRectangle; Visible: Boolean); 260 var 261 Window: TWindow; 262 begin 263 Window := TWindow(TKernel(Kernel).Desktop.FindObjectById(WindowId)); 264 if Assigned(Window) then begin 265 Window.Bounds := Bounds; 266 Window.Canvas.Position := Bounds.Position; 267 Window.Visible := Visible; 268 end; 219 269 end; 220 270
Note:
See TracChangeset
for help on using the changeset viewer.