customdrawn-android: Fixes the screen blinking

git-svn-id: trunk@33839 -
This commit is contained in:
sekelsenmat 2011-11-28 17:08:05 +00:00
parent 9063d804bf
commit 3a5fb38765
3 changed files with 8 additions and 6 deletions

View File

@ -93,7 +93,7 @@ begin
FillChar(struct, SizeOf(TPaintStruct), 0); FillChar(struct, SizeOf(TPaintStruct), 0);
// Prepare the non-native image and canvas // Prepare the non-native image and canvas
UpdateControlLazImageAndCanvas(lCurForm.Image, lCurForm.Canvas, Width, Height, clfRGBA32, pixels); UpdateControlLazImageAndCanvas(lCurForm.Image, lCurForm.Canvas, Width, Height, clfRGBA32, pixels, True, False);
struct.hdc := HDC(lCurForm.Canvas); struct.hdc := HDC(lCurForm.Canvas);

View File

@ -48,7 +48,7 @@ procedure HideForm(ACDForm: TCDNonNativeForm);
procedure UpdateControlLazImageAndCanvas(var AImage: TLazIntfImage; procedure UpdateControlLazImageAndCanvas(var AImage: TLazIntfImage;
var ACanvas: TLazCanvas; AWidth, AHeight: Integer; AFormat: TUpdateLazImageFormat; var ACanvas: TLazCanvas; AWidth, AHeight: Integer; AFormat: TUpdateLazImageFormat;
AData: Pointer = nil); AData: Pointer = nil; AForceUpdate: Boolean = False; AFreeImageOnUpdate: Boolean = True);
procedure RenderChildWinControls(var AImage: TLazIntfImage; procedure RenderChildWinControls(var AImage: TLazIntfImage;
var ACanvas: TLazCanvas; ACDControlsList: TFPList); var ACanvas: TLazCanvas; ACDControlsList: TFPList);
//procedure RenderWinControl(var AImage: TLazIntfImage; //procedure RenderWinControl(var AImage: TLazIntfImage;
@ -128,9 +128,10 @@ begin
NonNativeForms.Move(lCurIndex, 0); NonNativeForms.Move(lCurIndex, 0);
end; end;
// If AForceUpdate=True then it will update even if the width and height remain the same
procedure UpdateControlLazImageAndCanvas(var AImage: TLazIntfImage; procedure UpdateControlLazImageAndCanvas(var AImage: TLazIntfImage;
var ACanvas: TLazCanvas; AWidth, AHeight: Integer; AFormat: TUpdateLazImageFormat; var ACanvas: TLazCanvas; AWidth, AHeight: Integer; AFormat: TUpdateLazImageFormat;
AData: Pointer = nil); AData: Pointer = nil; AForceUpdate: Boolean = False; AFreeImageOnUpdate: Boolean = True);
var var
lRawImage: TRawImage; lRawImage: TRawImage;
lPixelSize: Byte; lPixelSize: Byte;
@ -140,9 +141,10 @@ begin
[PtrInt(AImage), PtrInt(ACanvas)])); [PtrInt(AImage), PtrInt(ACanvas)]));
{$ENDIF} {$ENDIF}
// Check if the image needs update // Check if the image needs update
if (AImage = nil) or (AWidth <> AImage.Width) or (AHeight <> AImage.Height) then if (AImage = nil) or (AWidth <> AImage.Width) or (AHeight <> AImage.Height)
or AForceUpdate then
begin begin
if (AImage <> nil) then AImage.Free; if (AImage <> nil) and AFreeImageOnUpdate then AImage.Free;
lRawImage.Init; lRawImage.Init;
case AFormat of case AFormat of