diff --git a/src/lib/synergy/DpiHelper.cpp b/src/lib/synergy/DpiHelper.cpp new file mode 100644 index 00000000..7b8effe7 --- /dev/null +++ b/src/lib/synergy/DpiHelper.cpp @@ -0,0 +1,49 @@ +/* + * synergy -- mouse and keyboard sharing utility + * Copyright (C) 2015 Synergy Seamless Inc. + * + * This package is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * found in the file LICENSE that should have accompanied this file. + * + * This package 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 . + */ + +#include "synergy/DpiHelper.h" +#include "base/Log.h" + +#include + +size_t DpiHelper::s_dpi = kDefaultDpi; +bool DpiHelper::s_dpiScaled = false; +size_t DpiHelper::s_resolutionWidth = 0; +size_t DpiHelper::s_resolutionHeight = 0; +size_t DpiHelper::s_primaryWidthCenter = 0; +size_t DpiHelper::s_primaryHeightCenter = 0; + +void DpiHelper::calculateDpi(size_t width, size_t height) +{ + if (s_resolutionWidth == 0 || s_resolutionHeight == 0) { + return; + } + + size_t dpiTest1 = s_resolutionWidth * 100 / width; + size_t dpiTest2 = s_resolutionHeight * 100 / height; + + assert(dpiTest1 == dpiTest2); + + s_dpi = dpiTest1; + + if (s_dpi != kDefaultDpi) { + s_dpiScaled = true; + + LOG((CLOG_DEBUG "DPI: %d%%", s_dpi)); + LOG((CLOG_DEBUG "physical resolution: %d, %d scaled resolution: %d, %d", s_resolutionWidth, s_resolutionHeight, width, height)); + } +} diff --git a/src/lib/synergy/DpiHelper.h b/src/lib/synergy/DpiHelper.h new file mode 100644 index 00000000..8f37de96 --- /dev/null +++ b/src/lib/synergy/DpiHelper.h @@ -0,0 +1,36 @@ +/* + * synergy -- mouse and keyboard sharing utility + * Copyright (C) 2015 Synergy Seamless Inc. + * + * This package is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * found in the file LICENSE that should have accompanied this file. + * + * This package 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 + +class DpiHelper { +public: + enum EDpi { + kDefaultDpi = 100 + }; + + static void calculateDpi(size_t width, size_t height); + static float getDpi() { return (float)(s_dpi / 100.0f); } + +public: + static size_t s_dpi; + static bool s_dpiScaled; + static size_t s_resolutionWidth; + static size_t s_resolutionHeight; + static size_t s_primaryWidthCenter; + static size_t s_primaryHeightCenter; +};