Merge remote-tracking branch 'refs/remotes/origin/master' into reflection-mapping
This commit is contained in:
commit
7d5d21f025
|
|
@ -15,12 +15,14 @@ examples/bin/*.exe
|
||||||
examples/bin/*.pdb
|
examples/bin/*.pdb
|
||||||
examples/bin/*.dll
|
examples/bin/*.dll
|
||||||
examples/bin/*.so
|
examples/bin/*.so
|
||||||
|
examples/bin/Demo*
|
||||||
|
|
||||||
# Unit tests
|
# Unit tests
|
||||||
tests/*.exe
|
tests/*.exe
|
||||||
tests/*.pdb
|
tests/*.pdb
|
||||||
tests/*.dll
|
tests/*.dll
|
||||||
tests/*.so
|
tests/*.so
|
||||||
|
tests/NazaraUnitTests*
|
||||||
|
|
||||||
# Example generated files
|
# Example generated files
|
||||||
examples/bin/HardwareInfo.txt
|
examples/bin/HardwareInfo.txt
|
||||||
|
|
@ -49,6 +51,7 @@ build/**/*.project
|
||||||
|
|
||||||
# GMake
|
# GMake
|
||||||
build/**/*.make
|
build/**/*.make
|
||||||
|
build/**/*.d
|
||||||
|
|
||||||
# Visual Studio
|
# Visual Studio
|
||||||
build/**/*.pdb
|
build/**/*.pdb
|
||||||
|
|
@ -60,7 +63,7 @@ build/**/*.vcxprojResolveAssemblyReference.cache
|
||||||
build/**/*.nativecodeanalysis.all.xml
|
build/**/*.nativecodeanalysis.all.xml
|
||||||
build/**/*.nativecodeanalysis.xml
|
build/**/*.nativecodeanalysis.xml
|
||||||
build/**/*.VC.opendb
|
build/**/*.VC.opendb
|
||||||
build/**/*.VC.db
|
build/**/*.VC.db*
|
||||||
|
|
||||||
# Compiled Object files
|
# Compiled Object files
|
||||||
build/**/*.slo
|
build/**/*.slo
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
@ -12,9 +12,11 @@
|
||||||
#include <NDK/EntityOwner.hpp>
|
#include <NDK/EntityOwner.hpp>
|
||||||
#include <NDK/World.hpp>
|
#include <NDK/World.hpp>
|
||||||
#include <Nazara/Graphics/Sprite.hpp>
|
#include <Nazara/Graphics/Sprite.hpp>
|
||||||
|
#include <Nazara/Utility/Cursor.hpp>
|
||||||
#include <Nazara/Utility/Event.hpp>
|
#include <Nazara/Utility/Event.hpp>
|
||||||
#include <Nazara/Utility/Mouse.hpp>
|
#include <Nazara/Utility/Mouse.hpp>
|
||||||
#include <Nazara/Utility/Node.hpp>
|
#include <Nazara/Utility/Node.hpp>
|
||||||
|
#include <limits>
|
||||||
|
|
||||||
namespace Ndk
|
namespace Ndk
|
||||||
{
|
{
|
||||||
|
|
@ -32,28 +34,39 @@ namespace Ndk
|
||||||
BaseWidget(BaseWidget&&) = default;
|
BaseWidget(BaseWidget&&) = default;
|
||||||
virtual ~BaseWidget();
|
virtual ~BaseWidget();
|
||||||
|
|
||||||
template<typename T, typename... Args> T& Add(Args&&... args);
|
template<typename T, typename... Args> T* Add(Args&&... args);
|
||||||
inline void AddChild(std::unique_ptr<BaseWidget>&& widget);
|
inline void AddChild(std::unique_ptr<BaseWidget>&& widget);
|
||||||
|
|
||||||
inline void Center();
|
inline void Center();
|
||||||
|
|
||||||
|
inline void Destroy();
|
||||||
|
|
||||||
void EnableBackground(bool enable);
|
void EnableBackground(bool enable);
|
||||||
|
|
||||||
//virtual BaseWidget* Clone() const = 0;
|
//virtual BaseWidget* Clone() const = 0;
|
||||||
|
|
||||||
|
inline const Nz::Color& GetBackgroundColor() const;
|
||||||
inline Canvas* GetCanvas();
|
inline Canvas* GetCanvas();
|
||||||
|
inline Nz::SystemCursor GetCursor() const;
|
||||||
inline const Padding& GetPadding() const;
|
inline const Padding& GetPadding() const;
|
||||||
|
inline Nz::Vector2f GetContentOrigin() const;
|
||||||
inline const Nz::Vector2f& GetContentSize() const;
|
inline const Nz::Vector2f& GetContentSize() const;
|
||||||
inline Nz::Vector2f GetSize() const;
|
inline Nz::Vector2f GetSize() const;
|
||||||
|
|
||||||
|
inline bool IsVisible() const;
|
||||||
|
|
||||||
void GrabKeyboard();
|
void GrabKeyboard();
|
||||||
|
|
||||||
virtual void ResizeToContent() = 0;
|
virtual void ResizeToContent() = 0;
|
||||||
|
|
||||||
|
void SetBackgroundColor(const Nz::Color& color);
|
||||||
|
void SetCursor(Nz::SystemCursor systemCursor);
|
||||||
inline void SetContentSize(const Nz::Vector2f& size);
|
inline void SetContentSize(const Nz::Vector2f& size);
|
||||||
inline void SetPadding(float left, float top, float right, float bottom);
|
inline void SetPadding(float left, float top, float right, float bottom);
|
||||||
void SetSize(const Nz::Vector2f& size);
|
void SetSize(const Nz::Vector2f& size);
|
||||||
|
|
||||||
|
void Show(bool show = true);
|
||||||
|
|
||||||
BaseWidget& operator=(const BaseWidget&) = delete;
|
BaseWidget& operator=(const BaseWidget&) = delete;
|
||||||
BaseWidget& operator=(BaseWidget&&) = default;
|
BaseWidget& operator=(BaseWidget&&) = default;
|
||||||
|
|
||||||
|
|
@ -78,12 +91,21 @@ namespace Ndk
|
||||||
virtual void OnMouseButtonPress(int x, int y, Nz::Mouse::Button button);
|
virtual void OnMouseButtonPress(int x, int y, Nz::Mouse::Button button);
|
||||||
virtual void OnMouseButtonRelease(int x, int y, Nz::Mouse::Button button);
|
virtual void OnMouseButtonRelease(int x, int y, Nz::Mouse::Button button);
|
||||||
virtual void OnMouseExit();
|
virtual void OnMouseExit();
|
||||||
|
virtual void OnParentResized(const Nz::Vector2f& newSize);
|
||||||
virtual void OnTextEntered(char32_t character, bool repeated);
|
virtual void OnTextEntered(char32_t character, bool repeated);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
inline BaseWidget();
|
inline BaseWidget();
|
||||||
|
|
||||||
|
inline void DestroyChild(BaseWidget* widget);
|
||||||
|
void DestroyChildren();
|
||||||
|
inline bool IsRegisteredToCanvas() const;
|
||||||
|
inline void NotifyParentResized(const Nz::Vector2f& newSize);
|
||||||
|
void RegisterToCanvas();
|
||||||
inline void UpdateCanvasIndex(std::size_t index);
|
inline void UpdateCanvasIndex(std::size_t index);
|
||||||
|
void UnregisterFromCanvas();
|
||||||
|
|
||||||
|
static constexpr std::size_t InvalidCanvasIndex = std::numeric_limits<std::size_t>::max();
|
||||||
|
|
||||||
std::size_t m_canvasIndex;
|
std::size_t m_canvasIndex;
|
||||||
std::vector<EntityOwner> m_entities;
|
std::vector<EntityOwner> m_entities;
|
||||||
|
|
@ -94,8 +116,10 @@ namespace Ndk
|
||||||
WorldHandle m_world;
|
WorldHandle m_world;
|
||||||
Nz::Color m_backgroundColor;
|
Nz::Color m_backgroundColor;
|
||||||
Nz::SpriteRef m_backgroundSprite;
|
Nz::SpriteRef m_backgroundSprite;
|
||||||
|
Nz::SystemCursor m_cursor;
|
||||||
Nz::Vector2f m_contentSize;
|
Nz::Vector2f m_contentSize;
|
||||||
BaseWidget* m_widgetParent;
|
BaseWidget* m_widgetParent;
|
||||||
|
bool m_visible;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
@ -9,26 +9,30 @@
|
||||||
namespace Ndk
|
namespace Ndk
|
||||||
{
|
{
|
||||||
inline BaseWidget::BaseWidget() :
|
inline BaseWidget::BaseWidget() :
|
||||||
|
m_canvasIndex(InvalidCanvasIndex),
|
||||||
m_backgroundColor(Nz::Color(230, 230, 230, 255)),
|
m_backgroundColor(Nz::Color(230, 230, 230, 255)),
|
||||||
m_canvas(nullptr),
|
m_canvas(nullptr),
|
||||||
|
m_cursor(Nz::SystemCursor_Default),
|
||||||
m_contentSize(50.f, 50.f),
|
m_contentSize(50.f, 50.f),
|
||||||
m_widgetParent(nullptr)
|
m_widgetParent(nullptr),
|
||||||
|
m_visible(true)
|
||||||
{
|
{
|
||||||
SetPadding(5.f, 5.f, 5.f, 5.f);
|
SetPadding(5.f, 5.f, 5.f, 5.f);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T, typename... Args>
|
template<typename T, typename... Args>
|
||||||
inline T& BaseWidget::Add(Args&&... args)
|
inline T* BaseWidget::Add(Args&&... args)
|
||||||
{
|
{
|
||||||
std::unique_ptr<T> widget = std::make_unique<T>(this, std::forward<Args>(args)...);
|
std::unique_ptr<T> widget = std::make_unique<T>(this, std::forward<Args>(args)...);
|
||||||
T& widgetRef = *widget;
|
T* widgetPtr = widget.get();
|
||||||
AddChild(std::move(widget));
|
AddChild(std::move(widget));
|
||||||
|
|
||||||
return widgetRef;
|
return widgetPtr;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void BaseWidget::AddChild(std::unique_ptr<BaseWidget>&& widget)
|
inline void BaseWidget::AddChild(std::unique_ptr<BaseWidget>&& widget)
|
||||||
{
|
{
|
||||||
|
widget->Show(m_visible);
|
||||||
m_children.emplace_back(std::move(widget));
|
m_children.emplace_back(std::move(widget));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -41,16 +45,31 @@ namespace Ndk
|
||||||
SetPosition((parentSize.x - mySize.x) / 2.f, (parentSize.y - mySize.y) / 2.f);
|
SetPosition((parentSize.x - mySize.x) / 2.f, (parentSize.y - mySize.y) / 2.f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline const Nz::Color& BaseWidget::GetBackgroundColor() const
|
||||||
|
{
|
||||||
|
return m_backgroundColor;
|
||||||
|
}
|
||||||
|
|
||||||
inline Canvas* BaseWidget::GetCanvas()
|
inline Canvas* BaseWidget::GetCanvas()
|
||||||
{
|
{
|
||||||
return m_canvas;
|
return m_canvas;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline Nz::SystemCursor BaseWidget::GetCursor() const
|
||||||
|
{
|
||||||
|
return m_cursor;
|
||||||
|
}
|
||||||
|
|
||||||
inline const BaseWidget::Padding& BaseWidget::GetPadding() const
|
inline const BaseWidget::Padding& BaseWidget::GetPadding() const
|
||||||
{
|
{
|
||||||
return m_padding;
|
return m_padding;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline Nz::Vector2f BaseWidget::GetContentOrigin() const
|
||||||
|
{
|
||||||
|
return { m_padding.left, m_padding.top };
|
||||||
|
}
|
||||||
|
|
||||||
inline const Nz::Vector2f& BaseWidget::GetContentSize() const
|
inline const Nz::Vector2f& BaseWidget::GetContentSize() const
|
||||||
{
|
{
|
||||||
return m_contentSize;
|
return m_contentSize;
|
||||||
|
|
@ -61,10 +80,16 @@ namespace Ndk
|
||||||
return Nz::Vector2f(m_contentSize.x + m_padding.left + m_padding.right, m_contentSize.y + m_padding.top + m_padding.bottom);
|
return Nz::Vector2f(m_contentSize.x + m_padding.left + m_padding.right, m_contentSize.y + m_padding.top + m_padding.bottom);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline bool BaseWidget::IsVisible() const
|
||||||
|
{
|
||||||
|
return m_visible;
|
||||||
|
}
|
||||||
|
|
||||||
inline void BaseWidget::SetContentSize(const Nz::Vector2f& size)
|
inline void BaseWidget::SetContentSize(const Nz::Vector2f& size)
|
||||||
{
|
{
|
||||||
|
NotifyParentResized(size);
|
||||||
m_contentSize = size;
|
m_contentSize = size;
|
||||||
|
|
||||||
Layout();
|
Layout();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -78,6 +103,17 @@ namespace Ndk
|
||||||
Layout();
|
Layout();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline bool BaseWidget::IsRegisteredToCanvas() const
|
||||||
|
{
|
||||||
|
return m_canvas && m_canvasIndex != InvalidCanvasIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void BaseWidget::NotifyParentResized(const Nz::Vector2f& newSize)
|
||||||
|
{
|
||||||
|
for (const auto& widgetPtr : m_children)
|
||||||
|
widgetPtr->OnParentResized(newSize);
|
||||||
|
}
|
||||||
|
|
||||||
inline void BaseWidget::UpdateCanvasIndex(std::size_t index)
|
inline void BaseWidget::UpdateCanvasIndex(std::size_t index)
|
||||||
{
|
{
|
||||||
m_canvasIndex = index;
|
m_canvasIndex = index;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
@ -9,6 +9,7 @@
|
||||||
|
|
||||||
#include <NDK/Prerequesites.hpp>
|
#include <NDK/Prerequesites.hpp>
|
||||||
#include <NDK/BaseWidget.hpp>
|
#include <NDK/BaseWidget.hpp>
|
||||||
|
#include <Nazara/Utility/CursorController.hpp>
|
||||||
#include <Nazara/Utility/EventHandler.hpp>
|
#include <Nazara/Utility/EventHandler.hpp>
|
||||||
|
|
||||||
namespace Ndk
|
namespace Ndk
|
||||||
|
|
@ -20,10 +21,10 @@ namespace Ndk
|
||||||
public:
|
public:
|
||||||
struct Padding;
|
struct Padding;
|
||||||
|
|
||||||
inline Canvas(WorldHandle world, Nz::EventHandler& eventHandler);
|
inline Canvas(WorldHandle world, Nz::EventHandler& eventHandler, Nz::CursorControllerHandle cursorController);
|
||||||
Canvas(const Canvas&) = delete;
|
Canvas(const Canvas&) = delete;
|
||||||
Canvas(Canvas&&) = delete;
|
Canvas(Canvas&&) = delete;
|
||||||
~Canvas() = default;
|
inline ~Canvas();
|
||||||
|
|
||||||
inline const WorldHandle& GetWorld() const;
|
inline const WorldHandle& GetWorld() const;
|
||||||
|
|
||||||
|
|
@ -33,9 +34,8 @@ namespace Ndk
|
||||||
Canvas& operator=(Canvas&&) = delete;
|
Canvas& operator=(Canvas&&) = delete;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void Layout() override;
|
inline void NotifyWidgetBoxUpdate(std::size_t index);
|
||||||
|
inline void NotifyWidgetCursorUpdate(std::size_t index);
|
||||||
void NotifyWidgetUpdate(std::size_t index);
|
|
||||||
|
|
||||||
std::size_t RegisterWidget(BaseWidget* widget);
|
std::size_t RegisterWidget(BaseWidget* widget);
|
||||||
|
|
||||||
|
|
@ -56,6 +56,7 @@ namespace Ndk
|
||||||
{
|
{
|
||||||
BaseWidget* widget;
|
BaseWidget* widget;
|
||||||
Nz::Boxf box;
|
Nz::Boxf box;
|
||||||
|
Nz::SystemCursor cursor;
|
||||||
};
|
};
|
||||||
|
|
||||||
NazaraSlot(Nz::EventHandler, OnKeyPressed, m_keyPressedSlot);
|
NazaraSlot(Nz::EventHandler, OnKeyPressed, m_keyPressedSlot);
|
||||||
|
|
@ -67,6 +68,7 @@ namespace Ndk
|
||||||
NazaraSlot(Nz::EventHandler, OnTextEntered, m_textEnteredSlot);
|
NazaraSlot(Nz::EventHandler, OnTextEntered, m_textEnteredSlot);
|
||||||
|
|
||||||
std::vector<WidgetBox> m_widgetBoxes;
|
std::vector<WidgetBox> m_widgetBoxes;
|
||||||
|
Nz::CursorControllerHandle m_cursorController;
|
||||||
const WidgetBox* m_hoveredWidget;
|
const WidgetBox* m_hoveredWidget;
|
||||||
BaseWidget* m_keyboardOwner;
|
BaseWidget* m_keyboardOwner;
|
||||||
WorldHandle m_world;
|
WorldHandle m_world;
|
||||||
|
|
|
||||||
|
|
@ -1,18 +1,25 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
#include <NDK/Canvas.hpp>
|
#include <NDK/Canvas.hpp>
|
||||||
|
#include <Nazara/Utility/Cursor.hpp>
|
||||||
|
|
||||||
namespace Ndk
|
namespace Ndk
|
||||||
{
|
{
|
||||||
inline Canvas::Canvas(WorldHandle world, Nz::EventHandler& eventHandler) :
|
inline Canvas::Canvas(WorldHandle world, Nz::EventHandler& eventHandler, Nz::CursorControllerHandle cursorController) :
|
||||||
|
m_cursorController(cursorController),
|
||||||
m_hoveredWidget(nullptr),
|
m_hoveredWidget(nullptr),
|
||||||
m_keyboardOwner(nullptr),
|
m_keyboardOwner(nullptr),
|
||||||
m_world(std::move(world))
|
m_world(std::move(world))
|
||||||
{
|
{
|
||||||
m_canvas = this;
|
m_canvas = this;
|
||||||
|
m_widgetParent = nullptr;
|
||||||
|
|
||||||
|
// Register ourselves as a widget to handle cursor change
|
||||||
|
RegisterToCanvas();
|
||||||
|
|
||||||
|
// Connect to every meaningful event
|
||||||
m_keyPressedSlot.Connect(eventHandler.OnKeyPressed, this, &Canvas::OnKeyPressed);
|
m_keyPressedSlot.Connect(eventHandler.OnKeyPressed, this, &Canvas::OnKeyPressed);
|
||||||
m_keyReleasedSlot.Connect(eventHandler.OnKeyReleased, this, &Canvas::OnKeyReleased);
|
m_keyReleasedSlot.Connect(eventHandler.OnKeyReleased, this, &Canvas::OnKeyReleased);
|
||||||
m_mouseButtonPressedSlot.Connect(eventHandler.OnMouseButtonPressed, this, &Canvas::OnMouseButtonPressed);
|
m_mouseButtonPressedSlot.Connect(eventHandler.OnMouseButtonPressed, this, &Canvas::OnMouseButtonPressed);
|
||||||
|
|
@ -20,6 +27,18 @@ namespace Ndk
|
||||||
m_mouseMovedSlot.Connect(eventHandler.OnMouseMoved, this, &Canvas::OnMouseMoved);
|
m_mouseMovedSlot.Connect(eventHandler.OnMouseMoved, this, &Canvas::OnMouseMoved);
|
||||||
m_mouseLeftSlot.Connect(eventHandler.OnMouseLeft, this, &Canvas::OnMouseLeft);
|
m_mouseLeftSlot.Connect(eventHandler.OnMouseLeft, this, &Canvas::OnMouseLeft);
|
||||||
m_textEnteredSlot.Connect(eventHandler.OnTextEntered, this, &Canvas::OnTextEntered);
|
m_textEnteredSlot.Connect(eventHandler.OnTextEntered, this, &Canvas::OnTextEntered);
|
||||||
|
|
||||||
|
// Disable padding by default
|
||||||
|
SetPadding(0.f, 0.f, 0.f, 0.f);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline Canvas::~Canvas()
|
||||||
|
{
|
||||||
|
// Destroy children explicitly because they signal us when getting destroyed, and that can't happen after our own destruction
|
||||||
|
DestroyChildren();
|
||||||
|
|
||||||
|
// Prevent our parent from trying to call us
|
||||||
|
m_canvasIndex = InvalidCanvasIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline const WorldHandle& Canvas::GetWorld() const
|
inline const WorldHandle& Canvas::GetWorld() const
|
||||||
|
|
@ -27,6 +46,25 @@ namespace Ndk
|
||||||
return m_world;
|
return m_world;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline void Canvas::NotifyWidgetBoxUpdate(std::size_t index)
|
||||||
|
{
|
||||||
|
WidgetBox& entry = m_widgetBoxes[index];
|
||||||
|
|
||||||
|
Nz::Vector3f pos = entry.widget->GetPosition();
|
||||||
|
Nz::Vector2f size = entry.widget->GetContentSize();
|
||||||
|
|
||||||
|
entry.box.Set(pos.x, pos.y, pos.z, size.x, size.y, 1.f);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void Canvas::NotifyWidgetCursorUpdate(std::size_t index)
|
||||||
|
{
|
||||||
|
WidgetBox& entry = m_widgetBoxes[index];
|
||||||
|
|
||||||
|
entry.cursor = entry.widget->GetCursor();
|
||||||
|
if (m_cursorController && m_hoveredWidget == &entry)
|
||||||
|
m_cursorController->UpdateCursor(Nz::Cursor::Get(entry.cursor));
|
||||||
|
}
|
||||||
|
|
||||||
inline void Ndk::Canvas::SetKeyboardOwner(BaseWidget* widget)
|
inline void Ndk::Canvas::SetKeyboardOwner(BaseWidget* widget)
|
||||||
{
|
{
|
||||||
m_keyboardOwner = widget;
|
m_keyboardOwner = widget;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
@ -35,6 +35,7 @@ namespace Ndk
|
||||||
inline std::size_t GetCursorPosition() const;
|
inline std::size_t GetCursorPosition() const;
|
||||||
inline std::size_t GetLineCount() const;
|
inline std::size_t GetLineCount() const;
|
||||||
inline const Nz::String& GetText() const;
|
inline const Nz::String& GetText() const;
|
||||||
|
inline const Nz::Color& GetTextColor() const;
|
||||||
|
|
||||||
std::size_t GetHoveredGlyph(float x, float y) const;
|
std::size_t GetHoveredGlyph(float x, float y) const;
|
||||||
|
|
||||||
|
|
@ -47,15 +48,24 @@ namespace Ndk
|
||||||
|
|
||||||
inline void SetCursorPosition(std::size_t cursorPosition);
|
inline void SetCursorPosition(std::size_t cursorPosition);
|
||||||
inline void SetReadOnly(bool readOnly = true);
|
inline void SetReadOnly(bool readOnly = true);
|
||||||
void SetText(const Nz::String& text);
|
inline void SetText(const Nz::String& text);
|
||||||
|
inline void SetTextColor(const Nz::Color& text);
|
||||||
|
|
||||||
void Write(const Nz::String& text);
|
void Write(const Nz::String& text);
|
||||||
|
|
||||||
TextAreaWidget& operator=(const TextAreaWidget&) = delete;
|
TextAreaWidget& operator=(const TextAreaWidget&) = delete;
|
||||||
TextAreaWidget& operator=(TextAreaWidget&&) = default;
|
TextAreaWidget& operator=(TextAreaWidget&&) = default;
|
||||||
|
|
||||||
|
NazaraSignal(OnTextAreaCursorMove, const TextAreaWidget* /*textArea*/, std::size_t* /*newCursorPosition*/);
|
||||||
|
NazaraSignal(OnTextAreaKeyBackspace, const TextAreaWidget* /*textArea*/, bool* /*ignoreDefaultAction*/);
|
||||||
|
NazaraSignal(OnTextAreaKeyDown, const TextAreaWidget* /*textArea*/, bool* /*ignoreDefaultAction*/);
|
||||||
|
NazaraSignal(OnTextAreaKeyLeft, const TextAreaWidget* /*textArea*/, bool* /*ignoreDefaultAction*/);
|
||||||
|
NazaraSignal(OnTextAreaKeyReturn, const TextAreaWidget* /*textArea*/, bool* /*ignoreDefaultAction*/);
|
||||||
|
NazaraSignal(OnTextAreaKeyRight, const TextAreaWidget* /*textArea*/, bool* /*ignoreDefaultAction*/);
|
||||||
|
NazaraSignal(OnTextAreaKeyUp, const TextAreaWidget* /*textArea*/, bool* /*ignoreDefaultAction*/);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void RefreshCursor();
|
void Layout() override;
|
||||||
|
|
||||||
void OnKeyPressed(const Nz::WindowEvent::KeyEvent& key) override;
|
void OnKeyPressed(const Nz::WindowEvent::KeyEvent& key) override;
|
||||||
void OnKeyReleased(const Nz::WindowEvent::KeyEvent& key) override;
|
void OnKeyReleased(const Nz::WindowEvent::KeyEvent& key) override;
|
||||||
|
|
@ -65,6 +75,8 @@ namespace Ndk
|
||||||
void OnMouseExit() override;
|
void OnMouseExit() override;
|
||||||
void OnTextEntered(char32_t character, bool repeated) override;
|
void OnTextEntered(char32_t character, bool repeated) override;
|
||||||
|
|
||||||
|
void RefreshCursor();
|
||||||
|
|
||||||
EntityHandle m_cursorEntity;
|
EntityHandle m_cursorEntity;
|
||||||
EntityHandle m_textEntity;
|
EntityHandle m_textEntity;
|
||||||
Nz::SimpleTextDrawer m_drawer;
|
Nz::SimpleTextDrawer m_drawer;
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
@ -35,6 +35,11 @@ namespace Ndk
|
||||||
return m_drawer.GetText();
|
return m_drawer.GetText();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline const Nz::Color& TextAreaWidget::GetTextColor() const
|
||||||
|
{
|
||||||
|
return m_drawer.GetColor();
|
||||||
|
}
|
||||||
|
|
||||||
inline bool Ndk::TextAreaWidget::IsMultilineEnabled() const
|
inline bool Ndk::TextAreaWidget::IsMultilineEnabled() const
|
||||||
{
|
{
|
||||||
return m_multiLineEnabled;
|
return m_multiLineEnabled;
|
||||||
|
|
@ -61,6 +66,8 @@ namespace Ndk
|
||||||
|
|
||||||
inline void TextAreaWidget::SetCursorPosition(std::size_t cursorPosition)
|
inline void TextAreaWidget::SetCursorPosition(std::size_t cursorPosition)
|
||||||
{
|
{
|
||||||
|
OnTextAreaCursorMove(this, &cursorPosition);
|
||||||
|
|
||||||
m_cursorPosition = std::min(cursorPosition, m_drawer.GetGlyphCount());
|
m_cursorPosition = std::min(cursorPosition, m_drawer.GetGlyphCount());
|
||||||
|
|
||||||
RefreshCursor();
|
RefreshCursor();
|
||||||
|
|
@ -72,4 +79,20 @@ namespace Ndk
|
||||||
|
|
||||||
m_cursorEntity->Enable(!m_readOnly);
|
m_cursorEntity->Enable(!m_readOnly);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline void TextAreaWidget::SetText(const Nz::String& text)
|
||||||
|
{
|
||||||
|
m_drawer.SetText(text);
|
||||||
|
|
||||||
|
m_textSprite->Update(m_drawer);
|
||||||
|
|
||||||
|
SetCursorPosition(m_cursorPosition); //< Refresh cursor position (prevent it from being outside of the text)
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void TextAreaWidget::SetTextColor(const Nz::Color& text)
|
||||||
|
{
|
||||||
|
m_drawer.SetColor(text);
|
||||||
|
|
||||||
|
m_textSprite->Update(m_drawer);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
@ -7,6 +7,7 @@
|
||||||
#include <NDK/Components/GraphicsComponent.hpp>
|
#include <NDK/Components/GraphicsComponent.hpp>
|
||||||
#include <NDK/Components/NodeComponent.hpp>
|
#include <NDK/Components/NodeComponent.hpp>
|
||||||
#include <NDK/World.hpp>
|
#include <NDK/World.hpp>
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
namespace Ndk
|
namespace Ndk
|
||||||
{
|
{
|
||||||
|
|
@ -20,15 +21,22 @@ namespace Ndk
|
||||||
m_widgetParent = parent;
|
m_widgetParent = parent;
|
||||||
m_world = m_canvas->GetWorld();
|
m_world = m_canvas->GetWorld();
|
||||||
|
|
||||||
m_canvasIndex = m_canvas->RegisterWidget(this);
|
RegisterToCanvas();
|
||||||
}
|
}
|
||||||
|
|
||||||
BaseWidget::~BaseWidget()
|
BaseWidget::~BaseWidget()
|
||||||
{
|
{
|
||||||
m_canvas->UnregisterWidget(m_canvasIndex);
|
UnregisterFromCanvas();
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void BaseWidget::EnableBackground(bool enable)
|
void BaseWidget::Destroy()
|
||||||
|
{
|
||||||
|
NazaraAssert(this != m_canvas, "Canvas cannot be destroyed by calling Destroy()");
|
||||||
|
|
||||||
|
m_widgetParent->DestroyChild(this); //< This does delete us
|
||||||
|
}
|
||||||
|
|
||||||
|
void BaseWidget::EnableBackground(bool enable)
|
||||||
{
|
{
|
||||||
if (m_backgroundEntity.IsValid() == enable)
|
if (m_backgroundEntity.IsValid() == enable)
|
||||||
return;
|
return;
|
||||||
|
|
@ -39,7 +47,7 @@ namespace Ndk
|
||||||
m_backgroundSprite->SetColor(m_backgroundColor);
|
m_backgroundSprite->SetColor(m_backgroundColor);
|
||||||
m_backgroundSprite->SetMaterial(Nz::Material::New((m_backgroundColor.IsOpaque()) ? "Basic2D" : "Translucent2D"));
|
m_backgroundSprite->SetMaterial(Nz::Material::New((m_backgroundColor.IsOpaque()) ? "Basic2D" : "Translucent2D"));
|
||||||
|
|
||||||
m_backgroundEntity = m_world->CreateEntity();
|
m_backgroundEntity = CreateEntity();
|
||||||
m_backgroundEntity->AddComponent<GraphicsComponent>().Attach(m_backgroundSprite, -1);
|
m_backgroundEntity->AddComponent<GraphicsComponent>().Attach(m_backgroundSprite, -1);
|
||||||
m_backgroundEntity->AddComponent<NodeComponent>().SetParent(this);
|
m_backgroundEntity->AddComponent<NodeComponent>().SetParent(this);
|
||||||
|
|
||||||
|
|
@ -52,15 +60,61 @@ namespace Ndk
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BaseWidget::GrabKeyboard()
|
||||||
|
{
|
||||||
|
m_canvas->SetKeyboardOwner(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BaseWidget::SetBackgroundColor(const Nz::Color& color)
|
||||||
|
{
|
||||||
|
m_backgroundColor = color;
|
||||||
|
|
||||||
|
if (m_backgroundSprite)
|
||||||
|
{
|
||||||
|
m_backgroundSprite->SetColor(color);
|
||||||
|
m_backgroundSprite->GetMaterial()->Configure((color.IsOpaque()) ? "Basic2D" : "Translucent2D"); //< Our sprite has its own material (see EnableBackground)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void BaseWidget::SetCursor(Nz::SystemCursor systemCursor)
|
||||||
|
{
|
||||||
|
m_cursor = systemCursor;
|
||||||
|
|
||||||
|
if (IsRegisteredToCanvas())
|
||||||
|
m_canvas->NotifyWidgetCursorUpdate(m_canvasIndex);
|
||||||
|
}
|
||||||
|
|
||||||
void BaseWidget::SetSize(const Nz::Vector2f& size)
|
void BaseWidget::SetSize(const Nz::Vector2f& size)
|
||||||
{
|
{
|
||||||
SetContentSize({std::max(size.x - m_padding.left - m_padding.right, 0.f), std::max(size.y - m_padding.top - m_padding.bottom, 0.f)});
|
SetContentSize({std::max(size.x - m_padding.left - m_padding.right, 0.f), std::max(size.y - m_padding.top - m_padding.bottom, 0.f)});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BaseWidget::Show(bool show)
|
||||||
|
{
|
||||||
|
if (m_visible != show)
|
||||||
|
{
|
||||||
|
m_visible = show;
|
||||||
|
|
||||||
|
if (m_visible)
|
||||||
|
RegisterToCanvas();
|
||||||
|
else
|
||||||
|
UnregisterFromCanvas();
|
||||||
|
|
||||||
|
for (const EntityHandle& entity : m_entities)
|
||||||
|
entity->Enable(show);
|
||||||
|
|
||||||
|
for (const auto& widgetPtr : m_children)
|
||||||
|
widgetPtr->Show(show);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
EntityHandle BaseWidget::CreateEntity()
|
EntityHandle BaseWidget::CreateEntity()
|
||||||
{
|
{
|
||||||
m_entities.emplace_back(m_world->CreateEntity());
|
EntityHandle newEntity = m_world->CreateEntity();
|
||||||
return m_entities.back();
|
newEntity->Enable(m_visible);
|
||||||
|
|
||||||
|
m_entities.emplace_back(newEntity);
|
||||||
|
return newEntity;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BaseWidget::DestroyEntity(Entity* entity)
|
void BaseWidget::DestroyEntity(Entity* entity)
|
||||||
|
|
@ -71,31 +125,21 @@ namespace Ndk
|
||||||
m_entities.erase(it);
|
m_entities.erase(it);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BaseWidget::GrabKeyboard()
|
|
||||||
{
|
|
||||||
m_canvas->SetKeyboardOwner(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
void BaseWidget::Layout()
|
void BaseWidget::Layout()
|
||||||
{
|
{
|
||||||
if (m_canvas)
|
if (IsRegisteredToCanvas())
|
||||||
m_canvas->NotifyWidgetUpdate(m_canvasIndex);
|
m_canvas->NotifyWidgetBoxUpdate(m_canvasIndex);
|
||||||
|
|
||||||
if (m_backgroundEntity)
|
if (m_backgroundEntity)
|
||||||
{
|
|
||||||
NodeComponent& node = m_backgroundEntity->GetComponent<NodeComponent>();
|
|
||||||
node.SetPosition(-m_padding.left, -m_padding.top);
|
|
||||||
|
|
||||||
m_backgroundSprite->SetSize(m_contentSize.x + m_padding.left + m_padding.right, m_contentSize.y + m_padding.top + m_padding.bottom);
|
m_backgroundSprite->SetSize(m_contentSize.x + m_padding.left + m_padding.right, m_contentSize.y + m_padding.top + m_padding.bottom);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void BaseWidget::InvalidateNode()
|
void BaseWidget::InvalidateNode()
|
||||||
{
|
{
|
||||||
Node::InvalidateNode();
|
Node::InvalidateNode();
|
||||||
|
|
||||||
if (m_canvas)
|
if (IsRegisteredToCanvas())
|
||||||
m_canvas->NotifyWidgetUpdate(m_canvasIndex);
|
m_canvas->NotifyWidgetBoxUpdate(m_canvasIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
void BaseWidget::OnKeyPressed(const Nz::WindowEvent::KeyEvent& key)
|
void BaseWidget::OnKeyPressed(const Nz::WindowEvent::KeyEvent& key)
|
||||||
|
|
@ -126,7 +170,44 @@ namespace Ndk
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BaseWidget::OnParentResized(const Nz::Vector2f& newSize)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
void BaseWidget::OnTextEntered(char32_t character, bool repeated)
|
void BaseWidget::OnTextEntered(char32_t character, bool repeated)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BaseWidget::DestroyChild(BaseWidget* widget)
|
||||||
|
{
|
||||||
|
auto it = std::find_if(m_children.begin(), m_children.end(), [widget] (const std::unique_ptr<BaseWidget>& widgetPtr) -> bool
|
||||||
|
{
|
||||||
|
return widgetPtr.get() == widget;
|
||||||
|
});
|
||||||
|
|
||||||
|
NazaraAssert(it != m_children.end(), "Child widget not found in parent");
|
||||||
|
|
||||||
|
m_children.erase(it);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BaseWidget::DestroyChildren()
|
||||||
|
{
|
||||||
|
m_children.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void BaseWidget::RegisterToCanvas()
|
||||||
|
{
|
||||||
|
NazaraAssert(!IsRegisteredToCanvas(), "Widget is already registered to canvas");
|
||||||
|
|
||||||
|
m_canvasIndex = m_canvas->RegisterWidget(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BaseWidget::UnregisterFromCanvas()
|
||||||
|
{
|
||||||
|
if (IsRegisteredToCanvas())
|
||||||
|
{
|
||||||
|
m_canvas->UnregisterWidget(m_canvasIndex);
|
||||||
|
m_canvasIndex = InvalidCanvasIndex;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
@ -14,56 +14,38 @@ namespace Ndk
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void Canvas::Layout()
|
|
||||||
{
|
|
||||||
if (m_backgroundEntity)
|
|
||||||
{
|
|
||||||
NodeComponent& node = m_backgroundEntity->GetComponent<NodeComponent>();
|
|
||||||
node.SetPosition(-m_padding.left, -m_padding.top);
|
|
||||||
|
|
||||||
m_backgroundSprite->SetSize(m_contentSize.x + m_padding.left + m_padding.right, m_contentSize.y + m_padding.top + m_padding.bottom);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Canvas::NotifyWidgetUpdate(std::size_t index)
|
|
||||||
{
|
|
||||||
WidgetBox& entry = m_widgetBoxes[index];
|
|
||||||
|
|
||||||
Nz::Vector3f pos = entry.widget->GetPosition();
|
|
||||||
Nz::Vector2f size = entry.widget->GetContentSize();
|
|
||||||
|
|
||||||
entry.box.Set(pos.x, pos.y, pos.z, size.x, size.y, 1.f);
|
|
||||||
}
|
|
||||||
|
|
||||||
std::size_t Canvas::RegisterWidget(BaseWidget* widget)
|
std::size_t Canvas::RegisterWidget(BaseWidget* widget)
|
||||||
{
|
{
|
||||||
WidgetBox box;
|
WidgetBox box;
|
||||||
|
box.cursor = widget->GetCursor();
|
||||||
box.widget = widget;
|
box.widget = widget;
|
||||||
|
|
||||||
std::size_t index = m_widgetBoxes.size();
|
std::size_t index = m_widgetBoxes.size();
|
||||||
m_widgetBoxes.emplace_back(box);
|
m_widgetBoxes.emplace_back(box);
|
||||||
|
|
||||||
NotifyWidgetUpdate(index);
|
NotifyWidgetBoxUpdate(index);
|
||||||
return index;
|
return index;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Canvas::UnregisterWidget(std::size_t index)
|
void Canvas::UnregisterWidget(std::size_t index)
|
||||||
{
|
{
|
||||||
|
WidgetBox& entry = m_widgetBoxes[index];
|
||||||
|
|
||||||
|
if (m_hoveredWidget == &entry)
|
||||||
|
m_hoveredWidget = nullptr;
|
||||||
|
|
||||||
|
if (m_keyboardOwner == entry.widget)
|
||||||
|
m_keyboardOwner = nullptr;
|
||||||
|
|
||||||
if (m_widgetBoxes.size() > 1U)
|
if (m_widgetBoxes.size() > 1U)
|
||||||
{
|
{
|
||||||
WidgetBox& entry = m_widgetBoxes[index];
|
|
||||||
WidgetBox& lastEntry = m_widgetBoxes.back();
|
WidgetBox& lastEntry = m_widgetBoxes.back();
|
||||||
|
|
||||||
if (m_hoveredWidget == &entry)
|
|
||||||
m_hoveredWidget = nullptr;
|
|
||||||
|
|
||||||
if (m_keyboardOwner == entry.widget)
|
|
||||||
m_keyboardOwner = nullptr;
|
|
||||||
|
|
||||||
entry = std::move(lastEntry);
|
entry = std::move(lastEntry);
|
||||||
entry.widget->UpdateCanvasIndex(index);
|
entry.widget->UpdateCanvasIndex(index);
|
||||||
m_widgetBoxes.pop_back();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_widgetBoxes.pop_back();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Canvas::OnMouseButtonPressed(const Nz::EventHandler* /*eventHandler*/, const Nz::WindowEvent::MouseButtonEvent& event)
|
void Canvas::OnMouseButtonPressed(const Nz::EventHandler* /*eventHandler*/, const Nz::WindowEvent::MouseButtonEvent& event)
|
||||||
|
|
@ -93,11 +75,12 @@ namespace Ndk
|
||||||
const WidgetBox* bestEntry = nullptr;
|
const WidgetBox* bestEntry = nullptr;
|
||||||
float bestEntryArea = std::numeric_limits<float>::infinity();
|
float bestEntryArea = std::numeric_limits<float>::infinity();
|
||||||
|
|
||||||
|
Nz::Vector3f mousePos(float(event.x), float(event.y), 0.f);
|
||||||
for (const WidgetBox& entry : m_widgetBoxes)
|
for (const WidgetBox& entry : m_widgetBoxes)
|
||||||
{
|
{
|
||||||
const Nz::Boxf& box = entry.box;
|
const Nz::Boxf& box = entry.box;
|
||||||
|
|
||||||
if (box.Contains(Nz::Vector3f(event.x, event.y, 0.f)))
|
if (box.Contains(mousePos))
|
||||||
{
|
{
|
||||||
float area = box.width * box.height;
|
float area = box.width * box.height;
|
||||||
if (area < bestEntryArea)
|
if (area < bestEntryArea)
|
||||||
|
|
@ -117,6 +100,9 @@ namespace Ndk
|
||||||
|
|
||||||
m_hoveredWidget = bestEntry;
|
m_hoveredWidget = bestEntry;
|
||||||
m_hoveredWidget->widget->OnMouseEnter();
|
m_hoveredWidget->widget->OnMouseEnter();
|
||||||
|
|
||||||
|
if (m_cursorController)
|
||||||
|
m_cursorController->UpdateCursor(Nz::Cursor::Get(m_hoveredWidget->cursor));
|
||||||
}
|
}
|
||||||
|
|
||||||
int x = static_cast<int>(std::round(event.x - m_hoveredWidget->box.x));
|
int x = static_cast<int>(std::round(event.x - m_hoveredWidget->box.x));
|
||||||
|
|
@ -128,6 +114,9 @@ namespace Ndk
|
||||||
{
|
{
|
||||||
m_hoveredWidget->widget->OnMouseExit();
|
m_hoveredWidget->widget->OnMouseExit();
|
||||||
m_hoveredWidget = nullptr;
|
m_hoveredWidget = nullptr;
|
||||||
|
|
||||||
|
if (m_cursorController)
|
||||||
|
m_cursorController->UpdateCursor(Nz::Cursor::Get(Nz::SystemCursor_Default));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// Copyright (C) 2015 Jérôme Leclercq
|
// Copyright (C) 2017 Jérôme Leclercq
|
||||||
// This file is part of the "Nazara Development Kit"
|
// This file is part of the "Nazara Development Kit"
|
||||||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||||
|
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue