1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-06-01 11:58:13 +00:00

GScrollBar: Start looking a bit more like a proper scrollbar.

And hook up FileManager's DirectoryView with its scrollbar so it actually
causes the directory view to shift up and down. Very cool. :^)
This commit is contained in:
Andreas Kling 2019-02-09 11:29:59 +01:00
parent 1f355f2a79
commit 6a3ff7efc5
2 changed files with 14 additions and 10 deletions

View file

@ -17,6 +17,11 @@ DirectoryView::DirectoryView(GWidget* parent)
m_symlink_icon = GraphicsBitmap::load_from_file("/res/icons/link16.rgb", { 16, 16 }); m_symlink_icon = GraphicsBitmap::load_from_file("/res/icons/link16.rgb", { 16, 16 });
m_scrollbar = new GScrollBar(this); m_scrollbar = new GScrollBar(this);
m_scrollbar->set_step(4);
m_scrollbar->set_big_step(30);
m_scrollbar->on_change = [this] (int) {
update();
};
} }
DirectoryView::~DirectoryView() DirectoryView::~DirectoryView()
@ -63,7 +68,8 @@ void DirectoryView::reload()
entries.append(move(entry)); entries.append(move(entry));
} }
closedir(dirp); closedir(dirp);
m_scrollbar->set_range(0, item_count() - 1); int excess_height = max(0, (item_count() * item_height()) - height());
m_scrollbar->set_range(0, excess_height);
} }
const GraphicsBitmap& DirectoryView::icon_for(const Entry& entry) const const GraphicsBitmap& DirectoryView::icon_for(const Entry& entry) const
@ -107,6 +113,8 @@ void DirectoryView::paint_event(GPaintEvent&)
{ {
Painter painter(*this); Painter painter(*this);
painter.translate(0, -m_scrollbar->value());
int horizontal_padding = 5; int horizontal_padding = 5;
int icon_size = 16; int icon_size = 16;
int painted_item_index = 0; int painted_item_index = 0;

View file

@ -81,20 +81,16 @@ void GScrollBar::paint_event(GPaintEvent&)
{ {
Painter painter(*this); Painter painter(*this);
painter.fill_rect(rect(), Color(0xc0c0c0)); painter.fill_rect(rect(), Color::MidGray);
painter.draw_rect(up_button_rect(), Color::DarkGray, true); painter.draw_rect(up_button_rect(), Color::DarkGray, true);
painter.fill_rect(up_button_rect().shrunken(2, 2), Color::LightGray); painter.fill_rect_with_gradient(up_button_rect().shrunken(2, 2), Color::LightGray, Color::White);
painter.draw_rect(down_button_rect(), Color::DarkGray, true); painter.draw_rect(down_button_rect(), Color::DarkGray, true);
painter.fill_rect(down_button_rect().shrunken(2, 2), Color::LightGray); painter.fill_rect_with_gradient(down_button_rect().shrunken(2, 2), Color::LightGray, Color::White);
painter.fill_rect(pgup_rect(), Color::Magenta); painter.draw_rect(scrubber_rect(), Color::White, true);
painter.fill_rect(pgdn_rect(), Color::Yellow); painter.fill_rect_with_gradient(scrubber_rect().shrunken(2, 2), Color::LightGray, Color::White);
painter.fill_rect(scrubber_rect(), Color::Red);
dbgprintf("Paint!\n");
} }
void GScrollBar::mousedown_event(GMouseEvent& event) void GScrollBar::mousedown_event(GMouseEvent& event)