71 lines
2.4 KiB
C++
71 lines
2.4 KiB
C++
///////////////////////////////////////////////////////////////////////////////
|
|
// Name: wx/msw/private/darkmode.h
|
|
// Purpose: Dark mode support in wxMSW
|
|
// Author: Vadim Zeitlin
|
|
// Created: 2022-06-25
|
|
// Copyright: (c) 2022 Vadim Zeitlin <vadim@wxwidgets.org>
|
|
// Licence: wxWindows licence
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef _WX_MSW_PRIVATE_DARKMODE_H_
|
|
#define _WX_MSW_PRIVATE_DARKMODE_H_
|
|
|
|
#include "wx/settings.h"
|
|
|
|
namespace wxMSWDarkMode
|
|
{
|
|
|
|
// Return true if the application is using dark mode: note that this will only
|
|
// be the case if wxApp::MSWEnableDarkMode() was called.
|
|
WXDLLIMPEXP_CORE
|
|
bool IsActive();
|
|
|
|
// Enable dark mode for the given TLW if appropriate.
|
|
void EnableForTLW(HWND hwnd);
|
|
|
|
// Set dark theme for the given (child) window if appropriate.
|
|
//
|
|
// Optional theme name and ID can be specified if something other than the
|
|
// default "Explorer" should be used. If both theme name and theme ID are null,
|
|
// no theme is set.
|
|
void AllowForWindow(HWND hwnd,
|
|
const wchar_t* themeName = L"Explorer",
|
|
const wchar_t* themeId = nullptr);
|
|
|
|
// Return the colour value appropriate for dark mode if it's used or an invalid
|
|
// colour if it isn't.
|
|
wxColour GetColour(wxSystemColour index);
|
|
|
|
// Get the pen to use for drawing the border, see wxDarkModeSettings.
|
|
wxPen GetBorderPen();
|
|
|
|
// Return the background brush to be used by default in dark mode.
|
|
HBRUSH GetBackgroundBrush();
|
|
|
|
// Invert the colours of the given bitmap trying to keep it readable.
|
|
wxBitmap InvertBitmap(const wxBitmap& bmp);
|
|
|
|
// If dark mode is active, paint the given window using inverted colours by
|
|
// drawing it normally and then applying InvertBitmap() to it.
|
|
//
|
|
// Otherwise just return false without doing anything.
|
|
//
|
|
// This can only be called from WM_PAINT handler for a native control and
|
|
// assumes that this control handles WPARAM argument of WM_PAINT as HDC to
|
|
// paint on.
|
|
bool PaintIfNecessary(HWND hwnd, WXWNDPROC defWndProc);
|
|
|
|
// If dark mode is active and if the message is one of those used for menu
|
|
// drawing, process it and return true, otherwise just return false without
|
|
// doing anything.
|
|
bool
|
|
HandleMenuMessage(WXLRESULT* result,
|
|
wxWindow* w,
|
|
WXUINT nMsg,
|
|
WXWPARAM wParam,
|
|
WXLPARAM lParam);
|
|
|
|
} // namespace wxMSWDarkMode
|
|
|
|
#endif // _WX_MSW_PRIVATE_DARKMODE_H_
|