From 672b31b603570c046a4e3b5dd40d0b9163df3473 Mon Sep 17 00:00:00 2001 From: jmsgrogan Date: Wed, 11 Jan 2023 10:21:18 +0000 Subject: [PATCH] Clean up of scene nodes to support 2d and non int positioning. --- .../src/visuals/BlochSphereNode.cpp | 4 +- .../src/visuals/BlochSphereNode.h | 4 +- .../test/TestBlochSphereNode.cpp | 2 +- src/graphics/AbstractPainter.h | 1 + src/graphics/CMakeLists.txt | 1 + src/graphics/DrawingContext.cpp | 5 ++ src/graphics/DrawingContext.h | 4 +- src/graphics/directx/DirectXMesh.cpp | 6 +- src/graphics/directx/DirectXTextPainter.cpp | 6 +- src/graphics/directx/DirectXTextPainter.h | 2 +- src/image/png/PngWriter.cpp | 11 ++- src/image/png/PngWriter.h | 1 + src/visual_elements/CMakeLists.txt | 35 ++++++---- src/visual_elements/SceneModel.cpp | 39 ----------- .../basic_shapes/CircleNode.cpp | 14 ++-- src/visual_elements/basic_shapes/CircleNode.h | 12 ++-- .../basic_shapes/LineNode.cppcd | 0 .../basic_shapes/RectangleNode.cpp | 16 ++--- .../basic_shapes/RectangleNode.h | 20 +++--- .../{ => nodes}/AbstractVisualNode.cpp | 10 +-- .../{ => nodes}/AbstractVisualNode.h | 18 ++--- .../{ => nodes}/GeometryNode.cpp | 2 +- .../{ => nodes}/GeometryNode.h | 4 +- src/visual_elements/{ => nodes}/GridNode.cpp | 10 +-- src/visual_elements/{ => nodes}/GridNode.h | 14 ++-- .../{ => nodes}/MaterialNode.cpp | 2 +- .../{ => nodes}/MaterialNode.h | 2 +- src/visual_elements/{ => nodes}/MeshNode.cpp | 12 ++-- src/visual_elements/{ => nodes}/MeshNode.h | 14 ++-- src/visual_elements/{ => nodes}/RootNode.h | 0 src/visual_elements/{ => nodes}/TextNode.cpp | 19 ++--- src/visual_elements/{ => nodes}/TextNode.h | 22 +++--- .../{ => nodes}/TransformNode.h | 0 src/visual_elements/{ => scene}/Scene.cpp | 23 ++++-- src/visual_elements/{ => scene}/Scene.h | 18 ++--- src/visual_elements/scene/SceneInfo.h | 10 +++ src/visual_elements/{ => scene}/SceneItem.cpp | 0 src/visual_elements/{ => scene}/SceneItem.h | 0 src/visual_elements/scene/SceneModel.cpp | 70 +++++++++++++++++++ src/visual_elements/{ => scene}/SceneModel.h | 29 ++++---- src/visual_elements/{ => scene}/SceneText.cpp | 0 src/visual_elements/{ => scene}/SceneText.h | 0 test/graphics/CMakeLists.txt | 18 +++-- test/graphics/TestD2dOffScreenRendering.cpp | 39 +++++++++++ test/graphics/TestD2dRendering.cpp | 22 ++++++ 45 files changed, 341 insertions(+), 200 deletions(-) delete mode 100644 src/visual_elements/SceneModel.cpp delete mode 100644 src/visual_elements/basic_shapes/LineNode.cppcd rename src/visual_elements/{ => nodes}/AbstractVisualNode.cpp (77%) rename src/visual_elements/{ => nodes}/AbstractVisualNode.h (72%) rename src/visual_elements/{ => nodes}/GeometryNode.cpp (86%) rename src/visual_elements/{ => nodes}/GeometryNode.h (88%) rename src/visual_elements/{ => nodes}/GridNode.cpp (92%) rename src/visual_elements/{ => nodes}/GridNode.h (65%) rename src/visual_elements/{ => nodes}/MaterialNode.cpp (91%) rename src/visual_elements/{ => nodes}/MaterialNode.h (88%) rename src/visual_elements/{ => nodes}/MeshNode.cpp (83%) rename src/visual_elements/{ => nodes}/MeshNode.h (55%) rename src/visual_elements/{ => nodes}/RootNode.h (100%) rename src/visual_elements/{ => nodes}/TextNode.cpp (88%) rename src/visual_elements/{ => nodes}/TextNode.h (63%) rename src/visual_elements/{ => nodes}/TransformNode.h (100%) rename src/visual_elements/{ => scene}/Scene.cpp (62%) rename src/visual_elements/{ => scene}/Scene.h (59%) create mode 100644 src/visual_elements/scene/SceneInfo.h rename src/visual_elements/{ => scene}/SceneItem.cpp (100%) rename src/visual_elements/{ => scene}/SceneItem.h (100%) create mode 100644 src/visual_elements/scene/SceneModel.cpp rename src/visual_elements/{ => scene}/SceneModel.h (54%) rename src/visual_elements/{ => scene}/SceneText.cpp (100%) rename src/visual_elements/{ => scene}/SceneText.h (100%) create mode 100644 test/graphics/TestD2dOffScreenRendering.cpp create mode 100644 test/graphics/TestD2dRendering.cpp diff --git a/plugins/quantum_computing/src/visuals/BlochSphereNode.cpp b/plugins/quantum_computing/src/visuals/BlochSphereNode.cpp index 8b75d1f..d502bc7 100644 --- a/plugins/quantum_computing/src/visuals/BlochSphereNode.cpp +++ b/plugins/quantum_computing/src/visuals/BlochSphereNode.cpp @@ -2,7 +2,7 @@ #include "CircleNode.h" -BlochSphereNode::BlochSphereNode(const DiscretePoint& location) +BlochSphereNode::BlochSphereNode(const Point& location) : AbstractVisualNode(location, "BlochSphereNode") { @@ -23,7 +23,7 @@ void BlochSphereNode::setSize(double size) } } -void BlochSphereNode::update(FontsManager* fontsManager) +void BlochSphereNode::update(SceneInfo* sceneInfo) { if (!mContentDirty) { diff --git a/plugins/quantum_computing/src/visuals/BlochSphereNode.h b/plugins/quantum_computing/src/visuals/BlochSphereNode.h index 7d3fb02..9ac889c 100644 --- a/plugins/quantum_computing/src/visuals/BlochSphereNode.h +++ b/plugins/quantum_computing/src/visuals/BlochSphereNode.h @@ -11,11 +11,11 @@ class LineNode; class BlochSphereNode : public AbstractVisualNode { public: - BlochSphereNode(const DiscretePoint& location); + BlochSphereNode(const Point& location); void setContent(BlochSphere* content); - void update(FontsManager* fontsManager) override; + void update(SceneInfo* sceneInfo) override; void setSize(double size); private: diff --git a/plugins/quantum_computing/test/TestBlochSphereNode.cpp b/plugins/quantum_computing/test/TestBlochSphereNode.cpp index 5e461a4..2a6ced1 100644 --- a/plugins/quantum_computing/test/TestBlochSphereNode.cpp +++ b/plugins/quantum_computing/test/TestBlochSphereNode.cpp @@ -13,7 +13,7 @@ TEST_CASE(TestBlochSphereNode, "quantum_computing") { - auto node = std::make_unique(DiscretePoint(0.5, 0.5)); + auto node = std::make_unique(Point(0.5, 0.5)); Qubit state({ 1.0, 0.0 }, { 0.0, 0.0 }); diff --git a/src/graphics/AbstractPainter.h b/src/graphics/AbstractPainter.h index 31f818c..c93fa50 100644 --- a/src/graphics/AbstractPainter.h +++ b/src/graphics/AbstractPainter.h @@ -13,6 +13,7 @@ public: virtual ~AbstractPainter() = default; virtual void paint() = 0; + virtual bool supportsGeometryPrimitives() const { return false; }; protected: DrawingContext* mDrawingContext{ nullptr }; diff --git a/src/graphics/CMakeLists.txt b/src/graphics/CMakeLists.txt index 73f13e2..2d85c77 100644 --- a/src/graphics/CMakeLists.txt +++ b/src/graphics/CMakeLists.txt @@ -21,6 +21,7 @@ list(APPEND graphics_HEADERS DrawingContext.h PainterFactory.h AbstractPainter.h + DrawingSurface.h ) if(UNIX) set(OpenGL_GL_PREFERENCE "GLVND") diff --git a/src/graphics/DrawingContext.cpp b/src/graphics/DrawingContext.cpp index 529d0c5..3de6f69 100644 --- a/src/graphics/DrawingContext.cpp +++ b/src/graphics/DrawingContext.cpp @@ -45,3 +45,8 @@ AbstractPainter* DrawingContext::getPainter() const { return mPainter.get(); } + +bool DrawingContext::painterSupportsGeometryPrimitives() const +{ + return mPainter->supportsGeometryPrimitives(); +} diff --git a/src/graphics/DrawingContext.h b/src/graphics/DrawingContext.h index 7034cee..3b13cae 100644 --- a/src/graphics/DrawingContext.h +++ b/src/graphics/DrawingContext.h @@ -16,7 +16,7 @@ enum class DrawingMode class DrawingContext { public: - DrawingContext(DrawingSurface* surface, FontsManager* fontsManager, DrawingMode requestedDrawingMode); + DrawingContext(DrawingSurface* surface, FontsManager* fontsManager = nullptr, DrawingMode requestedDrawingMode = DrawingMode::GRAPH); static std::unique_ptr Create(DrawingSurface* surface, FontsManager* fontsManager, DrawingMode requestedDrawingMode); @@ -28,6 +28,8 @@ public: AbstractPainter* getPainter() const; + bool painterSupportsGeometryPrimitives() const; + private: DrawingMode mDrawingMode; FontsManager* mFontsManager{nullptr}; diff --git a/src/graphics/directx/DirectXMesh.cpp b/src/graphics/directx/DirectXMesh.cpp index 12b8d94..4db2117 100644 --- a/src/graphics/directx/DirectXMesh.cpp +++ b/src/graphics/directx/DirectXMesh.cpp @@ -39,7 +39,7 @@ void DirectXMesh::update(DrawingContext* context, ID3D12Device* device) y = 2 * y - 1; Vertex vert; - vert.position = DirectX::XMFLOAT3(x, y, 0.0); + vert.position = DirectX::XMFLOAT3(static_cast(x), static_cast(y), 0.0); vert.color = DirectX::XMFLOAT4(color[0], color[1], color[2], color[3]); MLOG_INFO("Adding vert: " << x << " | " << y); mVertexBuffer.push_back(vert); @@ -94,7 +94,7 @@ void DirectXMesh::createD3dVertexBuffer(ID3D12Device* device) mVertexBufferView.BufferLocation = mD3dVertexBuffer->GetGPUVirtualAddress(); mVertexBufferView.StrideInBytes = sizeof(Vertex); - mVertexBufferView.SizeInBytes = buffer_size; + mVertexBufferView.SizeInBytes = static_cast(buffer_size); } void DirectXMesh::uploadVertexBuffer(unsigned char* pBuffer) const @@ -116,7 +116,7 @@ void DirectXMesh::createD3dIndexBuffer(ID3D12Device* device) mD3dIndexBuffer->Unmap(0, nullptr); mIndexBufferView.BufferLocation = mD3dIndexBuffer->GetGPUVirtualAddress(); - mIndexBufferView.SizeInBytes = buffer_size; + mIndexBufferView.SizeInBytes = static_cast(buffer_size); mIndexBufferView.Format = DXGI_FORMAT_R16_UINT; } diff --git a/src/graphics/directx/DirectXTextPainter.cpp b/src/graphics/directx/DirectXTextPainter.cpp index f1c6bab..02ebbb2 100644 --- a/src/graphics/directx/DirectXTextPainter.cpp +++ b/src/graphics/directx/DirectXTextPainter.cpp @@ -35,7 +35,7 @@ void DirectXTextPainter::initializeBrush(ID2D1DeviceContext2* d2dContext) d2dContext->CreateSolidColorBrush(D2D1::ColorF(D2D1::ColorF::Black), &mTextBrush); } -void DirectXTextPainter::updateTextFormat(IDWriteFactory* directWriteFactory, unsigned fontSize) +void DirectXTextPainter::updateTextFormat(IDWriteFactory* directWriteFactory, float fontSize) { directWriteFactory->CreateTextFormat( L"Verdana", @@ -54,9 +54,9 @@ void DirectXTextPainter::updateTextFormat(IDWriteFactory* directWriteFactory, un void DirectXTextPainter::paint(SceneText* text, DrawingContext* context, ID2D1DeviceContext2* d2dContext, IDWriteFactory* directWriteFactory) { const auto location = text->getTransform().getLocation(); - D2D1_RECT_F textRect = D2D1::RectF(location.getX(), location.getY(), location.getX() + 200, location.getY() + 100); + D2D1_RECT_F textRect = D2D1::RectF(static_cast(location.getX()), static_cast(location.getY()), static_cast(location.getX() + 200), static_cast(location.getY() + 100)); - updateTextFormat(directWriteFactory, text->getTextData().mFont.getSize()); + updateTextFormat(directWriteFactory, static_cast(text->getTextData().mFont.getSize())); auto content = StringUtils::convert(text->getTextData().mContent); diff --git a/src/graphics/directx/DirectXTextPainter.h b/src/graphics/directx/DirectXTextPainter.h index df50d57..7038604 100644 --- a/src/graphics/directx/DirectXTextPainter.h +++ b/src/graphics/directx/DirectXTextPainter.h @@ -30,7 +30,7 @@ public: private: void initializeBrush(ID2D1DeviceContext2* d2dContext); - void updateTextFormat(IDWriteFactory* directWriteFactory, unsigned fontSize); + void updateTextFormat(IDWriteFactory* directWriteFactory, float fontSize); Microsoft::WRL::ComPtr mTextBrush; Microsoft::WRL::ComPtr mTextFormat; diff --git a/src/image/png/PngWriter.cpp b/src/image/png/PngWriter.cpp index fd9b416..c6d2a02 100644 --- a/src/image/png/PngWriter.cpp +++ b/src/image/png/PngWriter.cpp @@ -157,7 +157,7 @@ void PngWriter::writeDataChunks(const BufferBitStream& buffer) } } -void PngWriter::write(const std::unique_ptr >& image) +void PngWriter::write(Image* image) { if (!mPath.empty()) { @@ -170,9 +170,9 @@ void PngWriter::write(const std::unique_ptr >& image) mOutStream = std::make_unique(); } - mWorkingImage = image.get(); + mWorkingImage = image; - auto image_bit_stream = std::make_unique(image.get()); + auto image_bit_stream = std::make_unique(image); auto raw_image_stream = image_bit_stream.get(); mInStream = std::move(image_bit_stream); @@ -221,3 +221,8 @@ void PngWriter::write(const std::unique_ptr >& image) mWorkingFile->close(); } } + +void PngWriter::write(const std::unique_ptr >& image) +{ + write(image.get()); +} diff --git a/src/image/png/PngWriter.h b/src/image/png/PngWriter.h index c153b24..52971cf 100644 --- a/src/image/png/PngWriter.h +++ b/src/image/png/PngWriter.h @@ -29,6 +29,7 @@ public: void setPngInfo(const PngInfo& info); void write(const std::unique_ptr >& image); + void write(Image* image); private: void writeSignature(); diff --git a/src/visual_elements/CMakeLists.txt b/src/visual_elements/CMakeLists.txt index d329cae..d0633f3 100644 --- a/src/visual_elements/CMakeLists.txt +++ b/src/visual_elements/CMakeLists.txt @@ -1,25 +1,34 @@ set(MODULE_NAME visual_elements) list(APPEND visual_elements_LIB_INCLUDES - GeometryNode.cpp basic_shapes/RectangleNode.h basic_shapes/RectangleNode.cpp basic_shapes/CircleNode.h basic_shapes/CircleNode.cpp basic_shapes/LineNode.h basic_shapes/LineNode.cpp - MaterialNode.cpp - MeshNode.cpp - TextNode.cpp - Scene.cpp - SceneModel.cpp - SceneItem.cpp - SceneText.cpp + scene/Scene.h + scene/Scene.cpp + scene/SceneInfo.h + scene/SceneModel.h + scene/SceneModel.cpp + scene/SceneItem.h + scene/SceneItem.cpp + scene/SceneText.h + scene/SceneText.cpp + nodes/MaterialNode.h + nodes/MaterialNode.cpp + nodes/MeshNode.h + nodes/MeshNode.cpp + nodes/TextNode.h + nodes/TextNode.cpp + nodes/GridNode.h + nodes/GridNode.cpp + nodes/GeometryNode.h + nodes/GeometryNode.cpp + nodes/AbstractVisualNode.h + nodes/AbstractVisualNode.cpp Texture.cpp - GridNode.cpp - AbstractVisualNode.h - AbstractVisualNode.cpp - ) add_library(${MODULE_NAME} SHARED ${visual_elements_LIB_INCLUDES}) @@ -27,6 +36,8 @@ add_library(${MODULE_NAME} SHARED ${visual_elements_LIB_INCLUDES}) target_include_directories(${MODULE_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/basic_shapes + ${CMAKE_CURRENT_SOURCE_DIR}/scene + ${CMAKE_CURRENT_SOURCE_DIR}/nodes ) target_link_libraries(${MODULE_NAME} PUBLIC core geometry fonts mesh image) diff --git a/src/visual_elements/SceneModel.cpp b/src/visual_elements/SceneModel.cpp deleted file mode 100644 index 03dc068..0000000 --- a/src/visual_elements/SceneModel.cpp +++ /dev/null @@ -1,39 +0,0 @@ -#include "SceneModel.h" - -#include "AbstractMesh.h" - -SceneModel::SceneModel(std::unique_ptr mesh) - : SceneItem(), - mMesh(std::move(mesh)) -{ - -} - -AbstractMesh* SceneModel::getMesh() const -{ - if (mMesh) - { - return mMesh.get(); - } - else - { - return mRawMesh; - } -} - -void SceneModel::updateMesh(std::unique_ptr mesh) -{ - mMesh = std::move(mesh); - mMeshIsDirty = true; -} - -void SceneModel::updateMesh(AbstractMesh* mesh) -{ - mRawMesh = mesh; - mMeshIsDirty = true; -} - -SceneItem::Type SceneModel::getType() const -{ - return SceneItem::Type::MODEL; -} diff --git a/src/visual_elements/basic_shapes/CircleNode.cpp b/src/visual_elements/basic_shapes/CircleNode.cpp index a6ed40d..85ef415 100644 --- a/src/visual_elements/basic_shapes/CircleNode.cpp +++ b/src/visual_elements/basic_shapes/CircleNode.cpp @@ -4,10 +4,11 @@ #include "SceneModel.h" #include "AbstractMesh.h" #include "MeshPrimitives.h" +#include "SceneInfo.h" #include -CircleNode::CircleNode(const DiscretePoint& location, unsigned radius) +CircleNode::CircleNode(const Point& location, double radius) : GeometryNode(location), mRadius(radius) { @@ -19,7 +20,7 @@ CircleNode::Type CircleNode::getType() return Type::Circle; } -unsigned CircleNode::getRadius() const +double CircleNode::getRadius() const { return mRadius; } @@ -36,22 +37,21 @@ SceneItem* CircleNode::getSceneItem(std::size_t idx) const } } -unsigned CircleNode::getNumSceneItems() const +std::size_t CircleNode::getNumSceneItems() const { return 1; } -void CircleNode::setRadius(unsigned radius) +void CircleNode::setRadius(double radius) { if (mRadius != radius) { mRadius = radius; mTransformIsDirty = true; } - } -void CircleNode::update(FontsManager* fontsManager) +void CircleNode::update(SceneInfo* sceneInfo) { if (!mBackgroundItem || mGeometryIsDirty) { @@ -72,7 +72,7 @@ void CircleNode::update(FontsManager* fontsManager) if (mTransformIsDirty) { - mBackgroundItem->updateTransform({mLocation, static_cast(2*mRadius), static_cast(2*mRadius)}); + mBackgroundItem->updateTransform({mLocation, 2*mRadius, 2*mRadius}); mTransformIsDirty = false; } diff --git a/src/visual_elements/basic_shapes/CircleNode.h b/src/visual_elements/basic_shapes/CircleNode.h index a31a47a..52be1c6 100644 --- a/src/visual_elements/basic_shapes/CircleNode.h +++ b/src/visual_elements/basic_shapes/CircleNode.h @@ -5,20 +5,20 @@ class CircleNode : public GeometryNode { public: - CircleNode(const DiscretePoint& location, unsigned radius); + CircleNode(const Point& location, double radius); Type getType(); - unsigned getRadius() const; + double getRadius() const; SceneItem* getSceneItem(std::size_t idx) const override; - unsigned getNumSceneItems() const override; + std::size_t getNumSceneItems() const override; - void setRadius(unsigned radius); + void setRadius(double radius); - void update(FontsManager* fontsManager) override; + void update(SceneInfo* sceneInfo) override; private: - unsigned mRadius{1}; + double mRadius{1}; std::unique_ptr mBackgroundItem; std::unique_ptr mOutlineItem; diff --git a/src/visual_elements/basic_shapes/LineNode.cppcd b/src/visual_elements/basic_shapes/LineNode.cppcd deleted file mode 100644 index e69de29..0000000 diff --git a/src/visual_elements/basic_shapes/RectangleNode.cpp b/src/visual_elements/basic_shapes/RectangleNode.cpp index bfddd6d..6471718 100644 --- a/src/visual_elements/basic_shapes/RectangleNode.cpp +++ b/src/visual_elements/basic_shapes/RectangleNode.cpp @@ -6,7 +6,7 @@ #include -RectangleNode::RectangleNode(const DiscretePoint& loc, unsigned width, unsigned height) +RectangleNode::RectangleNode(const Point& loc, double width, double height) : GeometryNode(loc), mWidth(width), mHeight(height) @@ -14,7 +14,7 @@ RectangleNode::RectangleNode(const DiscretePoint& loc, unsigned width, unsigned } -std::unique_ptr RectangleNode::Create(const DiscretePoint& loc, unsigned width, unsigned height) +std::unique_ptr RectangleNode::Create(const Point& loc, double width, double height) { return std::make_unique(loc, width, height); } @@ -36,22 +36,22 @@ SceneItem* RectangleNode::getSceneItem(std::size_t idx) const } } -unsigned RectangleNode::getNumSceneItems() const +std::size_t RectangleNode::getNumSceneItems() const { return 1; } -unsigned RectangleNode::getWidth() const +double RectangleNode::getWidth() const { return mWidth; } -unsigned RectangleNode::getHeight() const +double RectangleNode::getHeight() const { return mHeight; } -void RectangleNode::setWidth(unsigned width) +void RectangleNode::setWidth(double width) { if (mWidth != width) { @@ -60,7 +60,7 @@ void RectangleNode::setWidth(unsigned width) } } -void RectangleNode::setHeight(unsigned height) +void RectangleNode::setHeight(double height) { if (mHeight != height) { @@ -69,7 +69,7 @@ void RectangleNode::setHeight(unsigned height) } } -void RectangleNode::update(FontsManager* fontsManager) +void RectangleNode::update(SceneInfo* sceneInfo) { if (!mBackgroundItem || mGeometryIsDirty) { diff --git a/src/visual_elements/basic_shapes/RectangleNode.h b/src/visual_elements/basic_shapes/RectangleNode.h index 21d5788..39bd915 100644 --- a/src/visual_elements/basic_shapes/RectangleNode.h +++ b/src/visual_elements/basic_shapes/RectangleNode.h @@ -7,23 +7,23 @@ class RectangleNode : public GeometryNode { public: - RectangleNode(const DiscretePoint& loc, unsigned width, unsigned height); - static std::unique_ptr Create(const DiscretePoint& loc, unsigned width, unsigned height); + RectangleNode(const Point& loc, double width, double height); + static std::unique_ptr Create(const Point& loc, double width, double height); GeometryNode::Type getType() override; - unsigned getWidth() const; - unsigned getHeight() const; + double getWidth() const; + double getHeight() const; SceneItem* getSceneItem(std::size_t idx) const override; - unsigned getNumSceneItems() const override; + std::size_t getNumSceneItems() const override; - void setWidth(unsigned width); - void setHeight(unsigned height); + void setWidth(double width); + void setHeight(double height); - void update(FontsManager* fontsManager) override; + void update(SceneInfo* sceneInfo) override; private: - unsigned mWidth{1}; - unsigned mHeight{1}; + double mWidth{1}; + double mHeight{1}; std::unique_ptr mBackgroundItem; std::unique_ptr mOutlineItem; diff --git a/src/visual_elements/AbstractVisualNode.cpp b/src/visual_elements/nodes/AbstractVisualNode.cpp similarity index 77% rename from src/visual_elements/AbstractVisualNode.cpp rename to src/visual_elements/nodes/AbstractVisualNode.cpp index 7c1d9d9..db3c183 100644 --- a/src/visual_elements/AbstractVisualNode.cpp +++ b/src/visual_elements/nodes/AbstractVisualNode.cpp @@ -1,6 +1,6 @@ #include "AbstractVisualNode.h" -AbstractVisualNode::AbstractVisualNode(const DiscretePoint& location, const std::string& name) +AbstractVisualNode::AbstractVisualNode(const Point& location, const std::string& name) : mLocation(location), mName(name) { @@ -12,12 +12,12 @@ SceneItem* AbstractVisualNode::getSceneItem(std::size_t idx) const return mSceneItems[idx].get(); } -unsigned AbstractVisualNode::getNumSceneItems() const +std::size_t AbstractVisualNode::getNumSceneItems() const { return mSceneItems.size(); } -void AbstractVisualNode::update(FontsManager* fontsManager) +void AbstractVisualNode::update(SceneInfo* sceneInfo) { } @@ -47,7 +47,7 @@ void AbstractVisualNode::setIsVisible(bool isVisible) mIsVisible = isVisible; } -unsigned AbstractVisualNode::getNumChildren() const +std::size_t AbstractVisualNode::getNumChildren() const { return mChildren.size(); } @@ -67,7 +67,7 @@ bool AbstractVisualNode::getIsVisible() const return mIsVisible; } -void AbstractVisualNode::setLocation(const DiscretePoint& loc) +void AbstractVisualNode::setLocation(const Point& loc) { if (mLocation != loc) { diff --git a/src/visual_elements/AbstractVisualNode.h b/src/visual_elements/nodes/AbstractVisualNode.h similarity index 72% rename from src/visual_elements/AbstractVisualNode.h rename to src/visual_elements/nodes/AbstractVisualNode.h index d7e15c5..a8c2593 100644 --- a/src/visual_elements/AbstractVisualNode.h +++ b/src/visual_elements/nodes/AbstractVisualNode.h @@ -4,18 +4,18 @@ #include "AbstractMesh.h" #include "Image.h" -#include "DiscretePoint.h" +#include "Point.h" #include #include -class FontsManager; +struct SceneInfo; class AbstractVisualNode { public: - AbstractVisualNode(const DiscretePoint& location, const std::string& name = {}); + AbstractVisualNode(const Point& location, const std::string& name = {}); virtual ~AbstractVisualNode() = default; @@ -23,9 +23,9 @@ public: virtual SceneItem* getSceneItem(std::size_t idx) const; - virtual unsigned getNumSceneItems() const; + virtual std::size_t getNumSceneItems() const; - unsigned getNumChildren() const; + std::size_t getNumChildren() const; const std::vector& getChildren() const; @@ -35,18 +35,18 @@ public: bool getIsVisible() const; - virtual void update(FontsManager* fontsManager); - void syncChildren(const std::vector& children); void setIsVisible(bool isVisible); void setName(const std::string& name); - void setLocation(const DiscretePoint& loc); + void setLocation(const Point& loc); + + virtual void update(SceneInfo* sceneInfo); protected: - DiscretePoint mLocation; + Point mLocation; std::vector > mSceneItems; std::unique_ptr > mImage; diff --git a/src/visual_elements/GeometryNode.cpp b/src/visual_elements/nodes/GeometryNode.cpp similarity index 86% rename from src/visual_elements/GeometryNode.cpp rename to src/visual_elements/nodes/GeometryNode.cpp index 42a708b..03a024c 100644 --- a/src/visual_elements/GeometryNode.cpp +++ b/src/visual_elements/nodes/GeometryNode.cpp @@ -1,6 +1,6 @@ #include "GeometryNode.h" -GeometryNode::GeometryNode(const DiscretePoint& location) +GeometryNode::GeometryNode(const Point& location) : MaterialNode(location), mStrokeThickness(1), mType(Type::Path) diff --git a/src/visual_elements/GeometryNode.h b/src/visual_elements/nodes/GeometryNode.h similarity index 88% rename from src/visual_elements/GeometryNode.h rename to src/visual_elements/nodes/GeometryNode.h index f060bb6..4705f5a 100644 --- a/src/visual_elements/GeometryNode.h +++ b/src/visual_elements/nodes/GeometryNode.h @@ -16,7 +16,7 @@ public: }; public: - GeometryNode(const DiscretePoint& location); + GeometryNode(const Point& location); virtual ~GeometryNode() = default; virtual Type getType() = 0; @@ -34,7 +34,7 @@ protected: class LineNode : public GeometryNode { public: - LineNode(const DiscretePoint& location) + LineNode(const Point& location) : GeometryNode(location) { diff --git a/src/visual_elements/GridNode.cpp b/src/visual_elements/nodes/GridNode.cpp similarity index 92% rename from src/visual_elements/GridNode.cpp rename to src/visual_elements/nodes/GridNode.cpp index 2c0e148..992e88c 100644 --- a/src/visual_elements/GridNode.cpp +++ b/src/visual_elements/nodes/GridNode.cpp @@ -2,7 +2,7 @@ #include "MeshPrimitives.h" -GridNode::GridNode(const DiscretePoint& location) +GridNode::GridNode(const Point& location) : MaterialNode(location) { @@ -26,7 +26,7 @@ void GridNode::setNumY(unsigned numY) } } -void GridNode::setWidth(unsigned width) +void GridNode::setWidth(double width) { if (mWidth != width) { @@ -35,7 +35,7 @@ void GridNode::setWidth(unsigned width) } } -void GridNode::setHeight(unsigned height) +void GridNode::setHeight(double height) { if (mHeight != height) { @@ -65,12 +65,12 @@ SceneItem* GridNode::getSceneItem(std::size_t idx) const } } -unsigned GridNode::getNumSceneItems() const +std::size_t GridNode::getNumSceneItems() const { return 2; } -void GridNode::update(FontsManager* fontsManager) +void GridNode::update(SceneInfo* sceneInfo) { if (!mBackgroundModel || mDataDirty) { diff --git a/src/visual_elements/GridNode.h b/src/visual_elements/nodes/GridNode.h similarity index 65% rename from src/visual_elements/GridNode.h rename to src/visual_elements/nodes/GridNode.h index 5dfc66c..359a913 100644 --- a/src/visual_elements/GridNode.h +++ b/src/visual_elements/nodes/GridNode.h @@ -7,7 +7,7 @@ class GridNode : public MaterialNode { public: - GridNode(const DiscretePoint& location); + GridNode(const Point& location); void setNumX(unsigned numX); @@ -16,18 +16,18 @@ public: void setData(const std::vector& colors); SceneItem* getSceneItem(std::size_t idx) const override; - unsigned getNumSceneItems() const override; + std::size_t getNumSceneItems() const override; - void update(FontsManager* fontsManager) override; + void update(SceneInfo* sceneInfo) override; - void setWidth(unsigned width); - void setHeight(unsigned height); + void setWidth(double width); + void setHeight(double height); private: unsigned mNumberX{5}; unsigned mNumberY{5}; - unsigned mWidth{1}; - unsigned mHeight{1}; + double mWidth{1}; + double mHeight{1}; bool mDataDirty = true; std::vector mData; diff --git a/src/visual_elements/MaterialNode.cpp b/src/visual_elements/nodes/MaterialNode.cpp similarity index 91% rename from src/visual_elements/MaterialNode.cpp rename to src/visual_elements/nodes/MaterialNode.cpp index 196570a..1eb9b8b 100644 --- a/src/visual_elements/MaterialNode.cpp +++ b/src/visual_elements/nodes/MaterialNode.cpp @@ -2,7 +2,7 @@ #include -MaterialNode::MaterialNode(const DiscretePoint& location) +MaterialNode::MaterialNode(const Point& location) : AbstractVisualNode(location), mFillColor(Color(255, 255, 255)), mStrokeColor(Color(0, 0, 0)) diff --git a/src/visual_elements/MaterialNode.h b/src/visual_elements/nodes/MaterialNode.h similarity index 88% rename from src/visual_elements/MaterialNode.h rename to src/visual_elements/nodes/MaterialNode.h index 2914953..e6b4a0e 100644 --- a/src/visual_elements/MaterialNode.h +++ b/src/visual_elements/nodes/MaterialNode.h @@ -7,7 +7,7 @@ class MaterialNode : public AbstractVisualNode { public: - MaterialNode(const DiscretePoint& location); + MaterialNode(const Point& location); const Color& getFillColor() const; const Color& getStrokeColor() const; diff --git a/src/visual_elements/MeshNode.cpp b/src/visual_elements/nodes/MeshNode.cpp similarity index 83% rename from src/visual_elements/MeshNode.cpp rename to src/visual_elements/nodes/MeshNode.cpp index 591f7b7..81ee014 100644 --- a/src/visual_elements/MeshNode.cpp +++ b/src/visual_elements/nodes/MeshNode.cpp @@ -2,13 +2,13 @@ #include -MeshNode::MeshNode(const DiscretePoint& location) +MeshNode::MeshNode(const Point& location) : MaterialNode(location) { } -void MeshNode::setWidth(unsigned width) +void MeshNode::setWidth(double width) { if (mWidth != width) { @@ -17,7 +17,7 @@ void MeshNode::setWidth(unsigned width) } } -void MeshNode::setHeight(unsigned height) +void MeshNode::setHeight(double height) { if (mHeight != height) { @@ -37,7 +37,7 @@ SceneItem* MeshNode::getSceneItem(std::size_t idx) const return mModel.get(); } -unsigned MeshNode::getNumSceneItems() const +std::size_t MeshNode::getNumSceneItems() const { if (mWorkingMesh) { @@ -49,13 +49,13 @@ unsigned MeshNode::getNumSceneItems() const } } -void MeshNode::update(FontsManager* fontsManager) +void MeshNode::update(SceneInfo* sceneInfo) { if (!mModel || mMeshIsDirty) { if (!mModel) { - mModel = std::make_unique(nullptr); + mModel = std::make_unique(); mModel->setName(mName + "_MeshModel"); mModel->setShowOutline(true); } diff --git a/src/visual_elements/MeshNode.h b/src/visual_elements/nodes/MeshNode.h similarity index 55% rename from src/visual_elements/MeshNode.h rename to src/visual_elements/nodes/MeshNode.h index bf6ee54..2b31718 100644 --- a/src/visual_elements/MeshNode.h +++ b/src/visual_elements/nodes/MeshNode.h @@ -7,22 +7,22 @@ class AbstractMesh; class MeshNode : public MaterialNode { public: - MeshNode(const DiscretePoint& location); + MeshNode(const Point& location); void setMesh(AbstractMesh* mesh); SceneItem* getSceneItem(std::size_t idx) const override; - unsigned getNumSceneItems() const override; + std::size_t getNumSceneItems() const override; - void setWidth(unsigned width); - void setHeight(unsigned height); + void setWidth(double width); + void setHeight(double height); - void update(FontsManager* fontsManager) override; + void update(SceneInfo* sceneInfo) override; private: bool mMeshIsDirty{true}; AbstractMesh* mWorkingMesh{nullptr}; - unsigned mWidth{1}; - unsigned mHeight{1}; + double mWidth{1}; + double mHeight{1}; std::unique_ptr mModel; }; diff --git a/src/visual_elements/RootNode.h b/src/visual_elements/nodes/RootNode.h similarity index 100% rename from src/visual_elements/RootNode.h rename to src/visual_elements/nodes/RootNode.h diff --git a/src/visual_elements/TextNode.cpp b/src/visual_elements/nodes/TextNode.cpp similarity index 88% rename from src/visual_elements/TextNode.cpp rename to src/visual_elements/nodes/TextNode.cpp index b34d289..fe7db93 100644 --- a/src/visual_elements/TextNode.cpp +++ b/src/visual_elements/nodes/TextNode.cpp @@ -6,6 +6,7 @@ #include "MeshPrimitives.h" #include "FontItem.h" #include "FontGlyph.h" +#include "SceneInfo.h" #include "SceneText.h" @@ -15,7 +16,7 @@ #include -TextNode::TextNode(const std::string& content, const DiscretePoint& loc) +TextNode::TextNode(const std::string& content, const Point& loc) : MaterialNode(loc) { mTextData.mContent= content; @@ -26,7 +27,7 @@ TextNode::~TextNode() } -std::unique_ptr TextNode::Create(const std::string& content, const DiscretePoint& loc) +std::unique_ptr TextNode::Create(const std::string& content, const Point& loc) { return std::make_unique(content, loc); } @@ -41,17 +42,17 @@ std::string TextNode::getContent() const return mTextData.mContent; } -unsigned TextNode::getWidth() const +double TextNode::getWidth() const { return mWidth; } -unsigned TextNode::getHeight() const +double TextNode::getHeight() const { return mHeight; } -void TextNode::setWidth(unsigned width) +void TextNode::setWidth(double width) { if (mWidth != width) { @@ -60,7 +61,7 @@ void TextNode::setWidth(unsigned width) } } -void TextNode::setHeight(unsigned height) +void TextNode::setHeight(double height) { if (mHeight != height) { @@ -90,7 +91,7 @@ SceneItem* TextNode::getSceneItem(std::size_t idx) const } } -unsigned TextNode::getNumSceneItems() const +std::size_t TextNode::getNumSceneItems() const { return 1; } @@ -136,7 +137,7 @@ void TextNode::updateLines(FontsManager* fontsManager) } } -void TextNode::update(FontsManager* fontsManager) +void TextNode::update(SceneInfo* sceneInfo) { if (!mTextItem) { @@ -146,7 +147,7 @@ void TextNode::update(FontsManager* fontsManager) if (mTransformIsDirty || mContentIsDirty) { - updateLines(fontsManager); + updateLines(sceneInfo->mFontsManager); } if (mContentIsDirty || mLinesAreDirty) diff --git a/src/visual_elements/TextNode.h b/src/visual_elements/nodes/TextNode.h similarity index 63% rename from src/visual_elements/TextNode.h rename to src/visual_elements/nodes/TextNode.h index b44eb79..948dedf 100644 --- a/src/visual_elements/TextNode.h +++ b/src/visual_elements/nodes/TextNode.h @@ -8,30 +8,32 @@ #include #include +class FontsManager; + class TextNode : public MaterialNode { public: - TextNode(const std::string& content, const DiscretePoint& loc); + TextNode(const std::string& content, const Point& loc); ~TextNode(); - static std::unique_ptr Create(const std::string& content, const DiscretePoint& loc); + static std::unique_ptr Create(const std::string& content, const Point& loc); std::string getContent() const; std::string getFontLabel() const; SceneItem* getSceneItem(std::size_t idx) const override; - unsigned getNumSceneItems() const override; + std::size_t getNumSceneItems() const override; - unsigned getWidth() const; - unsigned getHeight() const; + double getWidth() const; + double getHeight() const; - void setWidth(unsigned width); - void setHeight(unsigned height); + void setWidth(double width); + void setHeight(double height); void setContent(const std::string& content); - void update(FontsManager* fontsManager) override; + void update(SceneInfo* sceneInfo) override; private: void updateLines(FontsManager* fontsManager); @@ -40,8 +42,8 @@ private: bool mContentIsDirty{true}; bool mLinesAreDirty{true}; - unsigned mWidth{1}; - unsigned mHeight{1}; + double mWidth{1}; + double mHeight{1}; std::unique_ptr mTextItem; }; diff --git a/src/visual_elements/TransformNode.h b/src/visual_elements/nodes/TransformNode.h similarity index 100% rename from src/visual_elements/TransformNode.h rename to src/visual_elements/nodes/TransformNode.h diff --git a/src/visual_elements/Scene.cpp b/src/visual_elements/scene/Scene.cpp similarity index 62% rename from src/visual_elements/Scene.cpp rename to src/visual_elements/scene/Scene.cpp index 5dd8e79..2674f1d 100644 --- a/src/visual_elements/Scene.cpp +++ b/src/visual_elements/scene/Scene.cpp @@ -7,7 +7,8 @@ #include Scene::Scene() - : mRootNode(std::make_unique()) + : mRootNode(std::make_unique()), + mSceneInfo(std::make_unique()) { mRootNode->setName("Scene_RootNode"); } @@ -19,8 +20,10 @@ Scene::~Scene() void Scene::update(FontsManager* fontsManager) { + mSceneInfo->mFontsManager = fontsManager; + mSceneItems.clear(); - updateNode(mRootNode.get(), fontsManager); + updateNode(mRootNode.get()); } void Scene::addNode(AbstractVisualNode* node) @@ -33,17 +36,17 @@ bool Scene::isEmpty() const return mRootNode->getNumChildren() == 0; } -void Scene::updateNode(AbstractVisualNode* node, FontsManager* fontsManager) +void Scene::updateNode(AbstractVisualNode* node) { for (auto child : node->getChildren()) { if (child->getIsVisible()) { - updateNode(child, fontsManager); + updateNode(child); } } - node->update(fontsManager); + node->update(mSceneInfo.get()); for (std::size_t idx=0; idx< node->getNumSceneItems(); idx++) { @@ -58,3 +61,13 @@ const std::vector& Scene::getItems() const { return mSceneItems; } + +bool Scene::shouldShowMeshOutline() const +{ + return mSceneInfo->mShowMeshOutline; +} + +void Scene::setShowMeshOutline(bool shouldShow) +{ + mSceneInfo->mShowMeshOutline = shouldShow; +} diff --git a/src/visual_elements/Scene.h b/src/visual_elements/scene/Scene.h similarity index 59% rename from src/visual_elements/Scene.h rename to src/visual_elements/scene/Scene.h index aeb5d22..a59b257 100644 --- a/src/visual_elements/Scene.h +++ b/src/visual_elements/scene/Scene.h @@ -1,6 +1,7 @@ #pragma once #include "TextData.h" +#include "SceneInfo.h" #include #include @@ -8,7 +9,6 @@ class RootNode; class AbstractVisualNode; class SceneItem; -class FontsManager; class Scene { @@ -23,21 +23,15 @@ public: bool isEmpty() const; - bool shouldShowMeshOutline() const - { - return mShowMeshOutline; - } + bool shouldShowMeshOutline() const; - void setShowMeshOutline(bool shouldShow) - { - mShowMeshOutline = shouldShow; - } + void setShowMeshOutline(bool shouldShow); void update(FontsManager* fontsManager = nullptr); private: - void updateNode(AbstractVisualNode* node, FontsManager* fontsManager); + void updateNode(AbstractVisualNode* node); + std::unique_ptr mRootNode; std::vector mSceneItems; - - bool mShowMeshOutline{false}; + std::unique_ptr mSceneInfo; }; diff --git a/src/visual_elements/scene/SceneInfo.h b/src/visual_elements/scene/SceneInfo.h new file mode 100644 index 0000000..336511a --- /dev/null +++ b/src/visual_elements/scene/SceneInfo.h @@ -0,0 +1,10 @@ +#pragma once + +#include "FontsManager.h" + +struct SceneInfo +{ + bool mSupportsGeometryPrimitives{ false }; + bool mShowMeshOutline{ false }; + FontsManager* mFontsManager{ nullptr }; +}; \ No newline at end of file diff --git a/src/visual_elements/SceneItem.cpp b/src/visual_elements/scene/SceneItem.cpp similarity index 100% rename from src/visual_elements/SceneItem.cpp rename to src/visual_elements/scene/SceneItem.cpp diff --git a/src/visual_elements/SceneItem.h b/src/visual_elements/scene/SceneItem.h similarity index 100% rename from src/visual_elements/SceneItem.h rename to src/visual_elements/scene/SceneItem.h diff --git a/src/visual_elements/scene/SceneModel.cpp b/src/visual_elements/scene/SceneModel.cpp new file mode 100644 index 0000000..0b0faa4 --- /dev/null +++ b/src/visual_elements/scene/SceneModel.cpp @@ -0,0 +1,70 @@ +#include "SceneModel.h" + +#include "AbstractGeometricItem.h" +#include "AbstractMesh.h" + +SceneModel::SceneModel(std::unique_ptr mesh) + : SceneItem(), + mMesh(std::move(mesh)) +{ + +} + +SceneModel::SceneModel(std::unique_ptr geometry) + : SceneItem(), + mGeometry(std::move(geometry)) +{ + +} + +AbstractMesh* SceneModel::getMesh() const +{ + if (mMesh) + { + return mMesh.get(); + } + else + { + return mRawMesh; + } +} + +AbstractGeometricItem* SceneModel::getGeometry() const +{ + return mGeometry.get(); +} + +SceneItem::Type SceneModel::getType() const +{ + return SceneItem::Type::MODEL; +} + +void SceneModel::setShowOutline(bool showOutline) +{ + mShowOutline = showOutline; +} + +bool SceneModel::getShowOutline() const +{ + return mShowOutline; +} + +void SceneModel::updateMesh(std::unique_ptr mesh) +{ + mMesh = std::move(mesh); + mGeometryIsDirty = true; +} + +void SceneModel::updateGeometry(std::unique_ptr geometry) +{ + mGeometry = std::move(geometry); + mGeometryIsDirty = true; +} + +void SceneModel::updateMesh(AbstractMesh* mesh) +{ + mRawMesh = mesh; + mGeometryIsDirty = true; +} + + diff --git a/src/visual_elements/SceneModel.h b/src/visual_elements/scene/SceneModel.h similarity index 54% rename from src/visual_elements/SceneModel.h rename to src/visual_elements/scene/SceneModel.h index 3b5a42d..08d85e8 100644 --- a/src/visual_elements/SceneModel.h +++ b/src/visual_elements/scene/SceneModel.h @@ -1,6 +1,7 @@ #pragma once #include "SceneItem.h" +#include "AbstractGeometricItem.h" #include "Texture.h" #include @@ -9,37 +10,33 @@ #include class AbstractMesh; -//class Texture; class SceneModel : public SceneItem { public: - SceneModel(std::unique_ptr mesh); + SceneModel() = default; + explicit SceneModel(std::unique_ptr mesh); + explicit SceneModel(std::unique_ptr geometry); + AbstractGeometricItem* getGeometry() const; AbstractMesh* getMesh() const; + bool getShowOutline() const; + Type getType() const override; + void setShowOutline(bool showOutline); + + void updateGeometry(std::unique_ptr geometry); void updateMesh(std::unique_ptr mesh); void updateMesh(AbstractMesh* mesh); - void setShowOutline(bool showOutline) - { - mShowOutline = showOutline; - } - - bool getShowOutline() const - { - return mShowOutline; - } - - Type getType() const override; - private: - AbstractMesh* mRawMesh{nullptr}; std::unique_ptr mMesh; std::unique_ptr mColorMap; - bool mMeshIsDirty{true}; + std::unique_ptr mGeometry; + + bool mGeometryIsDirty{true}; bool mColorMapIsDirty{true}; bool mShowOutline{false}; }; diff --git a/src/visual_elements/SceneText.cpp b/src/visual_elements/scene/SceneText.cpp similarity index 100% rename from src/visual_elements/SceneText.cpp rename to src/visual_elements/scene/SceneText.cpp diff --git a/src/visual_elements/SceneText.h b/src/visual_elements/scene/SceneText.h similarity index 100% rename from src/visual_elements/SceneText.h rename to src/visual_elements/scene/SceneText.h diff --git a/test/graphics/CMakeLists.txt b/test/graphics/CMakeLists.txt index 6fe0826..832dc7a 100644 --- a/test/graphics/CMakeLists.txt +++ b/test/graphics/CMakeLists.txt @@ -8,15 +8,15 @@ set(PLATFORM_UNIT_TEST_FILES ) endif() -set(GRAPHICS_UNIT_TEST_FILES - graphics/TestRasterizer.cpp - ${PLATFORM_UNIT_TEST_FILES} - PARENT_SCOPE - ) - + if(WIN32) + +list(APPEND PLATFORM_UNIT_TEST_FILES + graphics/TestD2DOffScreenRendering.cpp +) set(GRAPHICS_UI_TEST_FILES graphics/TestDirectXRendering.cpp + graphics/TestD2DRendering.cpp PARENT_SCOPE ) endif() @@ -29,4 +29,10 @@ set(GRAPHICS_UNIT_TEST_DEPENDENCIES set(GRAPHICS_UI_TEST_DEPENDENCIES graphics client PARENT_SCOPE + ) + +set(GRAPHICS_UNIT_TEST_FILES + graphics/TestRasterizer.cpp + ${PLATFORM_UNIT_TEST_FILES} + PARENT_SCOPE ) \ No newline at end of file diff --git a/test/graphics/TestD2dOffScreenRendering.cpp b/test/graphics/TestD2dOffScreenRendering.cpp new file mode 100644 index 0000000..2b9c455 --- /dev/null +++ b/test/graphics/TestD2dOffScreenRendering.cpp @@ -0,0 +1,39 @@ +#include "TestCase.h" +#include "TestCaseRunner.h" + +#include "TestUiApplication.h" + +#include "TestFramework.h" +#include "TestUtils.h" + +#include "DrawingSurface.h" +#include "DrawingContext.h" +#include "AbstractPainter.h" +#include "Image.h" +#include "PngWriter.h" + +#include "RectangleNode.h" +#include "Scene.h" + +TEST_CASE(TestD2dOffScreenRendering, "graphics") +{ + auto surface = std::make_unique(); + surface->setSize(100, 100); + + auto drawing_context = std::make_unique(surface.get()); + + auto rect = std::make_unique(DiscretePoint(10, 10), 10.0, 20.0); + + auto scene = surface->getScene(); + + scene->addNode(rect.get()); + scene->update(); + + drawing_context->paint(); + + auto image = surface->getImage(); + + PngWriter writer; + writer.setPath(TestUtils::getTestOutputDir(__FILE__) / "out.png"); + //writer.write(image); +}; \ No newline at end of file diff --git a/test/graphics/TestD2dRendering.cpp b/test/graphics/TestD2dRendering.cpp new file mode 100644 index 0000000..f340561 --- /dev/null +++ b/test/graphics/TestD2dRendering.cpp @@ -0,0 +1,22 @@ +#include "TestCase.h" +#include "TestCaseRunner.h" + +#include "TestUiApplication.h" + +#include "TestFramework.h" + +#include "DesktopManager.h" +#include "MeshPrimitives.h" +#include "MeshNode.h" +#include "TextNode.h" +#include "Scene.h" +#include "Widget.h" + +#include +#include +#include + +TEST_CASE(TestD2dRendering, "graphics") +{ + +}; \ No newline at end of file