mirror of https://github.com/aseprite/aseprite.git
Match text caret size with Entry widget
This commit is contained in:
parent
0dc4bc9aa7
commit
c781d82cf6
|
@ -1296,12 +1296,22 @@ int SkinTheme::getScrollbarSize()
|
|||
return dimensions.scrollbarSize();
|
||||
}
|
||||
|
||||
gfx::Size SkinTheme::getEntryCaretSize(Widget* widget)
|
||||
gfx::Size SkinTheme::getCaretSize(Widget* widget)
|
||||
{
|
||||
int caretHeight;
|
||||
if (widget->type() == kTextEditWidget) {
|
||||
// We cannot use the height of the widget text, because it
|
||||
// includes the line height of every single line in the widget.
|
||||
caretHeight = widget->font()->lineHeight();
|
||||
}
|
||||
else {
|
||||
caretHeight = widget->textHeight();
|
||||
}
|
||||
|
||||
if (widget->font()->type() == text::FontType::FreeType)
|
||||
return gfx::Size(2 * guiscale(), widget->textHeight());
|
||||
return gfx::Size(2 * guiscale(), caretHeight);
|
||||
else
|
||||
return gfx::Size(2 * guiscale(), widget->textHeight() + 2 * guiscale());
|
||||
return gfx::Size(2 * guiscale(), caretHeight + 2 * guiscale());
|
||||
}
|
||||
|
||||
void SkinTheme::paintEntry(PaintEvent& ev)
|
||||
|
@ -1866,7 +1876,7 @@ void SkinTheme::drawEntryCaret(ui::Graphics* g, Entry* widget, int x, int y)
|
|||
{
|
||||
gfx::Color color = colors.text();
|
||||
int textHeight = widget->textHeight();
|
||||
gfx::Size caretSize = getEntryCaretSize(widget);
|
||||
gfx::Size caretSize = getCaretSize(widget);
|
||||
|
||||
for (int u = x; u < x + caretSize.w; ++u)
|
||||
g->drawVLine(color, u, y + textHeight / 2 - caretSize.h / 2, caretSize.h);
|
||||
|
|
|
@ -80,7 +80,7 @@ public:
|
|||
void initWidget(ui::Widget* widget) override;
|
||||
void getWindowMask(ui::Widget* widget, gfx::Region& region) override;
|
||||
int getScrollbarSize() override;
|
||||
gfx::Size getEntryCaretSize(ui::Widget* widget) override;
|
||||
gfx::Size getCaretSize(ui::Widget* widget) override;
|
||||
|
||||
void paintEntry(ui::PaintEvent& ev) override;
|
||||
void paintListBox(ui::PaintEvent& ev) override;
|
||||
|
|
|
@ -139,7 +139,7 @@ gfx::Point Entry::caretPosOnScreen() const
|
|||
|
||||
void Entry::setCaretPos(const int pos)
|
||||
{
|
||||
gfx::Size caretSize = theme()->getEntryCaretSize(this);
|
||||
gfx::Size caretSize = theme()->getCaretSize(this);
|
||||
int textlen = lastCaretPos();
|
||||
m_caret = std::clamp(pos, 0, textlen);
|
||||
m_scroll = std::clamp(m_scroll, 0, textlen);
|
||||
|
@ -521,7 +521,7 @@ gfx::Size Entry::sizeHintWithText(Entry* entry, const std::string& text)
|
|||
{
|
||||
const auto& font = entry->font();
|
||||
|
||||
int w = font->textLength(text) + +2 * entry->theme()->getEntryCaretSize(entry).w +
|
||||
int w = font->textLength(text) + +2 * entry->theme()->getCaretSize(entry).w +
|
||||
entry->border().width();
|
||||
|
||||
w = std::min(w, guiscale() * kMaxWidthHintForEntry);
|
||||
|
@ -546,7 +546,7 @@ void Entry::onSizeHint(SizeHintEvent& ev)
|
|||
const auto& font = this->font();
|
||||
|
||||
int trailing = font->textLength(getSuffix());
|
||||
trailing = std::max(trailing, 2 * theme()->getEntryCaretSize(this).w);
|
||||
trailing = std::max(trailing, 2 * theme()->getCaretSize(this).w);
|
||||
|
||||
int w = font->textLength("w") * std::min(m_maxsize, 6) + +trailing + border().width();
|
||||
|
||||
|
@ -1012,7 +1012,7 @@ void Entry::recalcCharBoxes(const std::string& text)
|
|||
box.codepoint = 0;
|
||||
box.from = box.to = lastTextIndex;
|
||||
box.x = lastX;
|
||||
box.width = theme()->getEntryCaretSize(this).w;
|
||||
box.width = theme()->getCaretSize(this).w;
|
||||
m_boxes.push_back(box);
|
||||
}
|
||||
|
||||
|
|
|
@ -141,7 +141,7 @@ void IntEntry::onSizeHint(SizeHintEvent& ev)
|
|||
{
|
||||
const text::FontRef& font = this->font();
|
||||
int trailing = font->textLength(getSuffix());
|
||||
trailing = std::max(trailing, 2 * theme()->getEntryCaretSize(this).w);
|
||||
trailing = std::max(trailing, 2 * theme()->getCaretSize(this).w);
|
||||
|
||||
int min_w = font->textLength(m_slider->convertValueToText(m_min));
|
||||
int max_w = font->textLength(m_slider->convertValueToText(m_max)) + trailing;
|
||||
|
|
|
@ -364,8 +364,8 @@ void TextEdit::onPaint(PaintEvent& ev)
|
|||
gfx::PointF point(border().left(), border().top());
|
||||
point -= scroll;
|
||||
|
||||
m_caretRect =
|
||||
gfx::Rect(border().left() - scroll.x, border().top() - scroll.y, 2, font()->lineHeight());
|
||||
m_caretRect = gfx::Rect(gfx::Point(border().left() - scroll.x, border().top() - scroll.y),
|
||||
theme()->getCaretSize(this));
|
||||
|
||||
const gfx::Rect clipBounds = g->getClipBounds();
|
||||
|
||||
|
@ -403,8 +403,9 @@ void TextEdit::onPaint(PaintEvent& ev)
|
|||
m_caretRect.x += line.getBounds(m_caret.pos()).x;
|
||||
}
|
||||
|
||||
m_caretRect.y = point.y;
|
||||
m_caretRect.h = line.height; // Ensure the caret height corresponds with the tallest glyph
|
||||
// Ensure the caret height corresponds with the tallest glyph
|
||||
m_caretRect.h = std::max(m_caretRect.h, line.height);
|
||||
m_caretRect.y = point.y + line.height / 2 - m_caretRect.h / 2;
|
||||
}
|
||||
|
||||
point.y += line.height;
|
||||
|
|
|
@ -74,7 +74,7 @@ public:
|
|||
virtual void getWindowMask(Widget* widget, gfx::Region& region) {}
|
||||
virtual void setDecorativeWidgetBounds(Widget* widget);
|
||||
virtual int getScrollbarSize() { return kDefaultFontHeight; }
|
||||
virtual gfx::Size getEntryCaretSize(Widget* widget) { return gfx::Size(kDefaultFontHeight, 1); }
|
||||
virtual gfx::Size getCaretSize(Widget* widget) { return gfx::Size(kDefaultFontHeight, 1); }
|
||||
|
||||
virtual void paintEntry(PaintEvent& ev) {}
|
||||
virtual void paintTextEdit(PaintEvent& ev) {}
|
||||
|
|
Loading…
Reference in New Issue