mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-25 09:00:21 +02:00
LCL-GTK3: Update for swapped R/B colors. Issue #36374, patch from Anton Kavalenka.
git-svn-id: trunk@62842 -
This commit is contained in:
parent
b2501a2b9a
commit
01082a807d
@ -191,9 +191,9 @@ begin
|
|||||||
Desc.BluePrec := 8;
|
Desc.BluePrec := 8;
|
||||||
|
|
||||||
Desc.AlphaShift := 24;
|
Desc.AlphaShift := 24;
|
||||||
Desc.RedShift := 16;
|
Desc.RedShift := 0;
|
||||||
Desc.GreenShift := 8;
|
Desc.GreenShift := 8;
|
||||||
// Desc.BlueShift := 0;
|
Desc.BlueShift := 16;
|
||||||
|
|
||||||
// Qt wants dword-aligned data
|
// Qt wants dword-aligned data
|
||||||
Desc.MaskLineEnd := rileDWordBoundary;
|
Desc.MaskLineEnd := rileDWordBoundary;
|
||||||
|
@ -319,9 +319,9 @@ begin
|
|||||||
ADesc.BluePrec := 8;
|
ADesc.BluePrec := 8;
|
||||||
|
|
||||||
ADesc.AlphaShift := 24;
|
ADesc.AlphaShift := 24;
|
||||||
ADesc.RedShift := 16;
|
ADesc.RedShift := 0;
|
||||||
ADesc.GreenShift := 8;
|
ADesc.GreenShift := 8;
|
||||||
ADesc.BlueShift := 0;
|
ADesc.BlueShift := 16;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
(*
|
(*
|
||||||
|
@ -1119,6 +1119,7 @@ constructor TGtk3DeviceContext.Create(AWidget: PGtkWidget;
|
|||||||
var
|
var
|
||||||
W: gint;
|
W: gint;
|
||||||
H: gint;
|
H: gint;
|
||||||
|
ACairo:pcairo_t;
|
||||||
ARect: TGdkRectangle;
|
ARect: TGdkRectangle;
|
||||||
AWindow: PGdkWindow;
|
AWindow: PGdkWindow;
|
||||||
x: gint;
|
x: gint;
|
||||||
@ -1146,15 +1147,22 @@ begin
|
|||||||
|
|
||||||
if AWidget = nil then
|
if AWidget = nil then
|
||||||
begin
|
begin
|
||||||
AWindow := gdk_get_default_root_window;
|
(* AWindow := gdk_get_default_root_window;
|
||||||
AWindow^.get_geometry(@x, @y, @w, @h);
|
AWindow^.get_geometry(@x, @y, @w, @h);
|
||||||
w:=1; h:=1;
|
w:=1; h:=1;
|
||||||
// ParentPixmap := gdk_pixbuf_get_from_window(AWindow, x, y, w, h);
|
// ParentPixmap := gdk_pixbuf_get_from_window(AWindow, x, y, w, h);
|
||||||
// Widget := gdk_cairo_create(AWindow);
|
// Widget := gdk_cairo_create(AWindow);
|
||||||
// gdk_cairo_set_source_pixbuf(Widget, ParentPixmap, 0, 0);
|
// gdk_cairo_set_source_pixbuf(Widget, ParentPixmap, 0, 0);
|
||||||
CairoSurface := cairo_image_surface_create(CAIRO_FORMAT_RGB24, w, h);
|
//CairoSurface := cairo_image_surface_create(CAIRO_FORMAT_RGB24, w, h);
|
||||||
|
CairoSurface := cairo_image_surface_create(CAIRO_FORMAT_ARGB32, w, h);
|
||||||
|
Widget := cairo_create(CairoSurface); *)
|
||||||
|
|
||||||
|
ACairo := gdk_cairo_create(gdk_get_default_root_window);
|
||||||
|
gdk_cairo_get_clip_rectangle(ACairo, @ARect);
|
||||||
|
CairoSurface := cairo_image_surface_create(CAIRO_FORMAT_ARGB32, ARect.width, ARect.height);
|
||||||
Widget := cairo_create(CairoSurface);
|
Widget := cairo_create(CairoSurface);
|
||||||
ParentPixmap := gdk_pixbuf_get_from_surface(CairoSurface, 0, 0, 1, 1);
|
|
||||||
|
ParentPixmap := gdk_pixbuf_get_from_surface(CairoSurface, 0, 0, ARect.width, ARect.height);
|
||||||
FOwnsSurface := True;
|
FOwnsSurface := True;
|
||||||
end else
|
end else
|
||||||
begin
|
begin
|
||||||
@ -1499,6 +1507,9 @@ begin
|
|||||||
with targetRect^ do
|
with targetRect^ do
|
||||||
cairo_rectangle(Widget, Left + PixelOffset, Top + PixelOffset, Right - Left, Bottom - Top);
|
cairo_rectangle(Widget, Left + PixelOffset, Top + PixelOffset, Right - Left, Bottom - Top);
|
||||||
|
|
||||||
|
cairo_set_operator (Widget, CAIRO_OPERATOR_OVER);
|
||||||
|
|
||||||
|
|
||||||
cairo_matrix_init_identity(@M);
|
cairo_matrix_init_identity(@M);
|
||||||
cairo_matrix_translate(@M, SourceRect^.Left, SourceRect^.Top);
|
cairo_matrix_translate(@M, SourceRect^.Left, SourceRect^.Top);
|
||||||
cairo_matrix_scale(@M, (sourceRect^.Right-sourceRect^.Left) / (targetRect^.Right-targetRect^.Left),
|
cairo_matrix_scale(@M, (sourceRect^.Right-sourceRect^.Left) / (targetRect^.Right-targetRect^.Left),
|
||||||
|
@ -4048,7 +4048,7 @@ begin
|
|||||||
resolution.GetRawImage(btn.ImageIndex,raw);
|
resolution.GetRawImage(btn.ImageIndex,raw);
|
||||||
{ convince the bitmap it has actually another format }
|
{ convince the bitmap it has actually another format }
|
||||||
bmp.BeginUpdate();
|
bmp.BeginUpdate();
|
||||||
raw.Description.Init_BPP32_R8G8B8A8_BIO_TTB(resolution.Width,resolution.Height);
|
//raw.Description.Init_BPP32_R8G8B8A8_BIO_TTB(resolution.Width,resolution.Height);
|
||||||
bmp.LoadFromRawImage(raw,false);
|
bmp.LoadFromRawImage(raw,false);
|
||||||
bmp.EndUpdate();
|
bmp.EndUpdate();
|
||||||
pb:=TGtk3Image(bmp.Handle).Handle;
|
pb:=TGtk3Image(bmp.Handle).Handle;
|
||||||
|
@ -4044,7 +4044,7 @@ begin
|
|||||||
ATargetRect := Rect(X, Y, Width + X, Height + Y);
|
ATargetRect := Rect(X, Y, Width + X, Height + Y);
|
||||||
ASrcRect := Rect(XSrc, YSrc, SrcWidth + XSrc, SrcHeight + YSrc);
|
ASrcRect := Rect(XSrc, YSrc, SrcWidth + XSrc, SrcHeight + YSrc);
|
||||||
|
|
||||||
if (DestContext.OwnsSurface) then
|
if (DestContext.OwnsSurface) and (SrcContext.OwnsSurface) then
|
||||||
DestContext.drawImage1(@ATargetRect, PgdkPixbuf(SrcContext.CurrentImage.Handle) , @ASrcRect, nil, nil)
|
DestContext.drawImage1(@ATargetRect, PgdkPixbuf(SrcContext.CurrentImage.Handle) , @ASrcRect, nil, nil)
|
||||||
else
|
else
|
||||||
DestContext.drawSurface(@ATargetRect,SrcContext.CairoSurface , @ASrcRect, nil, nil);
|
DestContext.drawSurface(@ATargetRect,SrcContext.CairoSurface , @ASrcRect, nil, nil);
|
||||||
|
@ -137,7 +137,7 @@ begin
|
|||||||
resolution.GetRawImage(ABitBtn.ImageIndex,raw);
|
resolution.GetRawImage(ABitBtn.ImageIndex,raw);
|
||||||
{ convice the bitmap it has actually another format }
|
{ convice the bitmap it has actually another format }
|
||||||
AGlyph.BeginUpdate();
|
AGlyph.BeginUpdate();
|
||||||
raw.Description.Init_BPP32_R8G8B8A8_BIO_TTB(resolution.Width,resolution.Height);
|
// raw.Description.Init_BPP32_R8G8B8A8_BIO_TTB(resolution.Width,resolution.Height);
|
||||||
AGlyph.LoadFromRawImage(raw,false);
|
AGlyph.LoadFromRawImage(raw,false);
|
||||||
AGlyph.EndUpdate();
|
AGlyph.EndUpdate();
|
||||||
end else
|
end else
|
||||||
|
Loading…
Reference in New Issue
Block a user