diff --git a/components/thtmlport/package/htmlmisc.pas b/components/thtmlport/package/htmlmisc.pas index 4fecca27e..b30ef69e4 100755 --- a/components/thtmlport/package/htmlmisc.pas +++ b/components/thtmlport/package/htmlmisc.pas @@ -790,7 +790,7 @@ begin {$IFDEF MSWINDOWS} Result := Windows.GetMapMode(DC); {$ELSE} - WriteLn('GetMapMode not implemented yet'); +// WriteLn('GetMapMode not implemented yet'); {$ENDIF} end; @@ -799,7 +799,7 @@ begin {$IFDEF MSWINDOWS} Result := Windows.SetMapMode(DC, p2); {$ELSE} - WriteLn('SetMapMode not implemented yet'); +// WriteLn('SetMapMode not implemented yet'); {$ENDIF} end; diff --git a/components/thtmlport/package/htmlun2.pas b/components/thtmlport/package/htmlun2.pas index 2c3f268c9..a49290696 100755 --- a/components/thtmlport/package/htmlun2.pas +++ b/components/thtmlport/package/htmlun2.pas @@ -32,7 +32,7 @@ unit HTMLUn2; interface uses - {$IFNDEF LCL} Windows, Messages, {$ELSE} LclIntf, LMessages, Types, LclType, LResources, HtmlMisc, {$ENDIF} + {$IFNDEF LCL} Windows, Messages, {$ELSE} LclIntf, LMessages, Types, LclType, LResources, IntfGraphics, HtmlMisc, {$ENDIF} SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Clipbrd, StyleUn, GDIPL2A; @@ -2371,6 +2371,11 @@ var BM: Windows.TBitmap; {$ELSE} BM: LclType.BITMAP; +{$ENDIF} +{$IFNDEF MSWINDOWS} + ColorMask : TBitmap; + ColorMaskIntfImg : TLazIntfImage; + MaskIntfImg : TLazIntfImage; {$ENDIF} Image: TBitmap; @@ -2393,7 +2398,24 @@ try { create a bitmap for each DC} { monochrome DC} +{$IFDEF MSWINDOWS} bmAndBack := CreateBitmap (SrcSize.x, SrcSize.y, 1, 1, nil); +{$ELSE} + // LCL port: Both Carbon and GTK2 widgetsets have trouble with + // monochrome bitmaps, so create bitmap with same color format + // for mask inverse and also convert mask to color format. + bmAndBack := CreateCompatibleBitmap(ahdc, SrcSize.x, SrcSize.y); + ColorMask := TBitmap.Create; + ColorMask.Width := Mask.Width; + ColorMask.Height := Mask.Height; + ColorMask.PixelFormat := Image.PixelFormat; + ColorMaskIntfImg := ColorMask.CreateIntfImage; + MaskIntfImg := Mask.CreateIntfImage; + ColorMaskIntfImg.CopyPixels(MaskIntfImg); + ColorMask.LoadFromIntfImage(ColorMaskIntfImg); + ColorMaskIntfImg.Free; + MaskIntfImg.Free; +{$ENDIF} bmSave := CreateCompatibleBitmap (ahdc, DestSize.x, DestSize.y); GetObject(bmSave, SizeOf(BM), @BM); @@ -2409,7 +2431,11 @@ try { set proper mapping mode} SetMapMode (hdcImage, GetMapMode (ahdc)); +{$IFDEF MSWINDOWS} bmObjectOld := SelectObject(hdcMask, Mask.Handle); +{$ELSE} + bmObjectOld := SelectObject(hdcMask, ColorMask.Handle); +{$ENDIF} { create the inverse of the object mask} BitBlt (hdcInvMask, 0, 0, SrcSize.x, SrcSize.y, hdcMask, 0, 0, NOTSRCCOPY); @@ -2448,6 +2474,9 @@ try end; DeleteObject(bmSave); DeleteDC (hdcImage); +{$IFNDEF MSWINDOWS} + ColorMask.Free; +{$ENDIF} finally Image.Free; end;