/****************************************************************************** Copyright (C) 2014 by Hugh Bailey This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . ******************************************************************************/ #pragma once #if QT_VERSION >= QT_VERSION_CHECK(5, 6, 0) #define SUPPORTS_FRACTIONAL_SCALING #endif static inline void GetScaleAndCenterPos( int baseCX, int baseCY, int windowCX, int windowCY, int &x, int &y, float &scale) { double windowAspect, baseAspect; int newCX, newCY; windowAspect = double(windowCX) / double(windowCY); baseAspect = double(baseCX) / double(baseCY); if (windowAspect > baseAspect) { scale = float(windowCY) / float(baseCY); newCX = int(double(windowCY) * baseAspect); newCY = windowCY; } else { scale = float(windowCX) / float(baseCX); newCX = windowCX; newCY = int(float(windowCX) / baseAspect); } x = windowCX/2 - newCX/2; y = windowCY/2 - newCY/2; } static inline void GetCenterPosFromFixedScale( int baseCX, int baseCY, int windowCX, int windowCY, int &x, int &y, float scale) { x = (float(windowCX) - float(baseCX)*scale) / 2.0f; y = (float(windowCY) - float(baseCY)*scale) / 2.0f; } static inline QSize GetPixelSize(QWidget *widget) { #ifdef SUPPORTS_FRACTIONAL_SCALING return widget->size() * widget->devicePixelRatioF(); #else return widget->size() * widget->devicePixelRatio(); #endif }