@@ -1,29 +0,0 @@ | |||
/* | |||
Copyright (C) 2012-2020 Filipe Coelho <falktx@falktx.com> | |||
Permission to use, copy, modify, and/or distribute this software for any | |||
purpose with or without fee is hereby granted, provided that the above | |||
copyright notice and this permission notice appear in all copies. | |||
THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | |||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |||
*/ | |||
/** | |||
@file extras.c pugl extra implementations for DPF. | |||
*/ | |||
#include "extras.h" | |||
#include "../pugl-upstream/src/implementation.h" | |||
const char* | |||
puglGetWindowTitle(const PuglView* view) | |||
{ | |||
return view->title; | |||
} |
@@ -1,50 +0,0 @@ | |||
/* | |||
Copyright (C) 2012-2020 Filipe Coelho <falktx@falktx.com> | |||
Permission to use, copy, modify, and/or distribute this software for any | |||
purpose with or without fee is hereby granted, provided that the above | |||
copyright notice and this permission notice appear in all copies. | |||
THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | |||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |||
*/ | |||
/** | |||
@file pugl.h pugl extra API for DPF. | |||
*/ | |||
#ifndef PUGL_EXTRAS_PUGL_H | |||
#define PUGL_EXTRAS_PUGL_H | |||
#include "../pugl-upstream/include/pugl/pugl.h" | |||
PUGL_BEGIN_DECLS | |||
PUGL_API const char* | |||
puglGetWindowTitle(const PuglView* view); | |||
PUGL_API int | |||
puglGetViewHint(const PuglView* view, PuglViewHint hint); | |||
PUGL_API void | |||
puglRaiseWindow(PuglView* view); | |||
PUGL_API void | |||
puglSetWindowSize(PuglView* view, unsigned int width, unsigned int height); | |||
PUGL_API void | |||
puglUpdateGeometryConstraints(PuglView* view, unsigned int width, unsigned int height, bool aspect); | |||
#ifdef DISTRHO_OS_WINDOWS | |||
PUGL_API void | |||
puglWin32SetWindowResizable(PuglView* view, bool resizable); | |||
#endif | |||
PUGL_END_DECLS | |||
#endif // PUGL_EXTRAS_PUGL_H |
@@ -1,48 +0,0 @@ | |||
/* | |||
Copyright (C) 2012-2020 Filipe Coelho <falktx@falktx.com> | |||
Permission to use, copy, modify, and/or distribute this software for any | |||
purpose with or without fee is hereby granted, provided that the above | |||
copyright notice and this permission notice appear in all copies. | |||
THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | |||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |||
*/ | |||
/** | |||
@file mac.m MacOS extra implementation for DPF. | |||
*/ | |||
#include "pugl/detail/mac.h" | |||
void | |||
puglRaiseWindow(PuglView* view) | |||
{ | |||
} | |||
void | |||
puglSetWindowSize(PuglView* view, unsigned int width, unsigned int height) | |||
{ | |||
// NOTE: pugl mac code does nothing with x and y | |||
const PuglRect frame = { 0.0, 0.0, (double)width, (double)height }; | |||
puglSetFrame(view, frame); | |||
} | |||
void | |||
puglUpdateGeometryConstraints(PuglView* view, unsigned int width, unsigned int height, bool aspect) | |||
{ | |||
// NOTE this is a combination of puglSetMinSize and puglSetAspectRatio | |||
view->minWidth = width; | |||
view->minHeight = height; | |||
[view->impl->window setContentMinSize:sizePoints(view, width, height)]; | |||
if (aspect) { | |||
[view->impl->window setContentAspectRatio:sizePoints(view, width, height)]; | |||
} | |||
} |
@@ -1,118 +0,0 @@ | |||
/* | |||
Copyright (C) 2012-2020 Filipe Coelho <falktx@falktx.com> | |||
Permission to use, copy, modify, and/or distribute this software for any | |||
purpose with or without fee is hereby granted, provided that the above | |||
copyright notice and this permission notice appear in all copies. | |||
THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | |||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |||
*/ | |||
/** | |||
@file win.c Windows extra implementation for DPF. | |||
*/ | |||
#include "pugl/detail/win.h" | |||
#include "pugl/detail/implementation.h" | |||
void | |||
puglRaiseWindow(PuglView* view) | |||
{ | |||
SetForegroundWindow(view->impl->hwnd); | |||
SetActiveWindow(view->impl->hwnd); | |||
return PUGL_SUCCESS; | |||
} | |||
void | |||
puglSetWindowSize(PuglView* view, unsigned int width, unsigned int height) | |||
{ | |||
view->frame.width = width; | |||
view->frame.height = height; | |||
// NOTE the following code matches upstream pugl, except we add SWP_NOMOVE flag | |||
if (view->impl->hwnd) { | |||
RECT rect = { (long)frame.x, | |||
(long)frame.y, | |||
(long)frame.x + (long)frame.width, | |||
(long)frame.y + (long)frame.height }; | |||
AdjustWindowRectEx(&rect, puglWinGetWindowFlags(view), | |||
FALSE, | |||
puglWinGetWindowExFlags(view)); | |||
SetWindowPos(view->impl->hwnd, | |||
HWND_TOP, | |||
rect.left, | |||
rect.top, | |||
rect.right - rect.left, | |||
rect.bottom - rect.top, | |||
SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOOWNERZORDER | SWP_NOZORDER); | |||
} | |||
} | |||
void | |||
puglUpdateGeometryConstraints(PuglView* view, unsigned int width, unsigned int height, bool aspect) | |||
{ | |||
// NOTE this is a combination of puglSetMinSize and puglSetAspectRatio, but stilL TODO on pugl | |||
Display* display = view->world->impl->display; | |||
view->minWidth = width; | |||
view->minHeight = height; | |||
if (aspect) { | |||
view->minAspectX = width; | |||
view->minAspectY = height; | |||
view->maxAspectX = width; | |||
view->maxAspectY = height; | |||
} | |||
} | |||
void | |||
puglWin32RestoreWindow(PuglView* view) | |||
{ | |||
PuglInternals* impl = view->impl; | |||
ShowWindow(impl->hwnd, SW_RESTORE); | |||
SetFocus(impl->hwnd); | |||
} | |||
void | |||
puglWin32ShowWindowCentered(PuglView* view) | |||
{ | |||
PuglInternals* impl = view->impl; | |||
RECT rectChild, rectParent; | |||
if (impl->transientParent != 0 && | |||
GetWindowRect(impl->hwnd, &rectChild) && | |||
GetWindowRect(impl->transientParent, &rectParent)) | |||
{ | |||
SetWindowPos(impl->hwnd, (HWND)impl->transientParent, | |||
rectParent.left + (rectChild.right-rectChild.left)/2, | |||
rectParent.top + (rectChild.bottom-rectChild.top)/2, | |||
0, 0, SWP_SHOWWINDOW|SWP_NOSIZE); | |||
} | |||
else | |||
{ | |||
ShowWindow(hwnd, SW_SHOWNORMAL); | |||
} | |||
SetFocus(impl->hwnd); | |||
} | |||
void | |||
puglWin32SetWindowResizable(PuglView* view, bool resizable) | |||
{ | |||
PuglInternals* impl = view->impl; | |||
const int winFlags = resizable ? GetWindowLong(hwnd, GWL_STYLE) | WS_SIZEBOX | |||
: GetWindowLong(hwnd, GWL_STYLE) & ~WS_SIZEBOX; | |||
SetWindowLong(impl->hwnd, GWL_STYLE, winFlags); | |||
} |
@@ -1,111 +0,0 @@ | |||
/* | |||
Copyright (C) 2012-2020 Filipe Coelho <falktx@falktx.com> | |||
Permission to use, copy, modify, and/or distribute this software for any | |||
purpose with or without fee is hereby granted, provided that the above | |||
copyright notice and this permission notice appear in all copies. | |||
THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | |||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | |||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | |||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | |||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | |||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |||
*/ | |||
/** | |||
@file x11.c X11 extra implementation for DPF. | |||
*/ | |||
// NOTE can't import this file twice! | |||
#ifndef PUGL_DETAIL_X11_H_INCLUDED | |||
#include "../pugl-upstream/src/x11.h" | |||
#endif | |||
#include "../pugl-upstream/src/implementation.h" | |||
#include <sys/types.h> | |||
#include <unistd.h> | |||
void | |||
puglRaiseWindow(PuglView* view) | |||
{ | |||
XRaiseWindow(view->impl->display, view->impl->win); | |||
} | |||
void | |||
puglSetWindowSize(PuglView* view, unsigned int width, unsigned int height) | |||
{ | |||
view->frame.width = width; | |||
view->frame.height = height; | |||
if (view->impl->win) { | |||
#if 0 | |||
if (! fResizable) | |||
{ | |||
XSizeHints sizeHints; | |||
memset(&sizeHints, 0, sizeof(sizeHints)); | |||
sizeHints.flags = PSize|PMinSize|PMaxSize; | |||
sizeHints.width = static_cast<int>(width); | |||
sizeHints.height = static_cast<int>(height); | |||
sizeHints.min_width = static_cast<int>(width); | |||
sizeHints.min_height = static_cast<int>(height); | |||
sizeHints.max_width = static_cast<int>(width); | |||
sizeHints.max_height = static_cast<int>(height); | |||
XSetWMNormalHints(xDisplay, xWindow, &sizeHints); | |||
} | |||
#endif | |||
XResizeWindow(view->world->impl->display, view->impl->win, width, height); | |||
} | |||
} | |||
void | |||
puglUpdateGeometryConstraints(PuglView* view, unsigned int width, unsigned int height, bool aspect) | |||
{ | |||
// NOTE this is a combination of puglSetMinSize and puglSetAspectRatio | |||
Display* display = view->world->impl->display; | |||
view->minWidth = width; | |||
view->minHeight = height; | |||
if (aspect) { | |||
view->minAspectX = width; | |||
view->minAspectY = height; | |||
view->maxAspectX = width; | |||
view->maxAspectY = height; | |||
} | |||
#if 0 | |||
if (view->impl->win) { | |||
XSizeHints sizeHints = getSizeHints(view); | |||
XSetNormalHints(display, view->impl->win, &sizeHints); | |||
// NOTE old code used this instead | |||
// XSetWMNormalHints(display, view->impl->win, &sizeHints); | |||
} | |||
#endif | |||
} | |||
void | |||
puglExtraSetWindowTypeAndPID(PuglView* view) | |||
{ | |||
PuglInternals* const impl = view->impl; | |||
const pid_t pid = getpid(); | |||
const Atom _nwp = XInternAtom(impl->display, "_NET_WM_PID", False); | |||
XChangeProperty(impl->display, impl->win, _nwp, XA_CARDINAL, 32, PropModeReplace, (const uchar*)&pid, 1); | |||
const Atom _wt = XInternAtom(impl->display, "_NET_WM_WINDOW_TYPE", False); | |||
// Setting the window to both dialog and normal will produce a decorated floating dialog | |||
// Order is important: DIALOG needs to come before NORMAL | |||
const Atom _wts[2] = { | |||
XInternAtom(impl->display, "_NET_WM_WINDOW_TYPE_DIALOG", False), | |||
XInternAtom(impl->display, "_NET_WM_WINDOW_TYPE_NORMAL", False) | |||
}; | |||
XChangeProperty(impl->display, impl->win, _wt, XA_ATOM, 32, PropModeReplace, (const uchar*)&_wts, 2); | |||
} |