Trying to fix CLUT repaint.

This commit is contained in:
Vladimir Kryvian
2015-03-31 19:13:39 +03:00
parent 42d231472b
commit 3655bbbc44
5 changed files with 35 additions and 18 deletions

View File

@@ -260,7 +260,6 @@
<Unit4> <Unit4>
<Filename Value="ucommon.pas"/> <Filename Value="ucommon.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="ucommon"/>
</Unit4> </Unit4>
<Unit5> <Unit5>
<Filename Value="utim.pas"/> <Filename Value="utim.pas"/>
@@ -270,27 +269,22 @@
<Unit6> <Unit6>
<Filename Value="ucdimage.pas"/> <Filename Value="ucdimage.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="ucdimage"/>
</Unit6> </Unit6>
<Unit7> <Unit7>
<Filename Value="usettings.pas"/> <Filename Value="usettings.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="usettings"/>
</Unit7> </Unit7>
<Unit8> <Unit8>
<Filename Value="uscanresult.pas"/> <Filename Value="uscanresult.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="uscanresult"/>
</Unit8> </Unit8>
<Unit9> <Unit9>
<Filename Value="uscanthread.pas"/> <Filename Value="uscanthread.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="uscanthread"/>
</Unit9> </Unit9>
<Unit10> <Unit10>
<Filename Value="ucpucount.pas"/> <Filename Value="ucpucount.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="ucpucount"/>
</Unit10> </Unit10>
<Unit11> <Unit11>
<Filename Value="udrawtim.pas"/> <Filename Value="udrawtim.pas"/>
@@ -308,7 +302,6 @@
<Unit14> <Unit14>
<Filename Value="uexportimport.pas"/> <Filename Value="uexportimport.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="uexportimport"/>
</Unit14> </Unit14>
</Units> </Units>
</ProjectOptions> </ProjectOptions>

View File

@@ -6,11 +6,15 @@ uses
{$IFDEF UNIX} {$IFDEF UNIX}
cthreads, cmem, cthreads, cmem,
{$ENDIF} {$ENDIF}
Forms, umain, Interfaces; Forms, umain, Interfaces,
Windows;
{$R *.res} {$R *.res}
begin begin
AllocConsole; // in Windows unit
IsConsole := True; // in System unit
SysInitStdIO; // in System unit
RequireDerivedFormResource := True; RequireDerivedFormResource := True;
Application.Initialize; Application.Initialize;
Application.CreateForm(TfrmMain, frmMain); Application.CreateForm(TfrmMain, frmMain);

View File

@@ -324,6 +324,7 @@ var
COLS, Colors: Integer; COLS, Colors: Integer;
FC: TFPColor; FC: TFPColor;
begin begin
//Writeln('X=',X, '; Y=',Y);
Colors := GetTimColorsCount(TIM); Colors := GetTimColorsCount(TIM);
COLS := Min(Colors, 32); COLS := Min(Colors, 32);
Rect := Grid^.CellRect(X, Y); Rect := Grid^.CellRect(X, Y);
@@ -378,12 +379,16 @@ begin
Grid^.RowCount := ROWS; Grid^.RowCount := ROWS;
(*
//Grid^.BeginUpdate;
for Y := 1 to ROWS do for Y := 1 to ROWS do
for X := 1 to COLS do for X := 1 to COLS do
begin begin
//ClearCanvas(@Grid^.Canvas, Grid^.CellRect(X - 1, Y - 1)); //ClearCanvas(@Grid^.Canvas, Grid^.CellRect(X - 1, Y - 1));
DrawClutCell(TIM, CLUT_NUM, Grid, X - 1, Y - 1); DrawClutCell(TIM, CLUT_NUM, Grid, X - 1, Y - 1);
end; end;
//Grid^.EndUpdate(true); *)
//Grid^.Repaint;
end; end;
end. end.

View File

@@ -660,7 +660,7 @@ begin
FreeTIM(TIM); FreeTIM(TIM);
Exit; Exit;
end; end;
//Writeln('X=',aCol, '; Y=',aRow);
DrawClutCell(TIM, cbbCLUT.ItemIndex, @grdClut, ACol, ARow); DrawClutCell(TIM, cbbCLUT.ItemIndex, @grdClut, ACol, ARow);
FreeTIM(TIM); FreeTIM(TIM);
@@ -1055,7 +1055,11 @@ procedure TfrmMain.UpdateTim(Tim, Clut, ClutInfo: Boolean);
begin begin
if ClutInfo then UpdateCLUTInfo; if ClutInfo then UpdateCLUTInfo;
if Tim then DrawSelTim; if Tim then DrawSelTim;
if Clut then DrawSelClut; if Clut then
begin
DrawSelClut;
grdClut.Repaint;
end;
end; end;
end. end.

View File

@@ -106,6 +106,9 @@ type
dwSize: Integer; dwSize: Integer;
DATA: PTIMDataArray; DATA: PTIMDataArray;
OverBpp: Integer; OverBpp: Integer;
UseExtClut: Boolean;
ExtCLUT: PCLUTHeader;
ExtCLUT_DATA: PCLUT_COLORS;
end; end;
PTIM = ^TTIM; PTIM = ^TTIM;
@@ -174,12 +177,13 @@ begin
Exit; Exit;
end; end;
COLOR := 0;
CLUT_OFFSET := CLUT_NUM * GetTimColorsCount(TIM) * 2; CLUT_OFFSET := CLUT_NUM * GetTimColorsCount(TIM) * 2;
if (not TIM^.UseExtClut) then if (TIM^.UseExtClut) then
Move(TIM^.DATA^[SizeOf(TTIMHeader) + SizeOf(TCLUTHeader) + COLOR_NUM * 2 + CLUT_OFFSET], COLOR, 2) Move(TIM^.ExtCLUT_DATA^[COLOR_NUM * 2 + CLUT_OFFSET], COLOR, sizeof(TCLUT_COLOR))
else else
Move(TIM^.ExtCLUT_DATA^[COLOR_NUM * 2 + CLUT_OFFSET], COLOR, sizeof(TCLUT_COLOR)); Move(TIM^.DATA^[SizeOf(TTIMHeader) + SizeOf(TCLUTHeader) + COLOR_NUM * 2 + CLUT_OFFSET], COLOR, 2);
Result := ConvertTIMColor(COLOR); Result := ConvertTIMColor(COLOR);
end; end;
@@ -414,6 +418,10 @@ begin
Move(PBytesArray(BUFFER)^[TIM_POS], TIM^.DATA^[0], TIM^.dwSize); Move(PBytesArray(BUFFER)^[TIM_POS], TIM^.DATA^[0], TIM^.dwSize);
TIM^.UseExtClut := False;
TIM^.ExtCLUT := nil;
TIM^.ExtCLUT_DATA := nil;
TIM^.OverBpp := TIM^.HEAD^.bBPP; TIM^.OverBpp := TIM^.HEAD^.bBPP;
Result := True; Result := True;
end; end;
@@ -539,6 +547,9 @@ begin
Result^.dwTimPosition := 0; Result^.dwTimPosition := 0;
Result^.dwTimNumber := 0; Result^.dwTimNumber := 0;
Result^.OverBpp := -1; Result^.OverBpp := -1;
Result^.UseExtClut := False;
Result^.ExtCLUT := nil;
Result^.ExtCLUT_DATA := nil;
New(Result^.DATA); New(Result^.DATA);
ClearTIM(Result); ClearTIM(Result);
end; end;
@@ -603,7 +614,7 @@ end;
function GetTimColorsCount(TIM: PTIM): word; function GetTimColorsCount(TIM: PTIM): word;
begin begin
if (not TIM^.UseExtClut) then if (TIM^.UseExtClut) then
Result := TIM^.ExtCLUT^.wColorsCount Result := TIM^.ExtCLUT^.wColorsCount
else else
Result := TIM^.CLUT^.wColorsCount; Result := TIM^.CLUT^.wColorsCount;
@@ -611,7 +622,7 @@ end;
function GetTimClutsCount(TIM: PTIM): word; function GetTimClutsCount(TIM: PTIM): word;
begin begin
if (not TIM^.UseExtClut) then if (TIM^.UseExtClut) then
Result := TIM^.ExtCLUT^.wClutsCount Result := TIM^.ExtCLUT^.wClutsCount
else else
Result := TIM^.CLUT^.wClutsCount; Result := TIM^.CLUT^.wClutsCount;
@@ -624,7 +635,7 @@ end;
function GetTimClutSizeHeader(TIM: PTIM): Integer; function GetTimClutSizeHeader(TIM: PTIM): Integer;
begin begin
if (not TIM^.UseExtClut) then if (TIM^.UseExtClut) then
Result := TIM^.ExtCLUT^.dwSize Result := TIM^.ExtCLUT^.dwSize
else else
Result := TIM^.CLUT^.dwSize; Result := TIM^.CLUT^.dwSize;
@@ -632,7 +643,7 @@ end;
function GetTimClutVRAMX(TIM: PTIM): word; function GetTimClutVRAMX(TIM: PTIM): word;
begin begin
if (not TIM^.UseExtClut) then if (TIM^.UseExtClut) then
Result := TIM^.ExtCLUT^.wVRAMX Result := TIM^.ExtCLUT^.wVRAMX
else else
Result := TIM^.CLUT^.wVRAMX; Result := TIM^.CLUT^.wVRAMX;
@@ -640,7 +651,7 @@ end;
function GetTimClutVRAMY(TIM: PTIM): word; function GetTimClutVRAMY(TIM: PTIM): word;
begin begin
if (not TIM^.UseExtClut) then if (TIM^.UseExtClut) then
Result := TIM^.ExtCLUT^.wVRAMY Result := TIM^.ExtCLUT^.wVRAMY
else else
Result := TIM^.CLUT^.wVRAMY; Result := TIM^.CLUT^.wVRAMY;