Signed-off-by: falkTX <falktx@falktx.com>pull/281/head
@@ -66,6 +66,37 @@ public: | |||||
*/ | */ | ||||
Window& getWindow() const noexcept; | Window& getWindow() const noexcept; | ||||
/** | |||||
Check if this top-level widget's window is resizable (by the user or window manager). | |||||
For situations where this top-level widget is an embed plugin UI and the plugin host does not support resizing, | |||||
this function can return false where it normally returns true. | |||||
You might want to add a resize handle for such cases, so the user is still allowed to resize the window. | |||||
(programatically resizing a window is always possible, but the same is not true for the window manager) | |||||
*/ | |||||
bool isResizable() const noexcept; | |||||
/** | |||||
Set width of this widget's window. | |||||
@note This will not change the widget's size right away, but be pending on OS resizing the window | |||||
*/ | |||||
void setWidth(uint width); | |||||
/** | |||||
Set height of this widget's window. | |||||
*/ | |||||
void setHeight(uint height); | |||||
/** | |||||
Set size of this widget's window, using @a width and @a height values. | |||||
*/ | |||||
void setSize(uint width, uint height); | |||||
/** | |||||
Set size of this widget's window. | |||||
*/ | |||||
void setSize(const Size<uint>& size); | |||||
// TODO group stuff after here, convenience functions present in Window class | // TODO group stuff after here, convenience functions present in Window class | ||||
bool addIdleCallback(IdleCallback* callback, uint timerFrequencyInMs = 0); | bool addIdleCallback(IdleCallback* callback, uint timerFrequencyInMs = 0); | ||||
bool removeIdleCallback(IdleCallback* callback); | bool removeIdleCallback(IdleCallback* callback); | ||||
@@ -185,7 +185,7 @@ public: | |||||
void close(); | void close(); | ||||
/** | /** | ||||
Check if this window is resizable. | |||||
Check if this window is resizable (by the user or window manager). | |||||
@see setResizable | @see setResizable | ||||
*/ | */ | ||||
bool isResizable() const noexcept; | bool isResizable() const noexcept; | ||||
@@ -96,8 +96,7 @@ void SubWidget::setAbsolutePos(const Point<int>& pos) noexcept | |||||
pData->absolutePos = pos; | pData->absolutePos = pos; | ||||
onPositionChanged(ev); | onPositionChanged(ev); | ||||
// repaint the bounds of parent | |||||
pData->parentWidget->repaint(); | |||||
repaint(); | |||||
} | } | ||||
Widget* SubWidget::getParentWidget() const noexcept | Widget* SubWidget::getParentWidget() const noexcept | ||||
@@ -40,6 +40,31 @@ Window& TopLevelWidget::getWindow() const noexcept | |||||
return pData->window; | return pData->window; | ||||
} | } | ||||
bool TopLevelWidget::isResizable() const noexcept | |||||
{ | |||||
return pData->window.isResizable(); | |||||
} | |||||
void TopLevelWidget::setWidth(const uint width) | |||||
{ | |||||
pData->window.setWidth(width); | |||||
} | |||||
void TopLevelWidget::setHeight(const uint height) | |||||
{ | |||||
pData->window.setHeight(height); | |||||
} | |||||
void TopLevelWidget::setSize(const uint width, const uint height) | |||||
{ | |||||
pData->window.setSize(width, height); | |||||
} | |||||
void TopLevelWidget::setSize(const Size<uint>& size) | |||||
{ | |||||
pData->window.setSize(size); | |||||
} | |||||
bool TopLevelWidget::addIdleCallback(IdleCallback* const callback, const uint timerFrequencyInMs) | bool TopLevelWidget::addIdleCallback(IdleCallback* const callback, const uint timerFrequencyInMs) | ||||
{ | { | ||||
return pData->window.addIdleCallback(callback, timerFrequencyInMs); | return pData->window.addIdleCallback(callback, timerFrequencyInMs); | ||||
@@ -46,6 +46,8 @@ void Widget::setVisible(bool visible) | |||||
pData->visible = visible; | pData->visible = visible; | ||||
repaint(); | repaint(); | ||||
// FIXME check case of hiding a previously visible widget, does it trigger a repaint? | |||||
} | } | ||||
void Widget::show() | void Widget::show() | ||||
@@ -652,7 +652,15 @@ void Window::PrivateData::onPuglConfigure(const double width, const double heigh | |||||
{ | { | ||||
TopLevelWidget* const widget(*it); | TopLevelWidget* const widget(*it); | ||||
widget->setSize(uwidth, uheight); | |||||
/* Some special care here, we call Widget::setSize instead of the TopLevelWidget one. | |||||
* This is because we want TopLevelWidget::setSize to handle both window and widget size, | |||||
* but we dont want to change window size here, because we are the window.. | |||||
* | |||||
* So we just call the Widget specific method manually. | |||||
* Alternatively, we could expose a resize function on the pData, like done with the display function. | |||||
* But there is nothing extra we need to do in there, so this works fine. | |||||
*/ | |||||
((Widget*)widget)->setSize(uwidth, uheight); | |||||
} | } | ||||
#endif | #endif | ||||