From 6d7f000ffc012b5837d4e2a8393abd81be534968 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Fri, 8 Feb 2019 00:14:37 +0100 Subject: [PATCH] Launcher: Factor the app buttons into a LaunchButton class. Added some LibGUI helpers while I'm at it. --- Launcher/Launcher | Bin 62276 -> 67092 bytes Launcher/main.cpp | 68 ++++++++++++++++++++++------------------------ LibGUI/GButton.h | 2 +- LibGUI/GWidget.h | 4 +++ LibGUI/GWindow.h | 1 + 5 files changed, 39 insertions(+), 36 deletions(-) diff --git a/Launcher/Launcher b/Launcher/Launcher index 16f315c9e5c847c76047f7e46256f3a5a6a49c17..d0a35e2e364078058263323f6abf69bff465aae2 100755 GIT binary patch delta 16905 zcmX@|jCo2A%LEDT3IAC*Oc)p#*03;6RCcsuE?{5)VO9nP1_l8J21XD)0mNqIU=U#C z5L9Jg0AUu8I8&8V%{PiB`3=GFvRIE%`Id&`-VddD>Va&?0b2S44 z!;9J+28QN0ENK(Mn%{7|*q_S4Fr)bmM?eP1;zajcDV_#)^lX|gVYIu z>^i~|8XO+h{Kh9sFk+X+1Qw1L-Z=~my)G&mFQWJu7_wX9jgbmpjtbk=`*(Wk}0kYy3^BEXY@q4Tier5AyUV1sVG_@~Rj(5%MLoW{Zc zGXSJJL`9I|ZAU>y?ka>i<*GXaLvM|Wz^+b+$d4C?-5D4-_oRGXn!d=Z_b4j12W4mzFa!Fl4btb-w7l_#zm@_KA3L804Fyy)`NlyQaeosRtQb zq9U+sBShrGi(I&|zdAp@mOp=g${zAaj4bxCo*?yf_6isyM3i1<2f`3=9n2E-E6& z92^*5Xo2FSMn$9Z#|vFv28PaKoj+dO-~mNO^AVr8_~_Wfkoe{4Jl}b_^H_I?ibDMh zHdY3P<7{^XSvh*$JUV~9=mG_RLPY2DPWDcBmfjo{j?NdIw>p2m$Y*9?=yh}GeDz`@ z*k>mX3_bm^TUgq44}lv1GX8Qh&!Kkigo(2bbfkq zfC(hU5yy0R!sH$HzV-WEAkO57d#U0M&JjNZSUIw^BX=+fvvTZu3QD8enc(~Y$_<^z zz!7zv?ZJZw55Vaflx{`33naQLWI7*qRRni zuz=2EozFXeyif)C1LSPSdJyZ!iv$q$q4@|)T>N2(HOCpiA>-ijg75$T|D7K|cD>xm z%)kKg&#@O*5yClc3=BI?3bJw>Hau_`D&Ni2$@YRB6e?h?hg%Quw=yv>FdUxH&Cz;30I(6&ynKAPp!XbT%EV0pj#- zh8N5J|NjrlK%k5d^7ggP<5?ULFVaBz8B~N=IlB2eJy<%~JAXj@JOQNWnB}1ok*!(2@y_?X8@&@hYue<1ck%l!xLWWx-u|KXg�?Cmyq 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 delta 15458 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 #include #include +#include #include #include +#include +#include static GWindow* make_launcher_window(); @@ -29,51 +32,46 @@ int main(int, char**) return loop.exec(); } +class LauncherButton final : public GButton { +public: + LauncherButton(const String& icon_path, const String& exec_path, GWidget* parent) + : GButton(parent) + , m_executable_path(exec_path) + { + set_icon(GraphicsBitmap::load_from_file(icon_path, { 32, 32 })); + resize(50, 50); + on_click = [this] (GButton&) { + pid_t child_pid = fork(); + if (!child_pid) { + int rc = execl(m_executable_path.characters(), m_executable_path.characters(), nullptr); + if (rc < 0) + perror("execl"); + } + }; + } + virtual ~LauncherButton() { } + +private: + String m_executable_path; +}; + GWindow* make_launcher_window() { auto* window = new GWindow; window->set_title("Launcher"); - window->set_rect({ 50, 50, 300, 60 }); + window->set_rect(50, 50, 300, 60); auto* widget = new GWidget; window->set_main_widget(widget); - widget->set_relative_rect({ 0, 0, 300, 60 }); - auto* terminal_button = new GButton(widget); - terminal_button->set_relative_rect({ 5, 5, 50, 50 }); - terminal_button->set_icon(GraphicsBitmap::load_from_file("/res/icons/Terminal.rgb", { 32, 32 })); + auto* terminal_button = new LauncherButton("/res/icons/Terminal.rgb", "/bin/Terminal", widget); + terminal_button->move_to(5, 5); - terminal_button->on_click = [] (GButton&) { - pid_t child_pid = fork(); - if (!child_pid) { - execve("/bin/Terminal", nullptr, nullptr); - ASSERT_NOT_REACHED(); - } - }; + auto* font_editor_button = new LauncherButton("/res/icons/FontEditor.rgb", "/bin/FontEditor", widget); + font_editor_button->move_to(60, 5); - auto* font_editor_button = new GButton(widget); - font_editor_button->set_relative_rect({ 60, 5, 50, 50 }); - font_editor_button->set_icon(GraphicsBitmap::load_from_file("/res/icons/FontEditor.rgb", { 32, 32 })); - - font_editor_button->on_click = [] (GButton&) { - pid_t child_pid = fork(); - if (!child_pid) { - execve("/bin/FontEditor", nullptr, nullptr); - ASSERT_NOT_REACHED(); - } - }; - - auto* guitest_editor_button = new GButton(widget); - guitest_editor_button->set_relative_rect({ 115, 5, 50, 50 }); - guitest_editor_button->set_icon(GraphicsBitmap::load_from_file("/res/icons/generic.rgb", { 32, 32 })); - - guitest_editor_button->on_click = [] (GButton&) { - pid_t child_pid = fork(); - if (!child_pid) { - execve("/bin/guitest", nullptr, nullptr); - ASSERT_NOT_REACHED(); - } - }; + auto* guitest_editor_button = new LauncherButton("/res/icons/generic.rgb", "/bin/guitest", widget); + guitest_editor_button->move_to(115, 5); return window; } diff --git a/LibGUI/GButton.h b/LibGUI/GButton.h index 6c40d84401..1e6d6dd3ab 100644 --- a/LibGUI/GButton.h +++ b/LibGUI/GButton.h @@ -5,7 +5,7 @@ #include #include -class GButton final : public GWidget { +class GButton : public GWidget { public: explicit GButton(GWidget* parent); virtual ~GButton() override; diff --git a/LibGUI/GWidget.h b/LibGUI/GWidget.h index a12292d284..39785f1f8c 100644 --- a/LibGUI/GWidget.h +++ b/LibGUI/GWidget.h @@ -56,7 +56,11 @@ public: virtual const char* class_name() const override { return "GWidget"; } void set_relative_rect(const Rect&); + void move_to(const Point& point) { set_relative_rect({ point, relative_rect().size() }); } + void move_to(int x, int y) { move_to({ x, y }); } + void resize(const Size& size) { set_relative_rect({ relative_rect().location(), size }); } + void resize(int width, int height) { resize({ width, height }); } Color background_color() const { return m_background_color; } Color foreground_color() const { return m_foreground_color; } diff --git a/LibGUI/GWindow.h b/LibGUI/GWindow.h index 33af06f2bb..8e0ab3bb69 100644 --- a/LibGUI/GWindow.h +++ b/LibGUI/GWindow.h @@ -27,6 +27,7 @@ public: Rect rect() const; void set_rect(const Rect&); + void set_rect(int x, int y, int width, int height) { set_rect({ x, y, width, height }); } Point position() const { return rect().location(); }