Merge branch 'master' into console-widget

This commit is contained in:
Lynix 2017-01-20 20:19:55 +01:00
commit e8cb625e72
7 changed files with 59 additions and 17 deletions

View File

@ -12,6 +12,7 @@
#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>
@ -46,6 +47,7 @@ namespace Ndk
inline const Nz::Color& GetBackgroundColor() const; 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 Nz::Vector2f GetContentOrigin() const;
inline const Nz::Vector2f& GetContentSize() const; inline const Nz::Vector2f& GetContentSize() const;
@ -58,6 +60,7 @@ namespace Ndk
virtual void ResizeToContent() = 0; virtual void ResizeToContent() = 0;
void SetBackgroundColor(const Nz::Color& color); 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);
@ -113,6 +116,7 @@ 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; bool m_visible;

View File

@ -12,6 +12,7 @@ namespace Ndk
m_canvasIndex(InvalidCanvasIndex), 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) m_visible(true)
@ -54,6 +55,11 @@ namespace Ndk
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;

View File

@ -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,7 +21,7 @@ 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;
inline ~Canvas(); inline ~Canvas();
@ -33,7 +34,8 @@ namespace Ndk
Canvas& operator=(Canvas&&) = delete; Canvas& operator=(Canvas&&) = delete;
protected: protected:
void NotifyWidgetUpdate(std::size_t index); inline void NotifyWidgetBoxUpdate(std::size_t index);
inline void NotifyWidgetCursorUpdate(std::size_t index);
std::size_t RegisterWidget(BaseWidget* widget); std::size_t RegisterWidget(BaseWidget* widget);
@ -54,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);
@ -65,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;

View File

@ -3,10 +3,12 @@
// 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))
@ -44,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;

View File

@ -76,6 +76,14 @@ namespace Ndk
} }
} }
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)});
@ -120,7 +128,7 @@ namespace Ndk
void BaseWidget::Layout() void BaseWidget::Layout()
{ {
if (IsRegisteredToCanvas()) if (IsRegisteredToCanvas())
m_canvas->NotifyWidgetUpdate(m_canvasIndex); m_canvas->NotifyWidgetBoxUpdate(m_canvasIndex);
if (m_backgroundEntity) if (m_backgroundEntity)
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);
@ -131,7 +139,7 @@ namespace Ndk
Node::InvalidateNode(); Node::InvalidateNode();
if (IsRegisteredToCanvas()) 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)

View File

@ -14,25 +14,16 @@ namespace Ndk
{ {
} }
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;
} }
@ -109,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));
@ -120,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));
} }
} }

View File

@ -18,7 +18,7 @@ namespace Ndk
m_readOnly(false) m_readOnly(false)
{ {
m_cursorSprite = Nz::Sprite::New(); m_cursorSprite = Nz::Sprite::New();
m_cursorSprite->SetColor(Nz::Color(192, 192, 192)); m_cursorSprite->SetColor(Nz::Color::Black);
m_cursorSprite->SetSize(1.f, float(m_drawer.GetFont()->GetSizeInfo(m_drawer.GetCharacterSize()).lineHeight)); m_cursorSprite->SetSize(1.f, float(m_drawer.GetFont()->GetSizeInfo(m_drawer.GetCharacterSize()).lineHeight));
m_cursorEntity = CreateEntity(); m_cursorEntity = CreateEntity();
@ -32,6 +32,8 @@ namespace Ndk
m_textEntity->AddComponent<GraphicsComponent>().Attach(m_textSprite); m_textEntity->AddComponent<GraphicsComponent>().Attach(m_textSprite);
m_textEntity->AddComponent<NodeComponent>().SetParent(this); m_textEntity->AddComponent<NodeComponent>().SetParent(this);
SetCursor(Nz::SystemCursor_Text);
Layout(); Layout();
} }