- Timestamp:
- Jun 25, 2020, 10:24:44 PM (4 years ago)
- Location:
- branches/highdpi
- Files:
-
- 1 added
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/highdpi/LocalPlayer/Help.pas
r255 r265 993 993 Name: string; 994 994 begin 995 RightMargin := InnerWidth - 16 - GetSystemMetrics(SM_CXVSCROLL);995 RightMargin := InnerWidth - 16 - DpiGetSystemMetrics(SM_CXVSCROLL); 996 996 FollowFormat := pkNormal; 997 997 while s <> '' do … … 1255 1255 s := List[i]; 1256 1256 while BiColorTextWidth(OffScreen.Canvas, s) > InnerWidth - 16 - 1257 GetSystemMetrics(SM_CXVSCROLL) do1257 DpiGetSystemMetrics(SM_CXVSCROLL) do 1258 1258 Delete(s, length(s), 1); 1259 1259 MainText.AddLine(s); … … 1273 1273 s := List[i]; 1274 1274 while BiColorTextWidth(OffScreen.Canvas, s) > InnerWidth - 16 - 1275 GetSystemMetrics(SM_CXVSCROLL) do1275 DpiGetSystemMetrics(SM_CXVSCROLL) do 1276 1276 Delete(s, length(s), 1); 1277 1277 MainText.AddLine(s); … … 2248 2248 2249 2249 // cut lines to fit to window 2250 RightMargin := InnerWidth - 16 - GetSystemMetrics(SM_CXVSCROLL);2250 RightMargin := InnerWidth - 16 - DpiGetSystemMetrics(SM_CXVSCROLL); 2251 2251 OffScreen.Canvas.Font.Assign(UniFont[ftNormal]); 2252 2252 for i := 0 to SearchResult.Count - 1 do -
branches/highdpi/LocalPlayer/IsoEngine.pas
r246 r265 375 375 begin 376 376 for i := 0 to yyt * 3 - 1 do 377 MaskLine[i] := PixelPointer(Mask24, 0, 1 + ySrc * (yyt * 3 + 1) + i); 378 for xSrc := 0 to 9 - 1 do 379 begin 380 i := ySrc * 9 + xSrc; 377 MaskLine[i] := PixelPointer(Mask24, 0, ScaleToNative(1 + ySrc * (yyt * 3 + 1) + i)); 378 for xSrc := 0 to TerrainIconCols - 1 do begin 379 i := ySrc * TerrainIconCols + xSrc; 381 380 TSpriteSize[i].Left := 0; 382 381 repeat 383 382 Border := true; 384 383 for y := 0 to yyt * 3 - 1 do begin 385 MaskLine[y].SetX( 1 + xSrc * (xxt * 2 + 1) + TSpriteSize[i].Left);384 MaskLine[y].SetX(ScaleToNative(1 + xSrc * (xxt * 2 + 1) + TSpriteSize[i].Left)); 386 385 if MaskLine[y].Pixel^.B = 0 then Border := false; 387 386 end; … … 392 391 Border := true; 393 392 for x := 0 to xxt * 2 - 1 do begin 394 MaskLine[TSpriteSize[i].Top].SetX( 1 + xSrc * (xxt * 2 + 1) + x);393 MaskLine[TSpriteSize[i].Top].SetX(ScaleToNative(1 + xSrc * (xxt * 2 + 1) + x)); 395 394 if MaskLine[TSpriteSize[i].Top].Pixel^.B = 0 then Border := false; 396 395 end; … … 401 400 Border := true; 402 401 for y := 0 to yyt * 3 - 1 do begin 403 MaskLine[y].SetX( xSrc * (xxt * 2 + 1) + TSpriteSize[i].Right);402 MaskLine[y].SetX(ScaleToNative(xSrc * (xxt * 2 + 1) + TSpriteSize[i].Right)); 404 403 if MaskLine[y].Pixel^.B = 0 then Border := false; 405 404 end; … … 410 409 Border := true; 411 410 for x := 0 to xxt * 2 - 1 do begin 412 MaskLine[TSpriteSize[i].Bottom - 1].SetX( 1 + xSrc * (xxt * 2 + 1) + x);411 MaskLine[TSpriteSize[i].Bottom - 1].SetX(ScaleToNative(1 + xSrc * (xxt * 2 + 1) + x)); 413 412 if MaskLine[TSpriteSize[i].Bottom - 1].Pixel^.B = 0 then Border := false; 414 413 end; … … 1079 1078 if not(FoW and (Tile and fObserved = 0)) then 1080 1079 PaintBorder; 1081 1082 1080 if (Loc >= 0) and (Loc < G.lx * G.ly) and (Loc = FAdviceLoc) then 1083 1081 TSprite(x, y, spPlain); … … 1289 1287 i: integer; 1290 1288 begin 1289 FOutput.Canvas.pen.Color := $000000; // $FF shl (8*random(3)); 1291 1290 FOutput.Canvas.pen.Color := $000000; // $FF shl (8*random(3)); 1292 1291 for i := 0 to nx div 2 do … … 1560 1559 PaintTileExtraTerrain(x + xxt * dx, y + yyt + yyt * dy, 1561 1560 dLoc(Loc, dx, dy)); 1561 1562 1562 if CityOwner >= 0 then 1563 1563 begin -
branches/highdpi/LocalPlayer/Select.pas
r252 r265 684 684 kTribe, kMission: // center text 685 685 if Lines[0] > MaxLines then 686 x := (InnerWidth - GetSystemMetrics(SM_CXVSCROLL)) div 2 -686 x := (InnerWidth - DpiGetSystemMetrics(SM_CXVSCROLL)) div 2 - 687 687 BiColorTextWidth(ca, s) div 2 688 688 else … … 1575 1575 kTribe: 1576 1576 if Lines[0] > MaxLines then 1577 InnerWidth := 280 + GetSystemMetrics(SM_CXVSCROLL)1577 InnerWidth := 280 + DpiGetSystemMetrics(SM_CXVSCROLL) 1578 1578 else 1579 1579 InnerWidth := 280; … … 1581 1581 begin 1582 1582 InnerWidth := 104 - 33 + 15 + 8 + TechNameSpace + 24 * nColumn + 1583 GetSystemMetrics(SM_CXVSCROLL);1583 DpiGetSystemMetrics(SM_CXVSCROLL); 1584 1584 if InnerWidth + 2 * SideFrame > 640 then 1585 1585 begin … … 1590 1590 kAdvance, kFarAdvance: 1591 1591 InnerWidth := 104 - 33 + 15 + 8 + TechNameSpace + 24 + 1592 GetSystemMetrics(SM_CXVSCROLL);1592 DpiGetSystemMetrics(SM_CXVSCROLL); 1593 1593 kChooseTech, kChooseETech, kStealTech: 1594 1594 InnerWidth := 104 - 33 + 15 + 8 + TechNameSpace + 1595 GetSystemMetrics(SM_CXVSCROLL);1595 DpiGetSystemMetrics(SM_CXVSCROLL); 1596 1596 else 1597 1597 InnerWidth := 363; … … 1604 1604 { TODO: 1605 1605 SetWindowPos(sb.ScrollBar.Handle, 0, SideFrame + InnerWidth - GetSystemMetrics(SM_CXVSCROLL), 1606 TitleHeight, GetSystemMetrics(SM_CXVSCROLL), LineDistance * DispLines + 48,1606 TitleHeight, DpiGetSystemMetrics(SM_CXVSCROLL), LineDistance * DispLines + 48, 1607 1607 SWP_NOZORDER or SWP_NOREDRAW); 1608 1608 } -
branches/highdpi/LocalPlayer/Term.pas
r254 r265 563 563 nx := BigImp.Width div xSizeBig * xSizeSmall; 564 564 ny := BigImp.Height div ySizeBig * ySizeSmall; 565 SmallImp.SetSize(nx, ny); 566 SmallImp.Canvas.StretchDraw(Rect(0, 0, SmallImp.Width, SmallImp.Height), BigImp); 567 568 { nx := BigImp.Width div xSizeBig * xSizeSmall; 569 ny := BigImp.Height div ySizeBig * ySizeSmall; 565 570 566 571 // resample icons … … 636 641 SmallImp.EndUpdate; 637 642 FreeMem(Resampled); 643 } 638 644 end; 639 645 … … 3583 3589 sb.SetBorderSpacing(ClientHeight - yTroop - 24, ClientWidth - xRightPanel + 8, 8); 3584 3590 {TODO: 3585 SetWindowPos(sb.ScrollBar.Handle, 0, xRightPanel + 10 - 14 - GetSystemMetrics(SM_CXVSCROLL),3591 SetWindowPos(sb.ScrollBar.Handle, 0, xRightPanel + 10 - 14 - DpiGetSystemMetrics(SM_CXVSCROLL), 3586 3592 ClientHeight - MidPanelHeight + 8, 0, 0, SWP_NOSIZE or SWP_NOZORDER); 3587 3593 } … … 3669 3675 if SmallScreen and not supervising then 3670 3676 xTroop := xRightPanel + 10 - 3 * 66 - 3671 GetSystemMetrics(SM_CXVSCROLL) - 19 - 4;3677 DpiGetSystemMetrics(SM_CXVSCROLL) - 19 - 4; 3672 3678 // not perfect but we assume almost no one is still playing on a 800x600 screen 3673 3679 end; 3674 TrRow := (xRightPanel + 10 - xTroop - GetSystemMetrics(SM_CXVSCROLL) - 19)3680 TrRow := (xRightPanel + 10 - xTroop - DpiGetSystemMetrics(SM_CXVSCROLL) - 19) 3675 3681 div TrPitch; 3676 3682 end; … … 5330 5336 else 5331 5337 EditPopup.Popup(Left + x + 4, 5332 Top + y + GetSystemMetrics(SM_CYCAPTION) + 4);5338 Top + y + DpiGetSystemMetrics(SM_CYCAPTION) + 4); 5333 5339 end 5334 5340 else if (UnFocus >= 0) and (MyUn[UnFocus].Loc <> MouseLoc) then … … 6214 6220 StatPopup.Popup(Left + ClientWidth - xPalace + 6, 6215 6221 Top + ClientHeight - PanelHeight + yPalace + ySizeBig + 6216 GetSystemMetrics(SM_CYCAPTION) + 3)6222 DpiGetSystemMetrics(SM_CYCAPTION) + 3) 6217 6223 end 6218 6224 (* else if (x>=xAdvisor-3) and (y>=yAdvisor-3) … … 6306 6312 begin 6307 6313 TroopLoc := Loc; 6308 TrRow := (xRightPanel + 10 - xTroop - GetSystemMetrics(SM_CXVSCROLL) - 19)6314 TrRow := (xRightPanel + 10 - xTroop - DpiGetSystemMetrics(SM_CXVSCROLL) - 19) 6309 6315 div TrPitch; 6310 6316 TrCnt := 0; … … 7440 7446 else 7441 7447 Popup.Popup(Left + TDpiControl(Sender).Left + 4, Top + TDpiControl(Sender).Top + 7442 GetSystemMetrics(SM_CYCAPTION) + 4);7448 DpiGetSystemMetrics(SM_CYCAPTION) + 4); 7443 7449 end; 7444 7450 … … 7600 7606 GamePopup.Popup(Left, Top + TopBarHeight - 1) 7601 7607 else 7602 GamePopup.Popup(Left + 4, Top + GetSystemMetrics(SM_CYCAPTION) + 4 +7608 GamePopup.Popup(Left + 4, Top + DpiGetSystemMetrics(SM_CYCAPTION) + 4 + 7603 7609 TopBarHeight - 1); 7604 7610 end … … 7890 7896 GamePopup.Popup(Left, Top + TopBarHeight - 1) 7891 7897 else 7892 GamePopup.Popup(Left + 4, Top + GetSystemMetrics(SM_CYCAPTION) + 4 +7898 GamePopup.Popup(Left + 4, Top + DpiGetSystemMetrics(SM_CYCAPTION) + 4 + 7893 7899 TopBarHeight - 1); 7894 7900 exit -
branches/highdpi/Packages/CevoComponents/ScreenTools.pas
r251 r265 589 589 PixelDst: TPixelPointer; 590 590 begin 591 Width := ScaleToNativeDist(xSrc, Width); 592 Height := ScaleToNativeDist(ySrc, Height); 591 593 xDst := ScaleToNative(xDst); 592 594 yDst := ScaleToNative(yDst); 593 595 xSrc := ScaleToNative(xSrc); 594 596 ySrc := ScaleToNative(ySrc); 595 Width := ScaleToNative(Width);596 Height := ScaleToNative(Height);597 597 //Assert(Src.PixelFormat = pf8bit); 598 598 Assert(dst.PixelFormat = pf24bit); … … 657 657 DstPixel: TPixelPointer; 658 658 begin 659 Width := ScaleToNativeDist(xSrc, Width); 660 Height := ScaleToNativeDist(ySrc, Height); 659 661 xDst := ScaleToNative(xDst); 660 662 yDst := ScaleToNative(yDst); 661 663 xSrc := ScaleToNative(xSrc); 662 664 ySrc := ScaleToNative(ySrc); 663 Width := ScaleToNative(Width);664 Height := ScaleToNative(Height);665 665 if xDst < 0 then begin 666 666 Width := Width + xDst; … … 724 724 DstPixel: TPixelPointer; 725 725 begin 726 Width := ScaleToNativeDist(xSrc, Width); 727 Height := ScaleToNativeDist(ySrc, Height); 726 728 xDst := ScaleToNative(xDst); 727 729 yDst := ScaleToNative(yDst); 728 730 xSrc := ScaleToNative(xSrc); 729 731 ySrc := ScaleToNative(ySrc); 730 Width := ScaleToNative(Width);731 Height := ScaleToNative(Height);732 732 Src.BeginUpdate; 733 733 Dst.BeginUpdate; … … 771 771 PixelPtr: TPixelPointer; 772 772 begin 773 Width := ScaleToNativeDist(X, Width); 774 Height := ScaleToNativeDist(Y, Height); 773 775 X := ScaleToNative(X); 774 776 Y := ScaleToNative(Y); 775 Width := ScaleToNative(Width);776 Height := ScaleToNative(Height);777 777 bmp.BeginUpdate; 778 778 assert(bmp.PixelFormat = pf24bit); -
branches/highdpi/Packages/DpiControls/DpiControls.lpk
r178 r265 14 14 <License Value="Copyleft, public domain"/> 15 15 <Version Minor="1"/> 16 <Files Count=" 1">16 <Files Count="2"> 17 17 <Item1> 18 18 <Filename Value="UDpiControls.pas"/> … … 20 20 <UnitName Value="UDpiControls"/> 21 21 </Item1> 22 <Item2> 23 <Filename Value="UPixelPointer2.pas"/> 24 <UnitName Value="UPixelPointer2"/> 25 </Item2> 22 26 </Files> 23 27 <RequiredPkgs Count="3"> -
branches/highdpi/Packages/DpiControls/DpiControls.pas
r178 r265 9 9 10 10 uses 11 UDpiControls, LazarusPackageIntf;11 UDpiControls, UPixelPointer2, LazarusPackageIntf; 12 12 13 13 implementation -
branches/highdpi/Packages/DpiControls/UDpiControls.pas
r255 r265 8 8 {$IFDEF WINDOWS}Windows, {$ENDIF}Classes, SysUtils, LCLProc, LResources, Forms, FormEditingIntf, ProjectIntf, 9 9 Controls, StdCtrls, fgl, Graphics, ComCtrls, ExtCtrls, LCLType, GraphType, 10 Types, CustApp, LMessages, LCLIntf, Menus, Math ;10 Types, CustApp, LMessages, LCLIntf, Menus, Math, UPixelPointer2; 11 11 12 12 type … … 953 953 const lprcClip:TRect; hrgnUpdate: Handle; lprcUpdate: PRect): Boolean; 954 954 function ScaleToNative(Value: Integer): Integer; 955 function ScaleToNativeDist(Base, Value: Integer): Integer; 955 956 function ScaleFromNative(Value: Integer): Integer; 956 957 function ScalePointToNative(Value: TPoint): TPoint; … … 963 964 function ScaleFloatFromNative(Value: Double): Double; 964 965 procedure WriteLog(Text: string); 966 function DpiGetSystemMetrics(nIndex: Integer): Integer; 965 967 966 968 implementation … … 1029 1031 end; 1030 1032 1033 function ScaleToNativeDist(Base, Value: Integer): Integer; 1034 begin 1035 Result := ScaleToNative(Base + Value) - ScaleToNative(Base); 1036 end; 1037 1031 1038 function ScaleFromNative(Value: Integer): Integer; 1032 1039 begin … … 1096 1103 end; 1097 1104 1105 function DpiGetSystemMetrics(nIndex: Integer): Integer; 1106 begin 1107 Result := ScaleFromNative(GetSystemMetrics(nIndex)); 1108 end; 1109 1098 1110 function DpiBitBlt(DestDC: HDC; X, Y, Width, Height: Integer; SrcDC: HDC; XSrc, 1099 1111 YSrc: Integer; Rop: DWORD = SRCCOPY): Boolean; 1112 var 1113 DstWidth, DstHeight: Integer; 1114 SrcWidth, SrcHeight: Integer; 1100 1115 begin 1101 1116 {$IFDEF WINDOWS} … … 1105 1120 ScaleToNative(XSrc), ScaleToNative(YSrc), Rop); 1106 1121 {$ELSE} 1107 Result := BitBlt(DestDC, ScaleToNative(X), ScaleToNative(Y), 1122 1123 1124 DstWidth := ScaleToNativeDist(X, Width); 1125 DstHeight := ScaleToNativeDist(Y, Height); 1126 SrcWidth := ScaleToNativeDist(XSrc, Width); 1127 SrcHeight := ScaleToNativeDist(YSrc, Height); 1128 if (DstWidth = SrcWidth) and (DstHeight = SrcHeight) then begin 1129 Result := BitBlt(DestDC, ScaleToNative(X), ScaleToNative(Y), 1130 DstWidth, DstHeight, SrcDC, 1131 ScaleToNative(XSrc), ScaleToNative(YSrc), Rop); 1132 end else begin 1133 Result := StretchBlt(DestDC, ScaleToNative(X), ScaleToNative(Y), 1134 DstWidth, DstHeight, SrcDC, 1135 ScaleToNative(XSrc), ScaleToNative(YSrc), 1136 SrcWidth, SrcHeight, Rop); 1137 end; 1138 1139 { Result := BitBlt(DestDC, ScaleToNative(X), ScaleToNative(Y), 1108 1140 ScaleToNative(Width), ScaleToNative(Height), SrcDC, 1109 1141 ScaleToNative(XSrc), ScaleToNative(YSrc), Rop); 1142 } 1110 1143 {$ENDIF} 1111 1144 end; … … 1886 1919 end; 1887 1920 1921 procedure StretchDrawBitmap(Src: TRasterImage; Dst: TBitmap); 1922 var 1923 SrcPtr: TPixelPointer; 1924 DstPtr: TPixelPointer; 1925 xx, yy: Integer; 1926 SrcX, SrcY: Integer; 1927 DstX, DstY: Integer; 1928 DstWidth, DstHeight: Integer; 1929 begin 1930 Dst.BeginUpdate; 1931 SrcPtr := PixelPointer(Src, 0, 0); 1932 DstPtr := PixelPointer(Dst, 0, 0); 1933 {for yy := 0 to Dst.Height - 1 do begin 1934 for xx := 0 to Dst.Width - 1 do begin 1935 SrcPtr.SetXY(Min(ScaleFromNative(xx), Src.Width - 1), 1936 Min(ScaleFromNative(yy), Src.Height - 1)); 1937 DstPtr.Pixel^.B := SrcPtr.Pixel^.B; 1938 DstPtr.Pixel^.G := SrcPtr.Pixel^.G; 1939 DstPtr.Pixel^.R := SrcPtr.Pixel^.R; 1940 DstPtr.NextPixel; 1941 end; 1942 DstPtr.NextLine; 1943 end; 1944 } 1945 for SrcY := 0 to Src.Height - 1 do begin 1946 DstHeight := ScaleToNative(SrcY + 1) - ScaleToNative(SrcY); 1947 for DstY := 0 to DstHeight - 1 do begin 1948 for SrcX := 0 to Src.Width - 1 do begin 1949 DstWidth := ScaleToNative(SrcX + 1) - ScaleToNative(SrcX); 1950 for DstX := 0 to DstWidth - 1 do begin 1951 DstPtr.Pixel^.B := SrcPtr.Pixel^.B; 1952 DstPtr.Pixel^.G := SrcPtr.Pixel^.G; 1953 DstPtr.Pixel^.R := SrcPtr.Pixel^.R; 1954 DstPtr.NextPixel; 1955 end; 1956 SrcPtr.NextPixel; 1957 end; 1958 DstPtr.NextLine; 1959 SrcPtr.SetX(0); 1960 end; 1961 SrcPtr.NextLine; 1962 end; 1963 Dst.EndUpdate; 1964 end; 1965 1888 1966 procedure TDpiGraphic.LoadFromFile(const Filename: string); 1889 1967 var … … 1894 1972 Width := Bitmap.Width; 1895 1973 Height := Bitmap.Height; 1896 if Self is TDpiBitmap then 1897 TBitmap(GetNativeGraphic).Canvas.StretchDraw(Bounds(0, 0, 1898 TBitmap(GetNativeGraphic).Width, TBitmap(GetNativeGraphic).Height), Bitmap) 1899 else raise Exception.Create('Unsupported class ' + Self.ClassName); 1974 if Self is TDpiBitmap then begin 1975 StretchDrawBitmap(TRasterImage(Bitmap), TBitmap(GetNativeGraphic)); 1976 //TBitmap(GetNativeGraphic).Canvas.StretchDraw(Bounds(0, 0, 1977 //TBitmap(GetNativeGraphic).Width, TBitmap(GetNativeGraphic).Height), Bitmap); 1978 end else raise Exception.Create('Unsupported class ' + Self.ClassName); 1900 1979 Bitmap.Free; 1901 1980 end; … … 2806 2885 begin 2807 2886 //Dpi := 96 * 2; //Screen.PixelsPerInch; 2808 //Dpi := 144; //Round(96 * 1.25) 2887 //Dpi := Round(96 * 1.35); 2888 //Dpi := 144; //Round(96 * 2); 2809 2889 //Dpi := Round(96 * 1.6); 2810 2890 Dpi := Screen.PixelsPerInch;
Note:
See TracChangeset
for help on using the changeset viewer.