[haiku-commits] BRANCH looncraz-github.setviewuicolor [cf3cdb69b510] src/kits/interface src/kits/tracker src/apps/deskbar src/servers/app headers/os

  • From: looncraz-github.setviewuicolor <community@xxxxxxxxxxxx>
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Sat, 26 Sep 2015 02:16:57 +0200 (CEST)

added 3 changesets to branch 'refs/remotes/looncraz-github/setviewuicolor'
old head: 0000000000000000000000000000000000000000
new head: cf3cdb69b51014d2e4f2a59393923cad8d717e6e
overview: https://github.com/looncraz/haiku/compare/cf3cdb69b510

----------------------------------------------------------------------------

7d89a61504d3: Font and Color Update Messages

Send B_COLORS_UPDATED and B_FONTS_UPDATED messages to client windows and
all attached BView children.

Does not include any helpful information in the messages to inform the
client as to what, precisely, changed.

Clients have no default responses to this message.

a12e25ca3ef5: Set*UIColor

Add BView methods:

SetViewUIColor
ViewUIColor
SetLowUIColor
LowUIColor
SetHighUIColor
HighUIColor

Each Set*UIColor method also accepts a tint value.

Using these methods in lieu of Set*Color will result in the color being
automatically
updated as it is changed on the system.

Most system interface objects have been adjusted to use this, but I feel that
colors should default to being inherited from the parent at times when they
are not.

A problem has arisen with BTabView that is not related to colors and shows up
in my test application, but not anywhere else. I have no idea if these are
due
to my changes or something else, such as a problem endemic to the base code
revision. As such, I will merge in the latest upstream changes and see how
it goes. Until then, I have reverted BTabView to its stock design.

cf3cdb69b510: Significant Progress

Expanded Set*UIColor to include tint.
Implemented AdoptParentColors() in BView.
Handled updating colors when views are re-attached (BTabViews, mostly)
Modified Deskbar & Tracker to use the new API.

Issues:

Some controls still have issues getting colors from the parent due to some
unfound layout issue (probably just ordering, I'll find it).

BBox label views and sometimes the whole BBox will sometimes be fully white.

Incidental Enhancements:

Increased use of appopriate ui_colors, less hard-coded colors.
Type-ahead filtering in Tracker is more obvious as colors are swapped
to other system constants (document background/text colors).

Performance Considerations:

There is minimal overhead using Set*UIColor() over traditional methods that
also involved ui_color()/tint_color().

When colors are changing, even with many many windows open, color updates are
effectively instant. Every CPU core is used during the updates, naturally.

Memory utilization is 24 bytes per view, IIRC. Regardless of whether or not
you use this feature.

[ looncraz <looncraz@xxxxxxxxxxxx> ]

----------------------------------------------------------------------------

62 files changed, 541 insertions(+), 256 deletions(-)
headers/os/app/AppDefs.h | 6 +-
headers/os/interface/InterfaceDefs.h | 1 +
headers/os/interface/SplitView.h | 1 +
headers/os/interface/View.h | 13 ++
headers/os/interface/Window.h | 2 +-
headers/private/interface/ViewPrivate.h | 13 +-
src/apps/deskbar/BarMenuBar.cpp | 2 +-
src/apps/deskbar/BarMenuTitle.cpp | 2 +-
src/apps/deskbar/BarView.cpp | 2 +-
src/apps/deskbar/ExpandoMenuBar.cpp | 2 +-
src/apps/deskbar/InlineScrollView.cpp | 2 +-
src/apps/deskbar/StatusView.cpp | 11 +-
src/apps/deskbar/Switcher.cpp | 14 +-
src/apps/deskbar/TeamMenuItem.cpp | 8 +-
src/apps/deskbar/TimeView.cpp | 6 +-
src/apps/deskbar/WindowMenuItem.cpp | 2 +-
src/apps/magnify/Magnify.cpp | 2 +-
src/kits/interface/AboutWindow.cpp | 4 +-
src/kits/interface/AbstractSpinner.cpp | 34 ++-
src/kits/interface/Alert.cpp | 4 +-
src/kits/interface/BMCPrivate.cpp | 13 +-
src/kits/interface/Box.cpp | 21 +-
src/kits/interface/Button.cpp | 16 +-
src/kits/interface/ChannelSlider.cpp | 7 +-
src/kits/interface/ColorControl.cpp | 7 +-
src/kits/interface/Control.cpp | 14 +-
src/kits/interface/GridView.cpp | 4 +-
src/kits/interface/GroupView.cpp | 4 +-
src/kits/interface/ListView.cpp | 7 +-
src/kits/interface/Menu.cpp | 7 +-
src/kits/interface/MenuField.cpp | 14 +-
src/kits/interface/MenuWindow.cpp | 2 +-
src/kits/interface/ScrollView.cpp | 2 +-
src/kits/interface/SplitView.cpp | 9 +-
src/kits/interface/StatusBar.cpp | 10 +-
src/kits/interface/StringView.cpp | 11 +-
src/kits/interface/TabView.cpp | 10 +-
src/kits/interface/TextControl.cpp | 15 +-
src/kits/interface/ToolTip.cpp | 2 +-
src/kits/interface/ToolTipManager.cpp | 2 +-
src/kits/interface/View.cpp | 251 +++++++++++++++++++++-
src/kits/interface/Window.cpp | 21 +-
src/kits/tracker/ContainerWindow.cpp | 17 +-
src/kits/tracker/CountView.cpp | 21 +-
src/kits/tracker/DialogPane.cpp | 6 +-
src/kits/tracker/FilePanelPriv.cpp | 2 +-
src/kits/tracker/FilePermissionsView.cpp | 4 +-
src/kits/tracker/FindPanel.cpp | 4 +-
src/kits/tracker/InfoWindow.cpp | 7 +-
src/kits/tracker/MiniMenuField.cpp | 6 +-
src/kits/tracker/PoseView.cpp | 12 +-
src/kits/tracker/QueryPoseView.cpp | 3 +-
src/kits/tracker/SelectionWindow.cpp | 2 +-
src/kits/tracker/StatusWindow.cpp | 6 +-
src/kits/tracker/TextWidget.cpp | 8 +-
src/kits/tracker/TitleView.cpp | 53 ++---
src/kits/tracker/TrackerSettingsWindow.cpp | 3 +-
src/kits/tracker/Utilities.cpp | 10 +-
src/kits/tracker/VirtualDirectoryPoseView.cpp | 4 +-
src/servers/app/DesktopSettings.cpp | 20 +-
src/servers/app/DesktopSettingsPrivate.h | 3 +-
src/servers/app/ServerWindow.cpp | 26 ++-

############################################################################

Commit: 7d89a61504d3e48959dd2ad23eb9f0a2d44c1d2d
Author: looncraz <looncraz@xxxxxxxxxxxx>
Date: Tue Sep 22 00:59:17 2015 UTC

Font and Color Update Messages

Send B_COLORS_UPDATED and B_FONTS_UPDATED messages to client windows and
all attached BView children.

Does not include any helpful information in the messages to inform the
client as to what, precisely, changed.

Clients have no default responses to this message.

----------------------------------------------------------------------------

diff --git a/headers/os/app/AppDefs.h b/headers/os/app/AppDefs.h
index 3cc349b..937c167 100644
--- a/headers/os/app/AppDefs.h
+++ b/headers/os/app/AppDefs.h
@@ -66,10 +66,8 @@ enum {
B_WORKSPACES_CHANGED = '_WCG',
B_WORKSPACE_ACTIVATED = '_WAC',
B_ZOOM = '_WZM',
- _COLORS_UPDATED = '_CLU',
- // Currently internal-use only. Later, public as
B_COLORS_UPDATED
- _FONTS_UPDATED = '_FNU',
- // Currently internal-use only. Later, public as B_FONTS_UPDATED
+ B_COLORS_UPDATED = '_CLU',
+ B_FONTS_UPDATED = '_FNU',
_APP_MENU_ = '_AMN',
_BROWSER_MENUS_ = '_BRM',
_MENU_EVENT_ = '_MEV',
diff --git a/headers/os/interface/View.h b/headers/os/interface/View.h
index e744375..ea3da38 100644
--- a/headers/os/interface/View.h
+++ b/headers/os/interface/View.h
@@ -677,9 +677,11 @@ private:

void _Activate(bool state);
void _Attach();
+ void
_ColorsUpdated(BMessage*);
void _Detach();
void _Draw(BRect
screenUpdateRect);
void
_DrawAfterChildren(BRect screenUpdateRect);
+ void
_FontsUpdated(BMessage*);
void _Pulse();

void _UpdateStateForRemove();
diff --git a/src/kits/interface/View.cpp b/src/kits/interface/View.cpp
index eb07f0f..f1cdffe 100644
--- a/src/kits/interface/View.cpp
+++ b/src/kits/interface/View.cpp
@@ -5520,6 +5520,18 @@ BView::_Attach()


void
+BView::_ColorsUpdated(BMessage* message)
+{
+ MessageReceived(message);
+
+ for (BView* child = fFirstChild; child != NULL;
+ child = child->fNextSibling) {
+ child->_ColorsUpdated(message);
+ }
+}
+
+
+void
BView::_Detach()
{
DetachedFromWindow();
@@ -5611,6 +5623,18 @@ BView::_DrawAfterChildren(BRect updateRect)


void
+BView::_FontsUpdated(BMessage* message)
+{
+ MessageReceived(message);
+
+ for (BView* child = fFirstChild; child != NULL;
+ child = child->fNextSibling) {
+ child->_FontsUpdated(message);
+ }
+}
+
+
+void
BView::_Pulse()
{
if ((Flags() & B_PULSE_NEEDED) != 0)
diff --git a/src/kits/interface/Window.cpp b/src/kits/interface/Window.cpp
index f87e4f3..6dbf058 100644
--- a/src/kits/interface/Window.cpp
+++ b/src/kits/interface/Window.cpp
@@ -733,7 +733,7 @@ BWindow::MessageReceived(BMessage* message)
// we're talking to the server application
using our own
// communication channel (fLink) - we better
make sure no one
// interferes by locking that channel (which
AppServerLink does
- // implicetly)
+ // implicitly)

fLink->StartMessage(AS_CREATE_WINDOW);

@@ -1439,6 +1439,18 @@ FrameMoved(origin);
break;
}

+ case B_COLORS_UPDATED:
+ {
+ fTopView->_ColorsUpdated(message);
+ break;
+ }
+
+ case B_FONTS_UPDATED:
+ {
+ fTopView->_FontsUpdated(message);
+ break;
+ }
+
default:
BLooper::DispatchMessage(message, target);
break;
diff --git a/src/servers/app/DesktopSettings.cpp
b/src/servers/app/DesktopSettings.cpp
index d6895b4..ae074f9 100644
--- a/src/servers/app/DesktopSettings.cpp
+++ b/src/servers/app/DesktopSettings.cpp
@@ -647,12 +647,16 @@ DesktopSettingsPrivate::WorkspacesMessage(int32 index)
const


void
-DesktopSettingsPrivate::SetUIColor(color_which which, const rgb_color color)
+DesktopSettingsPrivate::SetUIColor(color_which which, const rgb_color color,
+ bool*
changed)
{
int32 index = color_which_to_index(which);
if (index < 0 || index >= kColorWhichCount)
return;

+ if (changed != NULL)
+ *changed = fShared.colors[index] != color;
+
fShared.colors[index] = color;
// TODO: deprecate the background_color member of the menu_info struct,
// otherwise we have to keep this duplication...
@@ -916,6 +920,7 @@ void
LockedDesktopSettings::SetDefaultPlainFont(const ServerFont &font)
{
fSettings->SetDefaultPlainFont(font);
+ fDesktop->BroadcastToAllWindows(B_FONTS_UPDATED);
}


@@ -924,6 +929,7 @@ LockedDesktopSettings::SetDefaultBoldFont(const ServerFont
&font)
{
fSettings->SetDefaultBoldFont(font);
fDesktop->BroadcastToAllWindows(AS_SYSTEM_FONT_CHANGED);
+ fDesktop->BroadcastToAllWindows(B_FONTS_UPDATED);
}


@@ -931,6 +937,8 @@ void
LockedDesktopSettings::SetDefaultFixedFont(const ServerFont &font)
{
fSettings->SetDefaultFixedFont(font);
+ fDesktop->BroadcastToAllWindows(AS_SYSTEM_FONT_CHANGED);
+ fDesktop->BroadcastToAllWindows(B_FONTS_UPDATED);
}


@@ -979,7 +987,15 @@ LockedDesktopSettings::SetShowAllDraggers(bool show)
void
LockedDesktopSettings::SetUIColor(color_which which, const rgb_color color)
{
- fSettings->SetUIColor(which, color);
+ bool changed = false;
+ fSettings->SetUIColor(which, color, &changed);
+ //TODO: find way to send which color was set
+
+ // SetUIColor is called far too often, and updates are potentially
+ // heavy on the client redraws, so we want to be certain we are actually
+ // responding to a change and not a superfluous set operation.
+ if (changed)
+ fDesktop->BroadcastToAllWindows(B_COLORS_UPDATED);
}


diff --git a/src/servers/app/DesktopSettingsPrivate.h
b/src/servers/app/DesktopSettingsPrivate.h
index 71b7519..c7c91cc 100644
--- a/src/servers/app/DesktopSettingsPrivate.h
+++ b/src/servers/app/DesktopSettingsPrivate.h
@@ -72,7 +72,8 @@ public:
const BMessage* WorkspacesMessage(int32 index)
const;

void SetUIColor(color_which
which,
- const
rgb_color color);
+ const
rgb_color color,
+ bool*
changed = NULL);
rgb_color UIColor(color_which
which) const;

void
SetSubpixelAntialiasing(bool subpix);
diff --git a/src/servers/app/ServerWindow.cpp b/src/servers/app/ServerWindow.cpp
index 2ec9d90..e52a442 100644
--- a/src/servers/app/ServerWindow.cpp
+++ b/src/servers/app/ServerWindow.cpp
@@ -1012,7 +1012,31 @@ ServerWindow::_DispatchMessage(int32 code,
BPrivate::LinkReceiver& link)
{
// Has the all-window look
fDesktop->FontsChanged(fWindow);
- // TODO: tell client about this, too, and relayout...
+ break;
+ }
+
+ // B_FONTS_UPDATED is separate from AS_SYSTEM_FONT_CHANGED
+ // as the latter rebuilds and redraws and here we just want
+ // to pass on a notice to each window.
+ case B_FONTS_UPDATED:
+ {
+ // TODO: would knowing which font was changed be useful?
+ BMessage message(code);
+ SendMessageToClient(&message);
+ break;
+ }
+
+ case B_COLORS_UPDATED:
+ {
+ // TODO: find a way to determine which color changed
+ // this might require a new
BroadcastToAllWindows()
+ // method which allows a single integer as data
as
+ // well as modifying MessageLooper's
PostMessage()
+ // which seems like more trouble than it is
worth
+ // considering the response to this message will
+ // pretty much always just be an Invalidate()
+ BMessage message(code);
+ message.AddInt64("time", system_time());
break;
}


############################################################################

Commit: a12e25ca3ef5fd67032412296593bc3cb4fa64c3
Author: looncraz <looncraz@xxxxxxxxxxxx>
Date: Thu Sep 24 13:39:19 2015 UTC

Set*UIColor

Add BView methods:

SetViewUIColor
ViewUIColor
SetLowUIColor
LowUIColor
SetHighUIColor
HighUIColor

Each Set*UIColor method also accepts a tint value.

Using these methods in lieu of Set*Color will result in the color being
automatically
updated as it is changed on the system.

Most system interface objects have been adjusted to use this, but I feel that
colors should default to being inherited from the parent at times when they
are not.

A problem has arisen with BTabView that is not related to colors and shows up
in my test application, but not anywhere else. I have no idea if these are due
to my changes or something else, such as a problem endemic to the base code
revision. As such, I will merge in the latest upstream changes and see how
it goes. Until then, I have reverted BTabView to its stock design.

----------------------------------------------------------------------------

diff --git a/headers/os/interface/InterfaceDefs.h
b/headers/os/interface/InterfaceDefs.h
index 46f3a83..1a533e3 100644
--- a/headers/os/interface/InterfaceDefs.h
+++ b/headers/os/interface/InterfaceDefs.h
@@ -294,6 +294,7 @@ enum bitmap_drawing_options {
// Default UI Colors

enum color_which {
+ B_NO_COLOR = 0,
B_PANEL_BACKGROUND_COLOR = 1,
B_PANEL_TEXT_COLOR = 10,
B_DOCUMENT_BACKGROUND_COLOR = 11,
diff --git a/headers/os/interface/SplitView.h b/headers/os/interface/SplitView.h
index c4d3dd5..543d53a 100644
--- a/headers/os/interface/SplitView.h
+++ b/headers/os/interface/SplitView.h
@@ -61,6 +61,7 @@ public:
bool AddChild(int32 index,
BLayoutItem* child,
float
weight);

+ virtual void AttachedToWindow();
virtual void Draw(BRect updateRect);
virtual void DrawAfterChildren(BRect
updateRect);
virtual void MouseDown(BPoint where);
diff --git a/headers/os/interface/View.h b/headers/os/interface/View.h
index ea3da38..d55e7a3 100644
--- a/headers/os/interface/View.h
+++ b/headers/os/interface/View.h
@@ -240,7 +240,10 @@ public:
virtual void SetViewColor(rgb_color color);
void SetViewColor(uchar red,
uchar green, uchar blue,
uchar
alpha = 255);
+ void
SetViewUIColor(color_which which,
+ float
tint = B_NO_TINT);
rgb_color ViewColor() const;
+ color_which ViewUIColor() const;

void SetViewBitmap(const
BBitmap* bitmap,
BRect
srcRect, BRect dstRect,
@@ -269,12 +272,18 @@ public:
virtual void SetHighColor(rgb_color color);
void SetHighColor(uchar red,
uchar green, uchar blue,
uchar
alpha = 255);
+ void
SetHighUIColor(color_which which,
+ float
tint = B_NO_TINT);
rgb_color HighColor() const;
+ color_which HighUIColor() const;

virtual void SetLowColor(rgb_color color);
void SetLowColor(uchar red,
uchar green, uchar blue,
uchar
alpha = 255);
+ void
SetLowUIColor(color_which which,
+ float
tint = B_NO_TINT);
rgb_color LowColor() const;
+ color_which LowUIColor() const;

void SetLineMode(cap_mode
lineCap,

join_mode lineJoin,
@@ -684,6 +693,7 @@ private:
void
_FontsUpdated(BMessage*);
void _Pulse();

+ void
_UpdateUIColor(color_which which);
void _UpdateStateForRemove();
void
_UpdatePattern(::pattern pattern);

diff --git a/headers/private/interface/ViewPrivate.h
b/headers/private/interface/ViewPrivate.h
index 7d642d7..05ae1ec 100644
--- a/headers/private/interface/ViewPrivate.h
+++ b/headers/private/interface/ViewPrivate.h
@@ -42,8 +42,11 @@ enum {
B_VIEW_PATTERN_BIT = 0x00020000,
B_VIEW_TRANSFORM_BIT = 0x00040000,
B_VIEW_FILL_RULE_BIT = 0x00080000,
+ B_VIEW_WHICH_VIEW_COLOR_BIT = 0x00100000,
+ B_VIEW_WHICH_LOW_COLOR_BIT = 0x00200000,
+ B_VIEW_WHICH_HIGH_COLOR_BIT = 0x00400000,

- B_VIEW_ALL_BITS = 0x000fffff,
+ B_VIEW_ALL_BITS = 0x00ffffff,

// these used for archiving only
B_VIEW_RESIZE_BIT = 0x00001000,
@@ -107,6 +110,14 @@ class ViewState {

// This one is not affected by pop state/push state
rgb_color view_color;
+ color_which which_view_color;
+ float which_view_color_tint;
+
+ color_which which_low_color;
+ float which_low_color_tint;
+
+ color_which which_high_color;
+ float which_high_color_tint;

::pattern pattern;

diff --git a/src/kits/interface/AboutWindow.cpp
b/src/kits/interface/AboutWindow.cpp
index fa84cf5..a6192af 100644
--- a/src/kits/interface/AboutWindow.cpp
+++ b/src/kits/interface/AboutWindow.cpp
@@ -99,7 +99,7 @@ StripeView::StripeView(BBitmap* icon)
BView("StripeView", B_WILL_DRAW),
fIcon(icon)
{
- SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
+ SetViewUIColor(B_PANEL_BACKGROUND_COLOR);

float width = 0.0f;
if (icon != NULL)
@@ -176,7 +176,7 @@ AboutView::AboutView(const char* appName, const char*
signature)
fInfoView->MakeEditable(false);
fInfoView->SetWordWrap(true);
fInfoView->SetInsets(5.0, 5.0, 5.0, 5.0);
- fInfoView->SetViewColor(ui_color(B_DOCUMENT_BACKGROUND_COLOR));
+ fInfoView->SetViewUIColor(B_DOCUMENT_BACKGROUND_COLOR);
fInfoView->SetStylable(true);

BScrollView* infoViewScroller = new BScrollView(
diff --git a/src/kits/interface/Alert.cpp b/src/kits/interface/Alert.cpp
index 8e29a6b..576e14d 100644
--- a/src/kits/interface/Alert.cpp
+++ b/src/kits/interface/Alert.cpp
@@ -333,6 +333,14 @@ BAlert::MessageReceived(BMessage* msg)
if (msg->what != kAlertButtonMsg)
return BWindow::MessageReceived(msg);

+ if (message->what == B_COLORS_UPDATED) {
+ rgb_color textColor = ui_color(B_PANEL_TEXT_COLOR);
+ fTextView->SetFontAndColor(be_plain_font, B_FONT_ALL,
&textColor);
+ }
+
+ if (message->what != kAlertButtonMsg)
+ return BWindow::MessageReceived(message);
+
int32 which;
if (msg->FindInt32("which", &which) == B_OK) {
if (fAlertSem < 0) {
@@ -497,7 +505,7 @@ BAlert::_Init(const char* text, const char* button0, const
char* button1,
fIconView = new TAlertView();

fTextView = new BTextView("_tv_");
- fTextView->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
+ fTextView->SetViewUIColor(B_PANEL_BACKGROUND_COLOR);
rgb_color textColor = ui_color(B_PANEL_TEXT_COLOR);
fTextView->SetFontAndColor(be_plain_font, B_FONT_ALL, &textColor);
fTextView->MakeEditable(false);
@@ -718,7 +726,7 @@ TAlertView::TAlertView()
BView("TAlertView", B_WILL_DRAW),
fIconBitmap(NULL)
{
- SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
+ SetViewUIColor(B_PANEL_BACKGROUND_COLOR);
}


diff --git a/src/kits/interface/BMCPrivate.cpp
b/src/kits/interface/BMCPrivate.cpp
index 581c755..f197879 100644
--- a/src/kits/interface/BMCPrivate.cpp
+++ b/src/kits/interface/BMCPrivate.cpp
@@ -162,10 +162,15 @@ _BMCMenuBar_::AttachedToWindow()
if (fFixedSize && (Flags() & B_SUPPORTS_LAYOUT) == 0)
SetResizingMode(B_FOLLOW_LEFT_RIGHT | B_FOLLOW_TOP);

- if (Parent() != NULL)
- SetLowColor(Parent()->LowColor());
- else
- SetLowColor(ui_color(B_MENU_BACKGROUND_COLOR));
+ if (Parent() != NULL) {
+ color_which which = Parent()->LowUIColor();
+ if (which == B_NO_COLOR)
+ SetLowColor(Parent()->LowColor());
+ else
+ SetLowUIColor(which);
+
+ } else
+ SetLowUIColor(B_MENU_BACKGROUND_COLOR);

fPreviousWidth = Bounds().Width();
}
diff --git a/src/kits/interface/Box.cpp b/src/kits/interface/Box.cpp
index d243a91..292abb3 100644
--- a/src/kits/interface/Box.cpp
+++ b/src/kits/interface/Box.cpp
@@ -49,8 +49,8 @@ BBox::BBox(BRect frame, const char* name, uint32
resizingMode, uint32 flags,
BView(frame, name, resizingMode, flags | B_WILL_DRAW | B_FRAME_EVENTS),
fStyle(border)
{
- SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
- SetLowColor(ui_color(B_PANEL_BACKGROUND_COLOR));
+ SetViewUIColor(B_PANEL_BACKGROUND_COLOR);
+ SetLowUIColor(B_PANEL_BACKGROUND_COLOR);

_InitObject();
}
@@ -61,8 +61,8 @@ BBox::BBox(const char* name, uint32 flags, border_style
border, BView* child)
BView(name, flags | B_WILL_DRAW | B_FRAME_EVENTS),
fStyle(border)
{
- SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
- SetLowColor(ui_color(B_PANEL_BACKGROUND_COLOR));
+ SetViewUIColor(B_PANEL_BACKGROUND_COLOR);
+ SetLowUIColor(B_PANEL_BACKGROUND_COLOR);

_InitObject();

@@ -76,8 +76,8 @@ BBox::BBox(border_style border, BView* child)
BView(NULL, B_WILL_DRAW | B_FRAME_EVENTS | B_NAVIGABLE_JUMP),
fStyle(border)
{
- SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
- SetLowColor(ui_color(B_PANEL_BACKGROUND_COLOR));
+ SetViewUIColor(B_PANEL_BACKGROUND_COLOR);
+ SetLowUIColor(B_PANEL_BACKGROUND_COLOR);

_InitObject();

@@ -287,8 +287,14 @@ BBox::AttachedToWindow()
if (color == B_TRANSPARENT_COLOR)
color = ui_color(B_PANEL_BACKGROUND_COLOR);

- SetViewColor(color);
- SetLowColor(color);
+ color_which which = parent->ViewUIColor();
+ if (which == B_NO_COLOR) {
+ SetViewColor(color);
+ SetLowColor(color);
+ } else {
+ SetViewUIColor(which);
+ SetLowUIColor(which);
+ }
}

// The box could have been resized in the mean time
diff --git a/src/kits/interface/ChannelSlider.cpp
b/src/kits/interface/ChannelSlider.cpp
index 8f8d41a..d45d0b6 100644
--- a/src/kits/interface/ChannelSlider.cpp
+++ b/src/kits/interface/ChannelSlider.cpp
@@ -710,7 +710,7 @@ BChannelSlider::_InitData()
fMinPoint = 0;
fFocusChannel = -1;

- SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
+ SetViewUIColor(B_PANEL_BACKGROUND_COLOR);
}


diff --git a/src/kits/interface/ColorControl.cpp
b/src/kits/interface/ColorControl.cpp
index 1da6e90..f8c0dc3 100644
--- a/src/kits/interface/ColorControl.cpp
+++ b/src/kits/interface/ColorControl.cpp
@@ -333,10 +333,15 @@ BColorControl::SetEnabled(bool enabled)
void
BColorControl::AttachedToWindow()
{
- if (Parent())
- SetViewColor(Parent()->ViewColor());
+ if (Parent()) {
+ color_which which = Parent()->ViewUIColor();
+ if (which != B_NO_COLOR)
+ SetViewUIColor(which);
+ else
+ SetViewColor(Parent()->ViewColor());
+ }
else
- SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
+ SetViewUIColor(B_PANEL_BACKGROUND_COLOR);

BControl::AttachedToWindow();

diff --git a/src/kits/interface/Control.cpp b/src/kits/interface/Control.cpp
index 6cef099..7fa62be 100644
--- a/src/kits/interface/Control.cpp
+++ b/src/kits/interface/Control.cpp
@@ -152,18 +152,27 @@ void
BControl::AttachedToWindow()
{
rgb_color color;
+ color_which which = B_NO_COLOR;

BView* parent = Parent();
if (parent != NULL) {
// inherit the color from parent
color = parent->ViewColor();
+ which = parent->ViewUIColor();
if (color == B_TRANSPARENT_COLOR)
color = ui_color(B_PANEL_BACKGROUND_COLOR);
+
+ if (which != B_NO_COLOR)
+ SetViewUIColor(which);
+ else
+ SetViewColor(color);
} else
- color = ui_color(B_PANEL_BACKGROUND_COLOR);
+ SetViewUIColor(B_PANEL_BACKGROUND_COLOR);

- SetViewColor(color);
- SetLowColor(color);
+ if (which != B_NO_COLOR)
+ SetLowUIColor(which);
+ else
+ SetLowColor(ViewColor());

if (!Messenger().IsValid())
SetTarget(Window());
diff --git a/src/kits/interface/GridView.cpp b/src/kits/interface/GridView.cpp
index 9012f93..ca216b4 100644
--- a/src/kits/interface/GridView.cpp
+++ b/src/kits/interface/GridView.cpp
@@ -13,7 +13,7 @@ BGridView::BGridView(float horizontalSpacing, float
verticalSpacing)
:
BView(NULL, 0, new BGridLayout(horizontalSpacing, verticalSpacing))
{
- SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
+ SetViewUIColor(B_PANEL_BACKGROUND_COLOR);
}


@@ -22,7 +22,7 @@ BGridView::BGridView(const char* name, float
horizontalSpacing,
:
BView(name, 0, new BGridLayout(horizontalSpacing, verticalSpacing))
{
- SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
+ SetViewUIColor(B_PANEL_BACKGROUND_COLOR);
}


diff --git a/src/kits/interface/GroupView.cpp b/src/kits/interface/GroupView.cpp
index dce7e7a..24040aa 100644
--- a/src/kits/interface/GroupView.cpp
+++ b/src/kits/interface/GroupView.cpp
@@ -13,7 +13,7 @@ BGroupView::BGroupView(orientation orientation, float spacing)
:
BView(NULL, 0, new BGroupLayout(orientation, spacing))
{
- SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
+ SetViewUIColor(B_PANEL_BACKGROUND_COLOR);
}


@@ -22,7 +22,7 @@ BGroupView::BGroupView(const char* name, orientation
orientation,
:
BView(name, 0, new BGroupLayout(orientation, spacing))
{
- SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
+ SetViewUIColor(B_PANEL_BACKGROUND_COLOR);
}


diff --git a/src/kits/interface/ListView.cpp b/src/kits/interface/ListView.cpp
index 515ac8b..22ecea4 100644
--- a/src/kits/interface/ListView.cpp
+++ b/src/kits/interface/ListView.cpp
@@ -287,6 +287,9 @@ void
BListView::MessageReceived(BMessage* message)
{
switch (message->what) {
+ case B_COLORS_UPDATED:
+ SetLowUIColor(B_LIST_BACKGROUND_COLOR);
+ break;
case B_COUNT_PROPERTIES:
case B_EXECUTE_PROPERTY:
case B_GET_PROPERTY:
@@ -1450,8 +1453,8 @@ BListView::_InitObject(list_view_type type)
fTrack->try_drag = false;
fTrack->item_index = -1;

- SetViewColor(ui_color(B_LIST_BACKGROUND_COLOR));
- SetLowColor(ui_color(B_LIST_BACKGROUND_COLOR));
+ SetViewUIColor(B_LIST_BACKGROUND_COLOR);
+ SetLowUIColor(B_LIST_BACKGROUND_COLOR);
}


diff --git a/src/kits/interface/MenuField.cpp b/src/kits/interface/MenuField.cpp
index c3284c8..aec1289 100644
--- a/src/kits/interface/MenuField.cpp
+++ b/src/kits/interface/MenuField.cpp
@@ -429,18 +429,27 @@ BMenuField::AttachedToWindow()
{
CALLED();
rgb_color color;
+ color_which which = B_NO_COLOR;

BView* parent = Parent();
if (parent != NULL) {
// inherit the color from parent
color = parent->ViewColor();
+ which = parent->ViewUIColor();
if (color == B_TRANSPARENT_COLOR)
color = ui_color(B_PANEL_BACKGROUND_COLOR);
- } else
+ } else {
color = ui_color(B_PANEL_BACKGROUND_COLOR);
+ which = B_PANEL_BACKGROUND_COLOR;
+ }

- SetViewColor(color);
- SetLowColor(color);
+ if (which == B_NO_COLOR) {
+ SetViewColor(color);
+ SetLowColor(color);
+ } else {
+ SetViewUIColor(which);
+ SetLowUIColor(which);
+ }
}


@@ -1072,6 +1081,21 @@ BMenuField::_DrawLabel(BRect updateRect)
return;

rgb_color base = ui_color(B_PANEL_BACKGROUND_COLOR);
+ // vertical alignment
+ float y = rect.top
+ + roundf((rect.Height() + 1 - fh.ascent - fh.descent) / 2.0f)
+ + fh.ascent;
+
+ const rgb_color lowColor = LowColor();
+
+ MenuPrivate menuPrivate(fMenuBar);
+ if (menuPrivate.State() != MENU_STATE_CLOSED)
+ SetLowColor(ui_color(B_MENU_SELECTED_BACKGROUND_COLOR));
+
+ BRect fillRect(rect.InsetByCopy(0, kVMargin));
+ fillRect.right -= kVMargin * 2;
+ FillRect(fillRect, B_SOLID_LOW);
+
uint32 flags = 0;
if (!IsEnabled())
flags |= BControlLook::B_DISABLED;
diff --git a/src/kits/interface/MenuWindow.cpp
b/src/kits/interface/MenuWindow.cpp
index 42889a9..deb9725 100644
--- a/src/kits/interface/MenuWindow.cpp
+++ b/src/kits/interface/MenuWindow.cpp
@@ -79,7 +79,7 @@ BMenuScroller::BMenuScroller(BRect frame)
BView(frame, "menu scroller", 0, B_WILL_DRAW | B_FRAME_EVENTS),
fEnabled(false)
{
- SetViewColor(ui_color(B_MENU_BACKGROUND_COLOR));
+ SetViewUIColor(B_MENU_BACKGROUND_COLOR);
}


diff --git a/src/kits/interface/ScrollView.cpp
b/src/kits/interface/ScrollView.cpp
index 029c083..905114c 100644
--- a/src/kits/interface/ScrollView.cpp
+++ b/src/kits/interface/ScrollView.cpp
@@ -738,7 +738,7 @@ BScrollView::_Init(bool horizontal, bool vertical)
fBorders = BControlLook::B_ALL_BORDERS;

if (be_control_look != NULL)
- SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
+ SetViewUIColor(B_PANEL_BACKGROUND_COLOR);

if (horizontal) {
fHorizontalScrollBar = new BScrollBar(BRect(0, 0, 14, 14),
"_HSB_",
diff --git a/src/kits/interface/SplitView.cpp b/src/kits/interface/SplitView.cpp
index 6a174d5..d38f4f4 100644
--- a/src/kits/interface/SplitView.cpp
+++ b/src/kits/interface/SplitView.cpp
@@ -20,7 +20,7 @@ BSplitView::BSplitView(orientation orientation, float spacing)
B_WILL_DRAW | B_FULL_UPDATE_ON_RESIZE |
B_INVALIDATE_AFTER_LAYOUT,
fSplitLayout = new BSplitLayout(orientation, spacing))
{
- SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
+
}


@@ -237,6 +237,28 @@ BSplitView::AddChild(int32 index, BLayoutItem* child,
float weight)


void
+BSplitView::AttachedToWindow()
+{
+ if (Parent() == NULL)
+ return;
+
+ color_which which = Parent()->ViewUIColor();
+ rgb_color color = Parent()->ViewColor();
+
+ if (which != B_NO_COLOR) {
+ SetViewUIColor(which);
+ SetLowUIColor(which);
+ } else
+ SetViewColor(color);
+
+ // adopt parent's low color, if customized
+ if (which != B_NO_COLOR
+ && which != Parent()->LowUIColor())
+ SetLowUIColor(Parent()->LowUIColor());
+}
+
+
+void
BSplitView::Draw(BRect updateRect)
{
// draw the splitters
diff --git a/src/kits/interface/StatusBar.cpp b/src/kits/interface/StatusBar.cpp
index 7cd4f74..0482be9 100644
--- a/src/kits/interface/StatusBar.cpp
+++ b/src/kits/interface/StatusBar.cpp
@@ -139,15 +139,21 @@ BStatusBar::AttachedToWindow()

SetViewColor(B_TRANSPARENT_COLOR);
rgb_color lowColor = B_TRANSPARENT_COLOR;
+ color_which which = B_NO_COLOR;

BView* parent = Parent();
- if (parent != NULL)
+ if (parent != NULL) {
lowColor = parent->ViewColor();
+ which = parent->ViewUIColor();
+ }

if (lowColor == B_TRANSPARENT_COLOR)
lowColor = ui_color(B_PANEL_BACKGROUND_COLOR);

- SetLowColor(lowColor);
+ if (which == B_NO_COLOR)
+ SetLowColor(lowColor);
+ else
+ SetLowUIColor(which);

fTextDivider = Bounds().Width();
}
diff --git a/src/kits/interface/StringView.cpp
b/src/kits/interface/StringView.cpp
index e4d1ca7..d7ba3c6 100644
--- a/src/kits/interface/StringView.cpp
+++ b/src/kits/interface/StringView.cpp
@@ -129,15 +129,21 @@ void
BStringView::AttachedToWindow()
{
rgb_color color = B_TRANSPARENT_COLOR;
+ color_which which = B_NO_COLOR;

BView* parent = Parent();
- if (parent != NULL)
+ if (parent != NULL) {
color = parent->ViewColor();
+ which = parent->ViewUIColor();
+ }

if (color == B_TRANSPARENT_COLOR)
color = ui_color(B_PANEL_BACKGROUND_COLOR);

- SetViewColor(color);
+ if (which == B_NO_COLOR)
+ SetViewColor(color);
+ else
+ SetViewUIColor(which);
}


diff --git a/src/kits/interface/TextControl.cpp
b/src/kits/interface/TextControl.cpp
index 3e2707f..7dcade8 100644
--- a/src/kits/interface/TextControl.cpp
+++ b/src/kits/interface/TextControl.cpp
@@ -357,7 +357,7 @@ BTextControl::Draw(BRect updateRect)
BRect rect = fText->Frame();
rect.InsetBy(-2, -2);

- rgb_color base = ui_color(B_PANEL_BACKGROUND_COLOR);
+ rgb_color base = ViewColor();
uint32 flags = fLook;
if (!enabled)
flags |= BControlLook::B_DISABLED;
@@ -1026,7 +1026,6 @@ void
BTextControl::_UpdateTextViewColors(bool enable)
{
rgb_color textColor;
- rgb_color color;
BFont font;

fText->GetFontAndColor(0, &font);
@@ -1041,14 +1040,11 @@ BTextControl::_UpdateTextViewColors(bool enable)
fText->SetFontAndColor(&font, B_FONT_ALL, &textColor);

if (enable)
- color = ui_color(B_DOCUMENT_BACKGROUND_COLOR);
- else {
- color = tint_color(ui_color(B_PANEL_BACKGROUND_COLOR),
- B_LIGHTEN_2_TINT);
- }
+ fText->SetViewUIColor(B_DOCUMENT_BACKGROUND_COLOR);
+ else
+ fText->SetViewUIColor(B_PANEL_BACKGROUND_COLOR,
B_LIGHTEN_2_TINT);

- fText->SetViewColor(color);
- fText->SetLowColor(color);
+ fText->SetLowUIColor(ViewUIColor());
}


diff --git a/src/kits/interface/ToolTip.cpp b/src/kits/interface/ToolTip.cpp
index 2885c47..f5a4873 100644
--- a/src/kits/interface/ToolTip.cpp
+++ b/src/kits/interface/ToolTip.cpp
@@ -219,7 +219,7 @@ BTextToolTip::_InitData(const char* text)
fTextView = new BTextView("tool tip text");
fTextView->SetText(text);
fTextView->MakeEditable(false);
- fTextView->SetViewColor(ui_color(B_TOOL_TIP_BACKGROUND_COLOR));
+ fTextView->SetViewUIColor(B_TOOL_TIP_BACKGROUND_COLOR);
rgb_color color = ui_color(B_TOOL_TIP_TEXT_COLOR);
fTextView->SetFontAndColor(NULL, 0, &color);
fTextView->SetWordWrap(false);
diff --git a/src/kits/interface/ToolTipManager.cpp
b/src/kits/interface/ToolTipManager.cpp
index 5084adc..7f4d8a5 100644
--- a/src/kits/interface/ToolTipManager.cpp
+++ b/src/kits/interface/ToolTipManager.cpp
@@ -66,7 +66,7 @@ ToolTipView::ToolTipView(BToolTip* tip)
fHidden(false)
{
fToolTip->AcquireReference();
- SetViewColor(ui_color(B_TOOL_TIP_BACKGROUND_COLOR));
+ SetViewUIColor(B_TOOL_TIP_BACKGROUND_COLOR);

BGroupLayout* layout = new BGroupLayout(B_VERTICAL);
layout->SetInsets(5, 5, 5, 5);
diff --git a/src/kits/interface/View.cpp b/src/kits/interface/View.cpp
index f1cdffe..e243a72 100644
--- a/src/kits/interface/View.cpp
+++ b/src/kits/interface/View.cpp
@@ -140,6 +140,14 @@ ViewState::ViewState()
high_color = (rgb_color){ 0, 0, 0, 255 };
low_color = (rgb_color){ 255, 255, 255, 255 };
view_color = low_color;
+ which_view_color = B_NO_COLOR;
+ which_view_color_tint = B_NO_TINT;
+
+ which_low_color = B_NO_COLOR;
+ which_low_color_tint = B_NO_TINT;
+
+ which_high_color = B_NO_COLOR;
+ which_high_color_tint = B_NO_TINT;

pattern = B_SOLID_HIGH;
drawing_mode = B_OP_COPY;
@@ -455,7 +463,7 @@ BView::BView(BMessage* archive)
| B_FONT_SHEAR | B_FONT_ROTATION);
}

- int32 color;
+ int32 color = 0;
if (archive->FindInt32("_color", 0, &color) == B_OK)
SetHighColor(get_rgb_color(color));
if (archive->FindInt32("_color", 1, &color) == B_OK)
@@ -463,6 +471,30 @@ BView::BView(BMessage* archive)
if (archive->FindInt32("_color", 2, &color) == B_OK)
SetViewColor(get_rgb_color(color));

+
+ float tint = B_NO_TINT;
+ if (archive->FindInt32("_uicolor", 0, &color) == B_OK
+ && color != B_NO_COLOR) {
+ if (archive->FindFloat("_uitint", 0, &tint) != B_OK)
+ tint = B_NO_TINT;
+
+ SetHighUIColor((color_which)color, tint);
+ }
+ if (archive->FindInt32("_uicolor", 1, &color) == B_OK
+ && color != B_NO_COLOR) {
+ if (archive->FindFloat("_uitint", 1, &tint) != B_OK)
+ tint = B_NO_TINT;
+
+ SetLowUIColor((color_which)color, tint);
+ }
+ if (archive->FindInt32("_uicolor", 2, &color) == B_OK
+ && color != B_NO_COLOR) {
+ if (archive->FindFloat("_uitint", 2, &tint) != B_OK)
+ tint = B_NO_TINT;
+
+ SetViewUIColor((color_which)color, tint);
+ }
+
uint32 evMask;
uint32 options;
if (archive->FindInt32("_evmask", 0, (int32*)&evMask) == B_OK
@@ -594,6 +626,20 @@ BView::Archive(BMessage* data, bool deep) const
if (ret == B_OK)
ret = data->AddInt32("_color", get_uint32_color(ViewColor()));

+ if (ret == B_OK)
+ ret = data->AddInt32("_uicolor", (int32)HighUIColor());
+ if (ret == B_OK)
+ ret = data->AddInt32("_uicolor", (int32)LowUIColor());
+ if (ret == B_OK)
+ ret = data->AddInt32("_uicolor", (int32)ViewUIColor());
+
+ if (ret == B_OK)
+ ret = data->AddFloat("_uitint", fState->which_high_color_tint);
+ if (ret == B_OK)
+ ret = data->AddFloat("_uitint", fState->which_low_color_tint);
+ if (ret == B_OK)
+ ret = data->AddFloat("_uitint", fState->which_view_color_tint);
+
// NOTE: we do not use this flag any more
// if ( 1 ){
// ret = data->AddInt32("_dbuf", 1);
@@ -2253,6 +2299,8 @@ BView::PenSize() const
void
BView::SetHighColor(rgb_color color)
{
+ SetHighUIColor(B_NO_COLOR, B_NO_TINT);
+
// are we up-to-date already?
if (fState->IsValid(B_VIEW_HIGH_COLOR_BIT)
&& fState->high_color == color)
@@ -2273,6 +2321,31 @@ BView::SetHighColor(rgb_color color)
}


+void
+BView::SetHighUIColor(color_which which, float tint)
+{
+ if (fState->IsValid(B_VIEW_WHICH_HIGH_COLOR_BIT)) {
+ if (which == fState->which_high_color
+ && tint == fState->which_high_color_tint)
+ return; // no changes to make
+ } else if (which == B_NO_COLOR)
+ return; // setting no color when we already don't have one
+
+ fState->which_high_color = which;
+ fState->which_high_color_tint = tint;
+
+ if (which == B_NO_COLOR) {
+ SetHighColor(0, 0, 0, 255); // default high color
+ fState->valid_flags &= ~B_VIEW_WHICH_HIGH_COLOR_BIT;
+ fState->archiving_flags &= ~B_VIEW_WHICH_HIGH_COLOR_BIT;
+ } else {
+ SetHighColor(tint_color(ui_color(which), tint));
+ fState->valid_flags |= B_VIEW_WHICH_HIGH_COLOR_BIT;
+ fState->archiving_flags |= B_VIEW_WHICH_HIGH_COLOR_BIT;
+ }
+}
+
+
rgb_color
BView::HighColor() const
{
@@ -2294,9 +2367,18 @@ BView::HighColor() const
}


+color_which
+BView::HighUIColor() const
+{
+ return fState->which_high_color;
+}
+
+
void
BView::SetLowColor(rgb_color color)
{
+ SetLowUIColor(B_NO_COLOR, B_NO_TINT);
+
if (fState->IsValid(B_VIEW_LOW_COLOR_BIT)
&& fState->low_color == color)
return;
@@ -2316,6 +2398,31 @@ BView::SetLowColor(rgb_color color)
}


+void
+BView::SetLowUIColor(color_which which, float tint)
+{
+ if (fState->IsValid(B_VIEW_WHICH_LOW_COLOR_BIT)) {
+ if (which == fState->which_low_color
+ && tint == fState->which_low_color_tint)
+ return; // no changes to make
+ } else if (which == B_NO_COLOR)
+ return; // setting no color when we already don't have one
+
+ fState->which_low_color = which;
+ fState->which_low_color_tint = tint;
+
+ if (which == B_NO_COLOR) {
+ SetLowColor(ViewColor()); // default low color
+ fState->valid_flags &= ~B_VIEW_WHICH_LOW_COLOR_BIT;
+ fState->archiving_flags &= ~B_VIEW_WHICH_LOW_COLOR_BIT;
+ } else {
+ SetLowColor(tint_color(ui_color(which), tint));
+ fState->valid_flags |= B_VIEW_WHICH_LOW_COLOR_BIT;
+ fState->archiving_flags |= B_VIEW_WHICH_LOW_COLOR_BIT;
+ }
+}
+
+
rgb_color
BView::LowColor() const
{
@@ -2337,9 +2444,18 @@ BView::LowColor() const
}


+color_which
+BView::LowUIColor() const
+{
+ return fState->which_low_color;
+}
+
+
void
BView::SetViewColor(rgb_color color)
{
+ SetViewUIColor(B_NO_COLOR, B_NO_TINT);
+
if (fState->IsValid(B_VIEW_VIEW_COLOR_BIT) && fState->view_color ==
color)
return;

@@ -2359,6 +2475,31 @@ BView::SetViewColor(rgb_color color)
}


+void
+BView::SetViewUIColor(color_which which, float tint)
+{
+ if (fState->IsValid(B_VIEW_WHICH_VIEW_COLOR_BIT)) {
+ if (which == fState->which_view_color
+ && tint == fState->which_view_color_tint)
+ return; // no changes to make
+ } else if (which == B_NO_COLOR)
+ return; // setting no color when we already don't have one
+
+ fState->which_view_color = which;
+ fState->which_view_color_tint = tint;
+
+ if (which == B_NO_COLOR) {
+ SetViewColor(255, 255, 255, 255); // default view color
+ fState->valid_flags &= ~B_VIEW_WHICH_VIEW_COLOR_BIT;
+ fState->archiving_flags &= ~B_VIEW_WHICH_VIEW_COLOR_BIT;
+ } else {
+ SetViewColor(tint_color(ui_color(which), tint));
+ fState->valid_flags |= B_VIEW_WHICH_VIEW_COLOR_BIT;
+ fState->archiving_flags |= B_VIEW_WHICH_VIEW_COLOR_BIT;
+ }
+}
+
+
rgb_color
BView::ViewColor() const
{
@@ -2380,6 +2521,13 @@ BView::ViewColor() const
}


+color_which
+BView::ViewUIColor() const
+{
+ return fState->which_view_color;
+}
+
+
void
BView::ForceFontAliasing(bool enable)
{
@@ -5522,6 +5670,16 @@ BView::_Attach()
void
BView::_ColorsUpdated(BMessage* message)
{
+ _UpdateUIColor(B_NO_COLOR);
+
+ // Quite literally, 95%+ of all views, will want to redraw when this
+ // is called, making this the default behavior simply makes sense.
+ // When backwards compatibility is no longer an issue, making a public
+ // hook function will make sense, then BControl, BBox, BListView,
+ // and so on can implement the hook and Invalidate() as needed and
+ // custom views can respond as they see fit, not needlessly redrawing.
+ Invalidate();
+
MessageReceived(message);

for (BView* child = fFirstChild; child != NULL;
@@ -5532,6 +5690,28 @@ BView::_ColorsUpdated(BMessage* message)


void
+BView::_UpdateUIColor(color_which unused)
+{
+ //TODO: check message if the 'which' is the same as in the state
+ // Don't do this until we actually have that information from
+ // the app_server!!
+
+ // Using a color_which constant for the view color
+ if (fState->IsValid(B_VIEW_WHICH_VIEW_COLOR_BIT))
+ SetViewUIColor(fState->which_view_color,
+ fState->which_view_color_tint);
+
+ if (fState->IsValid(B_VIEW_WHICH_LOW_COLOR_BIT))
+ SetLowUIColor(fState->which_low_color,
+ fState->which_low_color_tint);
+
+ if (fState->IsValid(B_VIEW_WHICH_HIGH_COLOR_BIT))
+ SetHighUIColor(fState->which_high_color,
+ fState->which_high_color_tint);
+}
+
+
+void
BView::_Detach()
{
DetachedFromWindow();
diff --git a/src/servers/app/ServerWindow.cpp b/src/servers/app/ServerWindow.cpp
index e52a442..c006933 100644
--- a/src/servers/app/ServerWindow.cpp
+++ b/src/servers/app/ServerWindow.cpp
@@ -1036,7 +1036,7 @@ ServerWindow::_DispatchMessage(int32 code,
BPrivate::LinkReceiver& link)
// considering the response to this message will
// pretty much always just be an Invalidate()
BMessage message(code);
- message.AddInt64("time", system_time());
+ SendMessageToClient(&message);
break;
}


############################################################################

Commit: cf3cdb69b51014d2e4f2a59393923cad8d717e6e
Author: looncraz <looncraz@xxxxxxxxxxxx>
Date: Fri Sep 25 23:58:29 2015 UTC

Significant Progress

Expanded Set*UIColor to include tint.
Implemented AdoptParentColors() in BView.
Handled updating colors when views are re-attached (BTabViews, mostly)
Modified Deskbar & Tracker to use the new API.

Issues:

Some controls still have issues getting colors from the parent due to some
unfound layout issue (probably just ordering, I'll find it).

BBox label views and sometimes the whole BBox will sometimes be fully white.

Incidental Enhancements:

Increased use of appopriate ui_colors, less hard-coded colors.
Type-ahead filtering in Tracker is more obvious as colors are swapped
to other system constants (document background/text colors).

Performance Considerations:

There is minimal overhead using Set*UIColor() over traditional methods that
also involved ui_color()/tint_color().

When colors are changing, even with many many windows open, color updates are
effectively instant. Every CPU core is used during the updates, naturally.

Memory utilization is 24 bytes per view, IIRC. Regardless of whether or not
you use this feature.

----------------------------------------------------------------------------

diff --git a/headers/os/interface/View.h b/headers/os/interface/View.h
index d55e7a3..0e55cc3 100644
--- a/headers/os/interface/View.h
+++ b/headers/os/interface/View.h
@@ -237,13 +237,14 @@ public:
void SetViewCursor(const
BCursor* cursor,
bool
sync = true);

+ void AdoptParentColors();
virtual void SetViewColor(rgb_color color);
void SetViewColor(uchar red,
uchar green, uchar blue,
uchar
alpha = 255);
void
SetViewUIColor(color_which which,
float
tint = B_NO_TINT);
rgb_color ViewColor() const;
- color_which ViewUIColor() const;
+ color_which ViewUIColor(float* tint
= NULL) const;

void SetViewBitmap(const
BBitmap* bitmap,
BRect
srcRect, BRect dstRect,
@@ -275,7 +276,7 @@ public:
void
SetHighUIColor(color_which which,
float
tint = B_NO_TINT);
rgb_color HighColor() const;
- color_which HighUIColor() const;
+ color_which HighUIColor(float* tint
= NULL) const;

virtual void SetLowColor(rgb_color color);
void SetLowColor(uchar red,
uchar green, uchar blue,
@@ -283,7 +284,7 @@ public:
void
SetLowUIColor(color_which which,
float
tint = B_NO_TINT);
rgb_color LowColor() const;
- color_which LowUIColor() const;
+ color_which LowUIColor(float* tint
= NULL) const;

void SetLineMode(cap_mode
lineCap,

join_mode lineJoin,
diff --git a/headers/os/interface/Window.h b/headers/os/interface/Window.h
index 586bfb7..c59a549 100644
--- a/headers/os/interface/Window.h
+++ b/headers/os/interface/Window.h
@@ -272,7 +272,7 @@ public:

void InvalidateLayout(bool
descendants = false);
void Layout(bool force);
-
+ bool IsOffscreenWindow()
const;
private:
// FBC padding and forbidden methods
virtual void _ReservedWindow2();
diff --git a/src/apps/deskbar/BarMenuBar.cpp b/src/apps/deskbar/BarMenuBar.cpp
index 7f3213e..2189d12 100644
--- a/src/apps/deskbar/BarMenuBar.cpp
+++ b/src/apps/deskbar/BarMenuBar.cpp
@@ -74,7 +74,7 @@ TSeparatorItem::Draw()

BRect frame(Frame());
frame.right = frame.left + kSepItemWidth;
- rgb_color base = menu->LowColor();
+ rgb_color base = ui_color(B_MENU_BACKGROUND_COLOR);

menu->PushState();

diff --git a/src/apps/deskbar/BarMenuTitle.cpp
b/src/apps/deskbar/BarMenuTitle.cpp
index b97cea4..48b1bf7 100644
--- a/src/apps/deskbar/BarMenuTitle.cpp
+++ b/src/apps/deskbar/BarMenuTitle.cpp
@@ -86,7 +86,7 @@ TBarMenuTitle::Draw()
return;

BRect frame(Frame());
- rgb_color base = menu->LowColor();
+ rgb_color base = ui_color(B_MENU_BACKGROUND_COLOR);

menu->PushState();

diff --git a/src/apps/deskbar/BarView.cpp b/src/apps/deskbar/BarView.cpp
index 8634207..bd45e30 100644
--- a/src/apps/deskbar/BarView.cpp
+++ b/src/apps/deskbar/BarView.cpp
@@ -192,7 +192,7 @@ TBarView::AttachedToWindow()
{
BView::AttachedToWindow();

- SetViewColor(ui_color(B_MENU_BACKGROUND_COLOR));
+ SetViewUIColor(B_MENU_BACKGROUND_COLOR);
SetFont(be_plain_font);

fMouseFilter = new BarViewMessageFilter(this);
diff --git a/src/apps/deskbar/ExpandoMenuBar.cpp
b/src/apps/deskbar/ExpandoMenuBar.cpp
index 304722a..b4c01b1 100644
--- a/src/apps/deskbar/ExpandoMenuBar.cpp
+++ b/src/apps/deskbar/ExpandoMenuBar.cpp
@@ -822,7 +822,7 @@ TExpandoMenuBar::DrawBackground(BRect updateRect)
return;

BRect bounds(Bounds());
- rgb_color menuColor = LowColor();
+ rgb_color menuColor = ui_color(B_MENU_BACKGROUND_COLOR);
rgb_color hilite = tint_color(menuColor, B_DARKEN_1_TINT);
rgb_color vlight = tint_color(menuColor, B_LIGHTEN_2_TINT);

diff --git a/src/apps/deskbar/InlineScrollView.cpp
b/src/apps/deskbar/InlineScrollView.cpp
index e80591b..27cbafb 100644
--- a/src/apps/deskbar/InlineScrollView.cpp
+++ b/src/apps/deskbar/InlineScrollView.cpp
@@ -85,7 +85,7 @@ ScrollArrow::ScrollArrow(BRect frame)
BView(frame, "menu scroll arrow", B_FOLLOW_NONE, B_WILL_DRAW),
fEnabled(false)
{
- SetViewColor(ui_color(B_MENU_BACKGROUND_COLOR));
+ SetViewUIColor(B_MENU_BACKGROUND_COLOR);
}


diff --git a/src/apps/deskbar/StatusView.cpp b/src/apps/deskbar/StatusView.cpp
index b672072..4b4746e 100644
--- a/src/apps/deskbar/StatusView.cpp
+++ b/src/apps/deskbar/StatusView.cpp
@@ -167,11 +167,12 @@ TReplicantTray::AttachedToWindow()
{
BView::AttachedToWindow();

+ float tint = B_NO_TINT;
+
if (be_control_look != NULL) {
- SetViewColor(Parent()->ViewColor());
+ SetViewUIColor(Parent()->ViewUIColor(&tint), tint);
} else {
- SetViewColor(tint_color(ui_color(B_MENU_BACKGROUND_COLOR),
- B_DARKEN_1_TINT));
+ SetViewUIColor(B_MENU_BACKGROUND_COLOR, B_DARKEN_1_TINT);
}
SetDrawingMode(B_OP_COPY);

@@ -1310,9 +1311,9 @@ TDragRegion::AttachedToWindow()
{
BView::AttachedToWindow();
if (be_control_look != NULL)
- SetViewColor(tint_color(ui_color(B_MENU_BACKGROUND_COLOR),
1.1));
+ SetViewUIColor(B_MENU_BACKGROUND_COLOR, 1.1);
else
- SetViewColor(ui_color(B_MENU_BACKGROUND_COLOR));
+ SetViewUIColor(B_MENU_BACKGROUND_COLOR);
ResizeToPreferred();
}

diff --git a/src/apps/deskbar/Switcher.cpp b/src/apps/deskbar/Switcher.cpp
index 5146f5e..f1ac4ca 100644
--- a/src/apps/deskbar/Switcher.cpp
+++ b/src/apps/deskbar/Switcher.cpp
@@ -1803,19 +1803,16 @@ TIconView::TIconView(BRect frame, TSwitchManager*
manager,
fManager(manager)
{
BRect rect(0, 0, kSlotSize - 1, kSlotSize - 1);
- rgb_color color = tint_color(ui_color(B_PANEL_BACKGROUND_COLOR),
- B_DARKEN_1_TINT);

fOffView = new BView(rect, "off_view", B_FOLLOW_NONE, B_WILL_DRAW);
- fOffView->SetHighColor(color);
fOffBitmap = new BBitmap(rect, B_RGB32, true);
fOffBitmap->AddChild(fOffView);

fCurrentSmall = new BBitmap(BRect(0, 0, 15, 15), kIconFormat);
fCurrentLarge = new BBitmap(BRect(0, 0, 31, 31), kIconFormat);

- SetViewColor(color);
- SetLowColor(color);
+ SetViewUIColor(B_PANEL_BACKGROUND_COLOR, B_DARKEN_1_TINT);
+ SetLowUIColor(B_PANEL_BACKGROUND_COLOR, B_DARKEN_1_TINT);
}


@@ -1873,6 +1870,8 @@ TIconView::AnimateIcon(BBitmap* startIcon, BBitmap*
endIcon)
destRect.OffsetBy(BPoint(off, off));

fOffBitmap->Lock();
+ fOffView->SetHighColor(tint_color(ui_color(B_PANEL_BACKGROUND_COLOR),
+
B_DARKEN_1_TINT));

for (int i = 0; i < 2; i++) {
startIconBounds.InsetBy(amount, amount);
@@ -2098,10 +2097,11 @@ TWindowView::TWindowView(BRect rect, TSwitchManager*
manager,
void
TWindowView::AttachedToWindow()
{
+ float tint = B_NO_TINT;
if (Parent())
- SetViewColor(Parent()->ViewColor());
+ SetViewUIColor(Parent()->ViewUIColor(&tint), tint);
else
- SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
+ SetViewUIColor(B_PANEL_BACKGROUND_COLOR);
}


diff --git a/src/apps/deskbar/TeamMenuItem.cpp
b/src/apps/deskbar/TeamMenuItem.cpp
index 3f072e2..ee1f297 100644
--- a/src/apps/deskbar/TeamMenuItem.cpp
+++ b/src/apps/deskbar/TeamMenuItem.cpp
@@ -180,7 +180,7 @@ TTeamMenuItem::Draw()

menu->PushState();

- rgb_color menuColor = menu->LowColor();
+ rgb_color menuColor = ui_color(B_MENU_BACKGROUND_COLOR);
bool canHandle = !fBarView->Dragging()
|| fBarView->AppCanHandleTypes(Signature());
uint32 flags = 0;
@@ -274,10 +274,10 @@ TTeamMenuItem::DrawContent()
bool canHandle = !fBarView->Dragging()
|| fBarView->AppCanHandleTypes(Signature());
if (_IsSelected() && IsEnabled() && canHandle)
- menu->SetLowColor(tint_color(menu->LowColor(),
+ menu->SetLowColor(tint_color(ui_color(B_MENU_BACKGROUND_COLOR),
B_HIGHLIGHT_BACKGROUND_TINT));
else
- menu->SetLowColor(menu->LowColor());
+ menu->SetLowColor(ui_color(B_MENU_BACKGROUND_COLOR));

if (IsSelected())
menu->SetHighColor(ui_color(B_MENU_SELECTED_ITEM_TEXT_COLOR));
@@ -308,7 +308,7 @@ TTeamMenuItem::DrawExpanderArrow()

rect.OffsetTo(BPoint(frame.right - rect.Width(),
ContentLocation().y + ((frame.Height() - rect.Height()) / 2)));
- be_control_look->DrawArrowShape(menu, rect, rect, menu->LowColor(),
+ be_control_look->DrawArrowShape(menu, rect, rect,
ui_color(B_MENU_BACKGROUND_COLOR),
fArrowDirection, 0, B_DARKEN_3_TINT);
}

diff --git a/src/apps/deskbar/TimeView.cpp b/src/apps/deskbar/TimeView.cpp
index 5a96ed8..2ec3f91 100644
--- a/src/apps/deskbar/TimeView.cpp
+++ b/src/apps/deskbar/TimeView.cpp
@@ -135,11 +135,13 @@ TTimeView::AttachedToWindow()
fCurrentTime = time(NULL);

SetFont(be_plain_font);
+ float tint = B_NO_TINT;
+
if (Parent()) {
fParent = Parent();
- SetViewColor(Parent()->ViewColor());
+ SetViewUIColor(Parent()->ViewUIColor(&tint), tint);
} else
- SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
+ SetViewUIColor(B_PANEL_BACKGROUND_COLOR);

CalculateTextPlacement();
ResizeToPreferred();
diff --git a/src/apps/deskbar/WindowMenuItem.cpp
b/src/apps/deskbar/WindowMenuItem.cpp
index 45bedb8..f9d70bf 100644
--- a/src/apps/deskbar/WindowMenuItem.cpp
+++ b/src/apps/deskbar/WindowMenuItem.cpp
@@ -113,7 +113,7 @@ TWindowMenuItem::Draw()

// TODO: Tint this smartly based on the low color, this does
// nothing to black.
- rgb_color menuColor = tint_color(Menu()->LowColor(), 1.07);
+ rgb_color menuColor = tint_color(ui_color(B_MENU_BACKGROUND_COLOR),
1.07);
BRect frame(Frame());
BMenu* menu = Menu();

diff --git a/src/apps/magnify/Magnify.cpp b/src/apps/magnify/Magnify.cpp
index 28e5a56..4fe28d1 100644
--- a/src/apps/magnify/Magnify.cpp
+++ b/src/apps/magnify/Magnify.cpp
@@ -1050,7 +1050,6 @@ TMagnify::TMagnify(BRect r, TWindow* parent)
fParent(parent),
fStickCoordinates(false)
{
- SetViewColor(B_TRANSPARENT_32_BIT);
}


@@ -1073,6 +1072,7 @@ TMagnify::AttachedToWindow()

resume_thread(fThread);

+ SetViewColor(B_TRANSPARENT_32_BIT);
MakeFocus();
}

diff --git a/src/kits/interface/AbstractSpinner.cpp
b/src/kits/interface/AbstractSpinner.cpp
index 576697a..bd4da86 100644
--- a/src/kits/interface/AbstractSpinner.cpp
+++ b/src/kits/interface/AbstractSpinner.cpp
@@ -311,9 +311,6 @@ SpinnerButton::SpinnerButton(BRect frame, const char* name,
fIsMouseOver(false),
fRepeatDelay(100000)
{
- rgb_color bgColor = ui_color(B_PANEL_BACKGROUND_COLOR);
- SetViewColor(bgColor);
- SetLowColor(bgColor);
}


@@ -327,6 +324,7 @@ SpinnerButton::AttachedToWindow()
{
fParent = static_cast<BAbstractSpinner*>(Parent());

+ AdoptParentColors();
BView::AttachedToWindow();
}

@@ -534,9 +532,6 @@ SpinnerTextView::SpinnerTextView(BRect rect, BRect textRect)
B_WILL_DRAW | B_NAVIGABLE),
fParent(NULL)
{
- rgb_color bgColor = ui_color(B_PANEL_BACKGROUND_COLOR);
- SetViewColor(bgColor);
- SetLowColor(bgColor);
}


@@ -550,6 +545,7 @@ SpinnerTextView::AttachedToWindow()
{
fParent = static_cast<BAbstractSpinner*>(Parent());

+ AdoptParentColors();
BTextView::AttachedToWindow();
}

@@ -1480,10 +1476,6 @@ BAbstractSpinner::_DrawTextView(BRect updateRect)
void
BAbstractSpinner::_InitObject()
{
- rgb_color bgColor = ui_color(B_PANEL_BACKGROUND_COLOR);
- SetViewColor(bgColor);
- SetLowColor(bgColor);
-
fAlignment = B_ALIGN_LEFT;
fButtonStyle = SPINNER_BUTTON_PLUS_MINUS;

@@ -1594,7 +1586,6 @@ void
BAbstractSpinner::_UpdateTextViewColors(bool enable)
{
rgb_color textColor;
- rgb_color bgColor;
BFont font;

fTextView->GetFontAndColor(0, &font);
@@ -1608,15 +1599,22 @@ BAbstractSpinner::_UpdateTextViewColors(bool enable)

fTextView->SetFontAndColor(&font, B_FONT_ALL, &textColor);

- if (enable)
- bgColor = ui_color(B_DOCUMENT_BACKGROUND_COLOR);
- else {
- bgColor = tint_color(ui_color(B_PANEL_BACKGROUND_COLOR),
- B_LIGHTEN_2_TINT);
+ if (enable) {
+ fTextView->SetViewUIColor(B_DOCUMENT_BACKGROUND_COLOR);
+ fTextView->SetLowUIColor(ViewUIColor());
+ } else {
+ color_which which = ViewUIColor();
+
+ if (which != B_NO_COLOR) {
+ fTextView->SetViewUIColor(which, B_LIGHTEN_2_TINT);
+ fTextView->SetLowUIColor(which, B_LIGHTEN_2_TINT);
+ } else {
+ rgb_color color = tint_color(ViewColor(),
B_LIGHTEN_2_TINT);
+ fTextView->SetViewColor(color);
+ fTextView->SetLowColor(color);
+ }
}

- fTextView->SetViewColor(bgColor);
- fTextView->SetLowColor(bgColor);
}


diff --git a/src/kits/interface/Alert.cpp b/src/kits/interface/Alert.cpp
index 576e14d..f924604 100644
--- a/src/kits/interface/Alert.cpp
+++ b/src/kits/interface/Alert.cpp
@@ -333,14 +333,6 @@ BAlert::MessageReceived(BMessage* msg)
if (msg->what != kAlertButtonMsg)
return BWindow::MessageReceived(msg);

- if (message->what == B_COLORS_UPDATED) {
- rgb_color textColor = ui_color(B_PANEL_TEXT_COLOR);
- fTextView->SetFontAndColor(be_plain_font, B_FONT_ALL,
&textColor);
- }
-
- if (message->what != kAlertButtonMsg)
- return BWindow::MessageReceived(message);
-
int32 which;
if (msg->FindInt32("which", &which) == B_OK) {
if (fAlertSem < 0) {
diff --git a/src/kits/interface/Box.cpp b/src/kits/interface/Box.cpp
index 292abb3..369915b 100644
--- a/src/kits/interface/Box.cpp
+++ b/src/kits/interface/Box.cpp
@@ -49,9 +49,6 @@ BBox::BBox(BRect frame, const char* name, uint32
resizingMode, uint32 flags,
BView(frame, name, resizingMode, flags | B_WILL_DRAW | B_FRAME_EVENTS),
fStyle(border)
{
- SetViewUIColor(B_PANEL_BACKGROUND_COLOR);
- SetLowUIColor(B_PANEL_BACKGROUND_COLOR);
-
_InitObject();
}

@@ -61,9 +58,6 @@ BBox::BBox(const char* name, uint32 flags, border_style
border, BView* child)
BView(name, flags | B_WILL_DRAW | B_FRAME_EVENTS),
fStyle(border)
{
- SetViewUIColor(B_PANEL_BACKGROUND_COLOR);
- SetLowUIColor(B_PANEL_BACKGROUND_COLOR);
-
_InitObject();

if (child)
@@ -76,9 +70,6 @@ BBox::BBox(border_style border, BView* child)
BView(NULL, B_WILL_DRAW | B_FRAME_EVENTS | B_NAVIGABLE_JUMP),
fStyle(border)
{
- SetViewUIColor(B_PANEL_BACKGROUND_COLOR);
- SetLowUIColor(B_PANEL_BACKGROUND_COLOR);
-
_InitObject();

if (child)
@@ -280,23 +271,7 @@ BBox::Draw(BRect updateRect)
void
BBox::AttachedToWindow()
{
- BView* parent = Parent();
- if (parent != NULL) {
- // inherit the color from parent
- rgb_color color = parent->ViewColor();
- if (color == B_TRANSPARENT_COLOR)
- color = ui_color(B_PANEL_BACKGROUND_COLOR);
-
- color_which which = parent->ViewUIColor();
- if (which == B_NO_COLOR) {
- SetViewColor(color);
- SetLowColor(color);
- } else {
- SetViewUIColor(which);
- SetLowUIColor(which);
- }
- }
-
+ AdoptParentColors();
// The box could have been resized in the mean time
fBounds = Bounds();
}
diff --git a/src/kits/interface/Button.cpp b/src/kits/interface/Button.cpp
index b685d9e..d4491fa 100644
--- a/src/kits/interface/Button.cpp
+++ b/src/kits/interface/Button.cpp
@@ -134,7 +134,8 @@ BButton::Draw(BRect updateRect)
{
BRect rect(Bounds());
rgb_color background = LowColor();
- rgb_color base = background;
+ rgb_color base = tint_color(ui_color(B_CONTROL_BACKGROUND_COLOR),
+
B_DARKEN_1_TINT);
uint32 flags = be_control_look->Flags(this);
if (_Flag(FLAG_DEFAULT))
flags |= BControlLook::B_DEFAULT_BUTTON;
@@ -228,7 +229,18 @@ void
BButton::AttachedToWindow()
{
BControl::AttachedToWindow();
- // low color will now be the parents view color
+ // adopt's parent's view and low colors
+
+ // Ensure BButton's low color is the parent's VIEW color.
+ // We don't want to adopt the standard control lowcolor.
+ if (Parent() != NULL) {
+ float tint = B_NO_TINT;
+ color_which which = ViewUIColor(&tint);
+ if (which != B_NO_COLOR)
+ SetLowUIColor(which, tint);
+ else
+ SetLowColor(ViewColor());
+ }

if (IsDefault())
Window()->SetDefaultButton(this);
diff --git a/src/kits/interface/ChannelSlider.cpp
b/src/kits/interface/ChannelSlider.cpp
index d45d0b6..ce16243 100644
--- a/src/kits/interface/ChannelSlider.cpp
+++ b/src/kits/interface/ChannelSlider.cpp
@@ -149,10 +149,7 @@ BChannelSlider::Archive(BMessage* into, bool deep) const
void
BChannelSlider::AttachedToWindow()
{
- BView* parent = Parent();
- if (parent != NULL)
- SetViewColor(parent->ViewColor());
-
+ AdoptParentColors();
BChannelControl::AttachedToWindow();
}

@@ -709,8 +706,6 @@ BChannelSlider::_InitData()
fInitialValues = NULL;
fMinPoint = 0;
fFocusChannel = -1;
-
- SetViewUIColor(B_PANEL_BACKGROUND_COLOR);
}


diff --git a/src/kits/interface/ColorControl.cpp
b/src/kits/interface/ColorControl.cpp
index f8c0dc3..0379cd5 100644
--- a/src/kits/interface/ColorControl.cpp
+++ b/src/kits/interface/ColorControl.cpp
@@ -333,18 +333,10 @@ BColorControl::SetEnabled(bool enabled)
void
BColorControl::AttachedToWindow()
{
- if (Parent()) {
- color_which which = Parent()->ViewUIColor();
- if (which != B_NO_COLOR)
- SetViewUIColor(which);
- else
- SetViewColor(Parent()->ViewColor());
- }
- else
- SetViewUIColor(B_PANEL_BACKGROUND_COLOR);
-
BControl::AttachedToWindow();

+ AdoptParentColors();
+
fRedText->SetTarget(this);
fGreenText->SetTarget(this);
fBlueText->SetTarget(this);
diff --git a/src/kits/interface/Control.cpp b/src/kits/interface/Control.cpp
index 7fa62be..9893fb3 100644
--- a/src/kits/interface/Control.cpp
+++ b/src/kits/interface/Control.cpp
@@ -151,28 +151,7 @@ BControl::WindowActivated(bool active)
void
BControl::AttachedToWindow()
{
- rgb_color color;
- color_which which = B_NO_COLOR;
-
- BView* parent = Parent();
- if (parent != NULL) {
- // inherit the color from parent
- color = parent->ViewColor();
- which = parent->ViewUIColor();
- if (color == B_TRANSPARENT_COLOR)
- color = ui_color(B_PANEL_BACKGROUND_COLOR);
-
- if (which != B_NO_COLOR)
- SetViewUIColor(which);
- else
- SetViewColor(color);
- } else
- SetViewUIColor(B_PANEL_BACKGROUND_COLOR);
-
- if (which != B_NO_COLOR)
- SetLowUIColor(which);
- else
- SetLowColor(ViewColor());
+ AdoptParentColors();

if (!Messenger().IsValid())
SetTarget(Window());
diff --git a/src/kits/interface/Menu.cpp b/src/kits/interface/Menu.cpp
index a93340b..64cea754 100644
--- a/src/kits/interface/Menu.cpp
+++ b/src/kits/interface/Menu.cpp
@@ -380,6 +380,7 @@ void
BMenu::AttachedToWindow()
{
BView::AttachedToWindow();
+ SetLowUIColor(B_MENU_BACKGROUND_COLOR);

_GetShiftKey(sShiftKey);
_GetControlKey(sControlKey);
@@ -1407,7 +1408,7 @@ void
BMenu::DrawBackground(BRect updateRect)
{
if (be_control_look != NULL) {
- rgb_color base = sMenuInfo.background_color;
+ rgb_color base = ui_color(B_MENU_BACKGROUND_COLOR);
uint32 flags = 0;
if (!IsEnabled())
flags |= BControlLook::B_DISABLED;
@@ -1435,7 +1436,7 @@ BMenu::DrawBackground(BRect updateRect)
}

rgb_color oldColor = HighColor();
- SetHighColor(sMenuInfo.background_color);
+ SetHighColor(ui_color(B_MENU_BACKGROUND_COLOR));
FillRect(Bounds() & updateRect, B_SOLID_HIGH);
SetHighColor(oldColor);
}
@@ -1469,7 +1470,7 @@ BMenu::_InitData(BMessage* archive)
fLayoutData = new LayoutData;
fLayoutData->lastResizingMode = ResizingMode();

- SetLowColor(sMenuInfo.background_color);
+ SetLowUIColor(B_MENU_BACKGROUND_COLOR);
SetViewColor(B_TRANSPARENT_COLOR);

fTriggerEnabled = sMenuInfo.triggers_always_shown;
diff --git a/src/kits/interface/MenuField.cpp b/src/kits/interface/MenuField.cpp
index aec1289..7e0b982 100644
--- a/src/kits/interface/MenuField.cpp
+++ b/src/kits/interface/MenuField.cpp
@@ -428,28 +428,7 @@ void
BMenuField::AttachedToWindow()
{
CALLED();
- rgb_color color;
- color_which which = B_NO_COLOR;
-
- BView* parent = Parent();
- if (parent != NULL) {
- // inherit the color from parent
- color = parent->ViewColor();
- which = parent->ViewUIColor();
- if (color == B_TRANSPARENT_COLOR)
- color = ui_color(B_PANEL_BACKGROUND_COLOR);
- } else {
- color = ui_color(B_PANEL_BACKGROUND_COLOR);
- which = B_PANEL_BACKGROUND_COLOR;
- }
-
- if (which == B_NO_COLOR) {
- SetViewColor(color);
- SetLowColor(color);
- } else {
- SetViewUIColor(which);
- SetLowUIColor(which);
- }
+ AdoptParentColors();
}


@@ -1081,21 +1060,6 @@ BMenuField::_DrawLabel(BRect updateRect)
return;

rgb_color base = ui_color(B_PANEL_BACKGROUND_COLOR);
- // vertical alignment
- float y = rect.top
- + roundf((rect.Height() + 1 - fh.ascent - fh.descent) / 2.0f)
- + fh.ascent;
-
- const rgb_color lowColor = LowColor();
-
- MenuPrivate menuPrivate(fMenuBar);
- if (menuPrivate.State() != MENU_STATE_CLOSED)
- SetLowColor(ui_color(B_MENU_SELECTED_BACKGROUND_COLOR));
-
- BRect fillRect(rect.InsetByCopy(0, kVMargin));
- fillRect.right -= kVMargin * 2;
- FillRect(fillRect, B_SOLID_LOW);
-
uint32 flags = 0;
if (!IsEnabled())
flags |= BControlLook::B_DISABLED;
diff --git a/src/kits/interface/SplitView.cpp b/src/kits/interface/SplitView.cpp
index d38f4f4..dae15de 100644
--- a/src/kits/interface/SplitView.cpp
+++ b/src/kits/interface/SplitView.cpp
@@ -239,22 +239,7 @@ BSplitView::AddChild(int32 index, BLayoutItem* child,
float weight)
void
BSplitView::AttachedToWindow()
{
- if (Parent() == NULL)
- return;
-
- color_which which = Parent()->ViewUIColor();
- rgb_color color = Parent()->ViewColor();
-
- if (which != B_NO_COLOR) {
- SetViewUIColor(which);
- SetLowUIColor(which);
- } else
- SetViewColor(color);
-
- // adopt parent's low color, if customized
- if (which != B_NO_COLOR
- && which != Parent()->LowUIColor())
- SetLowUIColor(Parent()->LowUIColor());
+ AdoptParentColors();
}


diff --git a/src/kits/interface/StringView.cpp
b/src/kits/interface/StringView.cpp
index d7ba3c6..5fee265 100644
--- a/src/kits/interface/StringView.cpp
+++ b/src/kits/interface/StringView.cpp
@@ -128,22 +128,7 @@ BStringView::Archive(BMessage* data, bool deep) const
void
BStringView::AttachedToWindow()
{
- rgb_color color = B_TRANSPARENT_COLOR;
- color_which which = B_NO_COLOR;
-
- BView* parent = Parent();
- if (parent != NULL) {
- color = parent->ViewColor();
- which = parent->ViewUIColor();
- }
-
- if (color == B_TRANSPARENT_COLOR)
- color = ui_color(B_PANEL_BACKGROUND_COLOR);
-
- if (which == B_NO_COLOR)
- SetViewColor(color);
- else
- SetViewUIColor(which);
+ AdoptParentColors();
}


diff --git a/src/kits/interface/TabView.cpp b/src/kits/interface/TabView.cpp
index 28c93c6..c2dff33 100644
--- a/src/kits/interface/TabView.cpp
+++ b/src/kits/interface/TabView.cpp
@@ -1224,10 +1224,8 @@ BTabView::_InitObject(bool layouted, button_width width)
fTabOffset = 0.0f;
fBorderStyle = B_FANCY_BORDER;

- rgb_color color = ui_color(B_PANEL_BACKGROUND_COLOR);
-
- SetViewColor(color);
- SetLowColor(color);
+ SetViewUIColor(B_PANEL_BACKGROUND_COLOR);
+ SetLowUIColor(B_PANEL_BACKGROUND_COLOR);

font_height fh;
GetFontHeight(&fh);
@@ -1264,8 +1262,8 @@ BTabView::_InitContainerView(bool layouted)
_LayoutContainerView(layouted);

if (createdContainer) {
-
fContainerView->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
- fContainerView->SetLowColor(fContainerView->ViewColor());
+ fContainerView->SetViewUIColor(B_PANEL_BACKGROUND_COLOR);
+ fContainerView->SetLowUIColor(B_PANEL_BACKGROUND_COLOR);
AddChild(fContainerView);
}
}
diff --git a/src/kits/interface/TextControl.cpp
b/src/kits/interface/TextControl.cpp
index 7dcade8..8daf8d9 100644
--- a/src/kits/interface/TextControl.cpp
+++ b/src/kits/interface/TextControl.cpp
@@ -1044,7 +1044,8 @@ BTextControl::_UpdateTextViewColors(bool enable)
else
fText->SetViewUIColor(B_PANEL_BACKGROUND_COLOR,
B_LIGHTEN_2_TINT);

- fText->SetLowUIColor(ViewUIColor());
+ float tint = B_NO_TINT;
+ fText->SetLowUIColor(ViewUIColor(&tint), tint);
}


diff --git a/src/kits/interface/View.cpp b/src/kits/interface/View.cpp
index e243a72..6824e85 100644
--- a/src/kits/interface/View.cpp
+++ b/src/kits/interface/View.cpp
@@ -74,6 +74,7 @@ using std::nothrow;
# define BVTRACE ;
#endif

+const color_which kAllColors = (color_which)~0L;

static property_info sViewPropInfo[] = {
{ "Frame", { B_GET_PROPERTY, B_SET_PROPERTY },
@@ -2299,7 +2300,11 @@ BView::PenSize() const
void
BView::SetHighColor(rgb_color color)
{
- SetHighUIColor(B_NO_COLOR, B_NO_TINT);
+ // Disable HighUIColor
+ fState->which_high_color = B_NO_COLOR;
+ fState->which_high_color_tint = B_NO_TINT;
+ fState->valid_flags &= ~B_VIEW_WHICH_HIGH_COLOR_BIT;
+ fState->archiving_flags &= ~B_VIEW_WHICH_HIGH_COLOR_BIT;

// are we up-to-date already?
if (fState->IsValid(B_VIEW_HIGH_COLOR_BIT)
@@ -2324,16 +2329,6 @@ BView::SetHighColor(rgb_color color)
void
BView::SetHighUIColor(color_which which, float tint)
{
- if (fState->IsValid(B_VIEW_WHICH_HIGH_COLOR_BIT)) {
- if (which == fState->which_high_color
- && tint == fState->which_high_color_tint)
- return; // no changes to make
- } else if (which == B_NO_COLOR)
- return; // setting no color when we already don't have one
-
- fState->which_high_color = which;
- fState->which_high_color_tint = tint;
-
if (which == B_NO_COLOR) {
SetHighColor(0, 0, 0, 255); // default high color
fState->valid_flags &= ~B_VIEW_WHICH_HIGH_COLOR_BIT;
@@ -2343,6 +2338,9 @@ BView::SetHighUIColor(color_which which, float tint)
fState->valid_flags |= B_VIEW_WHICH_HIGH_COLOR_BIT;
fState->archiving_flags |= B_VIEW_WHICH_HIGH_COLOR_BIT;
}
+
+ fState->which_high_color = which;
+ fState->which_high_color_tint = tint;
}


@@ -2368,8 +2366,11 @@ BView::HighColor() const


color_which
-BView::HighUIColor() const
+BView::HighUIColor(float* tint) const
{
+ if (tint != NULL)
+ *tint = fState->which_high_color_tint;
+
return fState->which_high_color;
}

@@ -2377,7 +2378,10 @@ BView::HighUIColor() const
void
BView::SetLowColor(rgb_color color)
{
- SetLowUIColor(B_NO_COLOR, B_NO_TINT);
+ fState->which_low_color = B_NO_COLOR;
+ fState->which_low_color_tint = B_NO_TINT;
+ fState->valid_flags &= ~B_VIEW_WHICH_LOW_COLOR_BIT;
+ fState->archiving_flags &= ~B_VIEW_WHICH_LOW_COLOR_BIT;

if (fState->IsValid(B_VIEW_LOW_COLOR_BIT)
&& fState->low_color == color)
@@ -2401,16 +2405,6 @@ BView::SetLowColor(rgb_color color)
void
BView::SetLowUIColor(color_which which, float tint)
{
- if (fState->IsValid(B_VIEW_WHICH_LOW_COLOR_BIT)) {
- if (which == fState->which_low_color
- && tint == fState->which_low_color_tint)
- return; // no changes to make
- } else if (which == B_NO_COLOR)
- return; // setting no color when we already don't have one
-
- fState->which_low_color = which;
- fState->which_low_color_tint = tint;
-
if (which == B_NO_COLOR) {
SetLowColor(ViewColor()); // default low color
fState->valid_flags &= ~B_VIEW_WHICH_LOW_COLOR_BIT;
@@ -2420,6 +2414,9 @@ BView::SetLowUIColor(color_which which, float tint)
fState->valid_flags |= B_VIEW_WHICH_LOW_COLOR_BIT;
fState->archiving_flags |= B_VIEW_WHICH_LOW_COLOR_BIT;
}
+
+ fState->which_low_color = which;
+ fState->which_low_color_tint = tint;
}


@@ -2445,16 +2442,57 @@ BView::LowColor() const


color_which
-BView::LowUIColor() const
+BView::LowUIColor(float* tint) const
{
+ if (tint != NULL)
+ *tint = fState->which_low_color_tint;
+
return fState->which_low_color;
}


void
+BView::AdoptParentColors()
+{
+ /*
+ We adopt our parents view and low colors.
+ High color is not inherited.
+ */
+
+ BView* parent = Parent();
+
+ if (parent == NULL)
+ return;
+
+ float tint = B_NO_TINT, viewTint = tint;
+ color_which viewWhich = parent->ViewUIColor(&viewTint);
+
+ if (viewWhich != B_NO_COLOR)
+ SetViewUIColor(viewWhich, viewTint);
+ else
+ SetViewColor(parent->ViewColor());
+
+ color_which which = parent->LowUIColor(&tint);
+
+ // Adopt the parent's ViewUI color if a LowUI color has not
+ // been declared.
+ if (which != B_NO_COLOR)
+ SetLowUIColor(which, tint);
+ else if (viewWhich != B_NO_COLOR)
+ SetLowUIColor(viewWhich, viewTint);
+ else
+ SetLowColor(parent->LowColor());
+
+}
+
+
+void
BView::SetViewColor(rgb_color color)
{
- SetViewUIColor(B_NO_COLOR, B_NO_TINT);
+ fState->which_view_color = B_NO_COLOR;
+ fState->which_view_color_tint = B_NO_TINT;
+ fState->valid_flags &= ~B_VIEW_WHICH_VIEW_COLOR_BIT;
+ fState->archiving_flags &= ~B_VIEW_WHICH_VIEW_COLOR_BIT;

if (fState->IsValid(B_VIEW_VIEW_COLOR_BIT) && fState->view_color ==
color)
return;
@@ -2478,16 +2516,6 @@ BView::SetViewColor(rgb_color color)
void
BView::SetViewUIColor(color_which which, float tint)
{
- if (fState->IsValid(B_VIEW_WHICH_VIEW_COLOR_BIT)) {
- if (which == fState->which_view_color
- && tint == fState->which_view_color_tint)
- return; // no changes to make
- } else if (which == B_NO_COLOR)
- return; // setting no color when we already don't have one
-
- fState->which_view_color = which;
- fState->which_view_color_tint = tint;
-
if (which == B_NO_COLOR) {
SetViewColor(255, 255, 255, 255); // default view color
fState->valid_flags &= ~B_VIEW_WHICH_VIEW_COLOR_BIT;
@@ -2497,6 +2525,9 @@ BView::SetViewUIColor(color_which which, float tint)
fState->valid_flags |= B_VIEW_WHICH_VIEW_COLOR_BIT;
fState->archiving_flags |= B_VIEW_WHICH_VIEW_COLOR_BIT;
}
+
+ fState->which_view_color = which;
+ fState->which_view_color_tint = tint;
}


@@ -2522,8 +2553,11 @@ BView::ViewColor() const


color_which
-BView::ViewUIColor() const
+BView::ViewUIColor(float* tint) const
{
+ if (tint != NULL)
+ *tint = fState->which_view_color_tint;
+
return fState->which_view_color;
}

@@ -5638,6 +5672,16 @@ BView::_Activate(bool active)
void
BView::_Attach()
{
+ // Synchronous colors in case they have changed since this view
+ // was previously attached. This is needed for BTabView to
+ // update view properly since BTabView, for some reason, removes
+ // the views that are not in the current tab, for some reason...
+ // Not sure why Be made that choice, Haiku is just stuck with it.
+ // For now. (i.e. remove this when that is fixed :p)
+ if (fOwner != NULL
+ && !fOwner->IsOffscreenWindow())
+ _UpdateUIColor(kAllColors);
+
AttachedToWindow();
fAttached = true;

@@ -5672,14 +5716,6 @@ BView::_ColorsUpdated(BMessage* message)
{
_UpdateUIColor(B_NO_COLOR);

- // Quite literally, 95%+ of all views, will want to redraw when this
- // is called, making this the default behavior simply makes sense.
- // When backwards compatibility is no longer an issue, making a public
- // hook function will make sense, then BControl, BBox, BListView,
- // and so on can implement the hook and Invalidate() as needed and
- // custom views can respond as they see fit, not needlessly redrawing.
- Invalidate();
-
MessageReceived(message);

for (BView* child = fFirstChild; child != NULL;
@@ -5690,24 +5726,33 @@ BView::_ColorsUpdated(BMessage* message)


void
-BView::_UpdateUIColor(color_which unused)
+BView::_UpdateUIColor(color_which which)
{
//TODO: check message if the 'which' is the same as in the state
// Don't do this until we actually have that information from
// the app_server!!

- // Using a color_which constant for the view color
- if (fState->IsValid(B_VIEW_WHICH_VIEW_COLOR_BIT))
+ // The check should be:
+ // fState->which_*_color == which
+ // || (which == kAllColors
+ // && fState->which_*_color != B_NO_COLOR)
+
+ if (fState->which_view_color != B_NO_COLOR)
SetViewUIColor(fState->which_view_color,
fState->which_view_color_tint);

- if (fState->IsValid(B_VIEW_WHICH_LOW_COLOR_BIT))
+ if (fState->which_low_color != B_NO_COLOR)
SetLowUIColor(fState->which_low_color,
fState->which_low_color_tint);

- if (fState->IsValid(B_VIEW_WHICH_HIGH_COLOR_BIT))
+ if (fState->which_high_color != B_NO_COLOR)
SetHighUIColor(fState->which_high_color,
fState->which_high_color_tint);
+
+ Invalidate();
+ // We always redraw the view, as most system interface views
and most
+ // user views will need to refresh manually, so the unwanted
overhead
+ // of redrawing 5% of views without cause is negligible.
}


diff --git a/src/kits/interface/Window.cpp b/src/kits/interface/Window.cpp
index 6dbf058..6099019 100644
--- a/src/kits/interface/Window.cpp
+++ b/src/kits/interface/Window.cpp
@@ -2731,6 +2731,13 @@ BWindow::Layout(bool force)
}


+bool
+BWindow::IsOffscreenWindow() const
+{
+ return fOffscreen;
+}
+
+
status_t
BWindow::GetSupportedSuites(BMessage* data)
{
diff --git a/src/kits/tracker/ContainerWindow.cpp
b/src/kits/tracker/ContainerWindow.cpp
index e96baf7..cb39e8f 100644
--- a/src/kits/tracker/ContainerWindow.cpp
+++ b/src/kits/tracker/ContainerWindow.cpp
@@ -517,7 +517,7 @@ BContainerWindow::BContainerWindow(LockingList<BWindow>*
list,
fRootLayout = new BGroupLayout(B_VERTICAL, 0);
fRootLayout->SetInsets(0);
SetLayout(fRootLayout);
-
fRootLayout->Owner()->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
+ fRootLayout->Owner()->SetViewUIColor(B_PANEL_BACKGROUND_COLOR);

if (!fIsDesktop) {
fMenuContainer = new BGroupView(B_HORIZONTAL, 0);
@@ -4334,8 +4334,7 @@ BorderedView::BorderedView()
fEnableBorderHighlight(true)
{
GroupLayout()->SetInsets(1);
- SetViewColor(tint_color(ui_color(B_PANEL_BACKGROUND_COLOR),
- B_DARKEN_2_TINT));
+ SetViewUIColor(B_PANEL_BACKGROUND_COLOR, B_DARKEN_2_TINT);
}


@@ -4361,9 +4360,11 @@ BorderedView::PoseViewFocused(bool focused)
if (window == NULL)
return;

- rgb_color base;
+ color_which base = B_PANEL_BACKGROUND_COLOR;
+ float tint = B_DARKEN_2_TINT;
if (focused && window->IsActive() && fEnableBorderHighlight) {
- base = ui_color(B_KEYBOARD_NAVIGATION_COLOR);
+ base = B_KEYBOARD_NAVIGATION_COLOR;
+ tint = B_NO_TINT;

BScrollBar* hScrollBar = window->PoseView()->HScrollBar();
if (hScrollBar != NULL)
@@ -4372,12 +4373,8 @@ BorderedView::PoseViewFocused(bool focused)
BScrollBar* vScrollBar = window->PoseView()->VScrollBar();
if (vScrollBar != NULL)
vScrollBar->SetBorderHighlighted(focused);
- } else {
- base = ui_color(B_PANEL_BACKGROUND_COLOR);
- base = tint_color(base, B_DARKEN_2_TINT);
}
- SetViewColor(base);
-
+ SetViewUIColor(base, tint);
Invalidate();
}

diff --git a/src/kits/tracker/CountView.cpp b/src/kits/tracker/CountView.cpp
index 55807b0..a812486 100644
--- a/src/kits/tracker/CountView.cpp
+++ b/src/kits/tracker/CountView.cpp
@@ -198,11 +198,15 @@ BCountView::Draw(BRect updateRect)
{
BRect bounds(Bounds());

- be_control_look->DrawBorder(this, bounds, updateRect, ViewColor(),
- B_PLAIN_BORDER, 0,
+ rgb_color color = ViewColor();
+ if (IsTypingAhead())
+ color = ui_color(B_DOCUMENT_BACKGROUND_COLOR);
+
+ SetLowColor(color);
+ be_control_look->DrawBorder(this, bounds, updateRect,
+ ui_color(B_NAVIGATION_BASE_COLOR), B_PLAIN_BORDER, 0,
BControlLook::B_BOTTOM_BORDER | BControlLook::B_LEFT_BORDER);
- be_control_look->DrawMenuBarBackground(this, bounds, updateRect,
- ViewColor());
+ be_control_look->DrawMenuBarBackground(this, bounds, updateRect, color);

BString itemString;
if (IsTypingAhead())
@@ -228,10 +232,9 @@ BCountView::Draw(BRect updateRect)

if (IsTypingAhead()) {
// use a muted gray for the typeahead
- SetHighColor(tint_color(ui_color(B_PANEL_BACKGROUND_COLOR),
- B_DARKEN_4_TINT));
+ SetHighColor(ui_color(B_DOCUMENT_TEXT_COLOR));
} else
- SetHighColor(0, 0, 0);
+ SetHighColor(ui_color(B_PANEL_TEXT_COLOR));

MovePenTo(textRect.LeftBottom());
DrawString(itemString.String());
@@ -313,8 +316,8 @@ BCountView::AttachedToWindow()
SetFont(be_plain_font);
SetFontSize(9);

- SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
- SetLowColor(ViewColor());
+ SetViewUIColor(B_PANEL_BACKGROUND_COLOR);
+ SetLowUIColor(ViewUIColor());

CheckCount();
}
diff --git a/src/kits/tracker/DialogPane.cpp b/src/kits/tracker/DialogPane.cpp
index ad9d063..c4659bc 100644
--- a/src/kits/tracker/DialogPane.cpp
+++ b/src/kits/tracker/DialogPane.cpp
@@ -202,11 +202,7 @@ DialogPane::SetMode(int32 mode, bool initialSetup)
void
DialogPane::AttachedToWindow()
{
- BView* parent = Parent();
- if (parent != NULL) {
- SetViewColor(parent->ViewColor());
- SetLowColor(parent->LowColor());
- }
+ AdoptParentColors();
}


diff --git a/src/kits/tracker/FilePanelPriv.cpp
b/src/kits/tracker/FilePanelPriv.cpp
index 4616e43..14bb434 100644
--- a/src/kits/tracker/FilePanelPriv.cpp
+++ b/src/kits/tracker/FilePanelPriv.cpp
@@ -654,7 +654,7 @@ TFilePanel::Init(const BMessage*)
{
BRect windRect(Bounds());
fBackView = new BView(Bounds(), "View", B_FOLLOW_ALL, 0);
- fBackView->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
+ fBackView->SetViewUIColor(B_PANEL_BACKGROUND_COLOR);
AddChild(fBackView);

// add poseview menu bar
diff --git a/src/kits/tracker/FilePermissionsView.cpp
b/src/kits/tracker/FilePermissionsView.cpp
index 5aeb73c..788aa4c 100644
--- a/src/kits/tracker/FilePermissionsView.cpp
+++ b/src/kits/tracker/FilePermissionsView.cpp
@@ -60,6 +60,8 @@ FilePermissionsView::FilePermissionsView(BRect rect, Model*
model)
BView(rect, "FilePermissionsView", B_FOLLOW_LEFT_RIGHT, B_WILL_DRAW),
fModel(model)
{
+ SetViewUIColor(B_PANEL_BACKGROUND_COLOR);
+
// Constants for the column labels: "User", "Group" and "Other".
const float kColumnLabelMiddle = 77, kColumnLabelTop = 6,
kColumnLabelSpacing = 37, kColumnLabelBottom = 20,
@@ -203,8 +205,6 @@ FilePermissionsView::FilePermissionsView(BRect rect, Model*
model)
fGroupTextControl->SetDivider(0);
AddChild(fGroupTextControl);

- SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
-
ModelChanged(model);
}

diff --git a/src/kits/tracker/FindPanel.cpp b/src/kits/tracker/FindPanel.cpp
index 2fc4034..49faa79 100644
--- a/src/kits/tracker/FindPanel.cpp
+++ b/src/kits/tracker/FindPanel.cpp
@@ -725,8 +725,8 @@ FindPanel::FindPanel(BFile* node, FindWindow* parent, bool
fromTemplate,
fAttrGrid(NULL),
fDraggableIcon(NULL)
{
- SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
- SetLowColor(ui_color(B_PANEL_BACKGROUND_COLOR));
+ SetViewUIColor(B_PANEL_BACKGROUND_COLOR);
+ SetLowUIColor(ViewUIColor());

uint32 initialMode = InitialMode(node);

diff --git a/src/kits/tracker/InfoWindow.cpp b/src/kits/tracker/InfoWindow.cpp
index 6650cb7..29d46aa 100644
--- a/src/kits/tracker/InfoWindow.cpp
+++ b/src/kits/tracker/InfoWindow.cpp
@@ -842,8 +842,11 @@ AttributeView::AttributeView(BRect rect, Model* model)
fLinkWindow(NULL),
fDescWindow(NULL)
{
+ /*
+ We need a LOT of work on colors and font and window size, etc.
+ */
// Set view color to standard background grey
- SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
+ SetViewColor(216, 216, 216);

// If the model is a symlink, then we deference the model to
// get the targets icon
@@ -2248,7 +2251,7 @@ TrackingView::TrackingView(BRect frame, const char* str,
BMessage* message)
fMouseDown(false),
fMouseInView(false)
{
- SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
+ SetViewColor(216,216,216);
SetEventMask(B_POINTER_EVENTS, 0);
}

diff --git a/src/kits/tracker/MiniMenuField.cpp
b/src/kits/tracker/MiniMenuField.cpp
index 3de73fd..b586d46 100644
--- a/src/kits/tracker/MiniMenuField.cpp
+++ b/src/kits/tracker/MiniMenuField.cpp
@@ -61,11 +61,7 @@ MiniMenuField::~MiniMenuField()
void
MiniMenuField::AttachedToWindow()
{
- if (Parent() != NULL) {
- SetViewColor(Parent()->ViewColor());
- SetLowColor(Parent()->ViewColor());
- }
-
+ AdoptParentColors();
SetHighColor(0, 0, 0);
}

diff --git a/src/kits/tracker/PoseView.cpp b/src/kits/tracker/PoseView.cpp
index 8195ca9..261e959 100644
--- a/src/kits/tracker/PoseView.cpp
+++ b/src/kits/tracker/PoseView.cpp
@@ -954,6 +954,10 @@ BPoseView::AttachedToWindow()
fIsDesktopWindow = dynamic_cast<BDeskWindow*>(Window()) != NULL;
if (fIsDesktopWindow)
AddFilter(new TPoseViewFilter(this));
+ else {
+ SetViewUIColor(B_DOCUMENT_BACKGROUND_COLOR);
+ SetLowUIColor(ViewUIColor());
+ }

AddFilter(new ShortcutFilter(B_RETURN, B_OPTION_KEY, kOpenSelection,
this));
@@ -9046,7 +9050,9 @@ BPoseView::DrawAfterChildren(BRect updateRect)
{
if (fTransparentSelection && fSelectionRectInfo.rect.IsValid()) {
SetDrawingMode(B_OP_ALPHA);
- SetHighColor(255, 255, 255, 128);
+ rgb_color color = ui_color(B_NAVIGATION_BASE_COLOR);
+ color.alpha = 128;
+ SetHighColor(color);
if (fSelectionRectInfo.rect.Width() == 0
|| fSelectionRectInfo.rect.Height() == 0) {
StrokeLine(fSelectionRectInfo.rect.LeftTop(),
@@ -9056,7 +9062,9 @@ BPoseView::DrawAfterChildren(BRect updateRect)
BRect interior = fSelectionRectInfo.rect;
interior.InsetBy(1, 1);
if (interior.IsValid()) {
- SetHighColor(80, 80, 80, 90);
+ color = ui_color(B_CONTROL_HIGHLIGHT_COLOR);
+ color.alpha = 90;
+ SetHighColor(color);
FillRect(interior);
}
}
diff --git a/src/kits/tracker/QueryPoseView.cpp
b/src/kits/tracker/QueryPoseView.cpp
index f621bb0..2953bcd 100644
--- a/src/kits/tracker/QueryPoseView.cpp
+++ b/src/kits/tracker/QueryPoseView.cpp
@@ -143,8 +143,7 @@ void
BQueryPoseView::AttachedToWindow()
{
_inherited::AttachedToWindow();
- SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
- SetLowColor(ui_color(B_PANEL_BACKGROUND_COLOR));
+ SetViewUIColor(B_DOCUMENT_BACKGROUND_COLOR, B_DARKEN_1_TINT);
}


diff --git a/src/kits/tracker/SelectionWindow.cpp
b/src/kits/tracker/SelectionWindow.cpp
index 4eaaa41..8d3a987 100644
--- a/src/kits/tracker/SelectionWindow.cpp
+++ b/src/kits/tracker/SelectionWindow.cpp
@@ -76,7 +76,7 @@ SelectionWindow::SelectionWindow(BContainerWindow* window)

BView* backgroundView = new BView(Bounds(), "bgView", B_FOLLOW_ALL,
B_WILL_DRAW);
- backgroundView->SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
+ backgroundView->SetViewUIColor(B_PANEL_BACKGROUND_COLOR);
AddChild(backgroundView);

BMenu* menu = new BPopUpMenu("");
diff --git a/src/kits/tracker/StatusWindow.cpp
b/src/kits/tracker/StatusWindow.cpp
index 6388b7c..3fdf4f5 100644
--- a/src/kits/tracker/StatusWindow.cpp
+++ b/src/kits/tracker/StatusWindow.cpp
@@ -176,7 +176,7 @@ public:
:
BView(frame, "BackView", B_FOLLOW_ALL, B_WILL_DRAW |
B_PULSE_NEEDED)
{
- SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
+ SetViewUIColor(B_PANEL_BACKGROUND_COLOR);
}

virtual void Pulse()
@@ -444,8 +444,8 @@ BStatusView::BStatusView(BRect bounds, thread_id thread,
StatusWindowState type)
{
Init();

- SetViewColor(ui_color(B_PANEL_BACKGROUND_COLOR));
- SetLowColor(ViewColor());
+ SetViewUIColor(B_PANEL_BACKGROUND_COLOR);
+ SetLowUIColor(ViewUIColor());
SetHighColor(20, 20, 20);
SetDrawingMode(B_OP_ALPHA);

diff --git a/src/kits/tracker/TextWidget.cpp b/src/kits/tracker/TextWidget.cpp
index 58dc1ac..d0636da 100644
--- a/src/kits/tracker/TextWidget.cpp
+++ b/src/kits/tracker/TextWidget.cpp
@@ -538,11 +538,11 @@ BTextWidget::Draw(BRect eraseRect, BRect textRect, float,
BPoseView* view,
rgb_color highColor;
if (view->IsDesktopWindow()) {

[ *** diff truncated: 204 lines dropped *** ]



Other related posts:

  • » [haiku-commits] BRANCH looncraz-github.setviewuicolor [cf3cdb69b510] src/kits/interface src/kits/tracker src/apps/deskbar src/servers/app headers/os - looncraz-github . setviewuicolor