fixed win32 painting and started creating bitmaps from rawimages

git-svn-id: trunk@4355 -
This commit is contained in:
mattias 2003-07-02 15:56:15 +00:00
parent 418b60a004
commit fb7551ba76
11 changed files with 301 additions and 150 deletions

View File

@ -149,11 +149,18 @@ begin
SendMsgToInterface:=@IntSendMessage3; SendMsgToInterface:=@IntSendMessage3;
end; end;
function TInterfaceBase.CreateBitmap(Width, Height: Integer; Planes, BitCount: Longint; BitmapBits: Pointer): HBITMAP; function TInterfaceBase.CreateBitmap(Width, Height: Integer;
Planes, BitCount: Longint; BitmapBits: Pointer): HBITMAP;
begin begin
Result := 0; Result := 0;
end; end;
function TInterfaceBase.CreateBitmapFromRawImage(const RawImage: TRawImage;
var Bitmap, MaskBitmap: HBitmap): boolean;
begin
Result := false;
end;
function TInterfaceBase.CreateDIBitmap(DC: HDC; function TInterfaceBase.CreateDIBitmap(DC: HDC;
var InfoHeader: TBitmapInfoHeader; var InfoHeader: TBitmapInfoHeader;
dwUsage: DWORD; InitBits: PChar; var InitInfo: TBitmapInfo; dwUsage: DWORD; InitBits: PChar; var InitInfo: TBitmapInfo;
@ -1768,6 +1775,9 @@ end;
{ ============================================================================= { =============================================================================
$Log$ $Log$
Revision 1.94 2003/07/02 15:56:15 mattias
fixed win32 painting and started creating bitmaps from rawimages
Revision 1.93 2003/07/02 10:02:51 mattias Revision 1.93 2003/07/02 10:02:51 mattias
fixed TPaintStruct fixed TPaintStruct

View File

@ -126,6 +126,12 @@ begin
BitmapBits); BitmapBits);
end; end;
function CreateBitmapFromRawImage(const RawImage: TRawImage;
var Bitmap, MaskBitmap: HBitmap): boolean;
begin
Result := InterfaceObject.CreateBitmapFromRawImage(RawImage,Bitmap,MaskBitmap);
end;
function CreateDIBitmap(DC: HDC; var InfoHeader: TBitmapInfoHeader; function CreateDIBitmap(DC: HDC; var InfoHeader: TBitmapInfoHeader;
dwUsage: DWORD; InitBits: PChar; var InitInfo: TBitmapInfo; dwUsage: DWORD; InitBits: PChar; var InitInfo: TBitmapInfo;
wUsage: UINT): HBITMAP; wUsage: UINT): HBITMAP;
@ -1623,6 +1629,9 @@ end;
{ ============================================================================= { =============================================================================
$Log$ $Log$
Revision 1.88 2003/07/02 15:56:15 mattias
fixed win32 painting and started creating bitmaps from rawimages
Revision 1.87 2003/07/02 10:02:51 mattias Revision 1.87 2003/07/02 10:02:51 mattias
fixed TPaintStruct fixed TPaintStruct

View File

@ -61,6 +61,7 @@ function ClipboardRegisterFormat(const AMimeType: string): TClipboardFormat; {$I
Function CombineRgn(Dest, Src1, Src2 : HRGN; fnCombineMode : Longint) : Longint; {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF} Function CombineRgn(Dest, Src1, Src2 : HRGN; fnCombineMode : Longint) : Longint; {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF}
function ComboBoxDropDown(Handle: HWND; DropDown: boolean): boolean; {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF} function ComboBoxDropDown(Handle: HWND; DropDown: boolean): boolean; {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF}
function CreateBitmap(Width, Height: Integer; Planes, BitCount: Longint; BitmapBits: Pointer): HBITMAP; {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF} function CreateBitmap(Width, Height: Integer; Planes, BitCount: Longint; BitmapBits: Pointer): HBITMAP; {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF}
function CreateBitmapFromRawImage(const RawImage: TRawImage; var Bitmap, MaskBitmap: HBitmap): boolean; {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF}
function CreateBrushIndirect(const LogBrush: TLogBrush): HBRUSH; {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF} function CreateBrushIndirect(const LogBrush: TLogBrush): HBRUSH; {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF}
function CreateCaret(Handle: HWND; Bitmap: hBitmap; width, Height: Integer): Boolean; {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF} function CreateCaret(Handle: HWND; Bitmap: hBitmap; width, Height: Integer): Boolean; {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF}
function CreateCompatibleBitmap(DC: HDC; Width, Height: Integer): HBITMAP; {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF} function CreateCompatibleBitmap(DC: HDC; Width, Height: Integer): HBITMAP; {$IFDEF IF_BASE_MEMBER}virtual;{$ENDIF}
@ -386,6 +387,9 @@ procedure RaiseLastOSError;
{ ============================================================================= { =============================================================================
$Log$ $Log$
Revision 1.81 2003/07/02 15:56:15 mattias
fixed win32 painting and started creating bitmaps from rawimages
Revision 1.80 2003/07/02 10:02:51 mattias Revision 1.80 2003/07/02 10:02:51 mattias
fixed TPaintStruct fixed TPaintStruct

View File

@ -2243,7 +2243,7 @@ begin
begin begin
if not (csCustomPaint in ControlState) and (ControlCount = 0) then if not (csCustomPaint in ControlState) and (ControlCount = 0) then
begin begin
// no inherited method to call... DefaultHandler(Msg);
end end
else else
PaintHandler(Msg); PaintHandler(Msg);
@ -2885,6 +2885,9 @@ end;
{ ============================================================================= { =============================================================================
$Log$ $Log$
Revision 1.150 2003/07/02 15:56:15 mattias
fixed win32 painting and started creating bitmaps from rawimages
Revision 1.149 2003/06/30 16:39:40 mattias Revision 1.149 2003/06/30 16:39:40 mattias
clean up clean up

View File

@ -155,6 +155,8 @@ type
BitSize : Longint; Bits: Pointer; var BitInfo: BitmapInfo; Usage: UINT; DIB : Boolean): Integer;virtual; BitSize : Longint; Bits: Pointer; var BitInfo: BitmapInfo; Usage: UINT; DIB : Boolean): Integer;virtual;
function GetWindowRawImageDescription(GDKWindow: PGdkWindow; function GetWindowRawImageDescription(GDKWindow: PGdkWindow;
Desc: PRawImageDescription): boolean; Desc: PRawImageDescription): boolean;
function GetRawImageFromGdkWindow(GDKWindow: PGdkWindow;
const SrcRect: TRect; var NewRawImage: TRawImage): boolean;
// RC file // RC file
procedure SetRCFilename(const AValue: string);virtual; procedure SetRCFilename(const AValue: string);virtual;
@ -347,6 +349,9 @@ end.
{ ============================================================================= { =============================================================================
$Log$ $Log$
Revision 1.134 2003/07/02 15:56:15 mattias
fixed win32 painting and started creating bitmaps from rawimages
Revision 1.133 2003/07/02 10:02:51 mattias Revision 1.133 2003/07/02 10:02:51 mattias
fixed TPaintStruct fixed TPaintStruct

View File

@ -1905,7 +1905,7 @@ begin
Desc^.BluePrec:=Visual^.blue_prec; Desc^.BluePrec:=Visual^.blue_prec;
Desc^.BlueShift:=Visual^.blue_shift; Desc^.BlueShift:=Visual^.blue_shift;
Desc^.AlphaMask:=true; Desc^.AlphaMask:=true;
Desc^.AlphaPrec:=1; Desc^.AlphaPrec:=0;
Desc^.AlphaShift:=0; Desc^.AlphaShift:=0;
// AlphaBitsPerPixel and AlphaLineEnd // AlphaBitsPerPixel and AlphaLineEnd
Desc^.AlphaBitsPerPixel:=Desc^.AlphaPrec; Desc^.AlphaBitsPerPixel:=Desc^.AlphaPrec;
@ -1941,6 +1941,97 @@ begin
Result:=true; Result:=true;
end; end;
function TgtkObject.GetRawImageFromGdkWindow(GDKWindow: PGdkWindow;
const SrcRect: TRect; var NewRawImage: TRawImage): boolean;
var
ARect: TRect;
MaxRect: TRect;
SourceRect: TRect;
AnImage: PGdkImage;
{y: Integer;
x: Integer;
AColor: guint;
i: Integer;}
begin
Result:=false;
FillChar(NewRawImage,SizeOf(NewRawImage),0);
if GdkWindow=nil then
RaiseGDBException('TgtkObject.GetRawImageFromGdkWindow');
// get raw image description
writeln('TgtkObject.GetRawImageFromGdkWindow A GdkWindow=',HexStr(Cardinal(GdkWindow),8));
if not GetWindowRawImageDescription(GdkWindow,@NewRawImage.Description) then
exit;
writeln('TgtkObject.GetRawImageFromGdkWindow B ');
// get intersection
ARect:=SrcRect;
writeln('TgtkObject.GetRawImageFromGdkWindow D ARect=',ARect.Left,',',ARect.Top,',',ARect.Right,',',ARect.Bottom,' DevW=',NewRawImage.Description.Width,' DevH=',NewRawImage.Description.Height);
MaxRect:=Rect(0,0,NewRawImage.Description.Width,
NewRawImage.Description.Height);
SourceRect:=ARect;
IntersectRect(SourceRect,ARect,MaxRect);
writeln('TgtkObject.GetRawImageFromGdkWindow E SourceRect=',SourceRect.Left,',',SourceRect.Top,',',SourceRect.Right,',',SourceRect.Bottom);
NewRawImage.Description.Width:=SourceRect.Right-SourceRect.Left;
NewRawImage.Description.Height:=SourceRect.Bottom-SourceRect.Top;
writeln('TgtkObject.GetRawImageFromGdkWindow F ',SourceRect.Left,',',SourceRect.Top,',',SourceRect.Right,',',SourceRect.Bottom,' GDKWindow=',HexStr(Cardinal(GDkWindow),8));
if (NewRawImage.Description.Width=0) or (NewRawImage.Description.Height=0)
then exit;
// get gdk_image
AnImage:=gdk_image_get(GDKWindow,SourceRect.Left,SourceRect.Top,
NewRawImage.Description.Width,
NewRawImage.Description.Height);
if AnImage=nil then begin
writeln('WARNING: TgtkObject.GetRawImageFromGdkWindow gdk_image_get failed');
exit;
end;
try
// consistency checks
if NewRawImage.Description.Depth<>AnImage^.Depth then
RaiseGDBException('NewRawImage.Description.Depth<>AnImage^.Depth');
if NewRawImage.Description.BitsPerPixel<>AnImage^.bpp then
RaiseGDBException('NewRawImage.Description.BitsPerPixel<>AnImage^.bpp');
NewRawImage.DataSize:=(NewRawImage.Description.BitsPerPixel shr 3)
*AnImage^.Width*AnImage^.Height;
writeln('TgtkObject.GetRawImageFromGdkWindow G Width=',AnImage^.Width,' Height=',AnImage^.Height,' BitsPerPixel=',NewRawImage.Description.BitsPerPixel,' bpl=',AnImage^.bpl);
if NewRawImage.DataSize<>AnImage^.bpl*AnImage^.Height then
RaiseGDBException('NewRawImage.DataSize<>AnImage^.bpl*AnImage^.Height');
// copy data
NewRawImage.Description.Width:=AnImage^.Width;
NewRawImage.Description.Height:=AnImage^.Height;
{NewRawImage.Description.BitsPerPixel:=SizeOf(GUInt)*8;
NewRawImage.DataSize:=AnImage^.Width*AnImage^.Height*SizeOf(GUInt);
ReAllocMem(NewRawImage.Data,NewRawImage.DataSize);
i:=0;
for y:=0 to AnImage^.Height-1 do begin
for x:=0 to AnImage^.Width-1 do begin
AColor:=gdk_image_get_pixel(AnImage,x,y);
pGuint(NewRawImage.Data)[i]:=AColor;
if (y=5) then write(' ',HexStr(Cardinal(AColor),8),'@',HexStr(Cardinal(@pGuint(NewRawImage.Data)[i]),8));
inc(i);
end;
end;
writeln('');}
ReAllocMem(NewRawImage.Data,NewRawImage.DataSize);
if NewRawImage.DataSize>0 then
System.Move(AnImage^.Mem^,NewRawImage.Data^,NewRawImage.DataSize);
writeln('TgtkObject.GetRawImageFromGdkWindow H ',
' Width=',NewRawImage.Description.Width,
' Height=',NewRawImage.Description.Height,
' Depth=',NewRawImage.Description.Depth,
' DataSize=',NewRawImage.DataSize);
finally
gdk_image_destroy(AnImage);
end;
Result:=true;
end;
procedure TGtkObject.ListViewChangeItem(TheListView: TObject; Index: integer); procedure TGtkObject.ListViewChangeItem(TheListView: TObject; Index: integer);
var var
ListView: TListView; ListView: TListView;
@ -7791,6 +7882,9 @@ end;
{ ============================================================================= { =============================================================================
$Log$ $Log$
Revision 1.388 2003/07/02 15:56:15 mattias
fixed win32 painting and started creating bitmaps from rawimages
Revision 1.387 2003/07/02 10:02:51 mattias Revision 1.387 2003/07/02 10:02:51 mattias
fixed TPaintStruct fixed TPaintStruct

View File

@ -827,6 +827,69 @@ begin
end; end;
{------------------------------------------------------------------------------
function TgtkObject.CreateBitmapFromRawImage(const RawImage: TRawImage;
var Bitmap, MaskBitmap: HBitmap): Boolean;
------------------------------------------------------------------------------}
function TgtkObject.CreateBitmapFromRawImage(const RawImage: TRawImage;
var Bitmap, MaskBitmap: HBitmap): boolean;
var
GdiObject: PGDIObject;
DefGDkWindow: PGdkWindow;
fg, bg: TGdkColor;
begin
Result:=false;
Bitmap:=0;
MaskBitmap:=0;
writeln('TgtkObject.CreateBitmapFromRawImage A ',
' Depth=',RawImage.Description.Depth,
' Width=',RawImage.Description.Width,
' Height=',RawImage.Description.Height,
' Data=',HexStr(Cardinal(RawImage.Data),8),
' DataSize=',RawImage.DataSize,
' Mask=',HexStr(Cardinal(RawImage.Mask),8),
' MaskSize=',RawImage.MaskSize,
' Palette=',HexStr(Cardinal(RawImage.Palette),8),
' PaletteSize=',RawImage.PaletteSize,
'');
// ToDo: check description
DefGdkWindow := nil;
gdk_color_white(gdk_colormap_get_system, @fg);
gdk_color_black(gdk_colormap_get_system, @bg);
GdiObject := NewGDIObject(gdiBitmap);
GdiObject^.GDIBitmapType := gbPixmap;
if RawImage.Data<>nil then begin
GdiObject^.GDIPixmapObject :=
gdk_pixmap_create_from_data(DefGdkWindow,PGChar(RawImage.Data),
RawImage.Description.Width, RawImage.Description.Height,
RawImage.Description.Depth, @fg,@bg);
end else
GdiObject^.GDIBitmapObject :=
gdk_pixmap_new(DefGdkWindow,
RawImage.Description.Width, RawImage.Description.Height,
RawImage.Description.Depth);
GdiObject^.Visual := gdk_window_get_visual(GdiObject^.GDIBitmapObject);
Bitmap:=HBITMAP(GdiObject);
If (RawImage.Mask<>nil) then begin
GdiObject := NewGDIObject(gdiBitmap);
GdiObject^.GDIBitmapType := gbBitmap;
GdiObject^.GDIBitmapObject :=
gdk_bitmap_create_from_data(DefGdkWindow,PGChar(RawImage.Mask),
RawImage.Description.Width, RawImage.Description.Height);
GdiObject^.Visual := gdk_window_get_visual(GdiObject^.GDIPixmapObject);
MaskBitmap:=HBITMAP(GdiObject);
end;
Result:=true;
end;
{------------------------------------------------------------------------------ {------------------------------------------------------------------------------
Function: CreateBrushIndirect Function: CreateBrushIndirect
Params: none Params: none
@ -4085,114 +4148,21 @@ function TgtkObject.GetRawImageFromDevice(SrcDC: HDC; const SrcRect: TRect;
var var
DCOrigin: TPoint; DCOrigin: TPoint;
ARect: TRect; ARect: TRect;
MaxRect: TRect;
SourceRect: TRect;
AnImage: PGdkImage;
GDKWindow: PGdkWindow; GDKWindow: PGdkWindow;
{y: Integer;
x: Integer;
AColor: guint;
i: Integer;}
GDKColor: TGDKColor;
GdkColorContext: PGdkColorContext;
PixColor: Integer;
begin begin
Result:=false;
if not IsValidDC(SrcDC) then begin if not IsValidDC(SrcDC) then begin
writeln('WARNING: TgtkObject.GetRawImageFromDevice invalid SrcDC'); writeln('WARNING: TgtkObject.GetRawImageFromDevice invalid SrcDC');
Result:=false;
exit; exit;
end; end;
FillChar(NewRawImage,SizeOf(NewRawImage),0);
// get raw image description
writeln('TgtkObject.GetRawImageFromDevice A SrcDC=',HexStr(Cardinal(SrcDC),8));
Result := GetDeviceRawImageDescription(SrcDC,@NewRawImage.Description);
if not Result then exit;
writeln('TgtkObject.GetRawImageFromDevice B ');
// get intersection
GdkWindow:=nil;
DCOrigin:=GetDCOffset(TDeviceContext(SrcDC)); DCOrigin:=GetDCOffset(TDeviceContext(SrcDC));
writeln('TgtkObject.GetRawImageFromDevice C DCOrigin=',DCOrigin.X,',',DCOrigin.Y,' SrcRect=',SrcRect.Left,',',SrcRect.Top,',',SrcRect.Right,',',SrcRect.Bottom); writeln('TgtkObject.GetRawImageFromDevice A DCOrigin=',DCOrigin.X,',',DCOrigin.Y,' SrcRect=',SrcRect.Left,',',SrcRect.Top,',',SrcRect.Right,',',SrcRect.Bottom);
ARect:=SrcRect; ARect:=SrcRect;
OffSetRect(ARect,DCOrigin.x,DCOrigin.y); OffSetRect(ARect,DCOrigin.x,DCOrigin.y);
writeln('TgtkObject.GetRawImageFromDevice D ARect=',ARect.Left,',',ARect.Top,',',ARect.Right,',',ARect.Bottom,' DevW=',NewRawImage.Description.Width,' DevH=',NewRawImage.Description.Height);
MaxRect:=Rect(0,0,NewRawImage.Description.Width,
NewRawImage.Description.Height);
SourceRect:=ARect;
IntersectRect(SourceRect,ARect,MaxRect);
writeln('TgtkObject.GetRawImageFromDevice E SourceRect=',SourceRect.Left,',',SourceRect.Top,',',SourceRect.Right,',',SourceRect.Bottom);
GDKWindow:=PGdkWindow(TDeviceContext(SrcDC).Drawable); GDKWindow:=PGdkWindow(TDeviceContext(SrcDC).Drawable);
NewRawImage.Description.Width:=SourceRect.Right-SourceRect.Left; Result:=GetRawImageFromGdkWindow(GDKWindow,ARect,NewRawImage);
NewRawImage.Description.Height:=SourceRect.Bottom-SourceRect.Top;
writeln('TgtkObject.GetRawImageFromDevice F ',SourceRect.Left,',',SourceRect.Top,',',SourceRect.Right,',',SourceRect.Bottom,' GDKWindow=',HexStr(Cardinal(GDkWindow),8));
if (NewRawImage.Description.Width=0) or (NewRawImage.Description.Height=0)
then exit;
// get gdk_image
AnImage:=gdk_image_get(GDKWindow,SourceRect.Left,SourceRect.Top,
NewRawImage.Description.Width,
NewRawImage.Description.Height);
if AnImage=nil then begin
writeln('WARNING: TgtkObject.GetRawImageFromDevice gdk_image_get failed');
exit;
end;
try
// consistency checks
if NewRawImage.Description.Depth<>AnImage^.Depth then
RaiseGDBException('NewRawImage.Description.Depth<>AnImage^.Depth');
if NewRawImage.Description.BitsPerPixel<>AnImage^.bpp then
RaiseGDBException('NewRawImage.Description.BitsPerPixel<>AnImage^.bpp');
NewRawImage.DataSize:=(NewRawImage.Description.BitsPerPixel shr 3)
*AnImage^.Width*AnImage^.Height;
writeln('TgtkObject.GetRawImageFromDevice F2 Width=',AnImage^.Width,' Height=',AnImage^.Height,' BitsPerPixel=',NewRawImage.Description.BitsPerPixel,' bpl=',AnImage^.bpl);
if NewRawImage.DataSize<>AnImage^.bpl*AnImage^.Height then
RaiseGDBException('NewRawImage.DataSize<>AnImage^.bpl*AnImage^.Height');
// copy data
NewRawImage.Description.Width:=AnImage^.Width;
NewRawImage.Description.Height:=AnImage^.Height;
{NewRawImage.Description.BitsPerPixel:=SizeOf(GUInt)*8;
NewRawImage.DataSize:=AnImage^.Width*AnImage^.Height*SizeOf(GUInt);
ReAllocMem(NewRawImage.Data,NewRawImage.DataSize);
i:=0;
for y:=0 to AnImage^.Height-1 do begin
for x:=0 to AnImage^.Width-1 do begin
AColor:=gdk_image_get_pixel(AnImage,x,y);
pGuint(NewRawImage.Data)[i]:=AColor;
if (y=5) then write(' ',HexStr(Cardinal(AColor),8),'@',HexStr(Cardinal(@pGuint(NewRawImage.Data)[i]),8));
inc(i);
end;
end;
writeln('');}
ReAllocMem(NewRawImage.Data,NewRawImage.DataSize);
if NewRawImage.DataSize>0 then
System.Move(AnImage^.Mem^,NewRawImage.Data^,NewRawImage.DataSize);
writeln('TgtkObject.GetRawImageFromDevice G W=',NewRawImage.Description.Width,' H=',NewRawImage.Description.Height,' Depth=',NewRawImage.Description.Depth,' DataSize=',NewRawImage.DataSize);
finally
gdk_image_destroy(AnImage);
end;
AnImage := gdk_image_get(GDKWindow,5,5,1,1);
GDKColor.Pixel := gdk_image_get_pixel(AnImage,0,0);
writeln('TgtkObject.GetRawImageFromDevice H ',HexStr(Cardinal(GDKColor.Pixel),8));
gdk_image_destroy(AnImage);
GdkColorContext:=
gdk_color_context_new(gdk_visual_get_system,gdk_colormap_get_system);
gdk_color_context_query_color(GdkColorContext,@GDKColor);
gdk_color_context_free(GdkColorContext);
PixColor := TGDKColorToTColor(GDKColor);
writeln('TgtkObject.GetRawImageFromDevice I ',HexStr(Cardinal(PixColor),8));
Result:=true;
end; end;
{------------------------------------------------------------------------------ {------------------------------------------------------------------------------
@ -4206,7 +4176,7 @@ var
GdkPixmap: PGdkPixmap; GdkPixmap: PGdkPixmap;
GDIMaskImg: PGDIObject; GDIMaskImg: PGDIObject;
GdkMaskBitmap: PGdkPixmap; GdkMaskBitmap: PGdkPixmap;
MaskDescription: TRawImageDescription; MaskRawImage: TRawImage;
begin begin
Result:=false; Result:=false;
FillChar(NewRawImage,SizeOf(NewRawImage),0); FillChar(NewRawImage,SizeOf(NewRawImage),0);
@ -4220,7 +4190,7 @@ begin
exit; exit;
end; end;
// get Bitmap gdkwindow // get rawimage for Bitmap
GDIImg:=PGDIObject(SrcBitmap); GDIImg:=PGDIObject(SrcBitmap);
GdkPixmap:=nil; GdkPixmap:=nil;
case GDIImg^.GDIBitmapType of case GDIImg^.GDIBitmapType of
@ -4230,42 +4200,51 @@ begin
writeln('WARNING: [TgtkObject.GetRawImageFromBitmap] GDI_RGBImage not implemented'); writeln('WARNING: [TgtkObject.GetRawImageFromBitmap] GDI_RGBImage not implemented');
exit; exit;
end; end;
writeln('WARNING: [TgtkObject.GetRawImageFromBitmap] A GdkPixmap=',HexStr(Cardinal(GdkPixmap),8));
if not GetRawImageFromGdkWindow(PGdkWindow(GdkPixmap),SrcRect,NewRawImage)
then exit;
// get MaskBitmap gdkwindow // the bitmap is ready. If there is no mask the rawimage is complete
GDIMaskImg:=PGDIObject(SrcBitmap); if SrcMaskBitmap=0 then begin
Result:=true;
exit;
end;
// get rawimage for MaskBitmap
GDIMaskImg:=PGDIObject(SrcMaskBitmap);
GdkMaskBitmap:=nil; GdkMaskBitmap:=nil;
if GDIMaskImg<>nil then begin
case GDIMaskImg^.GDIBitmapType of case GDIMaskImg^.GDIBitmapType of
gbBitmap: GdkMaskBitmap:=PGdkPixmap(GDIMaskImg^.GDIBitmapObject); gbBitmap: GdkMaskBitmap:=PGdkPixmap(GDIMaskImg^.GDIBitmapObject);
else else
writeln('WARNING: [TgtkObject.GetRawImageFromBitmap] invalid MaskBitmap'); writeln('WARNING: [TgtkObject.GetRawImageFromBitmap] invalid MaskBitmap');
exit; exit;
end; end;
end; if not GetRawImageFromGdkWindow(PGdkWindow(GdkMaskBitmap),SrcRect,
MaskRawImage)
then exit;
// get raw image description for Bitmap // check if mask is compatible
Result:=GetWindowRawImageDescription(PGdkWindow(GdkPixmap), if (MaskRawImage.Description.Width<>NewRawImage.Description.Width)
@NewRawImage.Description); or (MaskRawImage.Description.Height<>NewRawImage.Description.Height) then begin
if not Result then exit;
// get raw image description for MaskBitmap
if GdkMaskBitmap<>nil then begin
Result:=GetWindowRawImageDescription(PGdkWindow(GdkMaskBitmap),
@MaskDescription);
if not Result then exit;
// check if mask compatible
if (MaskDescription.Width<>NewRawImage.Description.Width)
or (MaskDescription.Height<>NewRawImage.Description.Height) then begin
writeln('WARNING: [TgtkObject.GetRawImageFromBitmap] MaskBitmap has different Size than Bitmap'); writeln('WARNING: [TgtkObject.GetRawImageFromBitmap] MaskBitmap has different Size than Bitmap');
exit; exit;
end; end;
if (MaskDescription.Depth<>1) then begin if (MaskRawImage.Description.Depth<>1) then begin
writeln('WARNING: [TgtkObject.GetRawImageFromBitmap] MaskBitmap Depth<>1'); writeln('WARNING: [TgtkObject.GetRawImageFromBitmap] MaskBitmap Depth<>1');
exit; exit;
end; end;
if (MaskRawImage.Description.HasPalette) then begin
writeln('WARNING: [TgtkObject.GetRawImageFromBitmap] MaskBitmap HasPalette');
exit;
end; end;
// merge mask
if NewRawImage.Mask<>nil then FreeMem(NewRawImage.Mask);
NewRawImage.Mask:=MaskRawImage.Data;
NewRawImage.MaskSize:=MaskRawImage.DataSize;
NewRawImage.Description.AlphaMask:=true;
NewRawImage.Description.AlphaPrec:=MaskRawImage.Description.Depth;
NewRawImage.Description.AlphaShift:=0;
Result:=true; Result:=true;
end; end;
@ -8530,6 +8509,9 @@ end;
{ ============================================================================= { =============================================================================
$Log$ $Log$
Revision 1.256 2003/07/02 15:56:15 mattias
fixed win32 painting and started creating bitmaps from rawimages
Revision 1.255 2003/07/02 10:02:51 mattias Revision 1.255 2003/07/02 10:02:51 mattias
fixed TPaintStruct fixed TPaintStruct

View File

@ -48,6 +48,7 @@ function ClipboardRegisterFormat(const AMimeType: string): TClipboardFormat; ove
Function CombineRgn(Dest, Src1, Src2 : HRGN; fnCombineMode : Longint) : Longint; override; Function CombineRgn(Dest, Src1, Src2 : HRGN; fnCombineMode : Longint) : Longint; override;
function ComboBoxDropDown(Handle: HWND; DropDown: boolean): boolean; override; function ComboBoxDropDown(Handle: HWND; DropDown: boolean): boolean; override;
function CreateBitmap(Width, Height: Integer; Planes, BitCount: Longint; BitmapBits: Pointer): HBITMAP; override; function CreateBitmap(Width, Height: Integer; Planes, BitCount: Longint; BitmapBits: Pointer): HBITMAP; override;
function CreateBitmapFromRawImage(const RawImage: TRawImage; var Bitmap, MaskBitmap: HBitmap): boolean; override;
function CreateBrushIndirect(const LogBrush: TLogBrush): HBRUSH; override; function CreateBrushIndirect(const LogBrush: TLogBrush): HBRUSH; override;
function CreateCaret(Handle : HWND; Bitmap : hBitmap; width, Height : Integer) : Boolean; override; function CreateCaret(Handle : HWND; Bitmap : hBitmap; width, Height : Integer) : Boolean; override;
function CreateCompatibleBitmap(DC: HDC; Width, Height: Integer): HBITMAP; override; function CreateCompatibleBitmap(DC: HDC; Width, Height: Integer): HBITMAP; override;
@ -209,6 +210,9 @@ Procedure DeleteCriticalSection(var CritSection: TCriticalSection); Override;
{ ============================================================================= { =============================================================================
$Log$ $Log$
Revision 1.72 2003/07/02 15:56:15 mattias
fixed win32 painting and started creating bitmaps from rawimages
Revision 1.71 2003/07/02 10:02:51 mattias Revision 1.71 2003/07/02 10:02:51 mattias
fixed TPaintStruct fixed TPaintStruct

View File

@ -228,7 +228,7 @@ Procedure TWin32Object.SetLabel(Sender: TObject; Data: Pointer);
cbsize:=sizeof(MENUITEMINFO); cbsize:=sizeof(MENUITEMINFO);
{In Win32 Menu items that are created without a initial caption default to disabled, {In Win32 Menu items that are created without a initial caption default to disabled,
the next three lines are to counter that.} the next three lines are to counter that.}
fMask:=MIIM_STATE or MIIM_TYPE or MIIM_ID; fMask:=MIIM_STATE;
GetMenuItemInfo((Sender as TMenuItem).Parent.Handle, GetMenuItemInfo((Sender as TMenuItem).Parent.Handle,
(Sender as TMenuItem).Command, false, @MenuInfo); (Sender as TMenuItem).Command, false, @MenuInfo);
if (Sender as TMenuItem).Enabled then if (Sender as TMenuItem).Enabled then
@ -2672,6 +2672,9 @@ End;
{ {
$Log$ $Log$
Revision 1.65 2003/07/02 15:56:15 mattias
fixed win32 painting and started creating bitmaps from rawimages
Revision 1.64 2003/07/01 22:02:55 mattias Revision 1.64 2003/07/01 22:02:55 mattias
fixed formstyle and redrawing from Micha fixed formstyle and redrawing from Micha

View File

@ -100,6 +100,20 @@ Begin
Result := Windows.BitBlt(DestDC, X, Y, Width, Height, SrcDC, XSrc, YSrc, Rop); Result := Windows.BitBlt(DestDC, X, Y, Width, Height, SrcDC, XSrc, YSrc, Rop);
End; End;
{------------------------------------------------------------------------------
Method: BeginPaint
Params: Handle - Handle to window to begin painting in
PS - PAINTSTRUCT variable that will receive painting information.
Returns: A device context for the specified window if succesful otherwise nil
The BeginPaint function prepares the specified window for painting and fills
a PAINTSTRUCT structure with information about the painting.
------------------------------------------------------------------------------}
Function TWin32Object.BeginPaint(Handle : hwnd; var PS : TPaintStruct): hdc;
Begin
Result := Windows.BeginPaint(Handle, @PS);
End;
{------------------------------------------------------------------------------ {------------------------------------------------------------------------------
Method: BringWindowToTop Method: BringWindowToTop
Params: HWnd - The handle of the window Params: HWnd - The handle of the window
@ -844,6 +858,21 @@ Begin
Result := Windows.EnableScrollBar(Wnd, WSBFlags, WArrows); Result := Windows.EnableScrollBar(Wnd, WSBFlags, WArrows);
End; End;
{------------------------------------------------------------------------------
Method: EndPaint
Params: Handle - Handle to window
PS - PAINTSTRUCT variable with painting information
Returns: always nonzero.
The EndPaint function marks the end of painting in the specified window.
This function is required for each call to the BeginPaint function, but only
after painting is complete.
------------------------------------------------------------------------------}
Function TWin32Object.EndPaint(Handle : hwnd; var PS : TPaintStruct): Integer;
Begin
Result := Integer(Windows.EndPaint(Handle, @PS));
End;
{------------------------------------------------------------------------------ {------------------------------------------------------------------------------
Method: EnableWindow Method: EnableWindow
Params: HWnd - handle to window Params: HWnd - handle to window
@ -2237,24 +2266,24 @@ var
begin begin
{ An OS Compatible TCriticalSection needs to be defined} { An OS Compatible TCriticalSection needs to be defined}
If CritSection <> 0 then If CritSection <> 0 then
Try { Try
Crit := LPCRITICAL_SECTION(CritSection); Crit := LPCRITICAL_SECTION(CritSection);
Dispose(Crit); Dispose(Crit);
except except
CritSection := 0; CritSection := 0;
end; end;}
New(Crit); New(Crit);
Windows.InitializeCriticalSection(Crit^); Windows.InitializeCriticalSection(Crit^);
CritSection := Longint(Crit); CritSection := Longint(Crit);
end; end;
Procedure TWin32Object.EnterCriticalSection(var CritSection: TCriticalSection); Procedure TWin32Object.EnterCriticalSection(var CritSection: TCriticalSection);
var {var
Crit, Crit,
tmp : LPCRITICAL_SECTION; tmp : LPCRITICAL_SECTION;}
begin begin
{ An OS Compatible TCriticalSection needs to be defined} { An OS Compatible TCriticalSection needs to be defined}
New(Crit); { New(Crit);
If CritSection <> 0 then If CritSection <> 0 then
Try Try
Crit^ := LPCRITICAL_SECTION(CritSection)^; Crit^ := LPCRITICAL_SECTION(CritSection)^;
@ -2267,16 +2296,16 @@ begin
Windows.EnterCriticalSection(Crit^); Windows.EnterCriticalSection(Crit^);
tmp := LPCRITICAL_SECTION(CritSection); tmp := LPCRITICAL_SECTION(CritSection);
CritSection := Longint(Crit); CritSection := Longint(Crit);
Dispose(Tmp); Dispose(Tmp);}
end; end;
Procedure TWin32Object.LeaveCriticalSection(var CritSection: TCriticalSection); Procedure TWin32Object.LeaveCriticalSection(var CritSection: TCriticalSection);
var {var
Crit, Crit,
tmp : LPCRITICAL_SECTION; tmp : LPCRITICAL_SECTION;}
begin begin
{ An OS Compatible TCriticalSection needs to be defined} { An OS Compatible TCriticalSection needs to be defined}
New(Crit); { New(Crit);
If CritSection <> 0 then If CritSection <> 0 then
Try Try
Crit^ := LPCRITICAL_SECTION(CritSection)^; Crit^ := LPCRITICAL_SECTION(CritSection)^;
@ -2289,16 +2318,16 @@ begin
Windows.LeaveCriticalSection(Crit^); Windows.LeaveCriticalSection(Crit^);
tmp := LPCRITICAL_SECTION(CritSection); tmp := LPCRITICAL_SECTION(CritSection);
CritSection := Longint(Crit); CritSection := Longint(Crit);
Dispose(Tmp); Dispose(Tmp);}
end; end;
Procedure TWin32Object.DeleteCriticalSection(var CritSection: TCriticalSection); Procedure TWin32Object.DeleteCriticalSection(var CritSection: TCriticalSection);
var {var
Crit, Crit,
tmp : LPCRITICAL_SECTION; tmp : LPCRITICAL_SECTION;}
begin begin
{ An OS Compatible TCriticalSection needs to be defined} { An OS Compatible TCriticalSection needs to be defined}
New(Crit); { New(Crit);
If CritSection <> 0 then If CritSection <> 0 then
Try Try
Crit^ := LPCRITICAL_SECTION(CritSection)^; Crit^ := LPCRITICAL_SECTION(CritSection)^;
@ -2312,7 +2341,7 @@ begin
Dispose(Crit); Dispose(Crit);
tmp := LPCRITICAL_SECTION(CritSection); tmp := LPCRITICAL_SECTION(CritSection);
CritSection := 0; CritSection := 0;
Dispose(Tmp); Dispose(Tmp);}
end; end;
//##apiwiz##eps## // Do not remove //##apiwiz##eps## // Do not remove
@ -2325,6 +2354,9 @@ end;
{ ============================================================================= { =============================================================================
$Log$ $Log$
Revision 1.36 2003/07/02 15:56:15 mattias
fixed win32 painting and started creating bitmaps from rawimages
Revision 1.35 2003/06/28 16:20:19 mattias Revision 1.35 2003/06/28 16:20:19 mattias
fixed some win32 intf warnings fixed some win32 intf warnings

View File

@ -22,6 +22,7 @@
Function Arc(DC: HDC; X, Y, Width, Height, Angle1, Angle2: Integer): Boolean; Override; Function Arc(DC: HDC; X, Y, Width, Height, Angle1, Angle2: Integer): Boolean; Override;
function AngleChord(DC: HDC; x,y,width,height,angle1,angle2 : Integer): Boolean; override; function AngleChord(DC: HDC; x,y,width,height,angle1,angle2 : Integer): Boolean; override;
Function BeginPaint(Handle : hwnd; var PS : TPaintStruct): hdc; Override;
Function BitBlt(DestDC: HDC; X, Y, Width, Height: Integer; SrcDC: HDC; XSrc, YSrc: Integer; Rop: DWORD): Boolean; Override; Function BitBlt(DestDC: HDC; X, Y, Width, Height: Integer; SrcDC: HDC; XSrc, YSrc: Integer; Rop: DWORD): Boolean; Override;
Function BringWindowToTop(HWnd: HWND): Boolean; Override; Function BringWindowToTop(HWnd: HWND): Boolean; Override;
@ -68,6 +69,7 @@ Function EmptyClipBoard: Boolean;
Function EnableMenuItem(HndMenu: HMENU; UIDEnableItem: Integer; BEnable: Boolean): Boolean; Override; Function EnableMenuItem(HndMenu: HMENU; UIDEnableItem: Integer; BEnable: Boolean): Boolean; Override;
Function EnableScrollBar(Wnd: HWND; WSBFlags, WArrows: Cardinal): Boolean; Override; Function EnableScrollBar(Wnd: HWND; WSBFlags, WArrows: Cardinal): Boolean; Override;
Function EnableWindow(HWnd: HWND; BEnable: Boolean): Boolean; Override; Function EnableWindow(HWnd: HWND; BEnable: Boolean): Boolean; Override;
Function EndPaint(Handle : hwnd; var PS : TPaintStruct): Integer; Override;
Function ExcludeClipRect(dc: hdc; Left, Top, Right, Bottom : Integer) : Integer; override; Function ExcludeClipRect(dc: hdc; Left, Top, Right, Bottom : Integer) : Integer; override;
Function ExtTextOut(DC: HDC; X, Y: Integer; Options: LongInt; Rect: PRect; Str: PChar; Count: LongInt; Dx: PInteger): Boolean; Override; Function ExtTextOut(DC: HDC; X, Y: Integer; Options: LongInt; Rect: PRect; Str: PChar; Count: LongInt; Dx: PInteger): Boolean; Override;
function ExtSelectClipRGN(dc: hdc; rgn : hrgn; Mode : Longint) : Integer; override; function ExtSelectClipRGN(dc: hdc; rgn : hrgn; Mode : Longint) : Integer; override;
@ -173,6 +175,9 @@ Procedure DeleteCriticalSection(var CritSection: TCriticalSection); Override;
{ ============================================================================= { =============================================================================
$Log$ $Log$
Revision 1.24 2003/07/02 15:56:15 mattias
fixed win32 painting and started creating bitmaps from rawimages
Revision 1.23 2003/03/25 08:12:39 mattias Revision 1.23 2003/03/25 08:12:39 mattias
patch from Martin Smat for menu items and default messages patch from Martin Smat for menu items and default messages