Changeset 68 for trunk/UEngine.pas


Ignore:
Timestamp:
Nov 28, 2020, 12:17:21 PM (3 years ago)
Author:
chronos
Message:
  • Fixed: Canvas width and height is not updated correctly on Windows. Use additional CanvasSize parameter in drawing methods.
  • Fixed: Fullscreen was not working on Windows. Form border was not hidden.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/UEngine.pas

    r67 r68  
    303303    procedure DrawShape(Canvas: TCanvas; Position: TPoint; Shape: TStationShape;
    304304      Size: Integer; Angle: Double);
    305     procedure DrawClock(Canvas: TCanvas);
     305    procedure DrawClock(Canvas: TCanvas; CanvasSize: TPoint);
    306306    procedure DrawTrains(Canvas: TCanvas);
    307     procedure DrawGameOver(Canvas: TCanvas);
     307    procedure DrawGameOver(Canvas: TCanvas; CanvasSize: TPoint);
    308308    procedure DrawStationPassengerOverload(Canvas: TCanvas);
    309309    procedure DrawLines(Canvas: TCanvas);
    310310    procedure DrawStations(Canvas: TCanvas);
    311     procedure DrawGameControls(Canvas: TCanvas);
     311    procedure DrawGameControls(Canvas: TCanvas; CanvasSize: TPoint);
    312312    procedure ComputeShapeDistance;
    313313    procedure ComputeShapeDistanceStation(Station: TMapStation;
     
    361361    destructor Destroy; override;
    362362    procedure Tick;
    363     procedure Paint(Canvas: TCanvas);
     363    procedure Paint(Canvas: TCanvas; CanvasSize: TPoint);
    364364    property Time: TDateTime read FTime;
    365365    property DarkMode: Boolean read FDarkMode write SetDarkMode;
     
    20902090end;
    20912091
    2092 procedure TEngine.DrawClock(Canvas: TCanvas);
     2092procedure TEngine.DrawClock(Canvas: TCanvas; CanvasSize: TPoint);
    20932093var
    20942094  ClockCenter: TPoint;
     
    21032103  Canvas.Pen.Color := Colors.Text;
    21042104  Canvas.Pen.Width := 2;
    2105   ClockCenter := Point(Canvas.Width - 30, 40);
     2105  ClockCenter := Point(CanvasSize.X - 30, 40);
    21062106  Angle := Time / (12 * OneHour) * 2 * Pi - Pi / 2;
    21072107  Canvas.EllipseC(ClockCenter.X, ClockCenter.Y, ClockSize, ClockSize);
     
    21662166end;
    21672167
    2168 procedure TEngine.DrawGameOver(Canvas: TCanvas);
     2168procedure TEngine.DrawGameOver(Canvas: TCanvas; CanvasSize: TPoint);
    21692169var
    21702170  Y: Integer;
     
    21782178    Y := 100;
    21792179    Font.Size := 40;
    2180     TextOut((Width - TextWidth(SGameOver)) div 2, Y, SGameOver);
     2180    TextOut((CanvasSize.X - TextWidth(SGameOver)) div 2, Y, SGameOver);
    21812181    Y := Y + Round(TextHeight(SGameOver) * 1.1);
    21822182
    21832183    Font.Size := 14;
    2184     TextOut((Width - TextWidth(SGameOverReason)) div 2, Y, SGameOverReason);
     2184    TextOut((CanvasSize.X - TextWidth(SGameOverReason)) div 2, Y, SGameOverReason);
    21852185    Y := Y + Round(TextHeight(SGameOverReason) * 1.1);
    21862186
    21872187    Text := Format(SGameOverStatistic, [ServedPassengerCount, ServedDaysCount]);
    2188     TextOut((Width - TextWidth(Text)) div 2, Y, Text);
     2188    TextOut((CanvasSize.X - TextWidth(Text)) div 2, Y, Text);
    21892189    Y := Y + Round(TextHeight(SGameOverStatistic) * 1.1);
    21902190
     
    21992199    Text := Text + Format(SOldHighScore, [HighestServedPassengerCount,
    22002200      HighestServedDaysCount]);
    2201     Canvas.TextOut((Canvas.Width - Canvas.TextWidth(Text)) div 2, Y, Text);
     2201    Canvas.TextOut((CanvasSize.X - TextWidth(Text)) div 2, Y, Text);
    22022202    Y := Y + Round(TextHeight(Text) * 1.1);
    22032203    if (ServedPassengerCount > HighestServedPassengerCount) then
     
    23632363end;
    23642364
    2365 procedure TEngine.DrawGameControls(Canvas: TCanvas);
     2365procedure TEngine.DrawGameControls(Canvas: TCanvas; CanvasSize: TPoint);
    23662366var
    23672367  I: Integer;
     
    23882388    end;
    23892389
    2390     Canvas.EllipseC(Canvas.Width div 2 - Length(LineColors) div 2 * LineColorsDist + I * LineColorsDist,
    2391       Canvas.Height - LineColorsDist, Radius, Radius);
     2390    Canvas.EllipseC(CanvasSize.X div 2 - Length(LineColors) div 2 * LineColorsDist + I * LineColorsDist,
     2391      CanvasSize.Y - LineColorsDist, Radius, Radius);
    23922392  end;
    23932393
    23942394  // Draw unused trains
    23952395  Text := IntToStr(Trains.GetUnusedCount);
    2396   Canvas.Draw(Canvas.Width div 2 - Length(LineColors) div 2 * LineColorsDist - 100,
    2397     Canvas.Height - LineColorsDist - ImageLocomotive.Picture.Bitmap.Height div 2, ImageLocomotive.Picture.Bitmap);
     2396  Canvas.Draw(CanvasSize.X div 2 - Length(LineColors) div 2 * LineColorsDist - 100,
     2397    CanvasSize.Y - LineColorsDist - ImageLocomotive.Picture.Bitmap.Height div 2, ImageLocomotive.Picture.Bitmap);
    23982398  Canvas.Brush.Style := bsClear;
    23992399  Canvas.Font.Size := 14;
    24002400  Canvas.Font.Color := Colors.Text;
    2401   Canvas.TextOut(Canvas.Width div 2 - Length(LineColors) div 2 * LineColorsDist - 50 - Canvas.TextWidth(Text),
    2402     Canvas.Height - LineColorsDist - Canvas.TextHeight(Text) div 2, Text);
     2401  Canvas.TextOut(CanvasSize.X div 2 - Length(LineColors) div 2 * LineColorsDist - 50 - Canvas.TextWidth(Text),
     2402    CanvasSize.Y - LineColorsDist - Canvas.TextHeight(Text) div 2, Text);
    24032403
    24042404  // Status interface
    24052405  Text := IntToStr(ServedPassengerCount);
    2406   Canvas.Draw(Canvas.Width - 50, Canvas.Height - 60, ImagePassenger.Picture.Bitmap);
     2406  Canvas.Draw(CanvasSize.X - 50, CanvasSize.Y - 60, ImagePassenger.Picture.Bitmap);
    24072407  Canvas.Brush.Style := bsClear;
    24082408  Canvas.Font.Size := 14;
    24092409  Canvas.Font.Color := Colors.Text;
    2410   Canvas.TextOut(Canvas.Width - 70 - Canvas.TextWidth(Text), Canvas.Height - 55, Text);
    2411 
    2412   DrawClock(Canvas);
     2410  Canvas.TextOut(CanvasSize.X - 70 - Canvas.TextWidth(Text),
     2411    CanvasSize.Y - 55, Text);
     2412
     2413  DrawClock(Canvas, CanvasSize);
    24132414
    24142415  // Back button
     
    28382839end;
    28392840
    2840 procedure TEngine.Paint(Canvas: TCanvas);
     2841procedure TEngine.Paint(Canvas: TCanvas; CanvasSize: TPoint);
    28412842begin
    28422843  MetaCanvas.Size := Point(Canvas.Width, Canvas.Height);
     
    28602861
    28612862  if State <> gsMenu then begin
    2862     DrawGameControls(Canvas);
     2863    DrawGameControls(Canvas, CanvasSize);
    28632864  end;
    28642865
     
    28662867  if State = gsGameOver then
    28672868  begin
    2868     DrawGameOver(Canvas);
     2869    DrawGameOver(Canvas, CanvasSize);
    28692870  end else
    28702871  if State = gsMenu then begin
    2871     Menu.Paint(Canvas);
     2872    Menu.Paint(Canvas, CanvasSize);
    28722873  end;
    28732874
Note: See TracChangeset for help on using the changeset viewer.