summaryrefslogtreecommitdiffhomepage
path: root/api/is-window-visible.cpp
blob: f70e01c8087b6aedd195f5b4a3b2294e7a1f1fe8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include "is-window-visible.hpp"
#include <QPoint>

#ifdef _WIN32

#include <windows.h>

OPENTRACK_API_EXPORT bool is_window_visible(const QWidget* widget)
{
    const QPoint p = widget->mapToGlobal(QPoint(0, 0));
    const QSize s = widget->size();

    const POINT points[] =
    {
        { p.x(), p.y() },
        { p.x() + s.width(), p.y() },
        { p.x() + s.width(), p.y() + s.height() },
        { p.x(), p.y() + s.height() },
        { p.x() + s.width()/2, p.y() + s.height()/2 },
    };

    for (const POINT& pt : points)
        if (WindowFromPoint(pt) == (HWND) widget->winId())
            return true;
    return false;
}

#else
OPENTRACK_API_EXPORT bool is_window_visible(const QWidget*)
{
    return true;
}
#endif