source: trunk/Packages/Kernel/Kernel.KernelAPI.pas@ 68

Last change on this file since 68 was 61, checked in by chronos, 14 months ago
  • Modified: Kernel API class definition improvement.
File size: 4.6 KB
Line 
1unit Kernel.KernelAPI;
2
3interface
4
5uses
6 Classes, SysUtils, Kernel.API, Kernel.Core, Kernel.Graphics, Kernel.IPC;
7
8type
9 TKernelApi = class(TSystemApi)
10 Kernel: TKernel;
11 function Call(Command: TApiCommand; Data: Pointer): Pointer; override;
12 procedure WriteText(Text: string); override;
13 procedure DrawText(CanvasId: Integer; P: TPoint; Text: string; Color: TColor); override;
14 procedure DrawLine(CanvasId: Integer; P1, P2: TPoint; Color: TColor); override;
15 procedure DrawRect(CanvasId: Integer; Rect: TRectangle; Color: TColor); override;
16 procedure DrawFrame(CanvasId: Integer; Rect: TRectangle; Color: TColor); override;
17 procedure Sleep(Time: TDateTime); override;
18 procedure ReadMessage(Message: TIPCMessage); override;
19 function WindowCreate: Integer; override;
20 function GetWindowCanvas(WindowId: Integer): Integer; override;
21 procedure WindowSetAttr(WindowId: Integer; Bounds: TRectangle; Visible: Boolean); override;
22 end;
23
24
25implementation
26
27uses
28 Kernel.Device, Kernel.Screen, Kernel.Scheduler;
29
30{ TKernelApi }
31
32function TKernelApi.Call(Command: TApiCommand; Data: Pointer
33 ): Pointer;
34begin
35 case Command of
36 acDrawLine: DrawLine(TDrawLineParams(Data^).CanvasId, TDrawLineParams(Data^).P1,
37 TDrawLineParams(Data^).P2, TDrawLineParams(Data^).Color);
38 acDrawRect: DrawRect(TDrawRectParams(Data^).CanvasId, TDrawRectParams(Data^).Rect,
39 TDrawRectParams(Data^).Color);
40 acDrawFrame: DrawFrame(TDrawRectParams(Data^).CanvasId, TDrawRectParams(Data^).Rect,
41 TDrawRectParams(Data^).Color);
42 acDrawText: DrawText(TDrawTextParams(Data^).CanvasId, TDrawTextParams(Data^).P,
43 TDrawTextParams(Data^).Text, TDrawTextParams(Data^).Color);
44 acSleep: Sleep(TDateTime(Data^));
45 acWindowCreate: Result := Pointer(WindowCreate);
46 acWindowSetAttr: WindowSetAttr(TWindowSetAttrParams(Data^).WindowId,
47 TWindowSetAttrParams(Data^).Bounds, TWindowSetAttrParams(Data^).Visible);
48 acWriteText: WriteText(string(Data));
49 acReadMessage: ReadMessage(Data);
50 acGetWindowCanvas: Result := Pointer(GetWindowCanvas(Integer(Data)));
51 end;
52end;
53
54procedure TKernelApi.WriteText(Text: string);
55var
56 Device: TDeviceSerial;
57begin
58 Device := TDeviceSerial(TKernel(Kernel).Devices.FindByName('Serial0'));
59 if Assigned(Device) then begin
60 Device.WriteText(Text);
61 end else raise Exception.Create('Device Serial0 not found');
62end;
63
64procedure TKernelApi.DrawText(CanvasId: Integer; P: TPoint; Text: string; Color: TColor);
65var
66 Screen: TScreen;
67 Canvas: TCanvas;
68begin
69 Canvas := TKernel(Kernel).Desktop.FindCanvasById(CanvasId);
70 if Assigned(Canvas) then begin
71 Canvas.DrawText(P, Text, Color);
72 end;
73end;
74
75procedure TKernelApi.DrawLine(CanvasId: Integer; P1, P2: TPoint; Color: TColor);
76var
77 Screen: TScreen;
78 Canvas: TCanvas;
79begin
80 Canvas := TKernel(Kernel).Desktop.FindCanvasById(CanvasId);
81 if Assigned(Canvas) then begin
82 Canvas.DrawLine(P1.Add(Canvas.Position), P2.Add(Canvas.Position), Color);
83 end;
84end;
85
86procedure TKernelApi.DrawRect(CanvasId: Integer; Rect: TRectangle; Color: TColor);
87var
88 Canvas: TCanvas;
89begin
90 Canvas := TKernel(Kernel).Desktop.FindCanvasById(CanvasId);
91 if Assigned(Canvas) then begin
92 Canvas.DrawRect(Rect, Color);
93 end;
94end;
95
96procedure TKernelApi.DrawFrame(CanvasId: Integer; Rect: TRectangle;
97 Color: TColor);
98var
99 Canvas: TCanvas;
100begin
101 Canvas := TKernel(Kernel).Desktop.FindCanvasById(CanvasId);
102 if Assigned(Canvas) then begin
103 Canvas.DrawFrame(Rect, Color);
104 end;
105end;
106
107procedure TKernelApi.Sleep(Time: TDateTime);
108var
109 Task: TTask;
110begin
111 Task := TKernel(Kernel).Scheduler.GetCurrentTask;
112 Task.Sleep(Time);
113end;
114
115procedure TKernelApi.ReadMessage(Message: TIPCMessage);
116var
117 Task: TTask;
118begin
119 Task := TKernel(Kernel).Scheduler.GetCurrentTask;
120 while Task.Messages.List.Count = 0 do Task.WaitForMessage;
121end;
122
123function TKernelApi.WindowCreate: Integer;
124var
125 Window: TWindow;
126begin
127 Window := TKernel(Kernel).Desktop.CreateWindow;
128 Window.Desktop := TKernel(Kernel).Desktop;
129 Result := Window.Id;
130end;
131
132function TKernelApi.GetWindowCanvas(WindowId: Integer): Integer;
133var
134 Window: TWindow;
135 Canvas: TCanvas;
136begin
137 Window := TWindow(TKernel(Kernel).Desktop.FindObjectById(WindowId));
138 if Assigned(Window) then begin
139 Canvas := Window.Canvas;
140 Result := Canvas.Id;
141 end else Result := -1;
142end;
143
144procedure TKernelApi.WindowSetAttr(WindowId: Integer; Bounds: TRectangle; Visible: Boolean);
145var
146 Window: TWindow;
147begin
148 Window := TWindow(TKernel(Kernel).Desktop.FindObjectById(WindowId));
149 if Assigned(Window) then begin
150 Window.Bounds := Bounds;
151 Window.Canvas.Position := Bounds.Position;
152 Window.Visible := Visible;
153 Window.Desktop.Paint;
154 end;
155end;
156
157
158end.
159
Note: See TracBrowser for help on using the repository browser.