Browse Source

Simplify Window class

gh-pages
falkTX 11 years ago
parent
commit
ec5d3989d5
1 changed files with 57 additions and 116 deletions
  1. +57
    -116
      dgl/src/Window.cpp

+ 57
- 116
dgl/src/Window.cpp View File

@@ -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()
{
DBG("Window focus\n");
@@ -295,19 +338,8 @@ struct Window::PrivateData {
#endif
}

void repaint() noexcept
{
//DBG("Window repaint\n");
puglPostRedisplay(fView);
}

// -------------------------------------------------------------------

bool isVisible() const noexcept
{
return fVisible;
}

void setVisible(const bool yesNo)
{
if (fVisible == yesNo)
@@ -363,11 +395,6 @@ struct Window::PrivateData {

// -------------------------------------------------------------------

bool isResizable() const noexcept
{
return fResizable;
}

void setResizable(const bool 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)
{
if (width == 0 || height == 0)
@@ -473,7 +485,7 @@ struct Window::PrivateData {
XFlush(xDisplay);
#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)
{
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()
{
//DBG("PUGL: onDisplay\n");
@@ -850,19 +797,13 @@ struct Window::PrivateData {
// Window

Window::Window(App& app)
: pData(new PrivateData(app, this))
{
}
: pData(new PrivateData(app, this)) {}

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)
: pData(new PrivateData(app, this, parentId))
{
}
: pData(new PrivateData(app, this, parentId)) {}

Window::~Window()
{
@@ -896,12 +837,12 @@ void Window::focus()

void Window::repaint() noexcept
{
pData->repaint();
puglPostRedisplay(pData->fView);
}

bool Window::isVisible() const noexcept
{
return pData->isVisible();
return pData->fVisible;
}

void Window::setVisible(bool yesNo)
@@ -911,7 +852,7 @@ void Window::setVisible(bool yesNo)

bool Window::isResizable() const noexcept
{
return pData->isResizable();
return pData->fResizable;
}

void Window::setResizable(bool yesNo)
@@ -921,17 +862,17 @@ void Window::setResizable(bool yesNo)

int Window::getWidth() const noexcept
{
return pData->getWidth();
return pData->fView->width;
}

int Window::getHeight() const noexcept
{
return pData->getHeight();
return pData->fView->height;
}

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)
@@ -951,22 +892,22 @@ void Window::setTransientWinId(intptr_t winId)

App& Window::getApp() const noexcept
{
return pData->getApp();
return pData->fApp;
}

int Window::getModifiers() const noexcept
{
return pData->getModifiers();
return puglGetModifiers(pData->fView);
}

uint Window::getEventTimestamp() const noexcept
{
return pData->getEventTimestamp();
return puglGetEventTimestamp(pData->fView);
}

intptr_t Window::getWindowId() const noexcept
{
return pData->getWindowId();
return puglGetNativeWindow(pData->fView);
}

void Window::_addWidget(Widget* const widget)


Loading…
Cancel
Save