From bbf31e4d1f92c6387e94f03196a4bf28d6081fe4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20A=C3=9Fmus?= Date: Wed, 20 Feb 2008 09:56:26 +0000 Subject: [PATCH] * If bitmaps are drawn with alpha channel, it helps to setup the correct alpha mode. Thanks to Ralf Schuelke for pointing this out. * Also check the bitmap color space and only use alpha drawing for bitmaps with valid alpha channel. * Don't just reset the parent to B_OP_OVER, but use the previous mode. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24031 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kits/interface/ColumnTypes.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/kits/interface/ColumnTypes.cpp b/src/kits/interface/ColumnTypes.cpp index 3aefb70b03..bba811cd13 100644 --- a/src/kits/interface/ColumnTypes.cpp +++ b/src/kits/interface/ColumnTypes.cpp @@ -596,9 +596,20 @@ BBitmapColumn::DrawField(BField* field, BRect rect, BView* parent) x = rect.right - kTEXT_MARGIN - r.Width(); break; } - parent->SetDrawingMode(B_OP_ALPHA); + // setup drawing mode according to bitmap color space, + // restore previous mode after drawing + drawing_mode oldMode = parent->DrawingMode(); + if (bitmap->ColorSpace() == B_RGBA32 + || bitmap->ColorSpace() == B_RGBA32_BIG) { + parent->SetDrawingMode(B_OP_ALPHA); + parent->SetBlendingMode(B_PIXEL_ALPHA, B_ALPHA_OVERLAY); + } else { + parent->SetDrawingMode(B_OP_OVER); + } + parent->DrawBitmap(bitmap, BPoint(x, y)); - parent->SetDrawingMode(B_OP_OVER); + + parent->SetDrawingMode(oldMode); } }