Add "Use D2D rendering" option to skin context menu

This commit is contained in:
Birunthan Mohanathas 2013-10-06 10:57:24 +03:00
parent 21d9c0698f
commit 6df7d5d509
5 changed files with 48 additions and 12 deletions

View File

@ -38,6 +38,9 @@ namespace Gfx {
class CanvasD2D : public Canvas
{
public:
static bool Initialize();
static void Finalize();
virtual void Resize(int w, int h);
virtual bool BeginDraw();
@ -81,9 +84,6 @@ private:
~CanvasD2D();
CanvasD2D(const CanvasD2D& other) {}
static bool Initialize();
static void Finalize();
bool BeginTargetDraw();
void EndTargetDraw();

View File

@ -18,6 +18,7 @@
#include "StdAfx.h"
#include "../Common/MenuTemplate.h"
#include "../Common/Gfx/CanvasD2D.h"
#include "ContextMenu.h"
#include "Rainmeter.h"
#include "Litestep.h"
@ -238,7 +239,8 @@ HMENU ContextMenu::CreateSkinMenu(MeterWindow* meterWindow, int index, HMENU men
MENU_ITEM(IDM_SKIN_REMEMBERPOSITION, ID_STR_SAVEPOSITION),
MENU_ITEM(IDM_SKIN_SNAPTOEDGES, ID_STR_SNAPTOEDGES),
MENU_ITEM(IDM_SKIN_CLICKTHROUGH, ID_STR_CLICKTHROUGH),
MENU_ITEM(IDM_SKIN_KEEPONSCREEN, ID_STR_KEEPONSCREEN)),
MENU_ITEM(IDM_SKIN_KEEPONSCREEN, ID_STR_KEEPONSCREEN),
MENU_ITEM(IDM_SKIN_USED2D, ID_STR_USED2D)),
MENU_SEPARATOR(),
MENU_ITEM(IDM_SKIN_MANAGESKIN, ID_STR_MANAGESKIN),
MENU_ITEM(IDM_SKIN_EDITSKIN, ID_STR_EDITSKIN),
@ -341,6 +343,19 @@ HMENU ContextMenu::CreateSkinMenu(MeterWindow* meterWindow, int index, HMENU men
{
CheckMenuItem(settingsMenu, IDM_SKIN_KEEPONSCREEN, MF_BYCOMMAND | MF_CHECKED);
}
if (Gfx::CanvasD2D::Initialize())
{
if (meterWindow->GetUseD2D())
{
CheckMenuItem(settingsMenu, IDM_SKIN_USED2D, MF_BYCOMMAND | MF_CHECKED);
}
}
else
{
DeleteMenu(settingsMenu, IDM_SKIN_USED2D, MF_BYCOMMAND);
}
Gfx::CanvasD2D::Finalize();
}
// Add the name of the Skin to the menu

View File

@ -121,6 +121,7 @@ MeterWindow::MeterWindow(const std::wstring& folderPath, const std::wstring& fil
m_ClickThrough(false),
m_KeepOnScreen(true),
m_AutoSelectScreen(false),
m_UseD2D(true),
m_Dragging(false),
m_Dragged(false),
m_BackgroundMode(BGMODE_IMAGE),
@ -1928,6 +1929,7 @@ void MeterWindow::ReadOptions()
m_KeepOnScreen = parser.ReadBool(section, L"KeepOnScreen", true);
addWriteFlag(OPTION_KEEPONSCREEN);
m_UseD2D = parser.ReadBool(section, L"UseD2D", true);
m_SavePosition = parser.ReadBool(section, L"SavePosition", true);
m_WindowStartHidden = parser.ReadBool(section, L"StartHidden", false);
m_AutoSelectScreen = parser.ReadBool(section, L"AutoSelectScreen", false);
@ -2041,6 +2043,11 @@ void MeterWindow::WriteOptions(INT setting)
_itow_s(m_WindowZPosition, buffer, 10);
WritePrivateProfileString(section, L"AlwaysOnTop", buffer, iniFile);
}
if (setting & OPTION_USED2D)
{
WritePrivateProfileString(section, L"UseD2D", m_UseD2D ? L"1" : L"0", iniFile);
}
}
}
@ -2070,14 +2077,8 @@ bool MeterWindow::ReadSkin()
// Read options from Rainmeter.ini.
ReadOptions();
// Temporarily read "__UseD2D" from skin for easy testing
bool useD2D = GetRainmeter().GetUseD2D();
if (revision_beta)
{
useD2D = m_Parser.ReadBool(L"Rainmeter", L"__UseD2D", useD2D);
}
m_Canvas = Gfx::Canvas::Create(useD2D ? Gfx::Renderer::PreferD2D : Gfx::Renderer::GDIP);
m_Canvas = Gfx::Canvas::Create(
m_UseD2D && GetRainmeter().GetUseD2D() ? Gfx::Renderer::PreferD2D : Gfx::Renderer::GDIP);
m_Canvas->SetAccurateText(m_Parser.ReadBool(L"Rainmeter", L"AccurateText", false));
const auto d2dParams = m_Parser.ReadFloats(L"Rainmeter", L"__D2DParams");
@ -3437,6 +3438,10 @@ LRESULT MeterWindow::OnCommand(UINT uMsg, WPARAM wParam, LPARAM lParam)
SetKeepOnScreen(!m_KeepOnScreen);
break;
case IDM_SKIN_USED2D:
SetUseD2D(!m_UseD2D);
break;
case IDM_SKIN_CLICKTHROUGH:
SetClickThrough(!m_ClickThrough);
break;
@ -3625,6 +3630,17 @@ void MeterWindow::SetKeepOnScreen(bool b)
}
}
/*
** Helper function for setting UseD2D
**
*/
void MeterWindow::SetUseD2D(bool b)
{
m_UseD2D = b;
WriteOptions(OPTION_USED2D);
Refresh(false);
}
/*
** Helper function for setting WindowDraggable
**

View File

@ -188,6 +188,7 @@ public:
bool GetClickThrough() { return m_ClickThrough; }
bool GetKeepOnScreen() { return m_KeepOnScreen; }
bool GetUseD2D() { return m_UseD2D; }
bool GetAutoSelectScreen() { return m_AutoSelectScreen; }
bool GetWindowDraggable() { return m_WindowDraggable; }
bool GetSavePosition() { return m_SavePosition; }
@ -276,6 +277,7 @@ private:
OPTION_KEEPONSCREEN = 0x00000100,
OPTION_AUTOSELECTSCREEN = 0x00000200,
OPTION_ALWAYSONTOP = 0x00000400,
OPTION_USED2D = 0x00000800,
OPTION_ALL = 0xFFFFFFFF
};
@ -300,6 +302,7 @@ private:
void HandleButtons(POINT pos, BUTTONPROC proc, bool execute = true);
void SetClickThrough(bool b);
void SetKeepOnScreen(bool b);
void SetUseD2D(bool b);
void SetWindowDraggable(bool b);
void SetSavePosition(bool b);
void SavePositionIfAppropriate();
@ -386,6 +389,7 @@ private:
bool m_DynamicWindowSize;
bool m_ClickThrough;
bool m_KeepOnScreen;
bool m_UseD2D;
bool m_AutoSelectScreen;
bool m_Dragging;
bool m_Dragged;

View File

@ -205,6 +205,7 @@
#define IDM_MANAGESKINSMENU_REFRESH 4057
#define IDM_MANAGESKINSMENU_EDIT 4058
#define IDM_COPY 4059
#define IDM_SKIN_USED2D 4060
#define IDM_SKIN_CUSTOMCONTEXTMENU_FIRST 9000
#define IDM_SKIN_CUSTOMCONTEXTMENU_LAST 9014