From c969d48e6b92155a34e6d52bbcefa9b35032f1bd Mon Sep 17 00:00:00 2001 From: zetaPRIME Date: Thu, 16 Mar 2017 22:06:42 -0400 Subject: [PATCH] Backdrop, fix crash-on-exit(!) --- libstarlight/source/starlight/Application.cpp | 7 ++++++ .../source/starlight/dialog/Backdrop.cpp | 17 ++++++++++++++ .../source/starlight/dialog/Backdrop.h | 21 ++++++++++++++++++ libstarlight/source/starlight/dialog/OSK.cpp | 1 + libstarlight/source/starlight/dialog/OSK.h | 2 +- libstarlight/source/starlight/ui/Form.cpp | 1 + libstarlight/source/starlight/ui/Form.h | 2 +- libstarlight/source/starlight/ui/UICanvas.h | 2 +- .../source/starlight/ui/UIContainer.cpp | 1 - .../source/starlight/ui/UIContainer.h | 2 +- .../source/starlight/ui/UIElement.cpp | 4 ++-- libstarlight/source/starlight/ui/UIElement.h | 2 +- libstarlight/todo.txt | 5 +---- testbed/source/Core.cpp | 3 +++ .../default/decorations/generic backdrop.png | Bin 0 -> 5208 bytes .../default/decorations/generic backdrop.xcf | Bin 0 -> 71474 bytes 16 files changed, 58 insertions(+), 12 deletions(-) create mode 100644 libstarlight/source/starlight/dialog/Backdrop.cpp create mode 100644 libstarlight/source/starlight/dialog/Backdrop.h create mode 100644 themes/default/decorations/generic backdrop.png create mode 100644 themes/default/decorations/generic backdrop.xcf diff --git a/libstarlight/source/starlight/Application.cpp b/libstarlight/source/starlight/Application.cpp index 138ee80..1fe9a50 100644 --- a/libstarlight/source/starlight/Application.cpp +++ b/libstarlight/source/starlight/Application.cpp @@ -82,8 +82,15 @@ void Application::_init() { void Application::_end() { End(); + //for (auto& f : forms) f->Close(); forms.clear(); // not sure why, but not doing this results in a data abort if any forms are active + // force cleanup! let's not softlock, mmkay? + formTouchScreen = nullptr; + formTopScreen = nullptr; + touchScreen.reset(); + topScreen.reset(); + ThemeManager::End(); RenderCore::Close(); ConfigManager::End(); diff --git a/libstarlight/source/starlight/dialog/Backdrop.cpp b/libstarlight/source/starlight/dialog/Backdrop.cpp new file mode 100644 index 0000000..f581043 --- /dev/null +++ b/libstarlight/source/starlight/dialog/Backdrop.cpp @@ -0,0 +1,17 @@ +#include "Backdrop.h" + +#include "starlight/ui/Image.h" + +using starlight::ui::Image; + +using starlight::ui::Form; + +using starlight::dialog::Backdrop; + +Backdrop::Backdrop(std::string imgPath) : Form(true) { + priority = -1000000; // it is, after all, a backdrop + auto img = std::make_shared(VRect(0, 0, 400, 480), imgPath); + topScreen->Add(img); + touchScreen->Add(img); + touchScreen->scrollOffset = Vector2(40, 240); +} diff --git a/libstarlight/source/starlight/dialog/Backdrop.h b/libstarlight/source/starlight/dialog/Backdrop.h new file mode 100644 index 0000000..1d8c98c --- /dev/null +++ b/libstarlight/source/starlight/dialog/Backdrop.h @@ -0,0 +1,21 @@ +#pragma once +#include "starlight/_global.h" + +#include + +#include "starlight/ThemeManager.h" + +#include "starlight/ui/Form.h" + +namespace starlight { + namespace dialog { + class Backdrop : public ui::Form, public ui::FormCreator { + private: + // + + public: + Backdrop(std::string imgPath = "decorations/generic backdrop"); + //~Backdrop() override { }; + }; + } +} diff --git a/libstarlight/source/starlight/dialog/OSK.cpp b/libstarlight/source/starlight/dialog/OSK.cpp index 93918c1..bf1ccdf 100644 --- a/libstarlight/source/starlight/dialog/OSK.cpp +++ b/libstarlight/source/starlight/dialog/OSK.cpp @@ -121,6 +121,7 @@ OSK::OSK(osk::InputHandler* handler) : Form(true), handler(handler) { void OSK::Update(bool focused) { if (handler->done) { Close(); + return; } if (focused) { if (InputManager::Pressed(Keys::B)) handler->Done(); diff --git a/libstarlight/source/starlight/dialog/OSK.h b/libstarlight/source/starlight/dialog/OSK.h index deff676..936429c 100644 --- a/libstarlight/source/starlight/dialog/OSK.h +++ b/libstarlight/source/starlight/dialog/OSK.h @@ -25,7 +25,7 @@ namespace starlight { std::unique_ptr handler; OSK(osk::InputHandler* handler); - ~OSK() override { }; + //~OSK() override { }; void Update(bool focused) override; diff --git a/libstarlight/source/starlight/ui/Form.cpp b/libstarlight/source/starlight/ui/Form.cpp index 2a7db26..a683f37 100644 --- a/libstarlight/source/starlight/ui/Form.cpp +++ b/libstarlight/source/starlight/ui/Form.cpp @@ -62,6 +62,7 @@ void Form::Open(bool showImmediately) { } void Form::Close() { + volatile auto keepalive = shared_from_this(); // don't allow delete until Close() goes out of scope auto app = Application::Current(); if (app == nullptr) return; app->forms.remove(shared_from_this()); diff --git a/libstarlight/source/starlight/ui/Form.h b/libstarlight/source/starlight/ui/Form.h index 97cb6a3..09b09a4 100644 --- a/libstarlight/source/starlight/ui/Form.h +++ b/libstarlight/source/starlight/ui/Form.h @@ -66,7 +66,7 @@ namespace starlight { Form() { } Form(bool useDefaults); - virtual ~Form() { } + virtual ~Form() = default; void Open(bool showImmediately = true); void Close(); diff --git a/libstarlight/source/starlight/ui/UICanvas.h b/libstarlight/source/starlight/ui/UICanvas.h index 95b110e..2aeac8d 100644 --- a/libstarlight/source/starlight/ui/UICanvas.h +++ b/libstarlight/source/starlight/ui/UICanvas.h @@ -19,7 +19,7 @@ namespace starlight { bool needsRedraw = true; UICanvas(VRect rect); - ~UICanvas() { } + //~UICanvas() { } void MarkForRedraw() override; diff --git a/libstarlight/source/starlight/ui/UIContainer.cpp b/libstarlight/source/starlight/ui/UIContainer.cpp index 954b54c..7c399b7 100644 --- a/libstarlight/source/starlight/ui/UIContainer.cpp +++ b/libstarlight/source/starlight/ui/UIContainer.cpp @@ -10,7 +10,6 @@ using starlight::ui::UIElement; using starlight::ui::UIContainer; UIContainer::UIContainer() { } -UIContainer::~UIContainer() { } void UIContainer::Dive(std::function check, std::function func, bool consumable, bool frontFirst) { bool finished = false; diff --git a/libstarlight/source/starlight/ui/UIContainer.h b/libstarlight/source/starlight/ui/UIContainer.h index bd26a4f..8a7d439 100644 --- a/libstarlight/source/starlight/ui/UIContainer.h +++ b/libstarlight/source/starlight/ui/UIContainer.h @@ -29,7 +29,7 @@ namespace starlight { UIContainer(); UIContainer(VRect rect) { this->rect = rect; } - ~UIContainer(); + //~UIContainer(); void Dive(std::function check, std::function func, bool consumable = true, bool frontFirst = true); void Dive(std::function func, bool consumable = true, bool frontFirst = true); diff --git a/libstarlight/source/starlight/ui/UIElement.cpp b/libstarlight/source/starlight/ui/UIElement.cpp index 6cbec72..573541e 100644 --- a/libstarlight/source/starlight/ui/UIElement.cpp +++ b/libstarlight/source/starlight/ui/UIElement.cpp @@ -6,7 +6,7 @@ using starlight::ui::UIElement; using starlight::ui::UIContainer; UIElement::UIElement() { } -UIElement::~UIElement() { } +//UIElement::~UIElement() { } void UIElement::_Dive(std::function& check, std::function& func, bool consumable, bool frontFirst, bool& finished) { if (!check(this)) return; @@ -43,4 +43,4 @@ VRect& UIElement::Resize(Vector2 size) { void UIElement::MarkForRedraw() { if (auto p = parent.lock()) p->MarkForRedraw(); -} \ No newline at end of file +} diff --git a/libstarlight/source/starlight/ui/UIElement.h b/libstarlight/source/starlight/ui/UIElement.h index 2e02c65..6d212a6 100644 --- a/libstarlight/source/starlight/ui/UIElement.h +++ b/libstarlight/source/starlight/ui/UIElement.h @@ -32,7 +32,7 @@ namespace starlight { inline VRect& Resize(float w, float h) { return Resize(Vector2(w, h)); } UIElement(); - virtual ~UIElement(); + virtual ~UIElement() = default; virtual void Update() { } virtual void PreDraw() { } diff --git a/libstarlight/todo.txt b/libstarlight/todo.txt index b668d3d..edf0635 100644 --- a/libstarlight/todo.txt +++ b/libstarlight/todo.txt @@ -3,16 +3,13 @@ roadmap to first release, in no particular order { finish implementing OSK! { - - fix cursor-down polish! { - - background actual cursor image? } InputManager::OpenKeyboard } - fix [ offset (-1 it) - add generic backdrop assets (and form) + - whee, fixed softlock/crash on exit, hopefully permanently! add license!! (MIT?) ADD README.MD PLS diff --git a/testbed/source/Core.cpp b/testbed/source/Core.cpp index 3f906dc..a6aa03e 100644 --- a/testbed/source/Core.cpp +++ b/testbed/source/Core.cpp @@ -18,6 +18,7 @@ #include "starlight/ui/TextBox.h" #include "starlight/ui/Label.h" +#include "starlight/dialog/Backdrop.h" #include "starlight/dialog/MessageBox.h" #include "starlight/dialog/OSK.h" @@ -81,6 +82,8 @@ void Core::Init() { tb->multiLine = true; form->touchScreen->Add(tb); + sl::dialog::Backdrop::New()->Open(); + /*label->SetFont("default.16"); btn.SetText("I was pressed!"); btn.eOnTap = [label](auto& btn){ diff --git a/themes/default/decorations/generic backdrop.png b/themes/default/decorations/generic backdrop.png new file mode 100644 index 0000000000000000000000000000000000000000..ad9cafe51385238fbb85f0a286f86f7931ecc138 GIT binary patch literal 5208 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 F{{Z@QOZWf) literal 0 HcmV?d00001 diff --git a/themes/default/decorations/generic backdrop.xcf b/themes/default/decorations/generic backdrop.xcf new file mode 100644 index 0000000000000000000000000000000000000000..14ef8d7ad4a8e1bac102579b5ad0c482256b3002 GIT binary patch literal 71474 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 b(Pzo+e<`159Pjn#Q8a#!D>xr#grff+=Bcu^ literal 0 HcmV?d00001