From 70891ce7b47fbd1b91875b2dbc745f448874aab0 Mon Sep 17 00:00:00 2001 From: James Grogan Date: Wed, 16 Nov 2022 17:00:55 +0000 Subject: [PATCH] Back with clickable button. --- apps/sample-gui/MediaTool.cpp | 5 ++-- src/graphics/opengl/OpenGlMeshPainter.cpp | 2 +- src/graphics/opengl/OpenGlPainter.cpp | 8 ++--- src/ui_elements/desktop_elements/Window.cpp | 10 +++++-- src/ui_elements/desktop_elements/Window.h | 2 ++ src/ui_elements/widgets/Button.cpp | 4 ++- src/ui_elements/widgets/HorizontalSpacer.cpp | 2 +- src/ui_elements/widgets/Widget.cpp | 8 +++-- src/ui_elements/widgets/Widget.h | 14 +++++---- src/visual_elements/AbstractVisualNode.h | 16 ++++++++-- src/visual_elements/MaterialNode.cpp | 2 ++ src/visual_elements/RectangleNode.cpp | 1 + src/visual_elements/Scene.cpp | 10 +++++-- src/visual_elements/SceneItem.h | 15 ++++++++++ src/visual_elements/TextNode.cpp | 5 +++- src/windows/managers/DesktopManager.cpp | 29 +++++-------------- src/windows/managers/DesktopManager.h | 7 ++--- src/windows/managers/WindowManager.cpp | 14 +++++++++ src/windows/managers/WindowManager.h | 2 ++ .../ui_interfaces/x11/XcbInterface.cpp | 1 + 20 files changed, 107 insertions(+), 50 deletions(-) diff --git a/apps/sample-gui/MediaTool.cpp b/apps/sample-gui/MediaTool.cpp index 51e422c..bf6a550 100644 --- a/apps/sample-gui/MediaTool.cpp +++ b/apps/sample-gui/MediaTool.cpp @@ -57,10 +57,11 @@ void MediaTool::initializeViews() auto button = Button::Create(); button->setLabel("Click!"); button->setBounds(100, 200); - button->setBackgroundColor(Color(0, 0, 255, 0)); + button->setBackgroundColor(Color(255, 0, 255, 1)); auto background_widget = Widget::Create(); - background_widget->setBackgroundColor(Color(0, 255, 255, 0)); + background_widget->setName("BackgroundWidget"); + background_widget->setBackgroundColor(Color(0, 255, 255, 1)); auto horizontal_spacer = HorizontalSpacer::Create(); horizontal_spacer->addWidgetWithScale(std::move(button), 1); diff --git a/src/graphics/opengl/OpenGlMeshPainter.cpp b/src/graphics/opengl/OpenGlMeshPainter.cpp index ebe5807..f6961bd 100644 --- a/src/graphics/opengl/OpenGlMeshPainter.cpp +++ b/src/graphics/opengl/OpenGlMeshPainter.cpp @@ -65,7 +65,7 @@ void OpenGlMeshPainter::paint(const std::vector& verts, const std::vector int vertexColorLocation = glGetUniformLocation(mShaderProgram->getHandle(), "ourColor"); glUniform4f(vertexColorLocation, float(color[0]), float(color[1]), float(color[2]), float(color[3])); - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); + //glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0); glBindVertexArray(0); } diff --git a/src/graphics/opengl/OpenGlPainter.cpp b/src/graphics/opengl/OpenGlPainter.cpp index 809911c..e06129e 100644 --- a/src/graphics/opengl/OpenGlPainter.cpp +++ b/src/graphics/opengl/OpenGlPainter.cpp @@ -54,17 +54,17 @@ void OpenGlPainter::paint(DrawingContext* context) glClearColor(0.5, 0.5, 1.0, 0.0); glClear(GL_COLOR_BUFFER_BIT); - for(unsigned idx=0; idxgetSurface()->getScene()->getNumItems(); idx++) + auto scene = context->getSurface()->getScene(); + for(unsigned idx=0; idxgetNumItems(); idx++) { - auto scene_item = context->getSurface()->getScene()->getItem(idx); + auto scene_item = scene->getItem(idx); if (scene_item->getType() == SceneItem::Type::MODEL) { mMeshPainter->paint(dynamic_cast(scene_item), context); } - else + else if (scene_item->getType() == SceneItem::Type::TEXT) { mTextPainter->paint(dynamic_cast(scene_item), context); - break; } } diff --git a/src/ui_elements/desktop_elements/Window.cpp b/src/ui_elements/desktop_elements/Window.cpp index b175c99..a5e5f60 100644 --- a/src/ui_elements/desktop_elements/Window.cpp +++ b/src/ui_elements/desktop_elements/Window.cpp @@ -120,9 +120,10 @@ void Window::doPaint(mt::Screen* screen) { mPlatformWindow->beforePaint(screen); - if (mScene && mScene->getRootNode()->getNumChildren() == 0) + auto scene = getScene(); + if (scene->getRootNode()->getNumChildren() == 0) { - mScene->getRootNode()->addChild(mWidget->getRootNode()); + scene->getRootNode()->addChild(mWidget->getRootNode()); } mDrawingContext->paint(); @@ -139,4 +140,9 @@ void Window::clear() } } +bool Window::isDirty() const +{ + return mWidget->needsUpdate(); +} + } diff --git a/src/ui_elements/desktop_elements/Window.h b/src/ui_elements/desktop_elements/Window.h index e793d32..a006334 100644 --- a/src/ui_elements/desktop_elements/Window.h +++ b/src/ui_elements/desktop_elements/Window.h @@ -59,6 +59,8 @@ public: void setSize(unsigned width, unsigned height) override; + bool isDirty() const; + private: WidgetPtr mWidget {nullptr}; IPlatformWindowPtr mPlatformWindow {nullptr}; diff --git a/src/ui_elements/widgets/Button.cpp b/src/ui_elements/widgets/Button.cpp index b7abde8..ac9bcb8 100644 --- a/src/ui_elements/widgets/Button.cpp +++ b/src/ui_elements/widgets/Button.cpp @@ -15,7 +15,7 @@ Button::Button() mClickedColor(Color(180, 180, 180)), mClickFunc() { - + mName = "Button"; } std::unique_ptr