mirror of
https://github.com/chibicitiberiu/rainmeter-studio.git
synced 2024-02-24 04:33:31 +00:00
Added MattKing's code to enable the standard "hand pointer" mouse cursor when you hover over a meter with any "MouseAction" on it or a button.
This behavior is ON by default. If you do not want the cursor change on a meter or button, set MouseActionCursor=0 on the Meter or button. Example of disabling mouse cursor change: [Meter] Meter=Image W=100 H=100 SolidColor=0,0,0,255 LeftMouseUpAction=!Execute ["http://rainmeter.net"] MouseActionCursor=0 Note: If you have a button with a meter (either image or text) on TOP of it, you will need to set MouseActionCursor=0 on the image/text meter even if it doesn't have a mouse action, or the button will not change cursors.
This commit is contained in:
parent
4771fafe87
commit
5560d6e72a
@ -64,6 +64,8 @@ CMeter::CMeter(CMeterWindow* meterWindow)
|
||||
m_AntiAlias = false;
|
||||
m_DynamicVariables = false;
|
||||
m_Initialized = false;
|
||||
m_HasMouseAction = false;
|
||||
m_MouseActionCursor = true;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -271,6 +273,15 @@ void CMeter::ReadConfig(const WCHAR* section)
|
||||
m_MouseOverAction = parser.ReadString(section, L"MouseOverAction", L"");
|
||||
m_MouseLeaveAction = parser.ReadString(section, L"MouseLeaveAction", L"");
|
||||
|
||||
m_MouseActionCursor = 0!= parser.ReadInt(section, L"MouseActionCursor", 1);
|
||||
|
||||
if(!m_MiddleMouseUpAction.empty() || !m_MiddleMouseDownAction.empty()
|
||||
|| !m_LeftMouseUpAction.empty() || !m_LeftMouseDownAction.empty()
|
||||
|| !m_RightMouseUpAction.empty() || !m_RightMouseDownAction.empty() )
|
||||
{
|
||||
m_HasMouseAction = true;
|
||||
}
|
||||
|
||||
m_MeasureName = parser.ReadString(section, L"MeasureName", L"");
|
||||
|
||||
m_UpdateDivider = parser.ReadInt(section, L"UpdateDivider", 1);
|
||||
|
@ -59,6 +59,9 @@ public:
|
||||
std::wstring& GetMouseOverAction() { return m_MouseOverAction; };
|
||||
std::wstring& GetMouseLeaveAction() { return m_MouseLeaveAction; };
|
||||
|
||||
bool HasMouseAction() { return m_HasMouseAction; };
|
||||
bool HasMouseActionCursor() { return m_MouseActionCursor; };
|
||||
|
||||
void Hide() { m_Hidden = true; };
|
||||
void Show() { m_Hidden = false; };
|
||||
bool IsHidden() { return m_Hidden; };
|
||||
@ -74,7 +77,7 @@ public:
|
||||
const WCHAR* GetName() { return m_Name.c_str(); };
|
||||
|
||||
static CMeter* Create(const WCHAR* meter, CMeterWindow* meterWindow);
|
||||
|
||||
|
||||
static void DrawBevel(Gdiplus::Graphics& graphics, Gdiplus::Rect& rect, Gdiplus::Pen& light, Gdiplus::Pen& dark);
|
||||
|
||||
protected:
|
||||
@ -116,6 +119,9 @@ protected:
|
||||
std::wstring m_MiddleMouseUpAction;
|
||||
std::wstring m_MouseOverAction;
|
||||
std::wstring m_MouseLeaveAction;
|
||||
|
||||
bool m_HasMouseAction;
|
||||
bool m_MouseActionCursor;
|
||||
|
||||
bool m_MouseOver;
|
||||
METER_POSITION m_RelativeX;
|
||||
|
@ -2430,6 +2430,7 @@ LRESULT CMeterWindow::OnMouseMove(WPARAM wParam, LPARAM lParam)
|
||||
|
||||
// Handle buttons
|
||||
bool redraw = false;
|
||||
bool drawCursor = false;
|
||||
std::list<CMeter*>::iterator j = m_Meters.begin();
|
||||
for( ; j != m_Meters.end(); j++)
|
||||
{
|
||||
@ -2441,7 +2442,18 @@ LRESULT CMeterWindow::OnMouseMove(WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
redraw |= button->MouseMove(pos);
|
||||
}
|
||||
|
||||
if((*j)->HitTest(pos.x, pos.y) && (*j)->HasMouseActionCursor())
|
||||
{
|
||||
drawCursor = ((*j)->HasMouseAction() || button);
|
||||
}
|
||||
}
|
||||
|
||||
if(drawCursor)
|
||||
SetCursor(LoadCursor(NULL, IDC_HAND));
|
||||
else
|
||||
SetCursor(LoadCursor(NULL, IDC_ARROW));
|
||||
|
||||
if (redraw)
|
||||
{
|
||||
Redraw();
|
||||
@ -2856,6 +2868,7 @@ LRESULT CMeterWindow::OnLeftButtonDown(WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
redraw |= button->MouseDown(pos);
|
||||
}
|
||||
|
||||
}
|
||||
if (redraw)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user