diff --git a/Applications/FileManager/DirectoryView.cpp b/Applications/FileManager/DirectoryView.cpp index 4ffc28feb6..85dbcb55a7 100644 --- a/Applications/FileManager/DirectoryView.cpp +++ b/Applications/FileManager/DirectoryView.cpp @@ -16,7 +16,7 @@ DirectoryView::DirectoryView(GWidget* parent) m_file_icon = GraphicsBitmap::load_from_file("/res/icons/file16.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(Orientation::Vertical, this); m_scrollbar->set_step(4); m_scrollbar->set_big_step(30); m_scrollbar->on_change = [this] (int) { @@ -30,7 +30,7 @@ DirectoryView::~DirectoryView() void DirectoryView::resize_event(GResizeEvent& event) { - m_scrollbar->set_relative_rect(event.size().width() - 16, 0, 16, event.size().height()); + m_scrollbar->set_relative_rect(event.size().width() - m_scrollbar->preferred_size().width(), 0, m_scrollbar->preferred_size().width(), event.size().height()); } void DirectoryView::open(const String& path) diff --git a/LibGUI/GScrollBar.cpp b/LibGUI/GScrollBar.cpp index c8dd63e3ad..d508805b83 100644 --- a/LibGUI/GScrollBar.cpp +++ b/LibGUI/GScrollBar.cpp @@ -4,41 +4,46 @@ #include static const char* s_up_arrow_bitmap_data = { - " " - " " - " ## " - " #### " - " ###### " - " ######## " - " ## " - " ## " - " ## " - " " + " " + " # " + " ### " + " ##### " + " ####### " + " ### " + " ### " + " ### " + " " }; static const char* s_down_arrow_bitmap_data = { - " " - " ## " - " ## " - " ## " - " ######## " - " ###### " - " #### " - " ## " - " " - " " + " " + " ### " + " ### " + " ### " + " ####### " + " ##### " + " ### " + " # " + " " }; static CharacterBitmap* s_up_arrow_bitmap; static CharacterBitmap* s_down_arrow_bitmap; -GScrollBar::GScrollBar(GWidget* parent) +GScrollBar::GScrollBar(Orientation orientation, GWidget* parent) : GWidget(parent) + , m_orientation(orientation) { if (!s_up_arrow_bitmap) - s_up_arrow_bitmap = CharacterBitmap::create_from_ascii(s_up_arrow_bitmap_data, 10, 10).leak_ref(); + s_up_arrow_bitmap = CharacterBitmap::create_from_ascii(s_up_arrow_bitmap_data, 9, 9).leak_ref(); if (!s_down_arrow_bitmap) - s_down_arrow_bitmap = CharacterBitmap::create_from_ascii(s_down_arrow_bitmap_data, 10, 10).leak_ref(); + s_down_arrow_bitmap = CharacterBitmap::create_from_ascii(s_down_arrow_bitmap_data, 9, 9).leak_ref(); + + if (m_orientation == Orientation::Vertical) { + set_preferred_size({ 15, 0 }); + } else { + set_preferred_size({ 0, 15 }); + } } GScrollBar::~GScrollBar() diff --git a/LibGUI/GScrollBar.h b/LibGUI/GScrollBar.h index 98abc1a1cf..af98b161e9 100644 --- a/LibGUI/GScrollBar.h +++ b/LibGUI/GScrollBar.h @@ -5,9 +5,11 @@ class GScrollBar final : public GWidget { public: - explicit GScrollBar(GWidget* parent); + explicit GScrollBar(Orientation, GWidget* parent); virtual ~GScrollBar() override; + Orientation orientation() const { return m_orientation; } + int value() const { return m_value; } int min() const { return m_min; } int max() const { return m_max; } @@ -29,7 +31,7 @@ private: virtual void mousemove_event(GMouseEvent&) override; virtual const char* class_name() const override { return "GScrollBar"; } - int button_size() const { return 16; } + int button_size() const { return orientation() == Orientation::Vertical ? width() : height(); } Rect up_button_rect() const; Rect down_button_rect() const; Rect upper_gutter_rect() const; @@ -46,4 +48,6 @@ private: bool m_scrubbing { false }; int m_scrub_start_value { 0 }; Point m_scrub_origin; + + Orientation m_orientation { Orientation::Vertical }; };