mirror of
https://github.com/chibicitiberiu/rainmeter-studio.git
synced 2024-02-24 04:33:31 +00:00
1) Added MattKing's code for supporting the middle mouse button in [Rainmeter] and [MeasureName].
MiddleMouseUpAction | MiddleMouseDownAction 2) Updated the manual entries for the middle mouse functionality 3) Added spx268's code to fix a problem with BUTTON and dynamic variables addressed in: http://code.google.com/p/rainmeter/issues/detail?id=108
This commit is contained in:
parent
11528ab3cc
commit
48bee2c6fe
@ -264,8 +264,10 @@ void CMeter::ReadConfig(const WCHAR* section)
|
||||
|
||||
m_RightMouseDownAction = parser.ReadString(section, L"RightMouseDownAction", L"");
|
||||
m_LeftMouseDownAction = parser.ReadString(section, L"LeftMouseDownAction", L"");
|
||||
m_MiddleMouseDownAction = parser.ReadString(section, L"MiddleMouseDownAction", L"");
|
||||
m_RightMouseUpAction = parser.ReadString(section, L"RightMouseUpAction", L"");
|
||||
m_LeftMouseUpAction = parser.ReadString(section, L"LeftMouseUpAction", L"");
|
||||
m_MiddleMouseUpAction = parser.ReadString(section, L"MiddleMouseUpAction", L"");
|
||||
m_MouseOverAction = parser.ReadString(section, L"MouseOverAction", L"");
|
||||
m_MouseLeaveAction = parser.ReadString(section, L"MouseLeaveAction", L"");
|
||||
|
||||
|
@ -54,6 +54,8 @@ public:
|
||||
std::wstring& GetRightMouseUpAction() { return m_RightMouseUpAction; };
|
||||
std::wstring& GetLeftMouseDownAction() { return m_LeftMouseDownAction; };
|
||||
std::wstring& GetLeftMouseUpAction() { return m_LeftMouseUpAction; };
|
||||
std::wstring& GetMiddleMouseDownAction() { return m_MiddleMouseDownAction; };
|
||||
std::wstring& GetMiddleMouseUpAction() { return m_MiddleMouseUpAction; };
|
||||
std::wstring& GetMouseOverAction() { return m_MouseOverAction; };
|
||||
std::wstring& GetMouseLeaveAction() { return m_MouseLeaveAction; };
|
||||
|
||||
@ -111,6 +113,8 @@ protected:
|
||||
std::wstring m_RightMouseUpAction;
|
||||
std::wstring m_LeftMouseDownAction;
|
||||
std::wstring m_LeftMouseUpAction;
|
||||
std::wstring m_MiddleMouseDownAction;
|
||||
std::wstring m_MiddleMouseUpAction;
|
||||
std::wstring m_MouseOverAction;
|
||||
std::wstring m_MouseLeaveAction;
|
||||
|
||||
|
@ -37,6 +37,7 @@ using namespace Gdiplus;
|
||||
CMeterImage::CMeterImage(CMeterWindow* meterWindow) : CMeter(meterWindow)
|
||||
{
|
||||
m_Bitmap = NULL;
|
||||
m_NeedsUpdate = false;
|
||||
m_WidthDefined = false;
|
||||
m_HeightDefined = false;
|
||||
m_PreserveAspectRatio = false;
|
||||
@ -71,7 +72,7 @@ void CMeterImage::Initialize()
|
||||
{
|
||||
CMeter::Initialize();
|
||||
|
||||
LoadImage(true);
|
||||
if (!m_DynamicVariables) LoadImage(true);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -197,8 +198,6 @@ void CMeterImage::ReadConfig(const WCHAR* section)
|
||||
|
||||
CConfigParser& parser = m_MeterWindow->GetParser();
|
||||
|
||||
m_ImageName = parser.ReadString(section, L"ImageName", L"");
|
||||
|
||||
m_Path = parser.ReadString(section, L"Path", L"");
|
||||
if (!m_Path.empty())
|
||||
{
|
||||
@ -207,8 +206,20 @@ void CMeterImage::ReadConfig(const WCHAR* section)
|
||||
m_Path += L"\\";
|
||||
}
|
||||
}
|
||||
|
||||
if (!m_Measure)
|
||||
{
|
||||
std::wstring oldImageName = m_ImageName;
|
||||
|
||||
m_ImageName = parser.ReadString(section, L"ImageName", L"");
|
||||
m_ImageName = m_MeterWindow->MakePathAbsolute(m_Path + m_ImageName);
|
||||
|
||||
if (m_DynamicVariables)
|
||||
{
|
||||
m_NeedsUpdate = (oldImageName != m_ImageName);
|
||||
}
|
||||
}
|
||||
|
||||
m_PreserveAspectRatio = 0!=parser.ReadInt(section, L"PreserveAspectRatio", 0);
|
||||
|
||||
if (-1 != parser.ReadInt(section, L"W", -1))
|
||||
@ -229,12 +240,13 @@ void CMeterImage::ReadConfig(const WCHAR* section)
|
||||
*/
|
||||
bool CMeterImage::Update()
|
||||
{
|
||||
if (CMeter::Update() && m_Measure)
|
||||
if (CMeter::Update())
|
||||
{
|
||||
if (m_Measure) //read from the measure
|
||||
{
|
||||
std::wstring val = m_Measure->GetStringValue(false, 1, 0, false);
|
||||
if (!val.empty())
|
||||
{
|
||||
// Load the new image
|
||||
val = m_MeterWindow->MakePathAbsolute(m_Path + val);
|
||||
if (val != m_ImageName)
|
||||
{
|
||||
@ -248,6 +260,12 @@ bool CMeterImage::Update()
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else if (m_DynamicVariables) //read from the skin
|
||||
{
|
||||
LoadImage(m_NeedsUpdate);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -45,6 +45,7 @@ private:
|
||||
Gdiplus::Bitmap* m_Bitmap; // The bitmap
|
||||
std::wstring m_ImageName; // Name of the image
|
||||
std::wstring m_Path;
|
||||
bool m_NeedsUpdate;
|
||||
bool m_WidthDefined;
|
||||
bool m_HeightDefined;
|
||||
bool m_PreserveAspectRatio; // If true, aspect ratio of the image is preserved when the image is scaled
|
||||
|
@ -1401,8 +1401,10 @@ void CMeterWindow::ReadSkin()
|
||||
|
||||
m_RightMouseDownAction = m_Parser.ReadString(L"Rainmeter", L"RightMouseDownAction", L"");
|
||||
m_LeftMouseDownAction = m_Parser.ReadString(L"Rainmeter", L"LeftMouseDownAction", L"");
|
||||
m_MiddleMouseDownAction = m_Parser.ReadString(L"Rainmeter", L"MiddleMouseDownAction", L"");
|
||||
m_RightMouseUpAction = m_Parser.ReadString(L"Rainmeter", L"RightMouseUpAction", L"");
|
||||
m_LeftMouseUpAction = m_Parser.ReadString(L"Rainmeter", L"LeftMouseUpAction", L"");
|
||||
m_MiddleMouseUpAction = m_Parser.ReadString(L"Rainmeter", L"MiddleMouseUpAction", L"");
|
||||
m_MouseOverAction = m_Parser.ReadString(L"Rainmeter", L"MouseOverAction", L"");
|
||||
m_MouseLeaveAction = m_Parser.ReadString(L"Rainmeter", L"MouseLeaveAction", L"");
|
||||
m_OnRefreshAction = m_Parser.ReadString(L"Rainmeter", L"OnRefreshAction", L"");
|
||||
@ -2931,6 +2933,56 @@ LRESULT CMeterWindow::OnRightButtonUp(WPARAM wParam, LPARAM lParam)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
** OnMiddleButtonDown
|
||||
**
|
||||
** Runs the action when middle mouse button is down
|
||||
**
|
||||
*/
|
||||
LRESULT CMeterWindow::OnMiddleButtonDown(WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
POINT pos;
|
||||
pos.x = (SHORT)LOWORD(lParam);
|
||||
pos.y = (SHORT)HIWORD(lParam);
|
||||
if (m_Message == WM_NCMBUTTONDOWN)
|
||||
{
|
||||
// Transform the point to client rect
|
||||
RECT rect;
|
||||
GetWindowRect(m_Window, &rect);
|
||||
pos.x = pos.x - rect.left;
|
||||
pos.y = pos.y - rect.top;
|
||||
}
|
||||
|
||||
DoAction(pos.x, pos.y, MOUSE_MMB_DOWN, false);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
** OnMiddleButtonUp
|
||||
**
|
||||
** Runs the action when middle mouse button is up
|
||||
**
|
||||
*/
|
||||
LRESULT CMeterWindow::OnMiddleButtonUp(WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
POINT pos;
|
||||
pos.x = (SHORT)LOWORD(lParam);
|
||||
pos.y = (SHORT)HIWORD(lParam);
|
||||
if (m_Message == WM_NCMBUTTONUP)
|
||||
{
|
||||
// Transform the point to client rect
|
||||
RECT rect;
|
||||
GetWindowRect(m_Window, &rect);
|
||||
pos.x = pos.x - rect.left;
|
||||
pos.y = pos.y - rect.top;
|
||||
}
|
||||
|
||||
DoAction(pos.x, pos.y, MOUSE_MMB_UP, false);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
** OnContextMenu
|
||||
**
|
||||
@ -3016,6 +3068,24 @@ bool CMeterWindow::DoAction(int x, int y, MOUSE mouse, bool test)
|
||||
}
|
||||
break;
|
||||
|
||||
case MOUSE_MMB_DOWN:
|
||||
|
||||
if (!((*j)->GetMiddleMouseDownAction().empty()))
|
||||
{
|
||||
if (!test) m_Rainmeter->ExecuteCommand((*j)->GetMiddleMouseDownAction().c_str(), this);
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
|
||||
case MOUSE_MMB_UP:
|
||||
|
||||
if (!((*j)->GetMiddleMouseUpAction().empty()))
|
||||
{
|
||||
if (!test) m_Rainmeter->ExecuteCommand((*j)->GetMiddleMouseUpAction().c_str(), this);
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
|
||||
case MOUSE_OVER:
|
||||
if (!(*j)->IsMouseOver())
|
||||
{
|
||||
@ -3220,6 +3290,10 @@ LRESULT CALLBACK CMeterWindow::WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPAR
|
||||
MESSAGE(OnLeftButtonDown, WM_LBUTTONDOWN)
|
||||
MESSAGE(OnLeftButtonUp, WM_LBUTTONUP)
|
||||
MESSAGE(OnLeftButtonUp, WM_NCLBUTTONUP)
|
||||
MESSAGE(OnMiddleButtonDown, WM_NCMBUTTONDOWN)
|
||||
MESSAGE(OnMiddleButtonDown, WM_MBUTTONDOWN)
|
||||
MESSAGE(OnMiddleButtonUp, WM_MBUTTONUP)
|
||||
MESSAGE(OnMiddleButtonUp, WM_NCMBUTTONUP)
|
||||
MESSAGE(OnWindowPosChanging, WM_WINDOWPOSCHANGING)
|
||||
MESSAGE(OnCopyData, WM_COPYDATA)
|
||||
MESSAGE(OnDelayedExecute, WM_DELAYED_EXECUTE)
|
||||
|
@ -44,6 +44,8 @@ enum MOUSE
|
||||
MOUSE_LMB_UP,
|
||||
MOUSE_RMB_DOWN,
|
||||
MOUSE_RMB_UP,
|
||||
MOUSE_MMB_DOWN,
|
||||
MOUSE_MMB_UP,
|
||||
MOUSE_OVER,
|
||||
MOUSE_LEAVE
|
||||
};
|
||||
@ -193,8 +195,10 @@ protected:
|
||||
LRESULT OnContextMenu(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnLeftButtonDown(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnRightButtonDown(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnMiddleButtonDown(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnLeftButtonUp(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnRightButtonUp(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnMiddleButtonUp(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnDelayedExecute(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnDelayedRefresh(WPARAM wParam, LPARAM lParam);
|
||||
LRESULT OnDelayedQuit(WPARAM wParam, LPARAM lParam);
|
||||
@ -232,8 +236,10 @@ private:
|
||||
|
||||
std::wstring m_RightMouseDownAction; // Action to run when right mouse is pressed
|
||||
std::wstring m_LeftMouseDownAction; // Action to run when left mouse is pressed
|
||||
std::wstring m_MiddleMouseDownAction; // Action to run when middle mouse is pressed
|
||||
std::wstring m_RightMouseUpAction; // Action to run when right mouse is released
|
||||
std::wstring m_LeftMouseUpAction; // Action to run when left mouse is released
|
||||
std::wstring m_MiddleMouseUpAction; // Action to run when middle mouse is released
|
||||
std::wstring m_MouseOverAction; // Action to run when mouse goes over the window
|
||||
std::wstring m_MouseLeaveAction; // Action to run when mouse leaves the window
|
||||
std::wstring m_OnRefreshAction; // Action to run when window is initialized
|
||||
|
Loading…
Reference in New Issue
Block a user