Ignore:
Timestamp:
Sep 25, 2017, 2:48:08 PM (7 years ago)
Author:
chronos
Message:
  • Added: Drawing relative to Canvas. In case of Window drawing relative to Window.
  • Modified: Use custom TPoint and TRectangle if possible.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Packages/Kernel/UAPI.pas

    r12 r13  
    66
    77uses
    8   Classes, SysUtils, UList, DateUtils, UMemory, UScreen, UDevice, UIPC,
    9   UScheduler;
     8  SysUtils, UList, DateUtils, UMemory, UGraphics, UDevice, UIPC,
     9  UScheduler, UScreen;
    1010
    1111type
    1212  TApiCommand = (acNone, acWriteText, acDrawText, acDrawLine, acDrawRect, acSleep,
    13     acReadMessage, acWindowCreate, acWindowSetAttr);
     13    acReadMessage, acWindowCreate, acWindowSetAttr, acGetWindowCanvas);
    1414
    1515  TDrawTextParams = record
     16    CanvasId: Integer;
    1617    P: TPoint;
    1718    Text: string;
     
    2021
    2122  TDrawLineParams = record
     23    CanvasId: Integer;
    2224    P1: TPoint;
    2325    P2: TPoint;
     
    2628
    2729  TWindowSetAttrParams = record
    28     Size: TPoint;
     30    WindowId: Integer;
     31    Bounds: TRectangle;
    2932    Visible: Boolean;
    3033  end;
    3134
    3235  TDrawRectParams = record
    33     Rect: TRect;
     36    CanvasId: Integer;
     37    Rect: TRectangle;
    3438    Color: TColor;
    3539  end;
     
    4145    function Call(Command: TApiCommand; Data: Pointer): Pointer;
    4246    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);
    4650    procedure Sleep(Time: TDateTime);
    4751    procedure ReadMessage(Message: TIPCMessage);
    4852    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);
    5055  end;
    5156
     
    5863    function Call(Command: TApiCommand; Data: Pointer): Pointer;
    5964    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);
    6368    procedure Sleep(Time: TDateTime);
    6469    procedure ReadMessage(Message: TIPCMessage);
    6570    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);
    6773  end;
    6874
     
    8692end;
    8793
    88 procedure TUserApi.DrawText(P: TPoint; Text: string; Color: TColor);
     94procedure TUserApi.DrawText(CanvasId: Integer; P: TPoint; Text: string; Color: TColor);
    8995var
    9096  Params: TDrawTextParams;
    9197begin
     98  Params.CanvasId := CanvasId;
    9299  Params.P := P;
    93100  Params.Text := Text;
     
    96103end;
    97104
    98 procedure TUserApi.DrawLine(P1, P2: TPoint; Color: TColor);
     105procedure TUserApi.DrawLine(CanvasId: Integer; P1, P2: TPoint; Color: TColor);
    99106var
    100107  Params: TDrawLineParams;
    101108begin
     109  Params.CanvasId := CanvasId;
    102110  Params.P1 := P1;
    103111  Params.P2 := P2;
     
    106114end;
    107115
    108 procedure TUserApi.DrawRect(Rect: TRect; Color: TColor);
     116procedure TUserApi.DrawRect(CanvasId: Integer; Rect: TRectangle; Color: TColor);
    109117var
    110118  Params: TDrawRectParams;
    111119begin
     120  Params.CanvasId := CanvasId;
    112121  Params.Rect := Rect;
    113122  Params.Color := Color;
     
    127136function TUserApi.WindowCreate: Integer;
    128137begin
    129   Call(acWindowCreate, nil);
    130 end;
    131 
    132 procedure TUserApi.WindowSetAttr(Size: TPoint; Visible: Boolean);
     138  Result := Integer(Call(acWindowCreate, nil));
     139end;
     140
     141function TUserApi.GetWindowCanvas(WindowId: Integer): Integer;
     142begin
     143  Call(acGetWindowCanvas, Pointer(WindowId));
     144end;
     145
     146procedure TUserApi.WindowSetAttr(WindowId: Integer; Bounds: TRectangle; Visible: Boolean);
    133147var
    134148  Params: TWindowSetAttrParams;
    135149begin
    136   Params.Size := Size;
     150  Params.WindowId := WindowId;
     151  Params.Bounds := Bounds;
    137152  Params.Visible := Visible;
    138153  Call(acWindowSetAttr, @Params);
     
    145160begin
    146161  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);
    152168    acSleep: Sleep(TDateTime(Data^));
    153169    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);
    156172    acWriteText: WriteText(string(Data));
    157173    acReadMessage: ReadMessage(Data);
     174    acGetWindowCanvas: Result := Pointer(GetWindowCanvas(Integer(Data)));
    158175  end;
    159176end;
     
    169186end;
    170187
    171 procedure TKernelApi.DrawText(P: TPoint; Text: string; Color: TColor);
     188procedure TKernelApi.DrawText(CanvasId: Integer; P: TPoint; Text: string; Color: TColor);
    172189var
    173190  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;
     192begin
     193  Canvas := TKernel(Kernel).Desktop.FindCanvasById(CanvasId);
     194  if Assigned(Canvas) then begin
     195    Canvas.DrawText(P, Text, Color);
     196  end;
     197end;
     198
     199procedure TKernelApi.DrawLine(CanvasId: Integer; P1, P2: TPoint; Color: TColor);
    180200var
    181201  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;
     203begin
     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;
     208end;
     209
     210procedure TKernelApi.DrawRect(CanvasId: Integer; Rect: TRectangle; Color: TColor);
    188211var
    189212  Screen: TScreen;
    190 begin
    191   Screen := TScreen(TKernel(Kernel).Screens.First);
    192   Screen.DrawRect(Rect, Color);
     213  Canvas: TCanvas;
     214begin
     215  Canvas := TKernel(Kernel).Desktop.FindCanvasById(CanvasId);
     216  if Assigned(Canvas) then begin
     217    Canvas.DrawRect(Rect, Color);
     218  end;
    193219end;
    194220
     
    210236
    211237function TKernelApi.WindowCreate: Integer;
    212 begin
    213 
    214 end;
    215 
    216 procedure TKernelApi.WindowSetAttr(Size: TPoint; Visible: Boolean);
    217 begin
    218 
     238var
     239  Window: TWindow;
     240begin
     241  Window := TKernel(Kernel).Desktop.CreateWindow;
     242  Window.Desktop := TKernel(Kernel).Desktop;
     243  Result := Window.Id;
     244end;
     245
     246function TKernelApi.GetWindowCanvas(WindowId: Integer): Integer;
     247var
     248  Window: TWindow;
     249  Canvas: TCanvas;
     250begin
     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;
     257end;
     258
     259procedure TKernelApi.WindowSetAttr(WindowId: Integer; Bounds: TRectangle; Visible: Boolean);
     260var
     261  Window: TWindow;
     262begin
     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;
    219269end;
    220270
Note: See TracChangeset for help on using the changeset viewer.