Changeset 514 for trunk/Packages
- Timestamp:
- Jan 3, 2024, 3:05:32 PM (11 months ago)
- Location:
- trunk/Packages
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Packages/CevoComponents/ScreenTools.pas
r512 r514 97 97 T: TTexture); 98 98 procedure PaintLogo(Canvas: TCanvas; X, Y, LightColor, ShadeColor: Integer); 99 procedure DrawBufferEnsureSize(Width, Height: Integer); 99 100 procedure LoadPhrases; 100 101 procedure Texturize(Dest, Texture: TBitmap; TransparentColor: Cardinal); … … 190 191 Paper: TBitmap; 191 192 BigImp: TBitmap; 192 LogoBuffer: TBitmap;193 DrawBuffer: TBitmap; 193 194 FullScreen: Boolean; 194 195 GenerateNames: Boolean; … … 1567 1568 procedure PaintLogo(Canvas: TCanvas; X, Y, LightColor, ShadeColor: Integer); 1568 1569 begin 1569 if not Assigned(LogoBuffer) then Exit; 1570 UnshareBitmap(LogoBuffer); 1571 BitBltCanvas(LogoBuffer.Canvas, 0, 0, Logo.Width, Logo.Height, Canvas, X, Y); 1572 ImageOp_BCC(LogoBuffer, Templates.Data, Point(0, 0), Logo.BoundsRect, 1570 if not Assigned(DrawBuffer) then Exit; 1571 DrawBufferEnsureSize(Logo.Width, Logo.Height); 1572 UnshareBitmap(DrawBuffer); 1573 BitBltCanvas(DrawBuffer.Canvas, 0, 0, Logo.Width, Logo.Height, Canvas, X, Y); 1574 ImageOp_BCC(DrawBuffer, Templates.Data, Point(0, 0), Logo.BoundsRect, 1573 1575 LightColor, ShadeColor); 1574 BitBltCanvas(Canvas, X, Y, Logo.Width, Logo.Height, LogoBuffer.Canvas, 0, 0); 1576 BitBltCanvas(Canvas, X, Y, Logo.Width, Logo.Height, DrawBuffer.Canvas, 0, 0); 1577 end; 1578 1579 procedure DrawBufferEnsureSize(Width, Height: Integer); 1580 begin 1581 if (DrawBuffer.Width >= Width) and (DrawBuffer.Height >= Height) then Exit; 1582 if (DrawBuffer.Width < Width) and (DrawBuffer.Height < Height) then 1583 DrawBuffer.SetSize(Width, Height) 1584 else if DrawBuffer.Width < Width then DrawBuffer.Width := Width 1585 else if DrawBuffer.Height < Height then DrawBuffer.Height := Height; 1586 DrawBuffer.Canvas.FillRect(0, 0, DrawBuffer.Width, DrawBuffer.Height); 1575 1587 end; 1576 1588 … … 1813 1825 end; 1814 1826 1815 if not Assigned(LogoBuffer) then begin1816 LogoBuffer := TBitmap.Create;1817 LogoBuffer.PixelFormat := TPixelFormat.pf24bit;1818 LogoBuffer.SetSize(BigBook.Width, BigBook.Height);1819 end;1820 1821 1827 LoadGraphicFile(Colors, GetGraphicsDir + DirectorySeparator + 'Colors.png'); 1822 1828 LoadGraphicFile(Paper, GetGraphicsDir + DirectorySeparator + 'Paper.jpg'); … … 1838 1844 for Section := Low(TFontType) to High(TFontType) do 1839 1845 UniFont[Section] := TFont.Create; 1846 1847 DrawBuffer := TBitmap.Create; 1848 DrawBuffer.PixelFormat := TPixelFormat.pf24bit; 1840 1849 1841 1850 GrExt := TGraphicSets.Create; … … 1877 1886 FreeAndNil(Phrases); 1878 1887 FreeAndNil(Phrases2); 1879 if Assigned(LogoBuffer) then FreeAndNil(LogoBuffer);1888 FreeAndNil(DrawBuffer); 1880 1889 FreeAndNil(BigImp); 1881 1890 FreeAndNil(Paper); -
trunk/Packages/DpiControls/Dpi.Common.pas
r476 r514 5 5 uses 6 6 {$IFDEF WINDOWS}Windows,{$ENDIF} 7 Classes, SysUtils, LCLType, Types, LCLIntf, Graphics, Dpi.Graphics;7 Classes, SysUtils, LCLType, Types, Math, LCLIntf, Graphics, Dpi.Graphics; 8 8 9 9 const … … 100 100 function ScaleToNative(Value: Integer): Integer; 101 101 begin 102 Result := Round(Value * ScreenInfo.Dpi / 96);102 Result := Ceil(Value * ScreenInfo.Dpi / 96); 103 103 end; 104 104 … … 110 110 function ScaleFromNative(Value: Integer): Integer; 111 111 begin 112 Result := Round(Value * 96 / ScreenInfo.Dpi);112 Result := Floor(Value * 96 / ScreenInfo.Dpi); 113 113 end; 114 114 … … 185 185 DstWidth, DstHeight: Integer; 186 186 SrcWidth, SrcHeight: Integer; 187 ReduceWidth, ReduceHeight: Integer; 187 188 begin 188 189 {$IFDEF WINDOWS} … … 193 194 {$ELSE} 194 195 195 196 196 DstWidth := ScaleToNativeDist(X, Width); 197 197 DstHeight := ScaleToNativeDist(Y, Height); 198 198 SrcWidth := ScaleToNativeDist(XSrc, Width); 199 199 SrcHeight := ScaleToNativeDist(YSrc, Height); 200 if (Frac(ScaleFloatToNative(XSrc)) > 0) or 201 (Frac(ScaleFloatToNative(X)) > 0) then ReduceWidth := 1 202 else ReduceWidth := 0; 203 if (Frac(ScaleFloatToNative(YSrc)) > 0) or 204 (Frac(ScaleFloatToNative(Y)) > 0) then ReduceHeight := 1 205 else ReduceHeight := 0; 200 206 if (DstWidth = SrcWidth) and (DstHeight = SrcHeight) then begin 201 207 Result := LCLIntf.BitBlt(DestDC, ScaleToNative(X), ScaleToNative(Y), … … 204 210 end else begin 205 211 Result := LCLIntf.BitBlt(DestDC, ScaleToNative(X), ScaleToNative(Y), 206 DstWidth , DstHeight, SrcDC,212 DstWidth - ReduceWidth, DstHeight - ReduceHeight, SrcDC, 207 213 ScaleToNative(XSrc), ScaleToNative(YSrc), Rop); 208 { Result := LCLIntfStretchBlt(DestDC, ScaleToNative(X), ScaleToNative(Y), 214 215 // Instead calling StretchBlt for entire region try to draw missing part with BitBlt 216 if DstWidth > SrcWidth then begin 217 LCLIntf.BitBlt(DestDC, ScaleToNative(X) + SrcWidth, ScaleToNative(Y), 218 DstWidth - SrcWidth, DstHeight, SrcDC, 219 ScaleToNative(XSrc) + SrcWidth - (DstWidth - SrcWidth), ScaleToNative(YSrc), Rop); 220 end; 221 if DstHeight > SrcHeight then begin 222 LCLIntf.BitBlt(DestDC, ScaleToNative(X), ScaleToNative(Y) + SrcHeight, 223 DstWidth, DstHeight - SrcHeight, SrcDC, 224 ScaleToNative(XSrc), ScaleToNative(YSrc) + SrcHeight - (DstHeight - SrcHeight), Rop); 225 end; 226 227 { Result := LCLIntf.StretchBlt(DestDC, ScaleToNative(X), ScaleToNative(Y), 209 228 DstWidth, DstHeight, SrcDC, 210 229 ScaleToNative(XSrc), ScaleToNative(YSrc), 211 SrcWidth, SrcHeight, Rop); 212 }end;230 SrcWidth, SrcHeight, Rop);} 231 end; 213 232 214 233 { Result := LCLIntf.BitBlt(DestDC, ScaleToNative(X), ScaleToNative(Y),
Note:
See TracChangeset
for help on using the changeset viewer.