Changeset 315 for trunk


Ignore:
Timestamp:
Mar 18, 2021, 10:58:28 PM (3 years ago)
Author:
chronos
Message:
  • Fixed: Gamma was incorrectly applied to images with transparency colors.
  • Modified: Change Templates to GraphicSet so it can also have description of its items.
  • Modified: Use TextExtent instead of both TextWidth and TextHeight.
Location:
trunk
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/LocalPlayer/Draft.pas

    r313 r315  
    275275          x := xDomain + d * DomainPitch;
    276276          if d = Domain then
    277             ImageOp_BCC(offscreen, Templates, x, yDomain, 142, 246 + 37 * d, 36,
     277            ImageOp_BCC(offscreen, Templates.Data, x, yDomain, 142, 246 + 37 * d, 36,
    278278              36, 0, $00C0FF)
    279279          else
    280             ImageOp_BCC(offscreen, Templates, x, yDomain, 142, 246 + 37 * d, 36,
     280            ImageOp_BCC(offscreen, Templates.Data, x, yDomain, 142, 246 + 37 * d, 36,
    281281              36, 0, $606060);
    282282        end;
     
    300300      for i := 0 to MaxWeight - 1 do
    301301        if i < Weight then
    302           ImageOp_BCC(offscreen, Templates, xWeight + 20 * i, yWeight, 123, 400,
     302          ImageOp_BCC(offscreen, Templates.Data, xWeight + 20 * i, yWeight, 123, 400,
    303303            18, 20, 0, $949494)
    304304        else
    305           ImageOp_BCC(offscreen, Templates, xWeight + 20 * i, yWeight, 105, 400,
     305          ImageOp_BCC(offscreen, Templates.Data, xWeight + 20 * i, yWeight, 105, 400,
    306306            18, 20, 0, $949494);
    307307    end;
  • trunk/LocalPlayer/Help.pas

    r313 r315  
    465465    if ((ScaleToNative(y0) + y) >= 0) and ((ScaleToNative(y0) + y) < ScaleToNative(InnerHeight)) then begin
    466466      PaintPtr := PixelPointer(OffScreen, 0, ScaleToNative(y0) + y);
    467       CoalPtr := PixelPointer(Templates, 0, ScaleToNative(yCoal) + y);
     467      CoalPtr := PixelPointer(Templates.Data, 0, ScaleToNative(yCoal) + y);
    468468      for dy := -1 to 1 do
    469469        if ((Max(y + ScaleToNative(dy), 0) shr 1) >= 0) and ((Max(y + ScaleToNative(dy), 0) shr 1) < ScaleToNative(ySizeBig)) then
  • trunk/LocalPlayer/IsoEngine.pas

    r314 r315  
    628628      if Flags and unFortified <> 0 then
    629629      begin
    630         { DataCanvas:=GrExt[HGrTerrain].Data.Canvas;
    631           MaskCanvas:=GrExt[HGrTerrain].Mask.Canvas;
     630        { DataCanvas:=HGrTerrain.Data.Canvas;
     631          MaskCanvas:=HGrTerrain.Mask.Canvas;
    632632          TSprite(x,y+16,12*9+7); }
    633633        Sprite(HGrStdUnits, x, y, xxu * 2, yyu * 2, 1 + 6 * (xxu * 2 + 1), 1);
  • trunk/LocalPlayer/MessgEx.pas

    r313 r315  
    310310            Trunc(Screwed[ix, iy, 0] / Screwed[ix, iy, 3]) shl 16;
    311311
    312   ImageOp_BCC(LogoBuffer, Templates, 0, 0, xb, yb, wb, hb, clCover, clPage);
     312  ImageOp_BCC(LogoBuffer, Templates.Data, 0, 0, xb, yb, wb, hb, clCover, clPage);
    313313
    314314  BitBltCanvas(ca, x, y, wb, hb, LogoBuffer.Canvas, 0, 0);
     
    441441        BitBltCanvas(Buffer.Canvas, 0, 0, 140, 120, Canvas,
    442442          (ClientWidth - 140) div 2, 24);
    443         ImageOp_BCC(Buffer, Templates, 0, 0, 1, 279, 140, 120, 0, $FFFFFF);
     443        ImageOp_BCC(Buffer, Templates.Data, 0, 0, 1, 279, 140, 120, 0, $FFFFFF);
    444444        BitBltCanvas(Canvas, (ClientWidth - 140) div 2, 24, 140, 120,
    445445          Buffer.Canvas, 0, 0);
  • trunk/LocalPlayer/NatStat.pas

    r313 r315  
    8282  ReportText := TStringList.Create;
    8383  InitButtons();
    84   ContactBtn.Template := Templates;
     84  ContactBtn.Template := Templates.Data;
    8585  HelpContext := 'DIPLOMACY';
    8686  ToggleBtn.Hint := Phrases.Lookup('BTN_SELECT');
  • trunk/LocalPlayer/Select.pas

    r313 r315  
    819819        BitBltCanvas(ScienceNationDot.Canvas, 0, 0, 17, 17, Canvas,
    820820          xScreen - 10, ClientHeight - 27);
    821         ImageOp_BCC(ScienceNationDot, Templates, 0, 0, 114, 211, 17, 17,
     821        ImageOp_BCC(ScienceNationDot, Templates.Data, 0, 0, 114, 211, 17, 17,
    822822          MainTexture.clBevelShade, Tribe[ScienceNation].Color);
    823823        BitBltCanvas(Canvas, xScreen - 10, ClientHeight - 27, 17, 17,
  • trunk/LocalPlayer/TechTree.pas

    r295 r315  
    131131  NewWidth: Integer;
    132132  NewHeight: Integer;
    133 const
    134   TransparentColor: Cardinal = $7F007F;
    135133begin
    136134  if Image = nil then begin
     
    156154            TextOut(xStart + X * xPitch + 2, yStart + Y * yPitch, s);
    157155            Pixels[xStart + X * xPitch + 10, yStart + Y * yPitch - 1]
    158               := TransparentColor;
     156              := TransparentColor2;
    159157          end
    160158        end;
     
    171169    end;
    172170
    173     Texturize(Image, Paper, TransparentColor);
     171    Texturize(Image, Paper, TransparentColor2);
    174172  end;
    175173
  • trunk/LocalPlayer/Term.pas

    r314 r315  
    25472547          Jump[0] := 999999;
    25482548        GameMode := Command;
    2549         for i := 0 to GrExt.Count - 1 do
    2550           GrExt[i].ResetPixUsed;
     2549        GrExt.ResetPixUsed;
    25512550        IsoEngine.Reset;
    25522551        Tribes.Init;
     
    35123511  Canvas.Font.Assign(UniFont[ftSmall]);
    35133512  InitButtons;
    3514   EOT.Template := Templates;
     3513  EOT.Template := Templates.Data;
    35153514end;
    35163515
     
    48444843  end;
    48454844  if GameMode <> cMovie then
    4846     ImageOp_BCC(TopBar, Templates, 2, 1, 145, 38, 36, 36, $BFBF20, $4040DF);
     4845    ImageOp_BCC(TopBar, Templates.Data, 2, 1, 145, 38, 36, 36, $BFBF20, $4040DF);
    48474846  if MyRO.nCity > 0 then
    48484847  begin
     
    48604859
    48614860    // treasury section
    4862     ImageOp_BCC(TopBar, Templates, xTreasurySection + 8, 1, 145, 1, 36, 36,
     4861    ImageOp_BCC(TopBar, Templates.Data, xTreasurySection + 8, 1, 145, 1, 36, 36,
    48634862      $40A040, $4030C0);
    48644863    s := IntToStr(TrueMoney);
     
    48674866    if MyRO.Government <> gAnarchy then
    48684867    begin
    4869       ImageOp_BCC(TopBar, Templates, xTreasurySection + 48, 22, 124, 1, 14, 14,
     4868      ImageOp_BCC(TopBar, Templates.Data, xTreasurySection + 48, 22, 124, 1, 14, 14,
    48704869        $0000C0, $0080C0);
    48714870      if TaxSum >= 0 then
     
    48784877
    48794878    // research section
    4880     ImageOp_BCC(TopBar, Templates, xResearchSection + 8, 1, 145, 75, 36, 36,
     4879    ImageOp_BCC(TopBar, Templates.Data, xResearchSection + 8, 1, 145, 75, 36, 36,
    48814880      $FF0000, $00FFE0);
    48824881    if MyData.FarTech <> adNexus then
     
    49294928    if (MyData.FarTech <> adNexus) and (ScienceSum > 0) then
    49304929    begin
    4931       ImageOp_BCC(TopBar, Templates, xResearchSection + 48 + CostFactor + 11,
     4930      ImageOp_BCC(TopBar, Templates.Data, xResearchSection + 48 + CostFactor + 11,
    49324931        22, 124, 1, 14, 14, $0000C0, $0080C0);
    49334932      s := Format(Phrases.Lookup('TECHGAIN'), [ScienceSum]);
  • trunk/LocalPlayer/Tribes.pas

    r314 r315  
    466466            facepix div 10 * 49 + 48] := $000000;
    467467          Gray := $B8B8B8;
    468           ImageOp_BCC(faceHGr.Data, Templates,
     468          ImageOp_BCC(faceHGr.Data, Templates.Data,
    469469            facepix mod 10 * 65 + 1, facepix div 10 * 49 + 1, 1, 25, 64, 48,
    470470            Gray, Color);
  • trunk/Packages/CevoComponents/ButtonA.pas

    r290 r315  
    44
    55uses
    6   ButtonBase, Classes, Graphics, LCLIntf, LCLType, ScreenTools;
     6  ButtonBase, Classes, Graphics, LCLIntf, LCLType, ScreenTools, Types;
    77
    88type
     
    4141
    4242procedure TButtonA.Paint;
     43var
     44  TextSize: TSize;
    4345begin
    4446  with Canvas do
    45     if FGraphic <> nil then
    46     begin
     47    if FGraphic <> nil then begin
    4748      BitBltCanvas(Canvas, 0, 0, 100, 25, Graphic.Canvas, 195,
    4849        243 + 26 * Byte(Down));
    4950      Canvas.Brush.Style := bsClear;
    50       Textout(50 - (TextWidth(FCaption) + 1) div 2, 12 - textheight(FCaption)
    51         div 2, FCaption);
    52     end
    53     else
    54     begin
     51      TextSize := TextExtent(FCaption);
     52      TextOut(50 - (TextSize.Width + 1) div 2,
     53        12 - TextSize.Height div 2, FCaption);
     54    end else begin
    5555      Brush.Color := $0000FF;
    5656      FrameRect(Rect(0, 0, 100, 25))
  • trunk/Packages/CevoComponents/ScreenTools.pas

    r314 r315  
    4040function LoadGraphicFile(Bmp: TBitmap; FileName: string; Options: TLoadGraphicFileOptions = []): boolean;
    4141function LoadGraphicSet(const Name: string): TGraphicSet;
     42function LoadGraphicSet2(const Name: string): TGraphicSet;
    4243procedure Dump(dst: TBitmap; HGr: TGraphicSet; xDst, yDst, Width, Height, xGr, yGr: integer);
    4344procedure Sprite(Canvas: TCanvas; HGr: TGraphicSet; xDst, yDst, Width, Height, xGr, yGr: integer);
     
    107108
    108109const
     110  TransparentColor1 = $FF00FF;
     111  TransparentColor2 = $7F007F;
     112
    109113  wMainTexture = 640;
    110114  hMainTexture = 480;
    111115
    112   // template positions in Template.bmp
     116  // template positions in Templates.png
    113117  xLogo = 1;
    114118  yLogo = 1;
     
    172176  CityMark2: TGraphicSetItem;
    173177  Ornament: TGraphicSetItem;
     178  Logo: TGraphicSetItem;
    174179  ClickFrameColor: Integer;
    175180  MainTextureAge: Integer;
    176181  MainTexture: TTexture;
    177   Templates: TBitmap;
     182  Templates: TGraphicSet;
    178183  Colors: TBitmap;
    179184  Paper: TBitmap;
     
    474479  x: Integer;
    475480  y: Integer;
    476   xmax: Integer;
    477481  OriginalColor: Integer;
    478482  FileName: string;
     
    484488    Result := GrExt.AddNew(Name);
    485489    FileName := GetGraphicsDir + DirectorySeparator + Name;
    486     if not LoadGraphicFile(Result.Data, FileName) then begin
     490    // Do not apply gamma during file load as it would affect also transparency colors
     491    if not LoadGraphicFile(Result.Data, FileName, [gfNoGamma]) then begin
    487492      Result := nil;
    488493      Exit;
     
    494499
    495500    Result.ResetPixUsed;
    496 
    497     xmax := Result.Data.Width - 1; // allows 4-byte access even for last pixel
    498     // Why there was that limit?
    499     //if xmax > 970 then
    500     //  xmax := 970;
    501501
    502502    Result.Mask.SetSize(Result.Data.Width, Result.Data.Height);
     
    507507    MaskPixel := PixelPointer(Result.Mask);
    508508    for y := 0 to ScaleToNative(Result.Data.Height) - 1 do begin
    509       for x := 0 to ScaleToNative(xmax) - 1 do begin
     509      for x := 0 to ScaleToNative(Result.Data.Width) - 1 do begin
    510510        OriginalColor := DataPixel.Pixel^.ARGB and $FFFFFF;
    511         if (OriginalColor = $FF00FF) or (OriginalColor = $7F007F) then
    512         begin // transparent
    513           MaskPixel.Pixel^.ARGB := $FFFFFF;
    514           DataPixel.Pixel^.ARGB := DataPixel.Pixel^.ARGB and $FF000000;
    515         end
    516         else begin
    517           MaskPixel.Pixel^.ARGB := $000000; // non-transparent
    518           if Gamma <> 100 then
    519             DataPixel.Pixel^ := ApplyGammaToPixel(DataPixel.Pixel^);
     511        if (OriginalColor = TransparentColor1) or (OriginalColor = TransparentColor2) then begin
     512          MaskPixel.Pixel^.R := $FF;
     513          MaskPixel.Pixel^.G := $FF;
     514          MaskPixel.Pixel^.B := $FF;
     515          DataPixel.Pixel^.R := 0;
     516          DataPixel.Pixel^.G := 0;
     517          DataPixel.Pixel^.B := 0;
     518        end else begin
     519          MaskPixel.Pixel^.R := $00;
     520          MaskPixel.Pixel^.G := $00;
     521          MaskPixel.Pixel^.B := $00;
    520522        end;
    521523        DataPixel.NextPixel;
     
    527529    Result.Data.EndUpdate;
    528530    Result.Mask.EndUpdate;
     531
     532    if Gamma <> 100 then
     533      ApplyGammaToBitmap(Result.Data);
     534  end;
     535end;
     536
     537function LoadGraphicSet2(const Name: string): TGraphicSet;
     538var
     539  FileName: string;
     540begin
     541  Result := GrExt.SearchByName(Name);
     542  if not Assigned(Result) then begin
     543    Result := GrExt.AddNew(Name);
     544    FileName := GetGraphicsDir + DirectorySeparator + Name;
     545    if not LoadGraphicFile(Result.Data, FileName, [gfNoGamma]) then begin
     546      Result := nil;
     547      Exit;
     548    end;
     549
     550    FileName := ExtractFileNameWithoutExt(FileName) + GraphicSetFileExt;
     551    if FileExists(FileName) then
     552      Result.LoadFromFile(FileName);
     553
     554    Result.ResetPixUsed;
    529555  end;
    530556end;
     
    11141140procedure Corner(ca: TCanvas; x, y, Kind: Integer; const T: TTexture);
    11151141begin
    1116   { BitBltCanvas(ca,x,y,8,8,GrExt[T.HGr].Mask.Canvas,
     1142  { BitBltCanvas(ca,x,y,8,8,T.HGr.Mask.Canvas,
    11171143    T.xGr+29+Kind*9,T.yGr+89,SRCAND);
    1118     BitBltCanvas(ca,x,y,8,8,GrExt[T.HGr].Data.Canvas,
     1144    BitBltCanvas(ca,x,y,8,8,T.HGr.Data.Canvas,
    11191145    T.xGr+29+Kind*9,T.yGr+89,SRCPAINT); }
    11201146end;
     
    11341160  sp: string;
    11351161  shadow: Boolean;
     1162  Text: string;
    11361163begin
    11371164  Inc(x);
     
    11571184          else
    11581185          begin
    1159             Textout(xp, y, copy(sp, 1, p - 1));
    1160             Inc(xp, ca.TextWidth(copy(sp, 1, p - 1)));
     1186            Text := Copy(sp, 1, p - 1);
     1187            Textout(xp, y, Text);
     1188            Inc(xp, ca.TextWidth(Text));
    11611189            if not shadow then
    11621190              case sp[p + 1] of
     
    14711499  LogoBuffer.Canvas.FillRect(0, 0, LogoBuffer.Width, LogoBuffer.Height);
    14721500  BitBltCanvas(LogoBuffer.Canvas, 0, 0, wLogo, hLogo, ca, x, y);
    1473   ImageOp_BCC(LogoBuffer, Templates, 0, 0, 1, 1, wLogo, hLogo,
     1501  ImageOp_BCC(LogoBuffer, Templates.Data, 0, 0, 1, 1, wLogo, hLogo,
    14741502    clLight, clShade);
    14751503  BitBltCanvas(ca, x, y, wLogo, hLogo, LogoBuffer.Canvas, 0, 0);
     
    16531681  LoadPhrases;
    16541682  LoadFonts;
    1655   LoadGraphicFile(Templates, GetGraphicsDir + DirectorySeparator +
    1656     'Templates.png', [gfNoGamma]);
     1683  Templates := LoadGraphicSet2('Templates.png');
    16571684  LoadGraphicFile(Colors, GetGraphicsDir + DirectorySeparator + 'Colors.png');
    16581685  LoadGraphicFile(Paper, GetGraphicsDir + DirectorySeparator + 'Paper.jpg');
     
    16881715  Ornament := HGrSystem2.GetItem('Ornament');
    16891716
    1690   Templates := TBitmap.Create;
    1691   Templates.PixelFormat := pf24bit;
    16921717  Colors := TBitmap.Create;
    16931718  Colors.PixelFormat := pf24bit;
     
    17061731
    17071732procedure UnitDone;
    1708 var
    1709   I: Integer;
    17101733begin
    17111734  RestoreResolution;
     
    17171740  FreeAndNil(BigImp);
    17181741  FreeAndNil(Paper);
    1719   FreeAndNil(Templates);
    17201742  FreeAndNil(Colors);
    17211743  FreeAndNil(MainTexture.Image);
  • trunk/Packages/CevoComponents/UGraphicSet.pas

    r314 r315  
    6060    function SearchByName(Name: string): TGraphicSet;
    6161    function AddNew(Name: string): TGraphicSet;
     62    procedure ResetPixUsed;
    6263  end;
    6364
     
    259260end;
    260261
     262procedure TGraphicSets.ResetPixUsed;
     263var
     264  I: Integer;
     265begin
     266  for I := 0 to Count - 1 do
     267    Items[I].ResetPixUsed;
     268end;
     269
    261270end.
    262271
  • trunk/Start.pas

    r314 r315  
    55
    66uses
    7   GameServer, Messg, ButtonBase, ButtonA, ButtonC, ButtonB, Area,
     7  GameServer, Messg, ButtonBase, ButtonA, ButtonC, ButtonB, Area, Types,
    88  LCLIntf, LCLType, SysUtils, Classes, Graphics, Controls, Forms, StdCtrls,
    99  Menus, Registry, DrawDlg, fgl, Protocol;
     
    671671  AIBrains: TBrains;
    672672  I: Integer;
     673  TextSize: TSize;
    673674begin
    674675  AIBrains := TBrains.Create(False);
     
    684685        Font.Style := [];
    685686        Font.Color := $5FDBFF;
    686         Textout(32 - TextWidth(FileName) div 2,
    687           32 - TextHeight(FileName) div 2, FileName);
     687        TextSize := TextExtent(FileName);
     688        Textout(32 - TextSize.Width div 2,
     689          32 - TextSize.Height div 2, FileName);
    688690      end;
    689691    end;
     
    830832    3 + 2 * integer(Tab <> tbMain));
    831833
    832   ImageOp_BCC(LogoBuffer, Templates, 0, 0, 145, 38, 36, 27, $BFBF20, $4040DF);
     834  ImageOp_BCC(LogoBuffer, Templates.Data, 0, 0, 145, 38, 36, 27, $BFBF20, $4040DF);
    833835  // logo part 1
    834   ImageOp_BCC(LogoBuffer, Templates, 10, 27, 155, 38 + 27, 26, 9, $BFBF20,
     836  ImageOp_BCC(LogoBuffer, Templates.Data, 10, 27, 155, 38 + 27, 26, 9, $BFBF20,
    835837    $4040DF); // logo part 2
    836838  BitBltCanvas(Canvas, 6, 3 + 2 * integer(Tab <> tbMain), 36, 36,
     
    879881              BitBltCanvas(LogoBuffer.Canvas, 0, 0, 91, 25, Canvas,
    880882                xActionIcon, y + 2);
    881               ImageOp_BCC(LogoBuffer, Templates, 0, 0, 1, 400, 91, 25, 0,
     883              ImageOp_BCC(LogoBuffer, Templates.Data, 0, 0, 1, 400, 91, 25, 0,
    882884                Colors.Canvas.Pixels[clkAge0 - 1, cliDimmedText]);
    883885              BitBltCanvas(Canvas, xActionIcon, y + 2, 91, 25,
Note: See TracChangeset for help on using the changeset viewer.