Squashed 'libraries/ZWidget/' changes from 96501b6ef..cecd34301
cecd34301 Delay load DPI-related functions bfc172f70 Added exception to some unimplemented functions 7c8d469bc Added item modifications functions 847d0e6d9 Improved keyboard navigation 8c4270e0f Dropdown can now be closed by re-selecting it 91402c31e Fix dropdown positioning in x11 and win32 02da8cdc0 Added ListView::GetPreferredWidth, ListView::GetPreferredHeight, ListView::GetMinHeight 04bf153d9 Added event subscriber system 1ce55e5da Added Dropdown Known issues: does not hide when parent widget's visibility changes git-subtree-dir: libraries/ZWidget git-subtree-split: cecd34301d369400227eb0f27bad2ab41ad756d2
This commit is contained in:
parent
d9b2c00228
commit
31c8dde32f
12 changed files with 648 additions and 13 deletions
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
#include "core/widget.h"
|
||||
#include "core/timer.h"
|
||||
#include "core/colorf.h"
|
||||
|
|
@ -34,6 +33,12 @@ Widget::Widget(Widget* parent, WidgetType type, RenderAPI renderAPI) : Type(type
|
|||
|
||||
Widget::~Widget()
|
||||
{
|
||||
for (auto subscription: Subscriptions)
|
||||
subscription->Subscribers.erase(this);
|
||||
|
||||
for (auto subscriber: Subscribers)
|
||||
subscriber->Subscriptions.erase(this);
|
||||
|
||||
if (DispCanvas)
|
||||
DispCanvas->detach();
|
||||
|
||||
|
|
@ -46,6 +51,24 @@ Widget::~Widget()
|
|||
DetachFromParent();
|
||||
}
|
||||
|
||||
void Widget::Subscribe(Widget* subscriber)
|
||||
{
|
||||
Subscribers.insert(subscriber);
|
||||
subscriber->Subscriptions.insert(this);
|
||||
}
|
||||
|
||||
void Widget::Unsubscribe(Widget* subscriber)
|
||||
{
|
||||
Subscribers.erase(subscriber);
|
||||
subscriber->Subscriptions.erase(this);
|
||||
}
|
||||
|
||||
void Widget::NotifySubscribers(const WidgetEvent type)
|
||||
{
|
||||
for (auto subscriber: Subscribers)
|
||||
subscriber->Notify(this, type);
|
||||
}
|
||||
|
||||
void Widget::SetCanvas(std::unique_ptr<Canvas> canvas)
|
||||
{
|
||||
if (DispWindow)
|
||||
|
|
@ -206,10 +229,12 @@ void Widget::Show()
|
|||
if (Type != WidgetType::Child)
|
||||
{
|
||||
DispWindow->Show();
|
||||
NotifySubscribers(WidgetEvent::VisibilityChange);
|
||||
}
|
||||
else if (HiddenFlag)
|
||||
{
|
||||
HiddenFlag = false;
|
||||
NotifySubscribers(WidgetEvent::VisibilityChange);
|
||||
Update();
|
||||
}
|
||||
}
|
||||
|
|
@ -260,11 +285,15 @@ void Widget::Hide()
|
|||
if (Type != WidgetType::Child)
|
||||
{
|
||||
if (DispWindow)
|
||||
{
|
||||
DispWindow->Hide();
|
||||
NotifySubscribers(WidgetEvent::VisibilityChange);
|
||||
}
|
||||
}
|
||||
else if (!HiddenFlag)
|
||||
{
|
||||
HiddenFlag = true;
|
||||
NotifySubscribers(WidgetEvent::VisibilityChange);
|
||||
Update();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue