mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 14:28:12 +00:00
WindowServer: Convert Vector<OwnPtr> to NonnullOwnPtrVector.
This commit is contained in:
parent
a635e62e6a
commit
90ea4918d6
4 changed files with 38 additions and 42 deletions
|
@ -50,14 +50,14 @@ int WSMenu::width() const
|
|||
int widest_text = 0;
|
||||
int widest_shortcut = 0;
|
||||
for (auto& item : m_items) {
|
||||
if (item->type() != WSMenuItem::Text)
|
||||
if (item.type() != WSMenuItem::Text)
|
||||
continue;
|
||||
int text_width = font().width(item->text());
|
||||
if (!item->shortcut_text().is_empty()) {
|
||||
int shortcut_width = font().width(item->shortcut_text());
|
||||
int text_width = font().width(item.text());
|
||||
if (!item.shortcut_text().is_empty()) {
|
||||
int shortcut_width = font().width(item.shortcut_text());
|
||||
widest_shortcut = max(shortcut_width, widest_shortcut);
|
||||
}
|
||||
if (item->is_checkable())
|
||||
if (item.is_checkable())
|
||||
text_width += s_checked_bitmap_width + s_checked_bitmap_padding;
|
||||
|
||||
widest_text = max(widest_text, text_width);
|
||||
|
@ -74,7 +74,7 @@ int WSMenu::height() const
|
|||
{
|
||||
if (m_items.is_empty())
|
||||
return 0;
|
||||
return (m_items.last()->rect().bottom() - 1) + frame_thickness() * 2;
|
||||
return (m_items.last().rect().bottom() - 1) + frame_thickness() * 2;
|
||||
}
|
||||
|
||||
void WSMenu::redraw()
|
||||
|
@ -92,11 +92,11 @@ WSWindow& WSMenu::ensure_menu_window()
|
|||
Point next_item_location(frame_thickness(), frame_thickness());
|
||||
for (auto& item : m_items) {
|
||||
int height = 0;
|
||||
if (item->type() == WSMenuItem::Text)
|
||||
if (item.type() == WSMenuItem::Text)
|
||||
height = item_height();
|
||||
else if (item->type() == WSMenuItem::Separator)
|
||||
else if (item.type() == WSMenuItem::Separator)
|
||||
height = 8;
|
||||
item->set_rect({ next_item_location, { width - frame_thickness() * 2, height } });
|
||||
item.set_rect({ next_item_location, { width - frame_thickness() * 2, height } });
|
||||
next_item_location.move_by(0, height);
|
||||
}
|
||||
|
||||
|
@ -124,30 +124,30 @@ void WSMenu::draw()
|
|||
s_checked_bitmap = &CharacterBitmap::create_from_ascii(s_checked_bitmap_data, s_checked_bitmap_width, s_checked_bitmap_height).leak_ref();
|
||||
|
||||
for (auto& item : m_items) {
|
||||
if (item->type() == WSMenuItem::Text) {
|
||||
if (item.type() == WSMenuItem::Text) {
|
||||
Color text_color = Color::Black;
|
||||
if (item == m_hovered_item) {
|
||||
painter.fill_rect(item->rect(), WSWindowManager::the().menu_selection_color());
|
||||
if (&item == m_hovered_item) {
|
||||
painter.fill_rect(item.rect(), WSWindowManager::the().menu_selection_color());
|
||||
text_color = Color::White;
|
||||
}
|
||||
if (!item->is_enabled())
|
||||
if (!item.is_enabled())
|
||||
text_color = Color::MidGray;
|
||||
Rect text_rect = item->rect().translated(left_padding(), 0);
|
||||
if (item->is_checkable()) {
|
||||
if (item->is_checked()) {
|
||||
Rect text_rect = item.rect().translated(left_padding(), 0);
|
||||
if (item.is_checkable()) {
|
||||
if (item.is_checked()) {
|
||||
Rect checkmark_rect { text_rect.location().x(), 0, s_checked_bitmap_width, s_checked_bitmap_height };
|
||||
checkmark_rect.center_vertically_within(text_rect);
|
||||
painter.draw_bitmap(checkmark_rect.location(), *s_checked_bitmap, Color::Black);
|
||||
}
|
||||
text_rect.move_by(s_checked_bitmap_width + s_checked_bitmap_padding, 0);
|
||||
}
|
||||
painter.draw_text(text_rect, item->text(), TextAlignment::CenterLeft, text_color);
|
||||
if (!item->shortcut_text().is_empty()) {
|
||||
painter.draw_text(item->rect().translated(-right_padding(), 0), item->shortcut_text(), TextAlignment::CenterRight, text_color);
|
||||
painter.draw_text(text_rect, item.text(), TextAlignment::CenterLeft, text_color);
|
||||
if (!item.shortcut_text().is_empty()) {
|
||||
painter.draw_text(item.rect().translated(-right_padding(), 0), item.shortcut_text(), TextAlignment::CenterRight, text_color);
|
||||
}
|
||||
} else if (item->type() == WSMenuItem::Separator) {
|
||||
Point p1(4, item->rect().center().y());
|
||||
Point p2(width - 5, item->rect().center().y());
|
||||
} else if (item.type() == WSMenuItem::Separator) {
|
||||
Point p1(4, item.rect().center().y());
|
||||
Point p2(width - 5, item.rect().center().y());
|
||||
painter.draw_line(p1, p2, Color::MidGray);
|
||||
painter.draw_line(p1.translated(0, 1), p2.translated(0, 1), Color::White);
|
||||
}
|
||||
|
@ -205,8 +205,8 @@ void WSMenu::did_activate(WSMenuItem& item)
|
|||
WSMenuItem* WSMenu::item_with_identifier(unsigned identifer)
|
||||
{
|
||||
for (auto& item : m_items) {
|
||||
if (item->identifier() == identifer)
|
||||
return item.ptr();
|
||||
if (item.identifier() == identifer)
|
||||
return &item;
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
@ -214,9 +214,8 @@ WSMenuItem* WSMenu::item_with_identifier(unsigned identifer)
|
|||
WSMenuItem* WSMenu::item_at(const Point& position)
|
||||
{
|
||||
for (auto& item : m_items) {
|
||||
if (!item->rect().contains(position))
|
||||
continue;
|
||||
return item.ptr();
|
||||
if (item.rect().contains(position))
|
||||
return &item;
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue