Changeset 10


Ignore:
Timestamp:
Mar 19, 2011, 4:30:27 PM (13 years ago)
Author:
george
Message:
  • Modified: Optimized resampling of bitmap to higher resolution.
Location:
trunk
Files:
1 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/UCore.pas

    r8 r10  
    77uses
    88  Dialogs, Classes, SysUtils, Contnrs, Graphics, SpecializedMatrix, SpecializedList,
    9   IntfGraphics, FPImage, LCLType, SpecializedBitmap, GraphType;
     9  IntfGraphics, FPImage, LCLType, SpecializedBitmap, GraphType, Math;
    1010
    1111const
     
    115115  end;
    116116
     117  TFastBitmapPixelComponents = packed record
     118    B, G, R, A: Byte;
     119  end;
     120
    117121const
    118122  SurfaceMatterColors: array[TSurfaceMatter] of TColor = (clBlack, $0756b0,
     
    127131  Engine: TEngine;
    128132
     133function SwapBRComponent(Value: Integer): Integer; inline;
     134
    129135implementation
     136
     137function SwapBRComponent(Value: Integer): Integer;
     138begin
     139//  Result := (Value and $00ff00) or ((Value shr 16) and $ff) or ((Value and $ff) shl 16);
     140  Result := Value;
     141  TFastBitmapPixelComponents(Result).R := TFastBitmapPixelComponents(Value).B;
     142  TFastBitmapPixelComponents(Result).B := TFastBitmapPixelComponents(Value).R;
     143end;
    130144
    131145{ TTank }
     
    635649  I: Integer;
    636650  X, Y: Integer;
    637   H, W: Integer;
    638   Ratio: Single;
     651  PixelX, PixelY: Integer;
     652  SubPixelPtr: PInteger;
     653  SubPixelRowPtr: PInteger;
     654  SubPixelSizeX: Integer;
     655  SubPixelSizeY: Integer;
    639656  PixelPtr: PInteger;
    640657  PixelRowPtr: PInteger;
     658  BytePerPixel: Integer;
     659  BytePerRow: Integer;
    641660  RawImage: TRawImage;
    642   BytePerPixel: Integer;
    643   P: Integer;
    644 begin
    645   if FRedrawPending then begin
    646     FBitmapLower.FillAll(0);
     661  Color: Integer;
     662  Shift: TPoint;
     663  XDiv, XMod, XAcc: Integer;
     664  YDiv, YMod, YAcc: Integer;
     665  Ratio: Real;
     666  TargetHeight: Integer;
     667  TargetWidth: Integer;
     668begin
     669  if FRedrawPending then
     670  begin
     671    FRedrawPending := False;
     672    //FBitmapLower.FillAll(0);
    647673    for I := 0 to Players.Count - 1 do begin
    648674      TPlayer(Players[I]).Paint;
    649675    end;
    650     if Assigned(FBitmap) then try
    651       Bitmap.BeginUpdate(False);
     676    if Assigned(FBitmap) then
     677    try
     678      Bitmap.BeginUpdate;
    652679      RawImage := Bitmap.RawImage;
    653       PixelRowPtr := PInteger(RawImage.Data);
    654680      BytePerPixel := RawImage.Description.BitsPerPixel div 8;
    655       if (IntfImage.Width <> FBitmap.Width) or (IntfImage.Height <> FBitmap.Height) then
    656         IntfImage.SetSize(FBitmap.Width, FBitmap.Height);
     681      BytePerRow := RawImage.Description.BytesPerLine;
     682      FillChar(RawImage.Data^, Bitmap.Height * BytePerRow, 0);
     683
    657684      if (FBitmap.Width / FBitmapLower.Width) < (FBitmap.Height / FBitmapLower.Height) then
    658685        Ratio := FBitmap.Width / FBitmapLower.Width
    659686        else Ratio := FBitmap.Height / FBitmapLower.Height;
    660       for Y := 0 to Trunc(FBitmapLower.Height * Ratio) - 1 do begin
    661         PixelPtr := PixelRowPtr;
    662         for X := 0 to Trunc(FBitmapLower.Width * Ratio) - 1 do begin
    663           P := FBitmapLower.Pixels[Trunc(X / Ratio), Trunc(Y / Ratio)];
    664           PixelPtr^ := ((P and $ff) shl 16) or (P and $00ff00) or ((P shr 16) and $ff);
    665           Inc(PByte(PixelPtr), BytePerPixel);
     687
     688      // Preserve aspect ratio
     689      TargetWidth := Trunc(FBitmapLower.Width * Ratio);
     690      TargetHeight := Trunc(FBitmapLower.Height * Ratio);
     691
     692      Shift.X := Trunc((Bitmap.Width - TargetWidth) / 2);
     693      Shift.Y := Trunc((Bitmap.Height - TargetHeight) / 2);
     694
     695      XDiv := TargetWidth div FBitmapLower.Width;
     696      XMod := TargetWidth mod FBitmapLower.Width;
     697      YDiv := TargetHeight div FBitmapLower.Height;
     698      YMod := TargetHeight mod FBitmapLower.Height;
     699
     700      PixelRowPtr := PInteger(RawImage.Data + BytePerRow * Shift.Y);
     701      YAcc := FBitmapLower.Height div 2;
     702      for Y := 0 to FBitmapLower.Height - 1 do begin
     703        SubPixelSizeY := YDiv;
     704        Inc(YAcc, YMod);
     705        if YAcc >= FBitmapLower.Height then begin
     706          Dec(YAcc, FBitmapLower.Height);
     707          Inc(SubPixelSizeY);
    666708        end;
    667         Inc(PByte(PixelRowPtr), RawImage.Description.BytesPerLine);
     709
     710        PixelPtr := PixelRowPtr + Shift.X;
     711        XAcc := FBitmapLower.Width div 2;
     712        for X := 0 to FBitmapLower.Width - 1 do begin
     713          SubPixelSizeX := XDiv;
     714          Inc(XAcc, XMod);
     715          if XAcc >= FBitmapLower.Width then begin
     716            Dec(XAcc, FBitmapLower.Width);
     717            Inc(SubPixelSizeX);
     718          end;
     719
     720          Color := SwapBRComponent(FBitmapLower.Pixels[X, Y]);
     721
     722          // Draw large pixel
     723          SubPixelRowPtr := PixelPtr;
     724          for PixelY := 0 to SubPixelSizeY - 1 do begin
     725            SubPixelPtr := SubPixelRowPtr;
     726            for PixelX := 0 to SubPixelSizeX - 1 do begin
     727              SubPixelPtr^ := Color;
     728              Inc(PByte(SubPixelPtr), BytePerPixel);
     729            end;
     730            Inc(PByte(SubPixelRowPtr), BytePerRow);
     731          end;
     732          Inc(PByte(PixelPtr), BytePerPixel * SubPixelSizeX);
     733        end;
     734        Inc(PByte(PixelRowPtr), BytePerRow * SubPixelSizeY);
    668735      end;
    669736    finally
    670       FBitmap.EndUpdate(False);
    671     end;
    672     FRedrawPending := False;
     737      FBitmap.EndUpdate;
     738    end;
    673739  end;
    674740end;
  • trunk/UMainForm.lfm

    r9 r10  
    55  Width = 514
    66  Caption = 'Tunneler'
    7   ClientHeight = 393
     7  ClientHeight = 389
    88  ClientWidth = 514
    99  Menu = MainMenu1
     
    1313  OnShow = FormShow
    1414  LCLVersion = '0.9.31'
     15  WindowState = wsMaximized
    1516  object StatusBar1: TStatusBar
    1617    Left = 0
    17     Height = 20
    18     Top = 373
     18    Height = 17
     19    Top = 372
    1920    Width = 514
    2021    Panels = <   
     22      item
     23        Width = 50
     24      end   
    2125      item
    2226        Width = 50
     
    2933  object Image1: TImage
    3034    Left = 0
    31     Height = 373
     35    Height = 372
    3236    Top = 0
    3337    Width = 514
  • trunk/UMainForm.pas

    r9 r10  
    77uses
    88  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
    9   ComCtrls, Menus, ActnList, UCore;
     9  ComCtrls, Menus, ActnList, UCore, UPlatform, Math, DateUtils;
    1010
    1111type
     
    4545    OriginalWindowState: TWindowState;
    4646    ScreenBounds: TRect;
     47    StartTime: TDateTime;
     48    DrawDuration: TDateTime;
     49    Drawing: Boolean;
    4750  public
    4851    { public declarations }
     
    6366procedure TMainForm.TimerDrawTimer(Sender: TObject);
    6467begin
     68  if not Drawing then
    6569  try
    66     TimerDraw.Enabled := False;
     70    Drawing := True;
     71    StartTime := NowPrecise;
    6772    Engine.Draw;
     73    DrawDuration := NowPrecise - StartTime;
    6874    StatusBar1.Panels[1].Text := IntToStr(TPlayer(Engine.Players[0]).Position.X) + ', ' +
    6975      IntToStr(TPlayer(Engine.Players[0]).Position.Y) + ' ' +
    7076      IntToStr(TPlayer(Engine.Players[0]).Direction);
     77    StatusBar1.Panels[2].Text := FloatToStr(RoundTo(DrawDuration / OneMillisecond, -2));
    7178  finally
    72     TimerDraw.Enabled := True;
     79    Drawing := False;
    7380  end;
    7481end;
  • trunk/tunneler.lpi

    r9 r10  
    4242      </Item3>
    4343    </RequiredPackages>
    44     <Units Count="41">
     44    <Units Count="50">
    4545      <Unit0>
    4646        <Filename Value="tunneler.lpr"/>
     
    4949        <WindowIndex Value="0"/>
    5050        <TopLine Value="1"/>
    51         <CursorPos X="14" Y="8"/>
    52         <UsageCount Value="60"/>
     51        <CursorPos X="62" Y="19"/>
     52        <UsageCount Value="72"/>
    5353      </Unit0>
    5454      <Unit1>
     
    5858        <ResourceBaseClass Value="Form"/>
    5959        <UnitName Value="UMainForm"/>
    60         <IsVisibleTab Value="True"/>
    61         <EditorIndex Value="2"/>
    62         <WindowIndex Value="0"/>
    63         <TopLine Value="75"/>
    64         <CursorPos X="18" Y="84"/>
    65         <UsageCount Value="60"/>
     60        <EditorIndex Value="4"/>
     61        <WindowIndex Value="0"/>
     62        <TopLine Value="83"/>
     63        <CursorPos X="12" Y="85"/>
     64        <UsageCount Value="72"/>
    6665        <Loaded Value="True"/>
    6766        <LoadedDesigner Value="True"/>
     
    7170        <IsPartOfProject Value="True"/>
    7271        <UnitName Value="UCore"/>
     72        <IsVisibleTab Value="True"/>
    7373        <EditorIndex Value="0"/>
    7474        <WindowIndex Value="0"/>
    75         <TopLine Value="229"/>
    76         <CursorPos X="56" Y="242"/>
    77         <UsageCount Value="60"/>
     75        <TopLine Value="663"/>
     76        <CursorPos X="3" Y="669"/>
     77        <UsageCount Value="72"/>
    7878        <Loaded Value="True"/>
    7979      </Unit2>
     
    142142        <Filename Value="../../PascalClassLibrary/Generics/TemplateGenerics/Generic/GenericMatrix.inc"/>
    143143        <WindowIndex Value="0"/>
    144         <TopLine Value="52"/>
    145         <CursorPos X="15" Y="29"/>
    146         <UsageCount Value="25"/>
     144        <TopLine Value="141"/>
     145        <CursorPos X="1" Y="158"/>
     146        <UsageCount Value="31"/>
    147147      </Unit11>
    148148      <Unit12>
     
    261261        <ResourceBaseClass Value="Form"/>
    262262        <UnitName Value="UMapForm"/>
    263         <EditorIndex Value="1"/>
    264         <WindowIndex Value="0"/>
    265         <TopLine Value="15"/>
     263        <EditorIndex Value="3"/>
     264        <WindowIndex Value="0"/>
     265        <TopLine Value="14"/>
    266266        <CursorPos X="20" Y="39"/>
    267         <UsageCount Value="39"/>
     267        <UsageCount Value="51"/>
    268268        <Loaded Value="True"/>
    269269      </Unit27>
     
    286286        <WindowIndex Value="0"/>
    287287        <TopLine Value="63"/>
    288         <CursorPos X="65" Y="81"/>
    289         <UsageCount Value="8"/>
     288        <CursorPos X="14" Y="80"/>
     289        <UsageCount Value="14"/>
    290290      </Unit30>
    291291      <Unit31>
     
    299299        <Filename Value="../../../lazarus/lcl/intfgraphics.pas"/>
    300300        <UnitName Value="IntfGraphics"/>
    301         <WindowIndex Value="0"/>
    302         <TopLine Value="3371"/>
    303         <CursorPos X="24" Y="3388"/>
    304         <UsageCount Value="10"/>
     301        <EditorIndex Value="2"/>
     302        <WindowIndex Value="0"/>
     303        <TopLine Value="3131"/>
     304        <CursorPos X="42" Y="3148"/>
     305        <UsageCount Value="10"/>
     306        <Loaded Value="True"/>
    305307      </Unit32>
    306308      <Unit33>
     
    323325        <UnitName Value="GraphType"/>
    324326        <WindowIndex Value="0"/>
    325         <TopLine Value="191"/>
    326         <CursorPos X="3" Y="188"/>
     327        <TopLine Value="173"/>
     328        <CursorPos X="5" Y="190"/>
    327329        <UsageCount Value="10"/>
    328330      </Unit35>
     
    330332        <Filename Value="../../PascalClassLibrary/Generics/TemplateGenerics/Generic/GenericBitmap.inc"/>
    331333        <WindowIndex Value="0"/>
    332         <TopLine Value="9"/>
    333         <CursorPos X="32" Y="26"/>
    334         <UsageCount Value="12"/>
     334        <TopLine Value="8"/>
     335        <CursorPos X="9" Y="22"/>
     336        <UsageCount Value="16"/>
    335337      </Unit36>
    336338      <Unit37>
     
    364366        <UsageCount Value="10"/>
    365367      </Unit40>
     368      <Unit41>
     369        <Filename Value="../../PascalClassLibrary/Docking/CoolDocking/UCDLayout.pas"/>
     370        <UnitName Value="UCDLayout"/>
     371        <WindowIndex Value="0"/>
     372        <TopLine Value="1"/>
     373        <CursorPos X="9" Y="69"/>
     374        <UsageCount Value="10"/>
     375      </Unit41>
     376      <Unit42>
     377        <Filename Value="../../PascalClassLibrary/Docking/CoolDocking/CoolDocking.pas"/>
     378        <UnitName Value="CoolDocking"/>
     379        <WindowIndex Value="0"/>
     380        <TopLine Value="1"/>
     381        <CursorPos X="1" Y="1"/>
     382        <UsageCount Value="10"/>
     383      </Unit42>
     384      <Unit43>
     385        <Filename Value="../../PascalClassLibrary/Docking/CoolDocking/Common/URectangle.pas"/>
     386        <UnitName Value="URectangle"/>
     387        <WindowIndex Value="0"/>
     388        <TopLine Value="1"/>
     389        <CursorPos X="14" Y="20"/>
     390        <UsageCount Value="10"/>
     391      </Unit43>
     392      <Unit44>
     393        <Filename Value="UPlatform.pas"/>
     394        <IsPartOfProject Value="True"/>
     395        <UnitName Value="UPlatform"/>
     396        <UsageCount Value="31"/>
     397      </Unit44>
     398      <Unit45>
     399        <Filename Value="/usr/share/fpcsrc/2.4.0/rtl/objpas/math.pp"/>
     400        <UnitName Value="math"/>
     401        <WindowIndex Value="0"/>
     402        <TopLine Value="929"/>
     403        <CursorPos X="5" Y="932"/>
     404        <UsageCount Value="14"/>
     405      </Unit45>
     406      <Unit46>
     407        <Filename Value="../../PascalClassLibrary/Generics/NativeGenerics/Units/GenericRange.pas"/>
     408        <UnitName Value="GenericRange"/>
     409        <WindowIndex Value="0"/>
     410        <TopLine Value="1"/>
     411        <CursorPos X="50" Y="5"/>
     412        <UsageCount Value="13"/>
     413      </Unit46>
     414      <Unit47>
     415        <Filename Value="../../PascalClassLibrary/Generics/NativeGenerics/NativeGenerics.pas"/>
     416        <UnitName Value="NativeGenerics"/>
     417        <WindowIndex Value="0"/>
     418        <TopLine Value="1"/>
     419        <CursorPos X="36" Y="15"/>
     420        <UsageCount Value="10"/>
     421      </Unit47>
     422      <Unit48>
     423        <Filename Value="../../../lazarus/lcl/include/custombitmap.inc"/>
     424        <EditorIndex Value="1"/>
     425        <WindowIndex Value="0"/>
     426        <TopLine Value="330"/>
     427        <CursorPos X="35" Y="338"/>
     428        <UsageCount Value="11"/>
     429        <Loaded Value="True"/>
     430      </Unit48>
     431      <Unit49>
     432        <Filename Value="/usr/share/fpcsrc/2.4.0/rtl/objpas/types.pp"/>
     433        <UnitName Value="types"/>
     434        <WindowIndex Value="0"/>
     435        <TopLine Value="58"/>
     436        <CursorPos X="5" Y="75"/>
     437        <UsageCount Value="10"/>
     438      </Unit49>
    366439    </Units>
    367     <JumpHistory Count="29" HistoryIndex="28">
     440    <JumpHistory Count="30" HistoryIndex="28">
    368441      <Position1>
    369         <Filename Value="UMainForm.pas"/>
    370         <Caret Line="67" Column="6" TopLine="48"/>
     442        <Filename Value="UCore.pas"/>
     443        <Caret Line="705" Column="1" TopLine="686"/>
    371444      </Position1>
    372445      <Position2>
    373446        <Filename Value="UCore.pas"/>
    374         <Caret Line="126" Column="14" TopLine="109"/>
     447        <Caret Line="708" Column="1" TopLine="686"/>
    375448      </Position2>
    376449      <Position3>
    377450        <Filename Value="UCore.pas"/>
    378         <Caret Line="99" Column="24" TopLine="82"/>
     451        <Caret Line="709" Column="1" TopLine="686"/>
    379452      </Position3>
    380453      <Position4>
    381454        <Filename Value="UCore.pas"/>
    382         <Caret Line="530" Column="28" TopLine="530"/>
     455        <Caret Line="710" Column="1" TopLine="686"/>
    383456      </Position4>
    384457      <Position5>
    385458        <Filename Value="UCore.pas"/>
    386         <Caret Line="99" Column="39" TopLine="95"/>
     459        <Caret Line="711" Column="1" TopLine="696"/>
    387460      </Position5>
    388461      <Position6>
    389462        <Filename Value="UCore.pas"/>
    390         <Caret Line="530" Column="50" TopLine="530"/>
     463        <Caret Line="712" Column="1" TopLine="696"/>
    391464      </Position6>
    392465      <Position7>
    393466        <Filename Value="UCore.pas"/>
    394         <Caret Line="629" Column="24" TopLine="612"/>
     467        <Caret Line="713" Column="1" TopLine="696"/>
    395468      </Position7>
    396469      <Position8>
    397470        <Filename Value="UCore.pas"/>
    398         <Caret Line="98" Column="6" TopLine="93"/>
     471        <Caret Line="718" Column="1" TopLine="696"/>
    399472      </Position8>
    400473      <Position9>
    401474        <Filename Value="UCore.pas"/>
    402         <Caret Line="105" Column="15" TopLine="94"/>
     475        <Caret Line="721" Column="1" TopLine="706"/>
    403476      </Position9>
    404477      <Position10>
    405478        <Filename Value="UCore.pas"/>
    406         <Caret Line="632" Column="59" TopLine="615"/>
     479        <Caret Line="722" Column="1" TopLine="706"/>
    407480      </Position10>
    408481      <Position11>
    409482        <Filename Value="UCore.pas"/>
    410         <Caret Line="634" Column="32" TopLine="616"/>
     483        <Caret Line="723" Column="1" TopLine="706"/>
    411484      </Position11>
    412485      <Position12>
    413486        <Filename Value="UCore.pas"/>
    414         <Caret Line="637" Column="14" TopLine="620"/>
     487        <Caret Line="724" Column="1" TopLine="706"/>
    415488      </Position12>
    416489      <Position13>
    417490        <Filename Value="UCore.pas"/>
    418         <Caret Line="638" Column="38" TopLine="621"/>
     491        <Caret Line="725" Column="1" TopLine="706"/>
    419492      </Position13>
    420493      <Position14>
    421         <Filename Value="UMainForm.pas"/>
    422         <Caret Line="174" Column="1" TopLine="153"/>
     494        <Filename Value="UCore.pas"/>
     495        <Caret Line="726" Column="1" TopLine="706"/>
    423496      </Position14>
    424497      <Position15>
    425         <Filename Value="UMainForm.pas"/>
    426         <Caret Line="175" Column="1" TopLine="154"/>
     498        <Filename Value="UCore.pas"/>
     499        <Caret Line="725" Column="1" TopLine="706"/>
    427500      </Position15>
    428501      <Position16>
    429502        <Filename Value="UCore.pas"/>
    430         <Caret Line="639" Column="38" TopLine="616"/>
     503        <Caret Line="726" Column="1" TopLine="706"/>
    431504      </Position16>
    432505      <Position17>
    433506        <Filename Value="UCore.pas"/>
    434         <Caret Line="634" Column="1" TopLine="622"/>
     507        <Caret Line="725" Column="1" TopLine="706"/>
    435508      </Position17>
    436509      <Position18>
    437510        <Filename Value="UCore.pas"/>
    438         <Caret Line="636" Column="1" TopLine="622"/>
     511        <Caret Line="726" Column="1" TopLine="706"/>
    439512      </Position18>
    440513      <Position19>
    441514        <Filename Value="UCore.pas"/>
    442         <Caret Line="637" Column="1" TopLine="622"/>
     515        <Caret Line="724" Column="41" TopLine="706"/>
    443516      </Position19>
    444517      <Position20>
    445518        <Filename Value="UCore.pas"/>
    446         <Caret Line="638" Column="1" TopLine="622"/>
     519        <Caret Line="682" Column="12" TopLine="667"/>
    447520      </Position20>
    448521      <Position21>
    449522        <Filename Value="UCore.pas"/>
    450         <Caret Line="632" Column="83" TopLine="622"/>
     523        <Caret Line="709" Column="1" TopLine="681"/>
    451524      </Position21>
    452525      <Position22>
    453526        <Filename Value="UCore.pas"/>
    454         <Caret Line="594" Column="41" TopLine="577"/>
     527        <Caret Line="692" Column="4" TopLine="681"/>
    455528      </Position22>
    456529      <Position23>
    457530        <Filename Value="UCore.pas"/>
    458         <Caret Line="641" Column="10" TopLine="612"/>
     531        <Caret Line="695" Column="5" TopLine="681"/>
    459532      </Position23>
    460533      <Position24>
    461534        <Filename Value="UCore.pas"/>
    462         <Caret Line="629" Column="1" TopLine="621"/>
     535        <Caret Line="693" Column="41" TopLine="681"/>
    463536      </Position24>
    464537      <Position25>
    465538        <Filename Value="UCore.pas"/>
    466         <Caret Line="9" Column="54" TopLine="1"/>
     539        <Caret Line="695" Column="7" TopLine="678"/>
    467540      </Position25>
    468541      <Position26>
    469542        <Filename Value="UCore.pas"/>
    470         <Caret Line="628" Column="15" TopLine="622"/>
     543        <Caret Line="710" Column="42" TopLine="688"/>
    471544      </Position26>
    472545      <Position27>
    473         <Filename Value="UCore.pas"/>
    474         <Caret Line="647" Column="32" TopLine="633"/>
     546        <Filename Value="UMainForm.pas"/>
     547        <Caret Line="85" Column="12" TopLine="83"/>
    475548      </Position27>
    476549      <Position28>
    477550        <Filename Value="UCore.pas"/>
    478         <Caret Line="649" Column="49" TopLine="617"/>
     551        <Caret Line="710" Column="52" TopLine="693"/>
    479552      </Position28>
    480553      <Position29>
    481         <Filename Value="UMapForm.pas"/>
    482         <Caret Line="39" Column="20" TopLine="15"/>
     554        <Filename Value="UCore.pas"/>
     555        <Caret Line="692" Column="52" TopLine="683"/>
    483556      </Position29>
     557      <Position30>
     558        <Filename Value="../../../lazarus/lcl/include/custombitmap.inc"/>
     559        <Caret Line="338" Column="35" TopLine="330"/>
     560      </Position30>
    484561    </JumpHistory>
    485562  </ProjectOptions>
  • trunk/tunneler.lpr

    r4 r10  
    88  {$ENDIF}{$ENDIF}
    99  Interfaces, // this includes the LCL widgetset
    10   Forms, UMainForm, UCore, TemplateGenerics, UMapForm
     10  Forms, UMainForm, UCore, TemplateGenerics, UMapForm, UPlatform
    1111  { you can add units after this };
    1212
Note: See TracChangeset for help on using the changeset viewer.