ui(controls): dim placeholder text

This commit is contained in:
Ly-sec
2026-05-10 16:08:00 +02:00
parent 8b5db2cccf
commit 2cd9d09397
2 changed files with 20 additions and 11 deletions
+17 -9
View File
@@ -65,6 +65,8 @@ namespace {
constexpr auto kCursorBlinkInterval = std::chrono::milliseconds(530);
constexpr auto kCursorBlinkResumeDelay = std::chrono::milliseconds(650);
constexpr float kTextInnerInset = 3.0f;
constexpr float kPlaceholderAlpha = 0.68f;
constexpr float kPrimaryPlaceholderAlpha = 0.50f;
constexpr float kPasswordGlyphScale = 0.82f;
constexpr auto kDoubleClickThreshold = std::chrono::milliseconds(400);
constexpr float kDoubleClickDistance = 6.0f;
@@ -749,17 +751,21 @@ void Input::applyVisualState() {
cursorStyleEmb.radius = 1.0f;
m_cursor->setStyle(cursorStyleEmb);
const bool showingPlaceholder = m_value.empty() && !m_placeholder.empty();
if (m_invalid) {
m_label->setColor(colorSpecFromRole(ColorRole::Error));
} else if ((m_value.empty() && !m_placeholder.empty()) || readOnly) {
} else if (showingPlaceholder) {
m_label->setColor(colorSpecFromRole(ColorRole::OnPrimary, kPrimaryPlaceholderAlpha));
} else if (readOnly) {
m_label->setColor(colorSpecFromRole(ColorRole::OnPrimary, 0.65f));
} else {
m_label->setColor(colorSpecFromRole(ColorRole::OnPrimary));
}
const Color passwordGlyphEmb =
m_invalid ? resolved(ColorRole::Error)
: (((m_value.empty() && !m_placeholder.empty()) || readOnly) ? resolved(ColorRole::OnPrimary, 0.65f)
: resolved(ColorRole::OnPrimary));
: (showingPlaceholder
? resolved(ColorRole::OnPrimary, kPrimaryPlaceholderAlpha)
: (readOnly ? resolved(ColorRole::OnPrimary, 0.65f) : resolved(ColorRole::OnPrimary)));
for (auto* glyph : m_passwordGlyphs) {
glyph->setColor(passwordGlyphEmb);
}
@@ -781,12 +787,14 @@ void Input::applyVisualState() {
cursorStyle.radius = 1.0f;
m_cursor->setStyle(cursorStyle);
const ColorRole textRole =
m_invalid ? ColorRole::Error
: (((m_value.empty() && !m_placeholder.empty()) || readOnly) ? ColorRole::OnSurfaceVariant
: ColorRole::OnSurface);
m_label->setColor(colorSpecFromRole(textRole));
const Color passwordGlyphColor = colorForRole(textRole);
const bool showingPlaceholder = m_value.empty() && !m_placeholder.empty();
const ColorSpec textColor =
m_invalid ? colorSpecFromRole(ColorRole::Error)
: (showingPlaceholder ? colorSpecFromRole(ColorRole::OnSurfaceVariant, kPlaceholderAlpha)
: (readOnly ? colorSpecFromRole(ColorRole::OnSurfaceVariant)
: colorSpecFromRole(ColorRole::OnSurface)));
m_label->setColor(textColor);
const Color passwordGlyphColor = resolveColorSpec(textColor);
for (auto* glyph : m_passwordGlyphs) {
glyph->setColor(passwordGlyphColor);
}
+3 -2
View File
@@ -30,6 +30,7 @@ namespace {
constexpr float kMenuTopGap = Style::spaceXs;
constexpr float kHorizontalPadding = Style::spaceMd;
constexpr float kGlyphSize = 14.0f;
constexpr float kPlaceholderAlpha = 0.68f;
constexpr std::int32_t kOpenSelectZIndex = 100;
constexpr std::size_t kMaxVisibleOptions = 6;
constexpr auto kTypeaheadTimeout = std::chrono::milliseconds(800);
@@ -622,8 +623,8 @@ void Select::applyVisualState() {
Color triggerBg = resolved(ColorRole::SurfaceVariant);
Color triggerBorder = resolved(ColorRole::Outline);
ColorSpec triggerText =
selectedText().empty() ? colorSpecFromRole(ColorRole::OnSurfaceVariant) : colorSpecFromRole(ColorRole::OnSurface);
ColorSpec triggerText = selectedText().empty() ? colorSpecFromRole(ColorRole::OnSurfaceVariant, kPlaceholderAlpha)
: colorSpecFromRole(ColorRole::OnSurface);
if (!m_enabled) {
triggerBg = resolved(ColorRole::SurfaceVariant, 0.75f);