From 0fe4f4fe53dde0486a12b57e918cf792a7ba15ec Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Tue, 3 Jan 2023 15:31:50 +0100 Subject: [PATCH] Demos: Remove "Cube" application This wasn't doing anything interesting enough to justify being its own demo application. If we need a spinning cube, we can just load a cube model into 3DFileViewer. :^) --- Base/res/apps/Cube.af | 4 - Base/res/icons/16x16/app-cube.png | Bin 5981 -> 0 bytes Base/res/icons/32x32/app-cube.png | Bin 7745 -> 0 bytes Userland/Demos/CMakeLists.txt | 1 - Userland/Demos/Cube/CMakeLists.txt | 11 -- Userland/Demos/Cube/Cube.cpp | 251 ----------------------------- 6 files changed, 267 deletions(-) delete mode 100644 Base/res/apps/Cube.af delete mode 100644 Base/res/icons/16x16/app-cube.png delete mode 100644 Base/res/icons/32x32/app-cube.png delete mode 100644 Userland/Demos/Cube/CMakeLists.txt delete mode 100644 Userland/Demos/Cube/Cube.cpp diff --git a/Base/res/apps/Cube.af b/Base/res/apps/Cube.af deleted file mode 100644 index dce41fe1d2..0000000000 --- a/Base/res/apps/Cube.af +++ /dev/null @@ -1,4 +0,0 @@ -[App] -Name=Cube -Executable=/bin/Cube -Category=Demos diff --git a/Base/res/icons/16x16/app-cube.png b/Base/res/icons/16x16/app-cube.png deleted file mode 100644 index 953716c3b356760c774d54b82dcced162510a484..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5981 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s-1*<|LN`ey06$*;-(=u~X z6-p`#QWa7wGSe6sDsHU}kKFV`gXhn4kzy7VvChXE+|KYm`!PA;P1LScx9=L4*)VH4 zbOv#s|5E=??wP*LnR`<5F3DXNAALNje(uEz+j*PzrTqQ%uF=+7zo_`{0RhV`?IYqj!m>52BoN|n1j zpFYi4n|HRZ`^(4Ya|?JT9(nxwX4jFHeVe{ARd3@g3GvHbTp;m9XwKteEoR|z_j8X< z_wi48_v7@0&%e563eP=!U}wwv@;u3VOld4iR&JLKf6dCN z`6ig&_dDQuU>Lvf=`Giy#6EKUWBRq}UQ2lHHqmvLd)9WWXmV6yJKk(#ddg(Q`fWk1 zF6Za6>K3PNPvO!N3g5xdn7OBojk_b??;)G$zDEkrxVd%rX0BYl1k$Q@(BzE%^8)1*C2-OSqyVd^z>S^K_xt2NELE!ek6? z7v%&p+18x)otOTFea}6)i@uk>u^9-Kus0~Ov*oCWYfKVNQ*4qI{ga}Q{(R?zl`e_} z%wBGDTqiVZG~}%jj4HPLpy>9EMev}j`U19zoSXLW7s!9idf;riZ0lywmh!cO*GVZmauyIgk{c7Hfp|_PkEL~TBol$H)CS)!$)2E z3y&zddTZ@GRJ&^Z!ed&Y*{gOI7B5qr5S?>r%hGAqr8|PY+kUyRG~3^nf5)wY!~F)2 zCM;C$t=YIOvNrYY+@13`yUjL@bFpmhk6GiWQA<-X^mb#YqI_j-eLwbJ}Ee^1 z3#pkU3io|eE3duJId?9rdkw2mjPKqX8?N1sUc1x!qcivV8&$O`m;b8rvu}8|SEKc? zNv2wU)6(rL9o}~QJbdzO{>&HA+UsTr&sp~Fi|p(}+@~|m{P(`PetDL?@%ih$E0*O> zITpKRo{76sOeUX?tl&~D-hGul&eNy)_dMI5TzQ-0ruMuAImcv|^}h`{>ecG~z5CJ; z^`$e8N>8e+ILg~se`%IFU$&Qed(VTvjgOVu7u~!3;9t%$gT4r17Hge9SH1V$_�n zQ{KA#bIkj1xo1o{^FVx^YR=txuD^57yIKC?_@%dO`L&!0M{_60wYhNF8!UPevb~&T zpL@f7K0&YBol$N{s@38b57%TK&k&aJ*MA*pu6^lLuZZkF`I|F;T%1*YF#Gk7f){~I zF%A2DowM!Mw|9PLyZ4o$T7QmUcwogVx3r1<`O3Tc&-|&W?QH*dFYuhqb7i+pSyOq> zh=qUFH~+<(@a)>J7;}RwCy#WzU|sXz-;UQ2)8=lr-lci3w?m?A-@&&FR@;BNIM?G- z`lhQr+K1bPK5mtntGS`CPy3W^LYne#ll)?nB8NY<`}t%FGbh;8Mb3KsjO#;8?);S| z@pF4#b9#i|{nx74`=Rgixg85W=8M1HAw27%#@79*ysQ3hFzZU*A9?dk@v393dNb=8 zy$ybHC2>wuWME)y$#ixO@N{;D6^;xH6?1AQ+Ik#zkU1J3>^iZlgLSDz$_hU*7gw3B zT&^nwvRcDref0h|squPtbuWGpRq!EsYp49qbrpY(?R>E5fbrop zD^q_NH8JkoHCqg|XGwh&DGa$pH808$vxazra!lJ)B`t2Y6QZ3SaqSZJtnNc)jLahA{`9JTjo$~jq@LXtd;pZa@ zd1Z&|dKXq$p8LM>v58;91LK0F+y6|pGWhISwRWj%f5X1q2ak3w)vP}7l+WNx%86xf zyc}ma+41k0f6+X(u`zl<`q|fOclKXqSMZHh&2MOSPT1mb^R?akcX{vM-Zwt`ua3c} zwW#;#5>ZhG2LA5Mkcg59UmvUF{9L`nl>DSry^7od1`x2ZuP8`N&Q2{+NJ>r5%(GQ` zzk9!uLS~AsQn;zFfp39xYDT68?tx|+Xl~0)0b01O41w6dlDS zu4M@Ou<9rdsVqp<4@xc0FD*(=buCNHD^W(av>>On7}?I!;#80j*xflPY5Enp5Sx+p zxO@5r!1aKFF+DT40IUO~8d+sZGF)9jX;BVXO-izUYEEiyYF83VG$bSZi!#$Q^AdBAT?H~KB{Rj! z%rwow(A*?NH`&58P1nTSAXV4GAk|zq%`!D9IV~kM)!5t=Y!oOStQ-S8ZIz7l3=kp# zIf*4{`9-<5NZi|nj;j2r4|)u=I4RT zG&ImNG6Kt_BwM-V7v(0F*eYe_CZ?zA7v!abB|y<)9)^}$>l zeSC^BObX7(FV6#OgydX2<{*^9O>rzLDbFv;_Al~J%1TWx!EX*W#c-2?QqwbwONuHz z33v)koed_?#In>Ba1?id z^U_mOY?Yu{4JMw6B^jrrnHr>-m>B6Mnwq8Pnj|J$=vo>WTIw1bn5S77C!1QDBqgDm zUYws+Ql40p>X@FIS7NK=o|#(!j%Ni8aO%@URb8HunrEw|ZD3$!V4wtvUIiO{P=N~b zo(-tT@%6Pr4gecak!0lwN_oMh1qC^osYQ^W04J2-)Ix|!Hu^Z!A?XLFvwVWuk(EJo zJLeZv7GEkDFjGTJes;jgNvjPAW89P>Y`e3aUpuxsd*{3 zO65xSc11Rxp$rTRY)RhkE)1U-J~1%VewY8lz`(#+;1OBOz@VoL!i*J5?aLS#7}!fZ zeO=j~@Cb^lYcsoCkY`|EkSuYHC~?lu1$CMj!0n;b6ovB4k_-h~)q0!UD zF~s8Z*-0CD4=C`k+}GH;eDN}mvlcTIOfOe5UTX1ZFud^8`-!#fCPrnY6G|tp@$@=? zh7OmDUJ$y-x1v*qq2Nxt|2Kw)$D8*G?YwqC==#;J*9BJ{CQmVwvdFp6rBk65aWbA| zd)=ilA)%|$8j}*@QyGuP8{FFR!G`hX;n}@%N53f5CPaV#3mRzfboFyt=akR{0GFx% Apa1{> diff --git a/Base/res/icons/32x32/app-cube.png b/Base/res/icons/32x32/app-cube.png deleted file mode 100644 index 59cfb475f3659c79d33fc6357a2df78db8070d07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7745 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 splcVJ{+^z&GO_jeai+!2{A;I)_q(|GZT- - * Copyright (c) 2022, the SerenityOS developers. - * - * SPDX-License-Identifier: BSD-2-Clause - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -int const WIDTH = 200; -int const HEIGHT = 200; - -static bool flag_hide_window_frame = false; - -class Cube final : public GUI::Widget { - C_OBJECT(Cube) -public: - virtual ~Cube() override = default; - void set_stat_label(RefPtr l) { m_stats = l; }; - void set_show_window_frame(bool); - bool show_window_frame() const { return m_show_window_frame; } - - Function on_context_menu_request; - -protected: - virtual void context_menu_event(GUI::ContextMenuEvent& event) override - { - if (on_context_menu_request) - on_context_menu_request(event); - } - -private: - Cube(); - - RefPtr m_bitmap; - RefPtr m_stats; - - virtual void paint_event(GUI::PaintEvent&) override; - virtual void timer_event(Core::TimerEvent&) override; - - int m_accumulated_time; - int m_cycles; - int m_phase; - bool m_show_window_frame { true }; -}; - -Cube::Cube() -{ - m_bitmap = Gfx::Bitmap::try_create(Gfx::BitmapFormat::BGRx8888, { WIDTH, HEIGHT }).release_value_but_fixme_should_propagate_errors(); - - m_accumulated_time = 0; - m_cycles = 0; - m_phase = 0; - - stop_timer(); - start_timer(20); -} - -void Cube::paint_event(GUI::PaintEvent& event) -{ - GUI::Painter painter(*this); - painter.add_clip_rect(event.rect()); - painter.draw_scaled_bitmap(rect(), *m_bitmap, m_bitmap->rect()); -} - -void Cube::timer_event(Core::TimerEvent&) -{ - auto timer = Core::ElapsedTimer::start_new(); - - const FloatVector3 vertices[8] { - { -1, -1, -1 }, - { -1, 1, -1 }, - { 1, 1, -1 }, - { 1, -1, -1 }, - { -1, -1, 1 }, - { -1, 1, 1 }, - { 1, 1, 1 }, - { 1, -1, 1 }, - }; - -#define QUAD(a, b, c, d) a, b, c, c, d, a - - int const indices[] { - QUAD(0, 1, 2, 3), - QUAD(7, 6, 5, 4), - QUAD(4, 5, 1, 0), - QUAD(3, 2, 6, 7), - QUAD(1, 5, 6, 2), - QUAD(0, 3, 7, 4), - }; - - const Color colors[] { - Color::Red, - Color::Red, - Color::Green, - Color::Green, - Color::Blue, - Color::Blue, - Color::Magenta, - Color::Magenta, - Color::White, - Color::White, - Color::Yellow, - Color::Yellow, - }; - - FloatVector3 transformed_vertices[8]; - - static float angle = 0; - angle += 0.02f; - - auto matrix = Gfx::translation_matrix(FloatVector3(0, 0, 1.5f)) - * Gfx::rotation_matrix(FloatVector3(1, 0, 0), angle * 1.17356641f) - * Gfx::rotation_matrix(FloatVector3(0, 1, 0), angle * 0.90533273f) - * Gfx::rotation_matrix(FloatVector3(0, 0, 1), angle); - - for (int i = 0; i < 8; i++) { - transformed_vertices[i] = transform_point(matrix, vertices[i]); - } - - GUI::Painter painter(*m_bitmap); - if (m_show_window_frame) - painter.fill_rect_with_gradient(Gfx::Orientation::Vertical, m_bitmap->rect(), Gfx::Color::White, Gfx::Color::Blue); - else - painter.clear_rect(m_bitmap->rect(), Gfx::Color::Transparent); - - auto to_point = [](FloatVector3 const& v) { - return Gfx::IntPoint(v.x(), v.y()); - }; - - for (size_t i = 0; i < sizeof(indices) / sizeof(indices[0]) / 3; i++) { - auto a = transformed_vertices[indices[i * 3]]; - auto b = transformed_vertices[indices[i * 3 + 1]]; - auto c = transformed_vertices[indices[i * 3 + 2]]; - auto normal = (b - a).cross(c - a); - normal.normalize(); - - // Perspective projection - a.set_x(WIDTH / 2 + a.x() / (1 + a.z() * 0.35f) * WIDTH / 3); - a.set_y(HEIGHT / 2 - a.y() / (1 + a.z() * 0.35f) * WIDTH / 3); - b.set_x(WIDTH / 2 + b.x() / (1 + b.z() * 0.35f) * WIDTH / 3); - b.set_y(HEIGHT / 2 - b.y() / (1 + b.z() * 0.35f) * WIDTH / 3); - c.set_x(WIDTH / 2 + c.x() / (1 + c.z() * 0.35f) * WIDTH / 3); - c.set_y(HEIGHT / 2 - c.y() / (1 + c.z() * 0.35f) * WIDTH / 3); - - float winding = (b.x() - a.x()) * (c.y() - a.y()) - (b.y() - a.y()) * (c.x() - a.x()); - if (winding < 0) - continue; - - float shade = 0.5f + normal.y() * 0.5f; - auto color = colors[i]; - color.set_red(color.red() * shade); - color.set_green(color.green() * shade); - color.set_blue(color.blue() * shade); - - painter.draw_triangle(to_point(a), to_point(b), to_point(c), color); - } - - if ((m_cycles % 50) == 0) { - dbgln("{} total cycles. finished 50 in {} ms, avg {} ms", m_cycles, m_accumulated_time, m_accumulated_time / 50); - m_stats->set_text(DeprecatedString::formatted("{} ms", m_accumulated_time / 50)); - m_accumulated_time = 0; - } - - update(); - - m_accumulated_time += timer.elapsed(); - m_cycles++; -} - -void Cube::set_show_window_frame(bool show) -{ - if (show == m_show_window_frame) - return; - m_show_window_frame = show; - m_stats->set_visible(m_show_window_frame); - auto& w = *window(); - w.set_frameless(!m_show_window_frame); - w.set_has_alpha_channel(!m_show_window_frame); - w.set_alpha_hit_threshold(m_show_window_frame ? 0 : 1); -} - -ErrorOr serenity_main(Main::Arguments arguments) -{ - auto app = TRY(GUI::Application::try_create(arguments)); - - TRY(Core::System::pledge("stdio recvfd sendfd rpath")); - TRY(Core::System::unveil("/res", "r")); - TRY(Core::System::unveil(nullptr, nullptr)); - - Core::ArgsParser parser; - parser.set_general_help("Create a window with a spinning cube."); - parser.add_option(flag_hide_window_frame, "Hide window frame", "hide-window", 'h'); - parser.parse(arguments); - - auto window = TRY(GUI::Window::try_create()); - window->set_double_buffering_enabled(true); - window->set_title("Cube"); - window->set_resizable(false); - window->resize(WIDTH, HEIGHT); - window->set_has_alpha_channel(true); - window->set_alpha_hit_threshold(1); - - auto cube = TRY(window->try_set_main_widget()); - - auto time = TRY(cube->try_add()); - time->set_relative_rect({ 0, 4, 40, 10 }); - time->move_by({ window->width() - time->width(), 0 }); - cube->set_stat_label(time); - - auto app_icon = GUI::Icon::default_icon("app-cube"sv); - window->set_icon(app_icon.bitmap_for_size(16)); - - auto file_menu = TRY(window->try_add_menu("&File")); - auto show_window_frame_action = GUI::Action::create_checkable("Show Window &Frame", [&](auto& action) { - cube->set_show_window_frame(action.is_checked()); - }); - - cube->set_show_window_frame(!flag_hide_window_frame); - show_window_frame_action->set_checked(cube->show_window_frame()); - TRY(file_menu->try_add_action(move(show_window_frame_action))); - TRY(file_menu->try_add_separator()); - TRY(file_menu->try_add_action(GUI::CommonActions::make_quit_action([&](auto&) { app->quit(); }))); - auto help_menu = TRY(window->try_add_menu("&Help")); - TRY(help_menu->try_add_action(GUI::CommonActions::make_command_palette_action(window))); - TRY(help_menu->try_add_action(GUI::CommonActions::make_about_action("Cube Demo", app_icon, window))); - - cube->on_context_menu_request = [&](auto& event) { - file_menu->popup(event.screen_position()); - }; - - window->show(); - - return app->exec(); -}