| @@ -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); | |||||
| } | |||||