|
@@ -277,6 +277,49 @@ struct Window::PrivateData { |
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------- |
|
|
// ------------------------------------------------------------------- |
|
|
|
|
|
|
|
|
|
|
|
void exec_init() |
|
|
|
|
|
{ |
|
|
|
|
|
DBG("Window modal loop starting..."); DBGF; |
|
|
|
|
|
DISTRHO_SAFE_ASSERT_RETURN(fModal.parent != nullptr, setVisible(true)); |
|
|
|
|
|
|
|
|
|
|
|
fModal.enabled = true; |
|
|
|
|
|
fModal.parent->fModal.childFocus = this; |
|
|
|
|
|
|
|
|
|
|
|
#ifdef DISTRHO_OS_WINDOWS |
|
|
|
|
|
// Center this window |
|
|
|
|
|
PuglInternals* const parentImpl = fModal.parent->fView->impl; |
|
|
|
|
|
|
|
|
|
|
|
RECT curRect; |
|
|
|
|
|
RECT parentRect; |
|
|
|
|
|
GetWindowRect(hwnd, &curRect); |
|
|
|
|
|
GetWindowRect(parentImpl->hwnd, &parentRect); |
|
|
|
|
|
|
|
|
|
|
|
int x = parentRect.left+(parentRect.right-curRect.right)/2; |
|
|
|
|
|
int y = parentRect.top +(parentRect.bottom-curRect.bottom)/2; |
|
|
|
|
|
|
|
|
|
|
|
SetWindowPos(hwnd, 0, x, y, 0, 0, SWP_NOACTIVATE|SWP_NOOWNERZORDER|SWP_NOSIZE|SWP_NOZORDER); |
|
|
|
|
|
UpdateWindow(hwnd); |
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
fModal.parent->setVisible(true); |
|
|
|
|
|
setVisible(true); |
|
|
|
|
|
|
|
|
|
|
|
DBG("Ok\n"); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void exec_fini() |
|
|
|
|
|
{ |
|
|
|
|
|
DBG("Window modal loop stopping..."); DBGF; |
|
|
|
|
|
fModal.enabled = false; |
|
|
|
|
|
|
|
|
|
|
|
if (fModal.parent != nullptr) |
|
|
|
|
|
fModal.parent->fModal.childFocus = nullptr; |
|
|
|
|
|
|
|
|
|
|
|
DBG("Ok\n"); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------- |
|
|
|
|
|
|
|
|
void focus() |
|
|
void focus() |
|
|
{ |
|
|
{ |
|
|
DBG("Window focus\n"); |
|
|
DBG("Window focus\n"); |
|
@@ -295,19 +338,8 @@ struct Window::PrivateData { |
|
|
#endif |
|
|
#endif |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void repaint() noexcept |
|
|
|
|
|
{ |
|
|
|
|
|
//DBG("Window repaint\n"); |
|
|
|
|
|
puglPostRedisplay(fView); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------- |
|
|
// ------------------------------------------------------------------- |
|
|
|
|
|
|
|
|
bool isVisible() const noexcept |
|
|
|
|
|
{ |
|
|
|
|
|
return fVisible; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void setVisible(const bool yesNo) |
|
|
void setVisible(const bool yesNo) |
|
|
{ |
|
|
{ |
|
|
if (fVisible == yesNo) |
|
|
if (fVisible == yesNo) |
|
@@ -363,11 +395,6 @@ struct Window::PrivateData { |
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------- |
|
|
// ------------------------------------------------------------------- |
|
|
|
|
|
|
|
|
bool isResizable() const noexcept |
|
|
|
|
|
{ |
|
|
|
|
|
return fResizable; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void setResizable(const bool yesNo) |
|
|
void setResizable(const bool yesNo) |
|
|
{ |
|
|
{ |
|
|
if (fResizable == yesNo) |
|
|
if (fResizable == yesNo) |
|
@@ -390,21 +417,6 @@ struct Window::PrivateData { |
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------- |
|
|
// ------------------------------------------------------------------- |
|
|
|
|
|
|
|
|
int getWidth() const noexcept |
|
|
|
|
|
{ |
|
|
|
|
|
return fView->width; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
int getHeight() const noexcept |
|
|
|
|
|
{ |
|
|
|
|
|
return fView->height; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
Size<int> getSize() const noexcept |
|
|
|
|
|
{ |
|
|
|
|
|
return Size<int>(fView->width, fView->height); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void setSize(uint width, uint height, const bool forced = false) |
|
|
void setSize(uint width, uint height, const bool forced = false) |
|
|
{ |
|
|
{ |
|
|
if (width == 0 || height == 0) |
|
|
if (width == 0 || height == 0) |
|
@@ -473,7 +485,7 @@ struct Window::PrivateData { |
|
|
XFlush(xDisplay); |
|
|
XFlush(xDisplay); |
|
|
#endif |
|
|
#endif |
|
|
|
|
|
|
|
|
repaint(); |
|
|
|
|
|
|
|
|
puglPostRedisplay(fView); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------- |
|
|
// ------------------------------------------------------------------- |
|
@@ -509,28 +521,6 @@ struct Window::PrivateData { |
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------- |
|
|
// ------------------------------------------------------------------- |
|
|
|
|
|
|
|
|
App& getApp() const noexcept |
|
|
|
|
|
{ |
|
|
|
|
|
return fApp; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
int getModifiers() const noexcept |
|
|
|
|
|
{ |
|
|
|
|
|
return puglGetModifiers(fView); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
uint getEventTimestamp() const noexcept |
|
|
|
|
|
{ |
|
|
|
|
|
return puglGetEventTimestamp(fView); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
intptr_t getWindowId() const noexcept |
|
|
|
|
|
{ |
|
|
|
|
|
return puglGetNativeWindow(fView); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------- |
|
|
|
|
|
|
|
|
|
|
|
void addWidget(Widget* const widget) |
|
|
void addWidget(Widget* const widget) |
|
|
{ |
|
|
{ |
|
|
fWidgets.push_back(widget); |
|
|
fWidgets.push_back(widget); |
|
@@ -583,49 +573,6 @@ struct Window::PrivateData { |
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------- |
|
|
// ------------------------------------------------------------------- |
|
|
|
|
|
|
|
|
void exec_init() |
|
|
|
|
|
{ |
|
|
|
|
|
DBG("Window modal loop starting..."); DBGF; |
|
|
|
|
|
DISTRHO_SAFE_ASSERT_RETURN(fModal.parent != nullptr, setVisible(true)); |
|
|
|
|
|
|
|
|
|
|
|
fModal.enabled = true; |
|
|
|
|
|
fModal.parent->fModal.childFocus = this; |
|
|
|
|
|
|
|
|
|
|
|
#ifdef DISTRHO_OS_WINDOWS |
|
|
|
|
|
// Center this window |
|
|
|
|
|
PuglInternals* const parentImpl = fModal.parent->fView->impl; |
|
|
|
|
|
|
|
|
|
|
|
RECT curRect; |
|
|
|
|
|
RECT parentRect; |
|
|
|
|
|
GetWindowRect(hwnd, &curRect); |
|
|
|
|
|
GetWindowRect(parentImpl->hwnd, &parentRect); |
|
|
|
|
|
|
|
|
|
|
|
int x = parentRect.left+(parentRect.right-curRect.right)/2; |
|
|
|
|
|
int y = parentRect.top +(parentRect.bottom-curRect.bottom)/2; |
|
|
|
|
|
|
|
|
|
|
|
SetWindowPos(hwnd, 0, x, y, 0, 0, SWP_NOACTIVATE|SWP_NOOWNERZORDER|SWP_NOSIZE|SWP_NOZORDER); |
|
|
|
|
|
UpdateWindow(hwnd); |
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
fModal.parent->setVisible(true); |
|
|
|
|
|
setVisible(true); |
|
|
|
|
|
|
|
|
|
|
|
DBG("Ok\n"); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void exec_fini() |
|
|
|
|
|
{ |
|
|
|
|
|
DBG("Window modal loop stopping..."); DBGF; |
|
|
|
|
|
fModal.enabled = false; |
|
|
|
|
|
|
|
|
|
|
|
if (fModal.parent != nullptr) |
|
|
|
|
|
fModal.parent->fModal.childFocus = nullptr; |
|
|
|
|
|
|
|
|
|
|
|
DBG("Ok\n"); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// ------------------------------------------------------------------- |
|
|
|
|
|
|
|
|
|
|
|
void onDisplay() |
|
|
void onDisplay() |
|
|
{ |
|
|
{ |
|
|
//DBG("PUGL: onDisplay\n"); |
|
|
//DBG("PUGL: onDisplay\n"); |
|
@@ -850,19 +797,13 @@ struct Window::PrivateData { |
|
|
// Window |
|
|
// Window |
|
|
|
|
|
|
|
|
Window::Window(App& app) |
|
|
Window::Window(App& app) |
|
|
: pData(new PrivateData(app, this)) |
|
|
|
|
|
{ |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
: pData(new PrivateData(app, this)) {} |
|
|
|
|
|
|
|
|
Window::Window(App& app, Window& parent) |
|
|
Window::Window(App& app, Window& parent) |
|
|
: pData(new PrivateData(app, this, parent)) |
|
|
|
|
|
{ |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
: pData(new PrivateData(app, this, parent)) {} |
|
|
|
|
|
|
|
|
Window::Window(App& app, intptr_t parentId) |
|
|
Window::Window(App& app, intptr_t parentId) |
|
|
: pData(new PrivateData(app, this, parentId)) |
|
|
|
|
|
{ |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
: pData(new PrivateData(app, this, parentId)) {} |
|
|
|
|
|
|
|
|
Window::~Window() |
|
|
Window::~Window() |
|
|
{ |
|
|
{ |
|
@@ -896,12 +837,12 @@ void Window::focus() |
|
|
|
|
|
|
|
|
void Window::repaint() noexcept |
|
|
void Window::repaint() noexcept |
|
|
{ |
|
|
{ |
|
|
pData->repaint(); |
|
|
|
|
|
|
|
|
puglPostRedisplay(pData->fView); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
bool Window::isVisible() const noexcept |
|
|
bool Window::isVisible() const noexcept |
|
|
{ |
|
|
{ |
|
|
return pData->isVisible(); |
|
|
|
|
|
|
|
|
return pData->fVisible; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void Window::setVisible(bool yesNo) |
|
|
void Window::setVisible(bool yesNo) |
|
@@ -911,7 +852,7 @@ void Window::setVisible(bool yesNo) |
|
|
|
|
|
|
|
|
bool Window::isResizable() const noexcept |
|
|
bool Window::isResizable() const noexcept |
|
|
{ |
|
|
{ |
|
|
return pData->isResizable(); |
|
|
|
|
|
|
|
|
return pData->fResizable; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void Window::setResizable(bool yesNo) |
|
|
void Window::setResizable(bool yesNo) |
|
@@ -921,17 +862,17 @@ void Window::setResizable(bool yesNo) |
|
|
|
|
|
|
|
|
int Window::getWidth() const noexcept |
|
|
int Window::getWidth() const noexcept |
|
|
{ |
|
|
{ |
|
|
return pData->getWidth(); |
|
|
|
|
|
|
|
|
return pData->fView->width; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
int Window::getHeight() const noexcept |
|
|
int Window::getHeight() const noexcept |
|
|
{ |
|
|
{ |
|
|
return pData->getHeight(); |
|
|
|
|
|
|
|
|
return pData->fView->height; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
Size<int> Window::getSize() const noexcept |
|
|
Size<int> Window::getSize() const noexcept |
|
|
{ |
|
|
{ |
|
|
return pData->getSize(); |
|
|
|
|
|
|
|
|
return Size<int>(pData->fView->width, pData->fView->height); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void Window::setSize(uint width, uint height) |
|
|
void Window::setSize(uint width, uint height) |
|
@@ -951,22 +892,22 @@ void Window::setTransientWinId(intptr_t winId) |
|
|
|
|
|
|
|
|
App& Window::getApp() const noexcept |
|
|
App& Window::getApp() const noexcept |
|
|
{ |
|
|
{ |
|
|
return pData->getApp(); |
|
|
|
|
|
|
|
|
return pData->fApp; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
int Window::getModifiers() const noexcept |
|
|
int Window::getModifiers() const noexcept |
|
|
{ |
|
|
{ |
|
|
return pData->getModifiers(); |
|
|
|
|
|
|
|
|
return puglGetModifiers(pData->fView); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
uint Window::getEventTimestamp() const noexcept |
|
|
uint Window::getEventTimestamp() const noexcept |
|
|
{ |
|
|
{ |
|
|
return pData->getEventTimestamp(); |
|
|
|
|
|
|
|
|
return puglGetEventTimestamp(pData->fView); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
intptr_t Window::getWindowId() const noexcept |
|
|
intptr_t Window::getWindowId() const noexcept |
|
|
{ |
|
|
{ |
|
|
return pData->getWindowId(); |
|
|
|
|
|
|
|
|
return puglGetNativeWindow(pData->fView); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void Window::_addWidget(Widget* const widget) |
|
|
void Window::_addWidget(Widget* const widget) |
|
|