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

View File

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

View File

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

View File

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

View File

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