⛏️ index : haiku.git

author John Scipione <jscipione@gmail.com> 2024-09-05 1:51:12.0 -04:00:00
committer waddlesplash <waddlesplash@gmail.com> 2024-09-05 17:47:43.0 +00:00:00
commit
844b4b0d2e8144d971e90eecff038fddcaa4a276 [patch]
tree
f775c1650289e9a72e95ca445fbb2f4d3a324fe2
parent
b1b196578431327c10bc75c5a89d99439674d667
download
844b4b0d2e8144d971e90eecff038fddcaa4a276.tar.gz

Interface Kit: Adopt parent colors on controls

BControl adopts parent colors on AttachedToWindow(). Use the
adopted view and high colors for BControl derivatives before
using B_CONTROL or B_PANEL colors.

Affects the following controls:
Spinners
Checkboxes
Radio buttons
Sliders
Text controls
Buttons (get control text color already, don't pass it in.)

Affects control colors in HaikuControlLook and BeControlLook,
FlatControlLook control colors derived from HaikuControlLook.

Do not remove control flag before drawing label, we get the
correct label color now. The fallback colors are only for if
you override AttachedToWindow() on your BControl subclass to
prevent adopting parent colors.

Change-Id: I9357c0287898bff48c695a7869f3b8be108c02ad
Reviewed-on: https://review.haiku-os.org/c/haiku/+/8235
Haiku-Format: Haiku-format Bot <no-reply+haikuformatbot@haiku-os.org>
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
(cherry picked from commit 42df4f9689991c413d701d07577a5b2986b63778)
Reviewed-on: https://review.haiku-os.org/c/haiku/+/8206

Diff

 src/kits/interface/AbstractSpinner.cpp                   |  8 ++------
 src/kits/interface/Button.cpp                            | 19 ++++++++-----------
 src/kits/interface/CheckBox.cpp                          | 16 ++--------------
 src/kits/interface/ColorControl.cpp                      |  4 ++--
 src/kits/interface/HaikuControlLook.cpp                  | 11 +++++------
 src/kits/interface/RadioButton.cpp                       | 18 +++---------------
 src/kits/interface/Slider.cpp                            |  8 ++------
 src/kits/interface/TextControl.cpp                       |  7 +------
 src/add-ons/control_look/BeControlLook/BeControlLook.cpp |  2 ++
 9 files changed, 26 insertions(+), 67 deletions(-)

diff --git a/src/kits/interface/AbstractSpinner.cpp b/src/kits/interface/AbstractSpinner.cpp
index 04ec43f..89e584f 100644
--- a/src/kits/interface/AbstractSpinner.cpp
+++ b/src/kits/interface/AbstractSpinner.cpp
@@ -361,7 +361,7 @@
	else
		bgTint = B_NO_TINT;

	rgb_color bgColor = ui_color(B_PANEL_BACKGROUND_COLOR);
	rgb_color bgColor = ViewColor();
	if (bgColor.red + bgColor.green + bgColor.blue <= 128 * 3) {
		// if dark background make the tint lighter
		frameTint = 2.0f - frameTint;
@@ -1453,10 +1453,6 @@

	uint32 flags = be_control_look->Flags(this);

	// erase the is control flag before drawing the label so that the label
	// will get drawn using B_PANEL_TEXT_COLOR.
	flags &= ~BControlLook::B_IS_CONTROL;

	be_control_look->DrawLabel(this, label, LowColor(), flags, BPoint(x, y));
}

@@ -1469,7 +1465,7 @@
	if (!rect.IsValid() || !rect.Intersects(updateRect))
		return;

	rgb_color base = ui_color(B_PANEL_BACKGROUND_COLOR);
	rgb_color base = ViewColor();
	uint32 flags = 0;
	if (!IsEnabled())
		flags |= BControlLook::B_DISABLED;
diff --git a/src/kits/interface/Button.cpp b/src/kits/interface/Button.cpp
index b7c5063..bc9ab72 100644
--- a/src/kits/interface/Button.cpp
+++ b/src/kits/interface/Button.cpp
@@ -134,7 +134,6 @@
	BRect rect(Bounds());
	rgb_color background = ViewColor();
	rgb_color base = LowColor();
	rgb_color textColor = ui_color(B_CONTROL_TEXT_COLOR);

	uint32 flags = be_control_look->Flags(this);
	if (_Flag(FLAG_DEFAULT))
@@ -144,24 +143,20 @@
	if (_Flag(FLAG_INSIDE))
		flags |= BControlLook::B_HOVER;

	be_control_look->DrawButtonFrame(this, rect, updateRect,
		base, background, flags);
	be_control_look->DrawButtonFrame(this, rect, updateRect, base, background, flags);

	if (fBehavior == B_POP_UP_BEHAVIOR) {
		be_control_look->DrawButtonWithPopUpBackground(this, rect, updateRect,
			base, flags);
	} else {
		be_control_look->DrawButtonBackground(this, rect, updateRect,
			base, flags);
	}
	if (fBehavior == B_POP_UP_BEHAVIOR)
		be_control_look->DrawButtonWithPopUpBackground(this, rect, updateRect, base, flags);
	else
		be_control_look->DrawButtonBackground(this, rect, updateRect, base, flags);

	const BBitmap* icon = IconBitmap(
		(Value() == B_CONTROL_OFF
				? B_INACTIVE_ICON_BITMAP : B_ACTIVE_ICON_BITMAP)
			| (IsEnabled() ? 0 : B_DISABLED_ICON_BITMAP));

	be_control_look->DrawLabel(this, Label(), icon, rect, updateRect, base,
		flags, BAlignment(B_ALIGN_CENTER, B_ALIGN_MIDDLE), &textColor);
	be_control_look->DrawLabel(this, Label(), icon, rect, updateRect, base, flags,
		BAlignment(B_ALIGN_CENTER, B_ALIGN_MIDDLE));
}


diff --git a/src/kits/interface/CheckBox.cpp b/src/kits/interface/CheckBox.cpp
index 1144d90..d40a8ba 100644
--- a/src/kits/interface/CheckBox.cpp
+++ b/src/kits/interface/CheckBox.cpp
@@ -103,14 +103,7 @@
void
BCheckBox::Draw(BRect updateRect)
{
	rgb_color base, textColor;
	if (Parent() != NULL) {
		base = Parent()->ViewColor();
		textColor = Parent()->HighColor();
	} else {
		base = ui_color(B_PANEL_BACKGROUND_COLOR);
		textColor = ui_color(B_PANEL_TEXT_COLOR);
	}
	rgb_color base = ViewColor();

	uint32 flags = be_control_look->Flags(this);
	if (fOutlined)
@@ -120,10 +113,6 @@
	BRect rect(checkBoxRect);
	be_control_look->DrawCheckBox(this, rect, updateRect, base, flags);

	// erase the is control flag before drawing the label so that the label
	// will get drawn using B_PANEL_TEXT_COLOR
	flags &= ~BControlLook::B_IS_CONTROL;

	BRect labelRect(Bounds());
	labelRect.left = checkBoxRect.right + 1
		+ be_control_look->DefaultLabelSpacing();
@@ -132,8 +121,7 @@
		B_INACTIVE_ICON_BITMAP | (IsEnabled() ? 0 : B_DISABLED_ICON_BITMAP));
	const BAlignment alignment = BAlignment(B_ALIGN_LEFT, B_ALIGN_VERTICAL_CENTER);

	be_control_look->DrawLabel(this, Label(), icon, labelRect, updateRect, base, flags, alignment,
		&textColor);
	be_control_look->DrawLabel(this, Label(), icon, labelRect, updateRect, base, flags, alignment);
}


diff --git a/src/kits/interface/ColorControl.cpp b/src/kits/interface/ColorControl.cpp
index 20a178a..4d4d5d1 100644
--- a/src/kits/interface/ColorControl.cpp
+++ b/src/kits/interface/ColorControl.cpp
@@ -430,7 +430,7 @@
	BRect rect = _PaletteFrame();
	bool enabled = IsEnabled();

	rgb_color base = ui_color(B_PANEL_BACKGROUND_COLOR);
	rgb_color base = ViewColor();
	rgb_color darken1 = tint_color(base, B_DARKEN_1_TINT);

	uint32 flags = be_control_look->Flags(this);
@@ -498,7 +498,7 @@
void
BColorControl::_DrawSelectors(BView* target)
{
	rgb_color base = ui_color(B_PANEL_BACKGROUND_COLOR);
	rgb_color base = ViewColor();
	rgb_color lightenmax = tint_color(base, B_LIGHTEN_MAX_TINT);

	if (fPaletteMode) {
diff --git a/src/kits/interface/HaikuControlLook.cpp b/src/kits/interface/HaikuControlLook.cpp
index 71765cc..4937006 100644
--- a/src/kits/interface/HaikuControlLook.cpp
+++ b/src/kits/interface/HaikuControlLook.cpp
@@ -2197,12 +2197,9 @@
	// setup the text color

	BWindow* window = view->Window();
	bool isDesktop = window
		&& window->Feel() == kDesktopWindowFeel
		&& window->Look() == kDesktopWindowLook
		&& view->Parent()
		&& view->Parent()->Parent() == NULL
		&& (flags & B_IGNORE_OUTLINE) == 0;
	bool isDesktop = window != NULL && window->Feel() == kDesktopWindowFeel
		&& window->Look() == kDesktopWindowLook && view->Parent() != NULL
		&& view->Parent()->Parent() == NULL && (flags & B_IGNORE_OUTLINE) == 0;

	rgb_color low;
	rgb_color color;
@@ -2210,6 +2207,8 @@

	if (textColor != NULL)
		glowColor = *textColor;
	else if (view->Parent() != NULL)
		glowColor = view->Parent()->HighColor();
	else if ((flags & B_IS_CONTROL) != 0)
		glowColor = ui_color(B_CONTROL_TEXT_COLOR);
	else
diff --git a/src/kits/interface/RadioButton.cpp b/src/kits/interface/RadioButton.cpp
index 4ff6608..cb123fd 100644
--- a/src/kits/interface/RadioButton.cpp
+++ b/src/kits/interface/RadioButton.cpp
@@ -85,19 +85,12 @@
void
BRadioButton::Draw(BRect updateRect)
{
	rgb_color base = ViewColor();

	// its size depends on the text height
	font_height fontHeight;
	GetFontHeight(&fontHeight);

	rgb_color base, textColor;
	if (Parent() != NULL) {
		base = Parent()->ViewColor();
		textColor = Parent()->HighColor();
	} else {
		base = ui_color(B_PANEL_BACKGROUND_COLOR);
		textColor = ui_color(B_PANEL_TEXT_COLOR);
	}

	uint32 flags = be_control_look->Flags(this);
	if (fOutlined)
		flags |= BControlLook::B_CLICKED;
@@ -105,10 +98,6 @@
	BRect knobRect(_KnobFrame(fontHeight));
	BRect rect(knobRect);
	be_control_look->DrawRadioButton(this, rect, updateRect, base, flags);

	// erase the is control flag before drawing the label so that the label
	// will get drawn using B_PANEL_TEXT_COLOR.
	flags &= ~BControlLook::B_IS_CONTROL;

	BRect labelRect(Bounds());
	labelRect.left = knobRect.right + 1 + be_control_look->DefaultLabelSpacing();
@@ -117,8 +106,7 @@
		B_INACTIVE_ICON_BITMAP | (IsEnabled() ? 0 : B_DISABLED_ICON_BITMAP));
	const BAlignment alignment = BAlignment(B_ALIGN_LEFT, B_ALIGN_VERTICAL_CENTER);

	be_control_look->DrawLabel(this, Label(), icon, labelRect, updateRect, base, flags, alignment,
		&textColor);
	be_control_look->DrawLabel(this, Label(), icon, labelRect, updateRect, base, flags, alignment);
}


diff --git a/src/kits/interface/Slider.cpp b/src/kits/interface/Slider.cpp
index da1ecb4..270239d 100644
--- a/src/kits/interface/Slider.cpp
+++ b/src/kits/interface/Slider.cpp
@@ -434,7 +434,7 @@
	// standard system colors manually. Due to how layouts work, this must
	// happen here, rather than in AttachedToWindow().
	if (Parent() == NULL)
		SetLowUIColor(B_PANEL_BACKGROUND_COLOR);
		SetViewUIColor(B_PANEL_BACKGROUND_COLOR);
}


@@ -971,12 +971,8 @@
	BRect bounds(Bounds());
	BView* view = OffscreenView();

	rgb_color base = LowColor();
	rgb_color base = ViewColor();
	uint32 flags = be_control_look->Flags(this);

	// erase the is control flag before drawing the label so that the label
	// will get drawn using B_PANEL_TEXT_COLOR
	flags &= ~BControlLook::B_IS_CONTROL;

	font_height fontHeight;
	GetFontHeight(&fontHeight);
diff --git a/src/kits/interface/TextControl.cpp b/src/kits/interface/TextControl.cpp
index 0eb7c60..4e1bfc3 100644
--- a/src/kits/interface/TextControl.cpp
+++ b/src/kits/interface/TextControl.cpp
@@ -367,8 +367,7 @@
	if (active)
		flags |= BControlLook::B_FOCUSED;

	be_control_look->DrawTextControlBorder(this, rect, updateRect, base,
		flags);
	be_control_look->DrawTextControlBorder(this, rect, updateRect, base, flags);

	if (Label() != NULL) {
		if (fLayoutData->label_layout_item != NULL) {
@@ -377,10 +376,6 @@
			rect = Bounds();
			rect.right = fDivider - kLabelInputSpacing;
		}

		// erase the is control flag before drawing the label so that the label
		// will get drawn using B_PANEL_TEXT_COLOR
		flags &= ~BControlLook::B_IS_CONTROL;

		be_control_look->DrawLabel(this, Label(), rect, updateRect,
			base, flags, BAlignment(fLabelAlign, B_ALIGN_MIDDLE));
diff --git a/src/add-ons/control_look/BeControlLook/BeControlLook.cpp b/src/add-ons/control_look/BeControlLook/BeControlLook.cpp
index 0b67abc..54f9b76 100644
--- a/src/add-ons/control_look/BeControlLook/BeControlLook.cpp
+++ b/src/add-ons/control_look/BeControlLook/BeControlLook.cpp
@@ -2201,6 +2201,8 @@

	if (textColor != NULL)
		glowColor = *textColor;
	else if (view->Parent() != NULL)
		glowColor = view->Parent()->HighColor();
	else if ((flags & B_IS_CONTROL) != 0)
		glowColor = ui_color(B_CONTROL_TEXT_COLOR);
	else