From 76788886af8a1fe703689f1e1b4544ccc14fc7db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20A=C3=9Fmus?= Date: Fri, 17 Nov 2006 09:51:33 +0000 Subject: [PATCH] * use B_RGBA32 icons when compiled for Haiku git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19312 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/apps/processcontroller/IconMenuItem.cpp | 24 ++++++++++++++----- .../processcontroller/MemoryBarMenuItem.cpp | 21 ++++++++++++---- .../processcontroller/TeamBarMenuItem.cpp | 18 ++++++++++---- src/apps/processcontroller/Utilities.cpp | 17 +++++++++---- 4 files changed, 61 insertions(+), 19 deletions(-) diff --git a/src/apps/processcontroller/IconMenuItem.cpp b/src/apps/processcontroller/IconMenuItem.cpp index f5445ef448..400c18e19e 100644 --- a/src/apps/processcontroller/IconMenuItem.cpp +++ b/src/apps/processcontroller/IconMenuItem.cpp @@ -90,14 +90,26 @@ void IconMenuItem::Highlight(bool hilited) // -------------------------------------------------------------- void IconMenuItem::DrawIcon() { - BPoint loc; + // TODO: exact code duplication with TeamBarMenuItem::DrawIcon() + if (!fIcon) + return; + + BPoint loc = ContentLocation(); + BRect frame = Frame(); - loc = ContentLocation(); - BRect frame = Frame(); loc.y = frame.top + (frame.bottom - frame.top - 15) / 2; - Menu()->SetDrawingMode(B_OP_OVER); - if (fIcon) - Menu()->DrawBitmap(fIcon, loc); + + BMenu* menu = Menu(); + + if (fIcon->ColorSpace() == B_RGBA32) { + menu->SetDrawingMode(B_OP_ALPHA); + menu->SetBlendingMode(B_PIXEL_ALPHA, B_ALPHA_OVERLAY); + } else + menu->SetDrawingMode(B_OP_OVER); + + menu->DrawBitmap(fIcon, loc); + + menu->SetDrawingMode(B_OP_COPY); } // -------------------------------------------------------------- diff --git a/src/apps/processcontroller/MemoryBarMenuItem.cpp b/src/apps/processcontroller/MemoryBarMenuItem.cpp index 9bfb4dc04e..56ed967070 100644 --- a/src/apps/processcontroller/MemoryBarMenuItem.cpp +++ b/src/apps/processcontroller/MemoryBarMenuItem.cpp @@ -79,15 +79,26 @@ MemoryBarMenuItem::DrawContent() void MemoryBarMenuItem::DrawIcon() { + // TODO: exact code duplication with TeamBarMenuItem::DrawIcon() + if (!fIcon) + return; + BPoint loc = ContentLocation(); BRect frame = Frame(); + loc.y = frame.top + (frame.bottom - frame.top - 15) / 2; - if (fIcon) { - Menu()->SetDrawingMode(B_OP_OVER); - Menu()->DrawBitmap(fIcon, loc); - Menu()->SetDrawingMode(B_OP_COPY); - } + BMenu* menu = Menu(); + + if (fIcon->ColorSpace() == B_RGBA32) { + menu->SetDrawingMode(B_OP_ALPHA); + menu->SetBlendingMode(B_PIXEL_ALPHA, B_ALPHA_OVERLAY); + } else + menu->SetDrawingMode(B_OP_OVER); + + menu->DrawBitmap(fIcon, loc); + + menu->SetDrawingMode(B_OP_COPY); } diff --git a/src/apps/processcontroller/TeamBarMenuItem.cpp b/src/apps/processcontroller/TeamBarMenuItem.cpp index 17ea810096..cca0cd4f5e 100644 --- a/src/apps/processcontroller/TeamBarMenuItem.cpp +++ b/src/apps/processcontroller/TeamBarMenuItem.cpp @@ -91,15 +91,25 @@ TeamBarMenuItem::DrawContent() void TeamBarMenuItem::DrawIcon() { + if (!fIcon) + return; + BPoint loc = ContentLocation(); BRect frame = Frame(); loc.y = frame.top + (frame.bottom - frame.top - 15) / 2; - BMenu* menu = Menu (); - menu->SetDrawingMode(B_OP_OVER); - if (fIcon) - menu->DrawBitmap(fIcon, loc); + BMenu* menu = Menu(); + + if (fIcon->ColorSpace() == B_RGBA32) { + menu->SetDrawingMode(B_OP_ALPHA); + menu->SetBlendingMode(B_PIXEL_ALPHA, B_ALPHA_OVERLAY); + } else + menu->SetDrawingMode(B_OP_OVER); + + menu->DrawBitmap(fIcon, loc); + + menu->SetDrawingMode(B_OP_COPY); } diff --git a/src/apps/processcontroller/Utilities.cpp b/src/apps/processcontroller/Utilities.cpp index 3d20344fc1..1958488a47 100644 --- a/src/apps/processcontroller/Utilities.cpp +++ b/src/apps/processcontroller/Utilities.cpp @@ -68,7 +68,8 @@ get_team_name_and_icon(info_pack& infoPack, bool icon) BEntry entry(infoPack.team_info.args, true); status = entry.GetRef(&info.ref); if (status != B_OK - || strncmp(infoPack.team_info.args, systemPath.Path(), strlen(systemPath.Path())) != 0) + || strncmp(infoPack.team_info.args, systemPath.Path(), + strlen(systemPath.Path())) != 0) nameFromArgs = true; tryTrackerIcon = (status == B_OK); } @@ -77,9 +78,17 @@ get_team_name_and_icon(info_pack& infoPack, bool icon) B_PATH_NAME_LENGTH - 1); if (icon) { - infoPack.team_icon = new BBitmap(BRect(0, 0, 15, 15), B_COLOR_8_BIT); - if (!tryTrackerIcon || BNodeInfo::GetTrackerIcon(&info.ref, infoPack.team_icon, B_MINI_ICON) != B_OK) - infoPack.team_icon->SetBits(k_app_mini, 256, 0, B_COLOR_8_BIT); +#ifdef __HAIKU__ + infoPack.team_icon = new BBitmap(BRect(0, 0, 15, 15), B_RGBA32); +#else + infoPack.team_icon = new BBitmap(BRect(0, 0, 15, 15), B_CMAP8); +#endif + if (!tryTrackerIcon + || BNodeInfo::GetTrackerIcon(&info.ref, infoPack.team_icon, + B_MINI_ICON) != B_OK) { + // TODO: don't hardcode the "app" icon! + infoPack.team_icon->SetBits(k_app_mini, 256, 0, B_CMAP8); + } } else infoPack.team_icon = NULL;