diff --git a/headers/private/interface/ColorConversion.h b/headers/private/interface/ColorConversion.h index e3fcd6eefd..fb9356a38f 100644 --- a/headers/private/interface/ColorConversion.h +++ b/headers/private/interface/ColorConversion.h @@ -44,6 +44,8 @@ public: uint8 &blue, uint8 &alpha) const; inline uint8 GrayColorForIndex(uint8 index) const; + static status_t InitializeDefault(bool useServer = false); + private: const color_map *fColorMap; color_map *fOwnColorMap; diff --git a/src/kits/interface/ColorConversion.cpp b/src/kits/interface/ColorConversion.cpp index 1468e67589..7f1abcc003 100644 --- a/src/kits/interface/ColorConversion.cpp +++ b/src/kits/interface/ColorConversion.cpp @@ -13,6 +13,7 @@ #include "ColorConversion.h" +#include #include #include @@ -27,6 +28,8 @@ namespace BPrivate { // TODO: system palette -- hard-coded for now, when the app server is ready // we should use system_colors() or BScreen::ColorMap(). +// Stefano: We cannot do that, since this code is also used by client-side only BBitmaps, +// and also by the app_server const rgb_color kSystemPalette[] = { { 0, 0, 0, 255 }, { 8, 8, 8, 255 }, { 16, 16, 16, 255 }, { 24, 24, 24, 255 }, { 32, 32, 32, 255 }, { 40, 40, 40, 255 }, @@ -526,24 +529,27 @@ PaletteConverter::GrayColorForIndex(uint8 index) const } -// TODO: Remove these and palette_converter() when BScreen is available. static BLocker gPaletteConverterLock("PalConvLock"); static PaletteConverter gPaletteConverter; -/*! \brief Returns a PaletteConverter using the system color palette. - \return A PaletteConverter. +/*! \brief Initialize the global instance of PaletteConverter using the system color palette. + \return B_OK. */ -static -const PaletteConverter* -palette_converter() +/* static */ +status_t +PaletteConverter::InitializeDefault(bool useServer) { if (gPaletteConverterLock.Lock()) { - if (gPaletteConverter.InitCheck() != B_OK) - gPaletteConverter.SetTo(kSystemPalette); + if (gPaletteConverter.InitCheck() != B_OK) { + if (useServer) + gPaletteConverter.SetTo(system_colors()); + else + gPaletteConverter.SetTo(kSystemPalette); + } gPaletteConverterLock.Unlock(); } - return &gPaletteConverter; + return B_OK; } @@ -909,7 +915,7 @@ ConvertBits(const srcByte *srcBits, void *dstBits, int32 srcBitsLength, break; case B_CMAP8: - BPrivate::palette_converter(); + PaletteConverter::InitializeDefault(); ConvertBits(srcBits, (uint8 *)dstBits, srcBitsLength, dstBitsLength, redShift - 15, greenShift - 10, blueShift - 5, 0, 0, 0x7c00, 0x03e0, 0x001f, 0x0000, srcBytesPerRow, @@ -1063,7 +1069,7 @@ ConvertBits(const void *srcBits, void *dstBits, int32 srcBitsLength, break; case B_CMAP8: - palette_converter(); + PaletteConverter::InitializeDefault(); return ConvertBits((const uint8 *)srcBits, dstBits, srcBitsLength, dstBitsLength, 24, 16, 8, 32, 8, srcBytesPerRow, dstBytesPerRow, 8, srcColorSpace, dstColorSpace, srcOffset, diff --git a/src/kits/interface/InterfaceDefs.cpp b/src/kits/interface/InterfaceDefs.cpp index 11e5bce790..5db78fba29 100644 --- a/src/kits/interface/InterfaceDefs.cpp +++ b/src/kits/interface/InterfaceDefs.cpp @@ -16,6 +16,7 @@ #include #include +#include #include #include #include @@ -794,6 +795,10 @@ shift_color(rgb_color color, float shift) extern "C" status_t _init_interface_kit_() { + status_t status = BPrivate::PaletteConverter::InitializeDefault(true); + if (status < B_OK) + return status; + sem_id widthSem = create_sem(0, "BTextView WidthBuffer Sem"); if (widthSem < 0) return widthSem; @@ -804,7 +809,8 @@ _init_interface_kit_() _init_global_fonts_(); _menu_info_ptr_ = &BMenu::sMenuInfo; - status_t status = get_menu_info(&BMenu::sMenuInfo); + + status = get_menu_info(&BMenu::sMenuInfo); general_info.background_color = ui_color(B_PANEL_BACKGROUND_COLOR); general_info.mark_color.set_to(0, 0, 0);