Ignore:
Timestamp:
Apr 17, 2019, 10:42:18 AM (5 years ago)
Author:
chronos
Message:
  • Modified: Updated Graphics32 library.
Location:
GraphicTest/Packages/Graphics32
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • GraphicTest/Packages/Graphics32

    • Property svn:ignore set to
      lib
  • GraphicTest/Packages/Graphics32/GR32_Backends_VCL.pas

    r450 r522  
    4040uses
    4141  SysUtils, Classes, Windows, Graphics, GR32, GR32_Backends, GR32_Containers,
    42   GR32_Image, GR32_Backends_Generic;
     42  GR32_Image, GR32_Backends_Generic, GR32_Paths;
    4343
    4444type
     
    5050  TGDIBackend = class(TCustomBackend, IPaintSupport,
    5151    IBitmapContextSupport, IDeviceContextSupport,
    52     ITextSupport, IFontSupport, ICanvasSupport)
     52    ITextSupport, IFontSupport, ICanvasSupport, ITextToPathSupport)
    5353  private
    5454    procedure FontChangedHandler(Sender: TObject);
     
    9696
    9797    procedure Draw(const DstRect, SrcRect: TRect; hSrc: HDC); overload;
    98     procedure DrawTo(hDst: {$IFDEF BCB}Cardinal{$ELSE}HDC{$ENDIF}; DstX, DstY: Integer); overload;
    99     procedure DrawTo(hDst: {$IFDEF BCB}Cardinal{$ELSE}HDC{$ENDIF}; const DstRect, SrcRect: TRect); overload;
     98    procedure DrawTo(hDst: HDC; DstX, DstY: Integer); overload;
     99    procedure DrawTo(hDst: HDC; const DstRect, SrcRect: TRect); overload;
    100100
    101101    property Handle: HDC read GetHandle;
    102102
    103103    { ITextSupport }
    104     procedure Textout(X, Y: Integer; const Text: String); overload;
    105     procedure Textout(X, Y: Integer; const ClipRect: TRect; const Text: String); overload;
    106     procedure Textout(var DstRect: TRect; const Flags: Cardinal; const Text: String); overload;
    107     function  TextExtent(const Text: String): TSize;
     104    procedure Textout(X, Y: Integer; const Text: string); overload;
     105    procedure Textout(X, Y: Integer; const ClipRect: TRect; const Text: string); overload;
     106    procedure Textout(var DstRect: TRect; const Flags: Cardinal; const Text: string); overload;
     107    function  TextExtent(const Text: string): TSize;
    108108
    109109    procedure TextoutW(X, Y: Integer; const Text: Widestring); overload;
     
    121121    property Font: TFont read GetFont write SetFont;
    122122    property OnFontChange: TNotifyEvent read FOnFontChange write FOnFontChange;
     123
     124    { ITextToPathSupport }
     125    procedure TextToPath(Path: TCustomPath; const X, Y: TFloat; const Text: WideString); overload;
     126    procedure TextToPath(Path: TCustomPath; const DstRect: TFloatRect; const Text: WideString; Flags: Cardinal); overload;
     127    function MeasureText(const DstRect: TFloatRect; const Text: WideString; Flags: Cardinal): TFloatRect;
    123128
    124129    { ICanvasSupport }
     
    158163    procedure DoPaintRect(ABuffer: TBitmap32; ARect: TRect; ACanvas: TCanvas);
    159164
    160     function GetHandle: {$IFDEF BCB}Cardinal{$ELSE}HDC{$ENDIF}; // Dummy
     165    function GetHandle: HDC; // Dummy
    161166  protected
    162167    FBitmapInfo: TBitmapInfo;
     
    173178
    174179    { IDeviceContextSupport }
    175     procedure Draw(const DstRect, SrcRect: TRect; hSrc: {$IFDEF BCB}Cardinal{$ELSE}HDC{$ENDIF}); overload;
    176     procedure DrawTo(hDst: {$IFDEF BCB}Cardinal{$ELSE}HDC{$ENDIF}; DstX, DstY: Integer); overload;
    177     procedure DrawTo(hDst: {$IFDEF BCB}Cardinal{$ELSE}HDC{$ENDIF}; const DstRect, SrcRect: TRect); overload;
     180    procedure Draw(const DstRect, SrcRect: TRect; hSrc: HDC); overload;
     181    procedure DrawTo(hDst: HDC; DstX, DstY: Integer); overload;
     182    procedure DrawTo(hDst: HDC; const DstRect, SrcRect: TRect); overload;
    178183  end;
    179184
    180185implementation
     186
     187uses
     188  GR32_Text_VCL;
    181189
    182190var
     
    227235
    228236  if FBits = nil then
    229     raise Exception.Create(RCStrCannotAllocateDIBHandle);
     237    raise EBackend.Create(RCStrCannotAllocateDIBHandle);
    230238
    231239  FHDC := CreateCompatibleDC(0);
     
    235243    FBitmapHandle := 0;
    236244    FBits := nil;
    237     raise Exception.Create(RCStrCannotCreateCompatibleDC);
     245    raise EBackend.Create(RCStrCannotCreateCompatibleDC);
    238246  end;
    239247
     
    245253    FBitmapHandle := 0;
    246254    FBits := nil;
    247     raise Exception.Create(RCStrCannotSelectAnObjectIntoDC);
    248   end;
     255    raise EBackend.Create(RCStrCannotSelectAnObjectIntoDC);
     256  end;
     257end;
     258
     259function TGDIBackend.MeasureText(const DstRect: TFloatRect;
     260  const Text: WideString; Flags: Cardinal): TFloatRect;
     261begin
     262  Result := GR32_Text_VCL.MeasureText(Font.Handle, DstRect, Text, Flags);
    249263end;
    250264
     
    292306end;
    293307
    294 function TGDIBackend.TextExtent(const Text: String): TSize;
    295 var
    296   DC: {$IFDEF BCB}Cardinal{$ELSE}HDC{$ENDIF};
     308function TGDIBackend.TextExtent(const Text: string): TSize;
     309var
     310  DC: HDC;
    297311  OldFont: HGDIOBJ;
    298312begin
     
    318332function TGDIBackend.TextExtentW(const Text: Widestring): TSize;
    319333var
    320   DC: {$IFDEF BCB}Cardinal{$ELSE}HDC{$ENDIF};
     334  DC: HDC;
    321335  OldFont: HGDIOBJ;
    322336begin
     
    341355end;
    342356
    343 procedure TGDIBackend.Textout(X, Y: Integer; const Text: String);
     357procedure TGDIBackend.Textout(X, Y: Integer; const Text: string);
    344358var
    345359  Extent: TSize;
     
    390404end;
    391405
    392 procedure TGDIBackend.Textout(X, Y: Integer; const ClipRect: TRect; const Text: String);
     406procedure TGDIBackend.Textout(X, Y: Integer; const ClipRect: TRect; const Text: string);
    393407var
    394408  Extent: TSize;
     
    411425
    412426  FOwner.Changed(DstRect);
     427end;
     428
     429procedure TGDIBackend.TextToPath(Path: TCustomPath; const X, Y: TFloat;
     430  const Text: WideString);
     431var
     432  R: TFloatRect;
     433begin
     434  R := FloatRect(X, Y, X, Y);
     435  GR32_Text_VCL.TextToPath(Font.Handle, Path, R, Text, 0);
     436end;
     437
     438procedure TGDIBackend.TextToPath(Path: TCustomPath; const DstRect: TFloatRect;
     439  const Text: WideString; Flags: Cardinal);
     440begin
     441  GR32_Text_VCL.TextToPath(Font.Handle, Path, DstRect, Text, Flags);
    413442end;
    414443
     
    430459end;
    431460
    432 procedure TGDIBackend.Textout(var DstRect: TRect; const Flags: Cardinal; const Text: String);
     461procedure TGDIBackend.Textout(var DstRect: TRect; const Flags: Cardinal; const Text: string);
    433462begin
    434463  UpdateFont;
     
    440469end;
    441470
    442 procedure TGDIBackend.DrawTo(hDst: {$IFDEF BCB}Cardinal{$ELSE}HDC{$ENDIF}; DstX, DstY: Integer);
     471procedure TGDIBackend.DrawTo(hDst: HDC; DstX, DstY: Integer);
    443472begin
    444473  StretchDIBits(
     
    447476end;
    448477
    449 procedure TGDIBackend.DrawTo(hDst: {$IFDEF BCB}Cardinal{$ELSE}HDC{$ENDIF}; const DstRect, SrcRect: TRect);
     478procedure TGDIBackend.DrawTo(hDst: HDC; const DstRect, SrcRect: TRect);
    450479begin
    451480  StretchBlt(
     
    486515end;
    487516
    488 function TGDIBackend.GetHandle: {$IFDEF BCB}Cardinal{$ELSE}HDC{$ENDIF};
     517function TGDIBackend.GetHandle: HDC;
    489518begin
    490519  Result := FHDC;
     
    512541end;
    513542
    514 procedure TGDIBackend.Draw(const DstRect, SrcRect: TRect; hSrc: {$IFDEF BCB}Cardinal{$ELSE}HDC{$ENDIF});
     543procedure TGDIBackend.Draw(const DstRect, SrcRect: TRect; hSrc: HDC);
    515544begin
    516545  if FOwner.Empty then Exit;
     
    642671var
    643672  Bitmap        : HBITMAP;
    644   DeviceContext : {$IFDEF BCB}Cardinal{$ELSE}HDC{$ENDIF};
     673  DeviceContext : HDC;
    645674  Buffer        : Pointer;
    646675  OldObject     : HGDIOBJ;
     
    671700        end;
    672701      end else
    673         raise Exception.Create('Can''t create compatible DC''');
     702        raise EBackend.Create(RCStrCannotCreateCompatibleDC);
    674703    finally
    675704      DeleteDC(DeviceContext);
     
    678707end;
    679708
    680 procedure TGDIMemoryBackend.Draw(const DstRect, SrcRect: TRect; hSrc: {$IFDEF BCB}Cardinal{$ELSE}HDC{$ENDIF});
     709procedure TGDIMemoryBackend.Draw(const DstRect, SrcRect: TRect; hSrc: HDC);
    681710begin
    682711  if FOwner.Empty then Exit;
    683712
    684713  if not FOwner.MeasuringMode then
    685     raise Exception.Create('Not supported!');
     714    raise EBackend.Create('Not supported!');
    686715
    687716  FOwner.Changed(DstRect);
    688717end;
    689718
    690 procedure TGDIMemoryBackend.DrawTo(hDst: {$IFDEF BCB}Cardinal{$ELSE}HDC{$ENDIF}; DstX, DstY: Integer);
     719procedure TGDIMemoryBackend.DrawTo(hDst: HDC; DstX, DstY: Integer);
    691720var
    692721  Bitmap        : HBITMAP;
    693   DeviceContext : {$IFDEF BCB}Cardinal{$ELSE}HDC{$ENDIF};
     722  DeviceContext : HDC;
    694723  Buffer        : Pointer;
    695724  OldObject     : HGDIOBJ;
    696725begin
    697   if SetDIBitsToDevice(hDst, DstX, DstY,
    698     FOwner.Width, FOwner.Height, 0, 0, 0, FOwner.Height, FBits, FBitmapInfo,
    699     DIB_RGB_COLORS) = 0 then
     726  if SetDIBitsToDevice(hDst, DstX, DstY, FOwner.Width, FOwner.Height, 0, 0, 0,
     727    FOwner.Height, FBits, FBitmapInfo, DIB_RGB_COLORS) = 0 then
    700728  begin
    701729    // create compatible device context
     
    720748        end;
    721749      end else
    722         raise Exception.Create('Can''t create compatible DC''');
     750        raise EBackend.Create(RCStrCannotCreateCompatibleDC);
    723751    finally
    724752      DeleteDC(DeviceContext);
     
    727755end;
    728756
    729 procedure TGDIMemoryBackend.DrawTo(hDst: {$IFDEF BCB}Cardinal{$ELSE}HDC{$ENDIF};
     757procedure TGDIMemoryBackend.DrawTo(hDst: HDC;
    730758  const DstRect, SrcRect: TRect);
    731759var
    732760  Bitmap        : HBITMAP;
    733   DeviceContext : {$IFDEF BCB}Cardinal{$ELSE}HDC{$ENDIF};
     761  DeviceContext : HDC;
    734762  Buffer        : Pointer;
    735763  OldObject     : HGDIOBJ;
     
    761789        end;
    762790      end else
    763         raise Exception.Create('Can''t create compatible DC''');
     791        raise EBackend.Create(RCStrCannotCreateCompatibleDC);
    764792    finally
    765793      DeleteDC(DeviceContext);
     
    768796end;
    769797
    770 function TGDIMemoryBackend.GetHandle: {$IFDEF BCB}Cardinal{$ELSE}HDC{$ENDIF};
     798function TGDIMemoryBackend.GetHandle: HDC;
    771799begin
    772800  Result := 0;
Note: See TracChangeset for help on using the changeset viewer.