mirror of
https://github.com/microsoft/PowerToys.git
synced 2026-04-05 18:57:19 +02:00
common: refactor common library pt2 (#8588)
- remove common lib - split settings, remove common-md - move ipc interop/kb_layout to interop - rename core -> settings, settings -> old_settings - os-detect header-only; interop -> PowerToysInterop - split notifications, move single-use headers where they're used - winstore lib - rename com utils - rename Updating and Telemetry projects - rename core -> settings-ui and remove examples folder - rename settings-ui folder + consisent common/version include
This commit is contained in:
57
src/common/Themes/Themes.vcxproj
Normal file
57
src/common/Themes/Themes.vcxproj
Normal file
@@ -0,0 +1,57 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.200729.8\build\native\Microsoft.Windows.CppWinRT.props" Condition="Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.200729.8\build\native\Microsoft.Windows.CppWinRT.props')" />
|
||||
<PropertyGroup Label="Globals">
|
||||
<VCProjectVersion>16.0</VCProjectVersion>
|
||||
<ProjectGuid>{98537082-0FDB-40DE-ABD8-0DC5A4269BAB}</ProjectGuid>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<RootNamespace>Themes</RootNamespace>
|
||||
<ProjectName>Themes</ProjectName>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Label="Configuration">
|
||||
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="Shared">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<ItemDefinitionGroup>
|
||||
<ClCompile>
|
||||
<AdditionalIncludeDirectories>..\..\..\;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<TreatWarningAsError>true</TreatWarningAsError>
|
||||
<PrecompiledHeader>NotUsing</PrecompiledHeader>
|
||||
</ClCompile>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="icon_helpers.h" />
|
||||
<ClInclude Include="windows_colors.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="icon_helpers.cpp" />
|
||||
<ClCompile Include="windows_colors.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="packages.config" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
<Import Project="..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.200729.8\build\native\Microsoft.Windows.CppWinRT.targets" Condition="Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.200729.8\build\native\Microsoft.Windows.CppWinRT.targets')" />
|
||||
</ImportGroup>
|
||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||
<PropertyGroup>
|
||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||
</PropertyGroup>
|
||||
<Error Condition="!Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.200729.8\build\native\Microsoft.Windows.CppWinRT.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.200729.8\build\native\Microsoft.Windows.CppWinRT.props'))" />
|
||||
<Error Condition="!Exists('..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.200729.8\build\native\Microsoft.Windows.CppWinRT.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\..\packages\Microsoft.Windows.CppWinRT.2.0.200729.8\build\native\Microsoft.Windows.CppWinRT.targets'))" />
|
||||
</Target>
|
||||
</Project>
|
||||
92
src/common/Themes/icon_helpers.cpp
Normal file
92
src/common/Themes/icon_helpers.cpp
Normal file
@@ -0,0 +1,92 @@
|
||||
#include "icon_helpers.h"
|
||||
#include <shellapi.h>
|
||||
#include <shlwapi.h>
|
||||
#include <commctrl.h>
|
||||
|
||||
HRESULT GetIconIndexFromPath(_In_ PCWSTR path, _Out_ int* index)
|
||||
{
|
||||
*index = 0;
|
||||
|
||||
HRESULT hr = E_FAIL;
|
||||
|
||||
SHFILEINFO shFileInfo = { 0 };
|
||||
|
||||
if (!PathIsRelative(path))
|
||||
{
|
||||
DWORD attrib = GetFileAttributes(path);
|
||||
HIMAGELIST himl = (HIMAGELIST)SHGetFileInfo(path, attrib, &shFileInfo, sizeof(shFileInfo), (SHGFI_SYSICONINDEX | SHGFI_SMALLICON | SHGFI_USEFILEATTRIBUTES));
|
||||
if (himl)
|
||||
{
|
||||
*index = shFileInfo.iIcon;
|
||||
// We shouldn't free the HIMAGELIST.
|
||||
hr = S_OK;
|
||||
}
|
||||
}
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
HBITMAP CreateBitmapFromIcon(_In_ HICON hIcon, _In_opt_ UINT width, _In_opt_ UINT height)
|
||||
{
|
||||
HBITMAP hBitmapResult = NULL;
|
||||
|
||||
// Create compatible DC
|
||||
HDC hDC = CreateCompatibleDC(NULL);
|
||||
if (hDC != NULL)
|
||||
{
|
||||
// Get bitmap rectangle size
|
||||
RECT rc = { 0 };
|
||||
rc.left = 0;
|
||||
rc.right = (width != 0) ? width : GetSystemMetrics(SM_CXSMICON);
|
||||
rc.top = 0;
|
||||
rc.bottom = (height != 0) ? height : GetSystemMetrics(SM_CYSMICON);
|
||||
|
||||
// Create bitmap compatible with DC
|
||||
BITMAPINFO BitmapInfo;
|
||||
ZeroMemory(&BitmapInfo, sizeof(BITMAPINFO));
|
||||
|
||||
BitmapInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
|
||||
BitmapInfo.bmiHeader.biWidth = rc.right;
|
||||
BitmapInfo.bmiHeader.biHeight = rc.bottom;
|
||||
BitmapInfo.bmiHeader.biPlanes = 1;
|
||||
BitmapInfo.bmiHeader.biBitCount = 32;
|
||||
BitmapInfo.bmiHeader.biCompression = BI_RGB;
|
||||
|
||||
HDC hDCBitmap = GetDC(NULL);
|
||||
|
||||
HBITMAP hBitmap = CreateDIBSection(hDCBitmap, &BitmapInfo, DIB_RGB_COLORS, NULL, NULL, 0);
|
||||
|
||||
ReleaseDC(NULL, hDCBitmap);
|
||||
|
||||
if (hBitmap != NULL)
|
||||
{
|
||||
// Select bitmap into DC
|
||||
HBITMAP hBitmapOld = (HBITMAP)SelectObject(hDC, hBitmap);
|
||||
if (hBitmapOld != NULL)
|
||||
{
|
||||
// Draw icon into DC
|
||||
if (DrawIconEx(hDC, 0, 0, hIcon, rc.right, rc.bottom, 0, NULL, DI_NORMAL))
|
||||
{
|
||||
// Restore original bitmap in DC
|
||||
hBitmapResult = (HBITMAP)SelectObject(hDC, hBitmapOld);
|
||||
hBitmapOld = NULL;
|
||||
hBitmap = NULL;
|
||||
}
|
||||
|
||||
if (hBitmapOld != NULL)
|
||||
{
|
||||
SelectObject(hDC, hBitmapOld);
|
||||
}
|
||||
}
|
||||
|
||||
if (hBitmap != NULL)
|
||||
{
|
||||
DeleteObject(hBitmap);
|
||||
}
|
||||
}
|
||||
|
||||
DeleteDC(hDC);
|
||||
}
|
||||
|
||||
return hBitmapResult;
|
||||
}
|
||||
7
src/common/Themes/icon_helpers.h
Normal file
7
src/common/Themes/icon_helpers.h
Normal file
@@ -0,0 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <Windows.h>
|
||||
|
||||
HRESULT GetIconIndexFromPath(_In_ PCWSTR path, _Out_ int* index);
|
||||
HBITMAP CreateBitmapFromIcon(_In_ HICON hIcon, _In_opt_ UINT width = 0, _In_opt_ UINT height = 0);
|
||||
4
src/common/Themes/packages.config
Normal file
4
src/common/Themes/packages.config
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Microsoft.Windows.CppWinRT" version="2.0.200729.8" targetFramework="native" />
|
||||
</packages>
|
||||
88
src/common/Themes/windows_colors.cpp
Normal file
88
src/common/Themes/windows_colors.cpp
Normal file
@@ -0,0 +1,88 @@
|
||||
#include "windows_colors.h"
|
||||
|
||||
DWORD WindowsColors::rgb_color(DWORD abgr_color)
|
||||
{
|
||||
// registry keeps the colors in ABGR format, we want RGB
|
||||
auto r = (abgr_color & 0xFF);
|
||||
auto g = (abgr_color & 0xFF00) >> 8;
|
||||
auto b = (abgr_color & 0xFF0000) >> 16;
|
||||
return (r << 16) | (g << 8) | b;
|
||||
}
|
||||
DWORD WindowsColors::rgb_color(winrt::Windows::UI::Color color)
|
||||
{
|
||||
return ((DWORD)color.R << 16) | ((DWORD)color.G << 8) | ((DWORD)color.B);
|
||||
}
|
||||
WindowsColors::Color WindowsColors::get_button_face_color()
|
||||
{
|
||||
winrt::Windows::UI::ViewManagement::UISettings uiSettings;
|
||||
return uiSettings.UIElementColor(winrt::Windows::UI::ViewManagement::UIElementType::ButtonFace);
|
||||
}
|
||||
WindowsColors::Color WindowsColors::get_button_text_color()
|
||||
{
|
||||
winrt::Windows::UI::ViewManagement::UISettings uiSettings;
|
||||
return uiSettings.UIElementColor(winrt::Windows::UI::ViewManagement::UIElementType::ButtonText);
|
||||
}
|
||||
WindowsColors::Color WindowsColors::get_highlight_color()
|
||||
{
|
||||
winrt::Windows::UI::ViewManagement::UISettings uiSettings;
|
||||
return uiSettings.UIElementColor(winrt::Windows::UI::ViewManagement::UIElementType::Highlight);
|
||||
}
|
||||
WindowsColors::Color WindowsColors::get_hotlight_color()
|
||||
{
|
||||
winrt::Windows::UI::ViewManagement::UISettings uiSettings;
|
||||
return uiSettings.UIElementColor(winrt::Windows::UI::ViewManagement::UIElementType::Hotlight);
|
||||
}
|
||||
WindowsColors::Color WindowsColors::get_highlight_text_color()
|
||||
{
|
||||
winrt::Windows::UI::ViewManagement::UISettings uiSettings;
|
||||
return uiSettings.UIElementColor(winrt::Windows::UI::ViewManagement::UIElementType::HighlightText);
|
||||
}
|
||||
WindowsColors::Color WindowsColors::get_accent_light_1_color()
|
||||
{
|
||||
winrt::Windows::UI::ViewManagement::UISettings uiSettings;
|
||||
return uiSettings.GetColorValue(winrt::Windows::UI::ViewManagement::UIColorType::AccentLight1);
|
||||
}
|
||||
WindowsColors::Color WindowsColors::get_accent_light_2_color()
|
||||
{
|
||||
winrt::Windows::UI::ViewManagement::UISettings uiSettings;
|
||||
return uiSettings.GetColorValue(winrt::Windows::UI::ViewManagement::UIColorType::AccentLight2);
|
||||
}
|
||||
WindowsColors::Color WindowsColors::get_accent_dark_1_color()
|
||||
{
|
||||
winrt::Windows::UI::ViewManagement::UISettings uiSettings;
|
||||
return uiSettings.GetColorValue(winrt::Windows::UI::ViewManagement::UIColorType::AccentDark1);
|
||||
}
|
||||
WindowsColors::Color WindowsColors::get_accent_color()
|
||||
{
|
||||
winrt::Windows::UI::ViewManagement::UISettings uiSettings;
|
||||
return uiSettings.GetColorValue(winrt::Windows::UI::ViewManagement::UIColorType::Accent);
|
||||
}
|
||||
WindowsColors::Color WindowsColors::get_background_color()
|
||||
{
|
||||
winrt::Windows::UI::ViewManagement::UISettings uiSettings;
|
||||
return uiSettings.GetColorValue(winrt::Windows::UI::ViewManagement::UIColorType::Background);
|
||||
}
|
||||
|
||||
bool WindowsColors::is_dark_mode()
|
||||
{
|
||||
return rgb_color(get_background_color()) == 0;
|
||||
}
|
||||
|
||||
bool WindowsColors::update()
|
||||
{
|
||||
auto new_accent_color_menu = rgb_color(get_accent_color());
|
||||
auto new_start_color_menu = new_accent_color_menu;
|
||||
auto new_desktop_fill_color = rgb_color(GetSysColor(COLOR_DESKTOP));
|
||||
auto new_light_mode = rgb_color(get_background_color()) != 0; //Dark mode will have black as the background color.
|
||||
|
||||
bool changed = new_accent_color_menu != accent_color_menu ||
|
||||
new_start_color_menu != start_color_menu ||
|
||||
new_light_mode != light_mode ||
|
||||
new_desktop_fill_color != desktop_fill_color;
|
||||
accent_color_menu = new_accent_color_menu;
|
||||
start_color_menu = new_start_color_menu;
|
||||
light_mode = new_light_mode;
|
||||
desktop_fill_color = new_desktop_fill_color;
|
||||
|
||||
return changed;
|
||||
}
|
||||
30
src/common/Themes/windows_colors.h
Normal file
30
src/common/Themes/windows_colors.h
Normal file
@@ -0,0 +1,30 @@
|
||||
#pragma once
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <Windows.h>
|
||||
#include <winrt/Windows.UI.ViewManagement.h>
|
||||
|
||||
struct WindowsColors
|
||||
{
|
||||
using Color = winrt::Windows::UI::Color;
|
||||
|
||||
static DWORD rgb_color(DWORD abgr_color);
|
||||
static DWORD rgb_color(Color color);
|
||||
static Color get_button_face_color();
|
||||
static Color get_button_text_color();
|
||||
static Color get_highlight_color();
|
||||
static Color get_hotlight_color();
|
||||
static Color get_highlight_text_color();
|
||||
static Color get_accent_light_1_color();
|
||||
static Color get_accent_light_2_color();
|
||||
static Color get_accent_dark_1_color();
|
||||
static Color get_accent_color();
|
||||
static Color get_background_color();
|
||||
static bool is_dark_mode();
|
||||
// Update colors - returns true if the values where changed
|
||||
bool update();
|
||||
|
||||
DWORD accent_color_menu = 0,
|
||||
start_color_menu = 0,
|
||||
desktop_fill_color = 0;
|
||||
bool light_mode = true;
|
||||
};
|
||||
Reference in New Issue
Block a user