mirror of
				https://gitlab.com/freepascal.org/lazarus/lazarus.git
				synced 2025-10-31 01:21:41 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			247 lines
		
	
	
		
			9.8 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
			
		
		
	
	
			247 lines
		
	
	
		
			9.8 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
| 
 | |
| unit uPSR_graphics;
 | |
| {$I PascalScript.inc}
 | |
| interface
 | |
| uses
 | |
|   uPSRuntime, uPSUtils;
 | |
| 
 | |
| 
 | |
| 
 | |
| procedure RIRegisterTGRAPHICSOBJECT(Cl: TPSRuntimeClassImporter);
 | |
| procedure RIRegisterTFont(Cl: TPSRuntimeClassImporter);
 | |
| procedure RIRegisterTPEN(Cl: TPSRuntimeClassImporter);
 | |
| procedure RIRegisterTBRUSH(Cl: TPSRuntimeClassImporter);
 | |
| procedure RIRegisterTCanvas(cl: TPSRuntimeClassImporter);
 | |
| procedure RIRegisterTGraphic(CL: TPSRuntimeClassImporter);
 | |
| procedure RIRegisterTBitmap(CL: TPSRuntimeClassImporter; Streams: Boolean);
 | |
| procedure RIRegisterTPicture(CL: TPSRuntimeClassImporter);
 | |
| 
 | |
| procedure RIRegister_Graphics(Cl: TPSRuntimeClassImporter; Streams: Boolean);
 | |
| 
 | |
| implementation
 | |
| {$IFnDEF FPC}
 | |
| uses
 | |
|   Classes{$IFDEF CLX}, QGraphics{$ELSE}, Windows, Graphics{$ENDIF};
 | |
| {$ELSE}
 | |
| uses
 | |
|   Classes, Graphics,LCLType;
 | |
| {$ENDIF}
 | |
| 
 | |
| {$IFnDEF CLX}
 | |
| procedure TFontHandleR(Self: TFont; var T: Longint); begin T := Self.Handle; end;
 | |
| procedure TFontHandleW(Self: TFont; T: Longint); begin Self.Handle := T; end;
 | |
| {$ENDIF}
 | |
| procedure TFontPixelsPerInchR(Self: TFont; var T: Longint); begin T := Self.PixelsPerInch; end;
 | |
| procedure TFontPixelsPerInchW(Self: TFont; T: Longint); begin {$IFnDEF FPC} Self.PixelsPerInch := T;{$ENDIF} end;
 | |
| procedure TFontStyleR(Self: TFont; var T: TFontStyles); begin T := Self.Style; end;
 | |
| procedure TFontStyleW(Self: TFont; T: TFontStyles); begin Self.Style:= T; end;
 | |
| 
 | |
| procedure RIRegisterTFont(Cl: TPSRuntimeClassImporter);
 | |
| begin
 | |
|   with Cl.Add(TFont) do
 | |
|   begin
 | |
|     RegisterConstructor(@TFont.Create, 'CREATE');
 | |
| {$IFnDEF CLX}
 | |
|     RegisterPropertyHelper(@TFontHandleR, @TFontHandleW, 'HANDLE');
 | |
| {$ENDIF}
 | |
|     RegisterPropertyHelper(@TFontPixelsPerInchR, @TFontPixelsPerInchW, 'PIXELSPERINCH');
 | |
|     RegisterPropertyHelper(@TFontStyleR, @TFontStyleW, 'STYLE');
 | |
|   end;
 | |
| end;
 | |
| {$IFnDEF CLX}
 | |
| procedure TCanvasHandleR(Self: TCanvas; var T: Longint); begin T := Self.Handle; end;
 | |
| procedure TCanvasHandleW(Self: TCanvas; T: Longint); begin Self.Handle:= T; end;
 | |
| {$ENDIF}
 | |
| 
 | |
| procedure TCanvasPixelsR(Self: TCanvas; var T: Longint; X,Y: Longint); begin T := Self.Pixels[X,Y]; end;
 | |
| procedure TCanvasPixelsW(Self: TCanvas; T, X, Y: Longint); begin Self.Pixels[X,Y]:= T; end;
 | |
| {$IFDEF FPC}
 | |
| procedure TCanvasArc(Self : TCanvas; X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer); begin Self.Arc(X1, Y1, X2, Y2, X3, Y3, X4, Y4); end;
 | |
| procedure TCanvasChord(Self : TCanvas; X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer); begin self.Chord(X1, Y1, X2, Y2, X3, Y3, X4, Y4); end;
 | |
| procedure TCanvasRectangle(Self : TCanvas; X1,Y1,X2,Y2 : integer); begin self.Rectangle(x1,y1,x2,y2); end;
 | |
| procedure TCanvasRoundRect(Self : TCanvas; X1, Y1, X2, Y2, X3, Y3 : integer); begin self.RoundRect(X1, Y1, X2, Y2, X3, Y3); end;
 | |
| procedure TCanvasEllipse(Self : TCanvas;X1, Y1, X2, Y2: Integer); begin self.Ellipse(X1, Y1, X2, Y2); end;
 | |
| procedure TCanvasFillRect(Self : TCanvas; const Rect: TRect); begin self.FillRect(rect); end;
 | |
| procedure TCanvasFloodFill(Self : TCanvas; X, Y: Integer; Color: TColor; FillStyle: TFillStyle); begin self.FloodFill(x,y,color,fillstyle); end;
 | |
| {$ENDIF}
 | |
| 
 | |
| procedure RIRegisterTCanvas(cl: TPSRuntimeClassImporter); // requires TPersistent
 | |
| begin
 | |
|   with Cl.Add(TCanvas) do
 | |
|   begin
 | |
| {$IFDEF FPC}
 | |
|     RegisterMethod(@TCanvasArc, 'ARC');
 | |
|     RegisterMethod(@TCanvasChord, 'CHORD');
 | |
|     RegisterMethod(@TCanvasRectangle, 'RECTANGLE');
 | |
|     RegisterMethod(@TCanvasRoundRect, 'ROUNDRECT');
 | |
|     RegisterMethod(@TCanvasEllipse, 'ELLIPSE');
 | |
|     RegisterMethod(@TCanvasFillRect, 'FILLRECT');
 | |
|     RegisterMethod(@TCanvasFloodFill, 'FLOODFILL');
 | |
| {$ELSE}  
 | |
|     RegisterMethod(@TCanvas{$IFnDEF FPC}.{$ENDIF}Arc, 'ARC');
 | |
|     RegisterMethod(@TCanvas{$IFnDEF FPC}.{$ENDIF}Chord, 'CHORD');
 | |
|     RegisterMethod(@TCanvas{$IFnDEF FPC}.{$ENDIF}Rectangle, 'RECTANGLE');
 | |
|     RegisterMethod(@TCanvas{$IFnDEF FPC}.{$ENDIF}RoundRect, 'ROUNDRECT');
 | |
|     RegisterMethod(@TCanvas{$IFnDEF FPC}.{$ENDIF}Ellipse, 'ELLIPSE');
 | |
|     RegisterMethod(@TCanvas{$IFnDEF FPC}.{$ENDIF}FillRect, 'FILLRECT');
 | |
| {$IFnDEF CLX}
 | |
|     RegisterMethod(@TCanvas{$IFnDEF FPC}.{$ENDIF}FloodFill, 'FLOODFILL');
 | |
| {$ENDIF}
 | |
| {$ENDIF}
 | |
|     RegisterMethod(@TCanvas.Draw, 'DRAW');
 | |
| 
 | |
|     RegisterMethod(@TCanvas.Lineto, 'LINETO');
 | |
|     RegisterMethod(@TCanvas.Moveto, 'MOVETO');
 | |
|     RegisterMethod(@TCanvas.Pie, 'PIE');
 | |
|     RegisterMethod(@TCanvas.Refresh, 'REFRESH');
 | |
|     RegisterMethod(@TCanvas.TextHeight, 'TEXTHEIGHT');
 | |
|     RegisterMethod(@TCanvas.TextOut, 'TEXTOUT');
 | |
|     RegisterMethod(@TCanvas.TextWidth, 'TEXTWIDTH');
 | |
| {$IFnDEF CLX}
 | |
|     RegisterPropertyHelper(@TCanvasHandleR, @TCanvasHandleW, 'HANDLE');
 | |
| {$ENDIF}
 | |
|     RegisterPropertyHelper(@TCanvasPixelsR, @TCanvasPixelsW, 'PIXELS');
 | |
|   end;
 | |
| end;
 | |
| 
 | |
| 
 | |
| procedure TGRAPHICSOBJECTONCHANGE_W(Self: TGraphicsObject; T: TNotifyEvent); begin Self.OnChange := t; end;
 | |
| procedure TGRAPHICSOBJECTONCHANGE_R(Self: TGraphicsObject; var T: TNotifyEvent); begin T :=Self.OnChange; end;
 | |
| 
 | |
| 
 | |
| procedure RIRegisterTGRAPHICSOBJECT(Cl: TPSRuntimeClassImporter);
 | |
| begin
 | |
|   with Cl.Add(TGRAPHICSOBJECT) do
 | |
|   begin
 | |
|     RegisterPropertyHelper(@TGRAPHICSOBJECTONCHANGE_R, @TGRAPHICSOBJECTONCHANGE_W, 'ONCHANGE');
 | |
|   end;
 | |
| end;
 | |
| 
 | |
| procedure RIRegisterTPEN(Cl: TPSRuntimeClassImporter);
 | |
| begin
 | |
|   with Cl.Add(TPEN) do
 | |
|   begin
 | |
|     RegisterConstructor(@TPEN.CREATE, 'CREATE');
 | |
|   end;
 | |
| end;
 | |
| 
 | |
| procedure RIRegisterTBRUSH(Cl: TPSRuntimeClassImporter);
 | |
| begin
 | |
|   with Cl.Add(TBRUSH) do
 | |
|   begin
 | |
|     RegisterConstructor(@TBRUSH.CREATE, 'CREATE');
 | |
|   end;
 | |
| end;
 | |
| 
 | |
| procedure TGraphicOnChange_W(Self: TGraphic; const T: TNotifyEvent); begin Self.OnChange := T; end;
 | |
| procedure TGraphicOnChange_R(Self: TGraphic; var T: TNotifyEvent); begin T := Self.OnChange; end;
 | |
| procedure TGraphicWidth_W(Self: TGraphic; const T: Integer); begin Self.Width := T; end;
 | |
| procedure TGraphicWidth_R(Self: TGraphic; var T: Integer); begin T := Self.Width; end;
 | |
| procedure TGraphicModified_W(Self: TGraphic; const T: Boolean); begin Self.Modified := T; end;
 | |
| procedure TGraphicModified_R(Self: TGraphic; var T: Boolean); begin T := Self.Modified; end;
 | |
| procedure TGraphicHeight_W(Self: TGraphic; const T: Integer); begin Self.Height := T; end;
 | |
| procedure TGraphicHeight_R(Self: TGraphic; var T: Integer); begin T := Self.Height; end;
 | |
| procedure TGraphicEmpty_R(Self: TGraphic; var T: Boolean); begin T := Self.Empty; end;
 | |
| 
 | |
| procedure RIRegisterTGraphic(CL: TPSRuntimeClassImporter);
 | |
| begin
 | |
|   with CL.Add(TGraphic) do
 | |
|   begin
 | |
|     RegisterVirtualConstructor(@TGraphic.Create, 'Create');
 | |
|     RegisterVirtualMethod(@TGraphic.LoadFromFile, 'LoadFromFile');
 | |
|     RegisterVirtualMethod(@TGraphic.SaveToFile, 'SaveToFile');
 | |
|     RegisterPropertyHelper(@TGraphicEmpty_R,nil,'Empty');
 | |
|     RegisterPropertyHelper(@TGraphicHeight_R,@TGraphicHeight_W,'Height');
 | |
|     RegisterPropertyHelper(@TGraphicWidth_R,@TGraphicWidth_W,'Width');
 | |
|     RegisterPropertyHelper(@TGraphicOnChange_R,@TGraphicOnChange_W,'OnChange');
 | |
| 
 | |
|     {$IFnDEF PS_MINIVCL}
 | |
|     RegisterPropertyHelper(@TGraphicModified_R,@TGraphicModified_W,'Modified');
 | |
|     {$ENDIF}
 | |
|   end;
 | |
| end;
 | |
| 
 | |
| procedure TBitmapTransparentColor_R(Self: TBitmap; var T: TColor); begin T := Self.TransparentColor; end;
 | |
| {$IFnDEF CLX}
 | |
| {$IFnDEF FPC}
 | |
| procedure TBitmapIgnorePalette_W(Self: TBitmap; const T: Boolean); begin Self.IgnorePalette := T; end;
 | |
| procedure TBitmapIgnorePalette_R(Self: TBitmap; var T: Boolean); begin T := Self.IgnorePalette; end;
 | |
| {$ENDIF}
 | |
| procedure TBitmapPalette_W(Self: TBitmap; const T: HPALETTE); begin Self.Palette := T; end;
 | |
| procedure TBitmapPalette_R(Self: TBitmap; var T: HPALETTE); begin T := Self.Palette; end;
 | |
| {$ENDIF}
 | |
| procedure TBitmapMonochrome_W(Self: TBitmap; const T: Boolean); begin Self.Monochrome := T; end;
 | |
| procedure TBitmapMonochrome_R(Self: TBitmap; var T: Boolean); begin T := Self.Monochrome; end;
 | |
| {$IFnDEF CLX}
 | |
| procedure TBitmapHandle_W(Self: TBitmap; const T: HBITMAP); begin Self.Handle := T; end;
 | |
| procedure TBitmapHandle_R(Self: TBitmap; var T: HBITMAP); begin T := Self.Handle; end;
 | |
| {$ENDIF}
 | |
| procedure TBitmapCanvas_R(Self: TBitmap; var T: TCanvas); begin T := Self.Canvas; end;
 | |
| 
 | |
| procedure RIRegisterTBitmap(CL: TPSRuntimeClassImporter; Streams: Boolean);
 | |
| begin
 | |
|   with CL.Add(TBitmap) do
 | |
|   begin
 | |
|     if Streams then begin
 | |
|       RegisterMethod(@TBitmap.LoadFromStream, 'LoadFromStream');
 | |
|       RegisterMethod(@TBitmap.SaveToStream, 'SaveToStream');
 | |
|     end;
 | |
|     RegisterPropertyHelper(@TBitmapCanvas_R,nil,'Canvas');
 | |
| {$IFnDEF CLX}
 | |
|     RegisterPropertyHelper(@TBitmapHandle_R,@TBitmapHandle_W,'Handle');
 | |
| {$ENDIF}
 | |
| 
 | |
|     {$IFnDEF PS_MINIVCL}
 | |
| {$IFnDEF FPC}
 | |
|     RegisterMethod(@TBitmap.Dormant, 'Dormant');
 | |
| {$ENDIF}
 | |
|     RegisterMethod(@TBitmap.FreeImage, 'FreeImage');
 | |
| {$IFnDEF CLX}
 | |
|     RegisterMethod(@TBitmap.LoadFromClipboardFormat, 'LoadFromClipboardFormat');
 | |
| {$ENDIF}
 | |
|     RegisterMethod(@TBitmap.LoadFromResourceName, 'LoadFromResourceName');
 | |
|     RegisterMethod(@TBitmap.LoadFromResourceID, 'LoadFromResourceID');
 | |
| {$IFnDEF CLX}
 | |
|     RegisterMethod(@TBitmap.ReleaseHandle, 'ReleaseHandle');
 | |
|     RegisterMethod(@TBitmap.ReleasePalette, 'ReleasePalette');
 | |
|     RegisterMethod(@TBitmap.SaveToClipboardFormat, 'SaveToClipboardFormat');
 | |
|     RegisterPropertyHelper(@TBitmapMonochrome_R,@TBitmapMonochrome_W,'Monochrome');
 | |
|     RegisterPropertyHelper(@TBitmapPalette_R,@TBitmapPalette_W,'Palette');
 | |
| {$IFnDEF FPC}
 | |
|     RegisterPropertyHelper(@TBitmapIgnorePalette_R,@TBitmapIgnorePalette_W,'IgnorePalette');
 | |
| {$ENDIF}
 | |
| {$ENDIF}
 | |
|     RegisterPropertyHelper(@TBitmapTransparentColor_R,nil,'TransparentColor');
 | |
|     {$ENDIF}
 | |
|   end;
 | |
| end;
 | |
| 
 | |
| procedure TPictureBitmap_W(Self: TPicture; const T: TBitmap); begin Self.Bitmap := T; end;
 | |
| procedure TPictureBitmap_R(Self: TPicture; var T: TBitmap); begin T := Self.Bitmap; end;
 | |
| procedure RIRegisterTPicture(CL: TPSRuntimeClassImporter);
 | |
| begin
 | |
|   with CL.Add(TPicture) do
 | |
|     registerPropertyHelper(@TPictureBitmap_R,@TPictureBitmap_W,'Bitmap');
 | |
| end;
 | |
| 
 | |
| procedure RIRegister_Graphics(Cl: TPSRuntimeClassImporter; Streams: Boolean);
 | |
| begin
 | |
|   RIRegisterTGRAPHICSOBJECT(cl);
 | |
|   RIRegisterTFont(Cl);
 | |
|   RIRegisterTCanvas(cl);
 | |
|   RIRegisterTPEN(cl);
 | |
|   RIRegisterTBRUSH(cl);
 | |
|   RIRegisterTGraphic(CL);
 | |
|   RIRegisterTBitmap(CL, Streams);
 | |
|   RIRegisterTPicture(CL);
 | |
| end;
 | |
| 
 | |
| // PS_MINIVCL changes by Martijn Laan (mlaan at wintax _dot_ nl)
 | |
| 
 | |
| end.
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | 
