From 13cd46dfa37ff39c2aeaf3b9fb1f49e1e5cb539e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20A=C3=9Fmus?= Date: Mon, 16 Feb 2009 13:57:31 +0000 Subject: [PATCH] * Stronger BMenuField popup indicator. * Softer recessed frame for BMenuField to distinguish more from BButton and make it slightly more similar to BTextControl. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29235 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/os/interface/ControlLook.h | 15 ++- src/kits/interface/ControlLook.cpp | 149 ++++++++++++++++------------- src/kits/interface/MenuField.cpp | 2 +- 3 files changed, 99 insertions(+), 67 deletions(-) diff --git a/headers/os/interface/ControlLook.h b/headers/os/interface/ControlLook.h index 4ffba22b3f..7acb3e48f9 100644 --- a/headers/os/interface/ControlLook.h +++ b/headers/os/interface/ControlLook.h @@ -61,7 +61,7 @@ public: virtual float DefaultLabelSpacing() const; uint32 Flags(BControl* control) const; - virtual void DrawButtonFrame(BView* view, BRect& rect, + virtual void DrawButtonFrame(BView* view, BRect& rect, const BRect& updateRect, const rgb_color& base, uint32 flags = 0, @@ -80,6 +80,12 @@ public: const rgb_color& base, uint32 borders = B_ALL_BORDERS); + virtual void DrawMenuFieldFrame(BView* view, BRect& rect, + const BRect& updateRect, + const rgb_color& base, + uint32 flags = 0, + uint32 borders = B_ALL_BORDERS); + virtual void DrawMenuFieldBackground(BView* view, BRect& rect, const BRect& updateRect, const rgb_color& base, bool popupIndicator, @@ -203,6 +209,13 @@ public: const BAlignment& alignment); protected: + void _DrawButtonFrame(BView* view, BRect& rect, + const BRect& updateRect, + const rgb_color& base, + float contrast, float brightness = 1.0, + uint32 flags = 0, + uint32 borders = B_ALL_BORDERS); + void _DrawOuterResessedFrame(BView* view, BRect& rect, const rgb_color& base, float contrast = 1.0f, diff --git a/src/kits/interface/ControlLook.cpp b/src/kits/interface/ControlLook.cpp index e0aca380c7..7dc3809543 100644 --- a/src/kits/interface/ControlLook.cpp +++ b/src/kits/interface/ControlLook.cpp @@ -68,68 +68,7 @@ void BControlLook::DrawButtonFrame(BView* view, BRect& rect, const BRect& updateRect, const rgb_color& base, uint32 flags, uint32 borders) { - // colors - rgb_color dark1BorderColor; - rgb_color dark2BorderColor; - - if ((flags & B_DISABLED) == 0) { - dark1BorderColor = tint_color(base, 1.33); - dark2BorderColor = tint_color(base, 1.45); - - if (flags & B_DEFAULT_BUTTON) { - dark2BorderColor = tint_color(dark1BorderColor, 1.5); - dark1BorderColor = tint_color(dark1BorderColor, 1.35); - } - } else { - dark1BorderColor = tint_color(base, 1.147); - dark2BorderColor = tint_color(base, 1.24); - - if (flags & B_DEFAULT_BUTTON) { - dark1BorderColor = tint_color(dark1BorderColor, 1.12); - dark2BorderColor = tint_color(dark1BorderColor, 1.16); - } - } - - if (flags & B_ACTIVATED) { - rgb_color temp = dark2BorderColor; - dark2BorderColor = dark1BorderColor; - dark1BorderColor = temp; - } - - // indicate focus by changing main button border - if (flags & B_FOCUSED) { - dark1BorderColor = ui_color(B_KEYBOARD_NAVIGATION_COLOR); - dark2BorderColor = dark1BorderColor; - } - - if (flags & B_DEFAULT_BUTTON) { - float focusTint = 1.2; - if (flags & B_DISABLED) - focusTint = (B_NO_TINT + focusTint) / 2; - - rgb_color focusColor = tint_color(base, focusTint); - view->SetHighColor(base); - - view->StrokeRect(rect); - rect.InsetBy(1.0, 1.0); - - view->SetHighColor(focusColor); - view->StrokeRect(rect); - rect.InsetBy(1.0, 1.0); - view->StrokeRect(rect); - rect.InsetBy(1.0, 1.0); - - // bevel around external border - _DrawOuterResessedFrame(view, rect, focusColor, - (flags & B_DISABLED) ? 0.5 : 0.8, 0.9, borders); - } else { - // bevel around external border - _DrawOuterResessedFrame(view, rect, base, - (flags & B_DISABLED) ? 0.0 : 1.0, 1.0, borders); - } - - _DrawFrame(view, rect, dark1BorderColor, dark1BorderColor, - dark2BorderColor, dark2BorderColor, borders); + _DrawButtonFrame(view, rect, updateRect, base, 1.0, 1.0, flags, borders); } @@ -263,6 +202,14 @@ BControlLook::DrawMenuBarBackground(BView* view, BRect& rect, } +void +BControlLook::DrawMenuFieldFrame(BView* view, BRect& rect, const BRect& updateRect, + const rgb_color& base, uint32 flags, uint32 borders) +{ + _DrawButtonFrame(view, rect, updateRect, base, 0.6, 1.0, flags, borders); +} + + void BControlLook::DrawMenuFieldBackground(BView* view, BRect& rect, const BRect& updateRect, const rgb_color& base, bool popupIndicator, @@ -282,10 +229,10 @@ BControlLook::DrawMenuFieldBackground(BView* view, BRect& rect, rgb_color markColor; if (flags & B_DISABLED) { indicatorBase = tint_color(base, 1.05); - markColor = tint_color(base, B_DARKEN_3_TINT); + markColor = tint_color(base, 1.35); } else { - indicatorBase = tint_color(base, 1.09); - markColor = tint_color(base, B_DARKEN_4_TINT); + indicatorBase = tint_color(base, 1.12); + markColor = tint_color(base, 1.65); } DrawMenuFieldBackground(view, rightRect, updateRect, indicatorBase, @@ -1547,6 +1494,78 @@ BControlLook::DrawLabel(BView* view, const char* label, BRect rect, // #pragma mark - +void +BControlLook::_DrawButtonFrame(BView* view, BRect& rect, + const BRect& updateRect, const rgb_color& base, + float contrast, float brightness, uint32 flags, uint32 borders) +{ + // colors + rgb_color dark1BorderColor; + rgb_color dark2BorderColor; + + if ((flags & B_DISABLED) == 0) { + dark1BorderColor = tint_color(base, 1.33); + dark2BorderColor = tint_color(base, 1.45); + + if (flags & B_DEFAULT_BUTTON) { + dark2BorderColor = tint_color(dark1BorderColor, 1.5); + dark1BorderColor = tint_color(dark1BorderColor, 1.35); + } + } else { + dark1BorderColor = tint_color(base, 1.147); + dark2BorderColor = tint_color(base, 1.24); + + if (flags & B_DEFAULT_BUTTON) { + dark1BorderColor = tint_color(dark1BorderColor, 1.12); + dark2BorderColor = tint_color(dark1BorderColor, 1.16); + } + } + + if (flags & B_ACTIVATED) { + rgb_color temp = dark2BorderColor; + dark2BorderColor = dark1BorderColor; + dark1BorderColor = temp; + } + + // indicate focus by changing main button border + if (flags & B_FOCUSED) { + dark1BorderColor = ui_color(B_KEYBOARD_NAVIGATION_COLOR); + dark2BorderColor = dark1BorderColor; + } + + if (flags & B_DEFAULT_BUTTON) { + float focusTint = 1.2; + if (flags & B_DISABLED) + focusTint = (B_NO_TINT + focusTint) / 2; + + rgb_color focusColor = tint_color(base, focusTint); + view->SetHighColor(base); + + view->StrokeRect(rect); + rect.InsetBy(1.0, 1.0); + + view->SetHighColor(focusColor); + view->StrokeRect(rect); + rect.InsetBy(1.0, 1.0); + view->StrokeRect(rect); + rect.InsetBy(1.0, 1.0); + + // bevel around external border + _DrawOuterResessedFrame(view, rect, focusColor, + contrast * (((flags & B_DISABLED) ? 0.5 : 0.8)), brightness * 0.9, + borders); + } else { + // bevel around external border + _DrawOuterResessedFrame(view, rect, base, + contrast * ((flags & B_DISABLED) ? 0.0 : 1.0), brightness * 1.0, + borders); + } + + _DrawFrame(view, rect, dark1BorderColor, dark1BorderColor, + dark2BorderColor, dark2BorderColor, borders); +} + + void BControlLook::_DrawOuterResessedFrame(BView* view, BRect& rect, const rgb_color& base, float contrast, float brightness, uint32 borders) diff --git a/src/kits/interface/MenuField.cpp b/src/kits/interface/MenuField.cpp index 4395c7bcc7..4f7097b71e 100644 --- a/src/kits/interface/MenuField.cpp +++ b/src/kits/interface/MenuField.cpp @@ -275,7 +275,7 @@ BMenuField::Draw(BRect update) flags |= BControlLook::B_DISABLED; if (active) flags |= BControlLook::B_FOCUSED; - be_control_look->DrawButtonFrame(this, frame, update, base, flags); + be_control_look->DrawMenuFieldFrame(this, frame, update, base, flags); return; }