diff --git a/Libraries/LibGUI/CMakeLists.txt b/Libraries/LibGUI/CMakeLists.txt index 9792fbe8a9..a4514e8f1e 100644 --- a/Libraries/LibGUI/CMakeLists.txt +++ b/Libraries/LibGUI/CMakeLists.txt @@ -65,6 +65,7 @@ set(SOURCES RunningProcessesModel.cpp ScrollBar.cpp ScrollableWidget.cpp + SeparatorWidget.cpp ShellSyntaxHighlighter.cpp Shortcut.cpp Slider.cpp diff --git a/Libraries/LibGUI/SeparatorWidget.cpp b/Libraries/LibGUI/SeparatorWidget.cpp new file mode 100644 index 0000000000..81478728f4 --- /dev/null +++ b/Libraries/LibGUI/SeparatorWidget.cpp @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2020, Andreas Kling + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include + +namespace GUI { + +SeparatorWidget::SeparatorWidget(Gfx::Orientation orientation) + : m_orientation(orientation) +{ + if (m_orientation == Gfx::Orientation::Vertical) + set_fixed_width(8); + else + set_fixed_height(8); +} + +SeparatorWidget::~SeparatorWidget() +{ +} + +void SeparatorWidget::paint_event(PaintEvent& event) +{ + Painter painter(*this); + painter.add_clip_rect(event.rect()); + + if (m_orientation == Gfx::Orientation::Vertical) { + painter.translate(rect().center().x() - 1, 0); + painter.draw_line({ 0, 0 }, { 0, rect().bottom() }, palette().threed_shadow1()); + painter.draw_line({ 1, 0 }, { 1, rect().bottom() }, palette().threed_highlight()); + } else { + painter.translate(0, rect().center().y() - 1); + painter.draw_line({ 0, 0 }, { rect().right(), 0 }, palette().threed_shadow1()); + painter.draw_line({ 0, 1 }, { rect().right(), 1 }, palette().threed_highlight()); + } +} + +} diff --git a/Libraries/LibGUI/SeparatorWidget.h b/Libraries/LibGUI/SeparatorWidget.h new file mode 100644 index 0000000000..5df53a74ef --- /dev/null +++ b/Libraries/LibGUI/SeparatorWidget.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2020, Andreas Kling + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#pragma once + +#include + +namespace GUI { + +class SeparatorWidget final : public Widget { + C_OBJECT(SeparatorWidget); + +public: + virtual ~SeparatorWidget() override; + +private: + explicit SeparatorWidget(Gfx::Orientation); + + virtual void paint_event(PaintEvent&) override; + + const Gfx::Orientation m_orientation; +}; +} diff --git a/Libraries/LibGUI/ToolBar.cpp b/Libraries/LibGUI/ToolBar.cpp index bd811f89b8..71994eabdc 100644 --- a/Libraries/LibGUI/ToolBar.cpp +++ b/Libraries/LibGUI/ToolBar.cpp @@ -31,15 +31,17 @@ #include #include #include +#include #include #include namespace GUI { ToolBar::ToolBar(Orientation orientation, int button_size) - : m_button_size(button_size) + : m_orientation(orientation) + , m_button_size(button_size) { - if (orientation == Orientation::Horizontal) { + if (m_orientation == Orientation::Horizontal) { set_fixed_height(button_size + 8); } else { set_fixed_width(button_size + 8); @@ -98,30 +100,11 @@ void ToolBar::add_action(Action& action) m_items.append(move(item)); } -class SeparatorWidget final : public Widget { - C_OBJECT(SeparatorWidget) -public: - SeparatorWidget() - { - set_fixed_size(8, 18); - } - virtual ~SeparatorWidget() override { } - - virtual void paint_event(PaintEvent& event) override - { - Painter painter(*this); - painter.add_clip_rect(event.rect()); - painter.translate(rect().center().x() - 1, 0); - painter.draw_line({ 0, 0 }, { 0, rect().bottom() }, palette().threed_shadow1()); - painter.draw_line({ 1, 0 }, { 1, rect().bottom() }, palette().threed_highlight()); - } -}; - void ToolBar::add_separator() { auto item = make(); item->type = Item::Type::Separator; - add(); + add(m_orientation == Gfx::Orientation::Horizontal ? Gfx::Orientation::Vertical : Gfx::Orientation::Horizontal); m_items.append(move(item)); } diff --git a/Libraries/LibGUI/ToolBar.h b/Libraries/LibGUI/ToolBar.h index 6601d1b2dd..e6e6790d7c 100644 --- a/Libraries/LibGUI/ToolBar.h +++ b/Libraries/LibGUI/ToolBar.h @@ -58,6 +58,7 @@ private: RefPtr action; }; NonnullOwnPtrVector m_items; + const Gfx::Orientation m_orientation; int m_button_size { 16 }; bool m_has_frame { true }; };