void OSD::PositionWindow(Monitor monitor, LayeredWnd &lWnd) { Settings::OSDPos pos = _settings->OSDPosition(); if (pos == Settings::OSDPos::Custom) { int customX = _settings->OSDX(); int customY = _settings->OSDY(); lWnd.X(customX); lWnd.Y(customY); return; } int offset = _settings->OSDEdgeOffset(); /* Edge cases ;-) */ switch (pos) { case Settings::TopLeft: lWnd.X(monitor.X() + offset); lWnd.Y(monitor.Y() + offset); return; case Settings::TopRight: lWnd.X(monitor.X() + monitor.Width() - lWnd.Width() - offset); lWnd.Y(monitor.Y() + offset); return; case Settings::BottomLeft: lWnd.X(monitor.X() + offset); lWnd.Y(monitor.Y() + monitor.Height() - lWnd.Height() - offset); return; case Settings::BottomRight: lWnd.X(monitor.X() + monitor.Width() - lWnd.Width() - offset); lWnd.Y(monitor.Y() + monitor.Height() - lWnd.Height() - offset); return; } /* Center */ CenterWindowX(monitor, lWnd); CenterWindowY(monitor, lWnd); if (pos == Settings::OSDPos::Center) { return; } /* We're centered. Now adjust based on top, bottom, left, or right: */ switch (pos) { case Settings::Top: lWnd.Y(monitor.Y() + offset); return; case Settings::Bottom: lWnd.Y(monitor.Y() + monitor.Height() - lWnd.Height() - offset); return; case Settings::Left: lWnd.X(monitor.X() + offset); return; case Settings::Right: lWnd.X(monitor.X() + monitor.Width() - lWnd.Width() - offset); return; } }
void OSD::CenterWindowX(Monitor monitor, LayeredWnd &lWnd) { lWnd.X(monitor.X() + monitor.Width() / 2 - lWnd.Width() / 2); }