2009-02-10 18:37:48 +00:00
|
|
|
/*
|
|
|
|
Copyright (C) 2001 Kimmo Pekkola
|
|
|
|
|
|
|
|
This program is free software; you can redistribute it and/or
|
|
|
|
modify it under the terms of the GNU General Public License
|
|
|
|
as published by the Free Software Foundation; either version 2
|
|
|
|
of the License, or (at your option) any later version.
|
|
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
GNU General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
along with this program; if not, write to the Free Software
|
|
|
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef __METER_H__
|
|
|
|
#define __METER_H__
|
|
|
|
|
|
|
|
#include <windows.h>
|
|
|
|
#include <list>
|
|
|
|
#include <gdiplus.h>
|
|
|
|
#include "Litestep.h"
|
|
|
|
#include "MeterWindow.h"
|
2010-07-07 23:46:44 +00:00
|
|
|
#include "Group.h"
|
2009-02-10 18:37:48 +00:00
|
|
|
|
|
|
|
class CMeasure;
|
|
|
|
|
2010-07-07 23:46:44 +00:00
|
|
|
class CMeter : public CGroup
|
2009-02-10 18:37:48 +00:00
|
|
|
{
|
|
|
|
public:
|
|
|
|
CMeter(CMeterWindow* meterWindow);
|
|
|
|
virtual ~CMeter();
|
|
|
|
|
|
|
|
virtual void ReadConfig(const WCHAR* section);
|
|
|
|
virtual void Initialize();
|
|
|
|
virtual bool Update();
|
2009-07-27 11:48:57 +00:00
|
|
|
virtual bool Draw(Gdiplus::Graphics& graphics);
|
2009-02-10 18:37:48 +00:00
|
|
|
virtual void BindMeasure(std::list<CMeasure*>& measures);
|
2009-07-21 12:26:50 +00:00
|
|
|
virtual bool HasActiveTransition() { return false; }
|
2009-08-26 17:37:15 +00:00
|
|
|
|
|
|
|
bool HasDynamicVariables() { return m_DynamicVariables; }
|
2009-02-10 18:37:48 +00:00
|
|
|
|
2010-10-19 22:03:32 +00:00
|
|
|
virtual int GetH() { return m_Hidden ? 0 : m_H; }
|
|
|
|
virtual int GetW() { return m_Hidden ? 0 : m_W; }
|
2009-02-10 18:37:48 +00:00
|
|
|
virtual int GetX(bool abs = false);
|
|
|
|
virtual int GetY(bool abs = false);
|
2010-07-17 00:06:24 +00:00
|
|
|
RECT GetMeterRect();
|
2009-02-10 18:37:48 +00:00
|
|
|
|
2010-10-19 22:03:32 +00:00
|
|
|
void SetX(int x) { m_X = x; m_RelativeX = POSITION_ABSOLUTE; }
|
|
|
|
void SetY(int y) { m_Y = y; m_RelativeY = POSITION_ABSOLUTE; }
|
|
|
|
|
|
|
|
std::wstring& GetRightMouseDownAction() { return m_RightMouseDownAction; }
|
|
|
|
std::wstring& GetRightMouseUpAction() { return m_RightMouseUpAction; }
|
|
|
|
std::wstring& GetRightMouseDoubleClickAction() { return m_RightMouseDoubleClickAction; }
|
|
|
|
std::wstring& GetLeftMouseDownAction() { return m_LeftMouseDownAction; }
|
|
|
|
std::wstring& GetLeftMouseUpAction() { return m_LeftMouseUpAction; }
|
|
|
|
std::wstring& GetLeftMouseDoubleClickAction() { return m_LeftMouseDoubleClickAction; }
|
|
|
|
std::wstring& GetMiddleMouseDownAction() { return m_MiddleMouseDownAction; }
|
|
|
|
std::wstring& GetMiddleMouseUpAction() { return m_MiddleMouseUpAction; }
|
|
|
|
std::wstring& GetMiddleMouseDoubleClickAction() { return m_MiddleMouseDoubleClickAction; }
|
|
|
|
std::wstring& GetMouseOverAction() { return m_MouseOverAction; }
|
|
|
|
std::wstring& GetMouseLeaveAction() { return m_MouseLeaveAction; }
|
2009-02-10 18:37:48 +00:00
|
|
|
|
2010-09-10 17:29:30 +00:00
|
|
|
void SetAllMeasures(CMeasure* measure);
|
|
|
|
void SetAllMeasures(std::vector<CMeasure*> measures);
|
|
|
|
|
|
|
|
std::wstring CMeter::ReplaceMeasures(std::wstring source);
|
|
|
|
|
2010-10-19 22:03:32 +00:00
|
|
|
const std::wstring& GetToolTipText() { return m_ToolTipText; }
|
|
|
|
bool HasToolTip() { return m_ToolTipHandle != NULL; }
|
|
|
|
void SetToolTipHidden(bool b) { m_ToolTipHidden = b; }
|
2010-07-17 00:06:24 +00:00
|
|
|
|
|
|
|
void CreateToolTip(CMeterWindow* meterWindow);
|
|
|
|
void UpdateToolTip();
|
|
|
|
|
2010-10-19 22:03:32 +00:00
|
|
|
bool HasMouseAction() { return m_HasMouseAction; }
|
|
|
|
bool HasMouseActionCursor() { return m_MouseActionCursor; }
|
|
|
|
void SetMouseActionCursor(bool b) { m_MouseActionCursor = b; }
|
2009-09-25 22:20:07 +00:00
|
|
|
|
2010-10-19 22:03:32 +00:00
|
|
|
virtual void Hide();
|
|
|
|
virtual void Show();
|
|
|
|
bool IsHidden() { return m_Hidden; }
|
2009-02-10 18:37:48 +00:00
|
|
|
|
2009-07-27 11:48:57 +00:00
|
|
|
const Gdiplus::Matrix& GetTransformationMatrix() { return m_Transformation; }
|
|
|
|
|
2009-02-10 18:37:48 +00:00
|
|
|
virtual bool HitTest(int x, int y);
|
|
|
|
|
|
|
|
void SetMouseOver(bool over) { m_MouseOver = over; }
|
|
|
|
bool IsMouseOver() { return m_MouseOver; }
|
|
|
|
|
2010-10-19 22:03:32 +00:00
|
|
|
void SetName(const WCHAR* name) { m_Name = name; }
|
|
|
|
const WCHAR* GetName() { return m_Name.c_str(); }
|
2009-02-10 18:37:48 +00:00
|
|
|
|
|
|
|
static CMeter* Create(const WCHAR* meter, CMeterWindow* meterWindow);
|
2009-09-25 22:20:07 +00:00
|
|
|
|
2009-02-10 18:37:48 +00:00
|
|
|
static void DrawBevel(Gdiplus::Graphics& graphics, Gdiplus::Rect& rect, Gdiplus::Pen& light, Gdiplus::Pen& dark);
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
|
|
|
enum METER_ALIGNMENT
|
|
|
|
{
|
|
|
|
ALIGN_LEFT,
|
|
|
|
ALIGN_RIGHT,
|
|
|
|
ALIGN_CENTER
|
|
|
|
};
|
|
|
|
|
|
|
|
enum METER_POSITION
|
|
|
|
{
|
|
|
|
POSITION_ABSOLUTE,
|
|
|
|
POSITION_RELATIVE_TL,
|
|
|
|
POSITION_RELATIVE_BR
|
|
|
|
};
|
|
|
|
|
2009-07-27 11:48:57 +00:00
|
|
|
Gdiplus::Matrix m_Transformation; // The transformation matrix
|
2009-02-10 18:37:48 +00:00
|
|
|
std::wstring m_Name; // Name of the meter
|
|
|
|
std::wstring m_MeasureName; // Name of the measure this is bound to
|
|
|
|
CMeasure* m_Measure; // Pointer to the measure this meter is bound to
|
2010-09-10 17:29:30 +00:00
|
|
|
std::vector<CMeasure*> m_AllMeasures;
|
2009-02-10 18:37:48 +00:00
|
|
|
int m_X; // X-position of the meter
|
|
|
|
int m_Y; // Y-position of the meter
|
|
|
|
int m_W; // Width of the meter
|
|
|
|
int m_H; // Height of the meter
|
|
|
|
bool m_Hidden; // Status of the meter
|
|
|
|
CMeter* m_RelativeMeter;
|
2009-08-26 17:37:15 +00:00
|
|
|
bool m_DynamicVariables; // If true, the measure contains dynamic variables
|
2009-02-10 18:37:48 +00:00
|
|
|
|
2010-07-17 00:06:24 +00:00
|
|
|
std::wstring m_ToolTipText;
|
|
|
|
std::wstring m_ToolTipTitle;
|
|
|
|
std::wstring m_ToolTipIcon;
|
2010-07-20 21:20:14 +00:00
|
|
|
unsigned int m_ToolTipWidth;
|
2010-10-12 14:14:32 +00:00
|
|
|
unsigned int m_ToolTipDelay;
|
2010-07-17 00:06:24 +00:00
|
|
|
bool m_ToolTipType;
|
2010-10-10 16:58:55 +00:00
|
|
|
bool m_ToolTipHidden;
|
2010-07-17 00:06:24 +00:00
|
|
|
|
|
|
|
HWND m_ToolTipHandle;
|
|
|
|
|
* Changed the way to get the information of the multiple display monitors.
This change brings the order of monitors close to the order of "Display Properties" due to using EnumDisplayDevices and EnumDisplaySettings instead of EnumDisplayMonitors. (If EnumDisplayDevices failed, EnumDisplayMonitors is used as before.)
-----
* Added the "Display Monitor" submenu in [Skins Menu]-[Position].
These menus convert the present position to the relative position from the specified monitor.
(But the meter window doesn't move to the specified monitor area immediately. Only converts.)
- "Use default: Primary monitor" removes the @-directive from WindowX/Y.
- @0(@1, @2, ...) adds the specified monitor number to WindowX/Y. @0 means "The Virtual Screen". (http://msdn.microsoft.com/en-us/library/dd145136%28VS.85%29.aspx)
- If "Auto-select based on window position" is checked, the WindowX and WindowY "@n" settings are made automatically based on the position of the meter's window. If a monitor is selected directly using "Display Monitor" in the Rainmeter / skin context menu, this menu is unchecked. This setting can be manually made in either the [Rainmeter] (all configs) or individual config sections of Rainmeter.ini.
AutoSelectScreen
If set to 1, the WindowX and WindowY "@n" settings are made automatically based on the position of the meter's window. If a monitor is selected directly using "Display Monitor" in the Rainmeter / skin context menu, this setting is reset to 0.
-----
* Added the variables for multiple display monitors and the virtual screen.
All X/Y positions are represented in the virtual screen coordinates.
The following variables are for the virtual screen.
#VSCREENAREAX# is the X-position of the left-side of the virtual screen.
#VSCREENAREAY# is the Y-position of the top-side of the virtual screen.
#VSCREENAREAWIDTH# is the width of the virtual screen.
#VSCREENAREAHEIGHT# is the height of the virtual screen.
The following variables are for the PRESENT monitor.
Note that these variables automatically change by the WindowX and WindowY "@n" settings. If "@n" is not set, these variables return the value of the primary monitor.
#WORKAREAX# is the X-position of the left-side of the work area.
#WORKAREAY# is the Y-position of the top-side of the work area.
#WORKAREAWIDTH# is the width of the work area.
#WORKAREAHEIGHT# is the height of the work area.
#SCREENAREAX# is the X-position of the left-side of the monitor screen.
#SCREENAREAY# is the Y-position of the top-side of the monitor screen.
#SCREENAREAWIDTH# is the width of the display resolution.
#SCREENAREAHEIGHT# is the height of the display resolution.
The following variables are for the PRIMARY monitor.
#PWORKAREAX# is the X-position of the left-side of the work area.
#PWORKAREAY# is the Y-position of the top-side of the work area.
#PWORKAREAWIDTH# is the width of the work area.
#PWORKAREAHEIGHT# is the height of the work area.
#PSCREENAREAX# is the X-position of the left-side of the monitor screen. (maybe, always 0)
#PSCREENAREAY# is the Y-position of the top-side of the monitor screen. (maybe, always 0)
#PSCREENAREAWIDTH# is the width of the display resolution.
#PSCREENAREAHEIGHT# is the height of the display resolution.
The following variables are for the SPECIFIED monitor. (@n = @1, @2, ...)
#WORKAREAX@n# is the X-position of the left-side of the work area.
#WORKAREAY@n# is the Y-position of the top-side of the work area.
#WORKAREAWIDTH@n# is the width of the work area.
#WORKAREAHEIGHT@n# is the height of the work area.
#SCREENAREAX@n# is the X-position of the left-side of the monitor screen.
#SCREENAREAY@n# is the Y-position of the top-side of the monitor screen.
#SCREENAREAWIDTH@n# is the width of the display resolution.
#SCREENAREAHEIGHT@n# is the height of the display resolution.
-----
* Other related changes:
- Fixed the problem that the primary monitor isn't recognized correctly.
- Fixed the problem that the information of the multiple display monitors is refreshed excessively.
- For DynamicVariables, when display setting or workarea size has been changed, all variables are now updated to apply changed WORKAREA/SCREENAREA variables.
- Fixed the problem that the "On Desktop" window isn't dragged correctly when the top-left corner of the virtual screen has negative coordinates.
- Changed the way to stick the "On Desktop" window. ("SysListView32/FolderView" is used instead of "Progman/Program Manager".)
-----
* Other changes:
- When the meter window is draggable and isn't dragged, LeftMouseUpAction is now executed.
- Added MouseDoubleClickAction (LeftMouseDoubleClickAction, RightMouseDoubleClickAction, MiddleMouseDoubleClickAction). If MouseDoubleClickAction is empty when mouse button is double-clicked, MouseDownAction is executed instead.
- Fixed the problem that the Meter's hit-test code checks outside the area.
- Changed the way to set the #CURRENTCONFIG#. (CMeterWindow::GetSkinName() is now used instead of parsing the path.)
2009-12-18 05:58:37 +00:00
|
|
|
std::wstring m_RightMouseDownAction; // Actions for left and right and middle mouse buttons
|
2009-02-10 18:37:48 +00:00
|
|
|
std::wstring m_RightMouseUpAction;
|
* Changed the way to get the information of the multiple display monitors.
This change brings the order of monitors close to the order of "Display Properties" due to using EnumDisplayDevices and EnumDisplaySettings instead of EnumDisplayMonitors. (If EnumDisplayDevices failed, EnumDisplayMonitors is used as before.)
-----
* Added the "Display Monitor" submenu in [Skins Menu]-[Position].
These menus convert the present position to the relative position from the specified monitor.
(But the meter window doesn't move to the specified monitor area immediately. Only converts.)
- "Use default: Primary monitor" removes the @-directive from WindowX/Y.
- @0(@1, @2, ...) adds the specified monitor number to WindowX/Y. @0 means "The Virtual Screen". (http://msdn.microsoft.com/en-us/library/dd145136%28VS.85%29.aspx)
- If "Auto-select based on window position" is checked, the WindowX and WindowY "@n" settings are made automatically based on the position of the meter's window. If a monitor is selected directly using "Display Monitor" in the Rainmeter / skin context menu, this menu is unchecked. This setting can be manually made in either the [Rainmeter] (all configs) or individual config sections of Rainmeter.ini.
AutoSelectScreen
If set to 1, the WindowX and WindowY "@n" settings are made automatically based on the position of the meter's window. If a monitor is selected directly using "Display Monitor" in the Rainmeter / skin context menu, this setting is reset to 0.
-----
* Added the variables for multiple display monitors and the virtual screen.
All X/Y positions are represented in the virtual screen coordinates.
The following variables are for the virtual screen.
#VSCREENAREAX# is the X-position of the left-side of the virtual screen.
#VSCREENAREAY# is the Y-position of the top-side of the virtual screen.
#VSCREENAREAWIDTH# is the width of the virtual screen.
#VSCREENAREAHEIGHT# is the height of the virtual screen.
The following variables are for the PRESENT monitor.
Note that these variables automatically change by the WindowX and WindowY "@n" settings. If "@n" is not set, these variables return the value of the primary monitor.
#WORKAREAX# is the X-position of the left-side of the work area.
#WORKAREAY# is the Y-position of the top-side of the work area.
#WORKAREAWIDTH# is the width of the work area.
#WORKAREAHEIGHT# is the height of the work area.
#SCREENAREAX# is the X-position of the left-side of the monitor screen.
#SCREENAREAY# is the Y-position of the top-side of the monitor screen.
#SCREENAREAWIDTH# is the width of the display resolution.
#SCREENAREAHEIGHT# is the height of the display resolution.
The following variables are for the PRIMARY monitor.
#PWORKAREAX# is the X-position of the left-side of the work area.
#PWORKAREAY# is the Y-position of the top-side of the work area.
#PWORKAREAWIDTH# is the width of the work area.
#PWORKAREAHEIGHT# is the height of the work area.
#PSCREENAREAX# is the X-position of the left-side of the monitor screen. (maybe, always 0)
#PSCREENAREAY# is the Y-position of the top-side of the monitor screen. (maybe, always 0)
#PSCREENAREAWIDTH# is the width of the display resolution.
#PSCREENAREAHEIGHT# is the height of the display resolution.
The following variables are for the SPECIFIED monitor. (@n = @1, @2, ...)
#WORKAREAX@n# is the X-position of the left-side of the work area.
#WORKAREAY@n# is the Y-position of the top-side of the work area.
#WORKAREAWIDTH@n# is the width of the work area.
#WORKAREAHEIGHT@n# is the height of the work area.
#SCREENAREAX@n# is the X-position of the left-side of the monitor screen.
#SCREENAREAY@n# is the Y-position of the top-side of the monitor screen.
#SCREENAREAWIDTH@n# is the width of the display resolution.
#SCREENAREAHEIGHT@n# is the height of the display resolution.
-----
* Other related changes:
- Fixed the problem that the primary monitor isn't recognized correctly.
- Fixed the problem that the information of the multiple display monitors is refreshed excessively.
- For DynamicVariables, when display setting or workarea size has been changed, all variables are now updated to apply changed WORKAREA/SCREENAREA variables.
- Fixed the problem that the "On Desktop" window isn't dragged correctly when the top-left corner of the virtual screen has negative coordinates.
- Changed the way to stick the "On Desktop" window. ("SysListView32/FolderView" is used instead of "Progman/Program Manager".)
-----
* Other changes:
- When the meter window is draggable and isn't dragged, LeftMouseUpAction is now executed.
- Added MouseDoubleClickAction (LeftMouseDoubleClickAction, RightMouseDoubleClickAction, MiddleMouseDoubleClickAction). If MouseDoubleClickAction is empty when mouse button is double-clicked, MouseDownAction is executed instead.
- Fixed the problem that the Meter's hit-test code checks outside the area.
- Changed the way to set the #CURRENTCONFIG#. (CMeterWindow::GetSkinName() is now used instead of parsing the path.)
2009-12-18 05:58:37 +00:00
|
|
|
std::wstring m_RightMouseDoubleClickAction;
|
2009-02-10 18:37:48 +00:00
|
|
|
std::wstring m_LeftMouseDownAction;
|
|
|
|
std::wstring m_LeftMouseUpAction;
|
* Changed the way to get the information of the multiple display monitors.
This change brings the order of monitors close to the order of "Display Properties" due to using EnumDisplayDevices and EnumDisplaySettings instead of EnumDisplayMonitors. (If EnumDisplayDevices failed, EnumDisplayMonitors is used as before.)
-----
* Added the "Display Monitor" submenu in [Skins Menu]-[Position].
These menus convert the present position to the relative position from the specified monitor.
(But the meter window doesn't move to the specified monitor area immediately. Only converts.)
- "Use default: Primary monitor" removes the @-directive from WindowX/Y.
- @0(@1, @2, ...) adds the specified monitor number to WindowX/Y. @0 means "The Virtual Screen". (http://msdn.microsoft.com/en-us/library/dd145136%28VS.85%29.aspx)
- If "Auto-select based on window position" is checked, the WindowX and WindowY "@n" settings are made automatically based on the position of the meter's window. If a monitor is selected directly using "Display Monitor" in the Rainmeter / skin context menu, this menu is unchecked. This setting can be manually made in either the [Rainmeter] (all configs) or individual config sections of Rainmeter.ini.
AutoSelectScreen
If set to 1, the WindowX and WindowY "@n" settings are made automatically based on the position of the meter's window. If a monitor is selected directly using "Display Monitor" in the Rainmeter / skin context menu, this setting is reset to 0.
-----
* Added the variables for multiple display monitors and the virtual screen.
All X/Y positions are represented in the virtual screen coordinates.
The following variables are for the virtual screen.
#VSCREENAREAX# is the X-position of the left-side of the virtual screen.
#VSCREENAREAY# is the Y-position of the top-side of the virtual screen.
#VSCREENAREAWIDTH# is the width of the virtual screen.
#VSCREENAREAHEIGHT# is the height of the virtual screen.
The following variables are for the PRESENT monitor.
Note that these variables automatically change by the WindowX and WindowY "@n" settings. If "@n" is not set, these variables return the value of the primary monitor.
#WORKAREAX# is the X-position of the left-side of the work area.
#WORKAREAY# is the Y-position of the top-side of the work area.
#WORKAREAWIDTH# is the width of the work area.
#WORKAREAHEIGHT# is the height of the work area.
#SCREENAREAX# is the X-position of the left-side of the monitor screen.
#SCREENAREAY# is the Y-position of the top-side of the monitor screen.
#SCREENAREAWIDTH# is the width of the display resolution.
#SCREENAREAHEIGHT# is the height of the display resolution.
The following variables are for the PRIMARY monitor.
#PWORKAREAX# is the X-position of the left-side of the work area.
#PWORKAREAY# is the Y-position of the top-side of the work area.
#PWORKAREAWIDTH# is the width of the work area.
#PWORKAREAHEIGHT# is the height of the work area.
#PSCREENAREAX# is the X-position of the left-side of the monitor screen. (maybe, always 0)
#PSCREENAREAY# is the Y-position of the top-side of the monitor screen. (maybe, always 0)
#PSCREENAREAWIDTH# is the width of the display resolution.
#PSCREENAREAHEIGHT# is the height of the display resolution.
The following variables are for the SPECIFIED monitor. (@n = @1, @2, ...)
#WORKAREAX@n# is the X-position of the left-side of the work area.
#WORKAREAY@n# is the Y-position of the top-side of the work area.
#WORKAREAWIDTH@n# is the width of the work area.
#WORKAREAHEIGHT@n# is the height of the work area.
#SCREENAREAX@n# is the X-position of the left-side of the monitor screen.
#SCREENAREAY@n# is the Y-position of the top-side of the monitor screen.
#SCREENAREAWIDTH@n# is the width of the display resolution.
#SCREENAREAHEIGHT@n# is the height of the display resolution.
-----
* Other related changes:
- Fixed the problem that the primary monitor isn't recognized correctly.
- Fixed the problem that the information of the multiple display monitors is refreshed excessively.
- For DynamicVariables, when display setting or workarea size has been changed, all variables are now updated to apply changed WORKAREA/SCREENAREA variables.
- Fixed the problem that the "On Desktop" window isn't dragged correctly when the top-left corner of the virtual screen has negative coordinates.
- Changed the way to stick the "On Desktop" window. ("SysListView32/FolderView" is used instead of "Progman/Program Manager".)
-----
* Other changes:
- When the meter window is draggable and isn't dragged, LeftMouseUpAction is now executed.
- Added MouseDoubleClickAction (LeftMouseDoubleClickAction, RightMouseDoubleClickAction, MiddleMouseDoubleClickAction). If MouseDoubleClickAction is empty when mouse button is double-clicked, MouseDownAction is executed instead.
- Fixed the problem that the Meter's hit-test code checks outside the area.
- Changed the way to set the #CURRENTCONFIG#. (CMeterWindow::GetSkinName() is now used instead of parsing the path.)
2009-12-18 05:58:37 +00:00
|
|
|
std::wstring m_LeftMouseDoubleClickAction;
|
2009-09-07 16:37:58 +00:00
|
|
|
std::wstring m_MiddleMouseDownAction;
|
|
|
|
std::wstring m_MiddleMouseUpAction;
|
* Changed the way to get the information of the multiple display monitors.
This change brings the order of monitors close to the order of "Display Properties" due to using EnumDisplayDevices and EnumDisplaySettings instead of EnumDisplayMonitors. (If EnumDisplayDevices failed, EnumDisplayMonitors is used as before.)
-----
* Added the "Display Monitor" submenu in [Skins Menu]-[Position].
These menus convert the present position to the relative position from the specified monitor.
(But the meter window doesn't move to the specified monitor area immediately. Only converts.)
- "Use default: Primary monitor" removes the @-directive from WindowX/Y.
- @0(@1, @2, ...) adds the specified monitor number to WindowX/Y. @0 means "The Virtual Screen". (http://msdn.microsoft.com/en-us/library/dd145136%28VS.85%29.aspx)
- If "Auto-select based on window position" is checked, the WindowX and WindowY "@n" settings are made automatically based on the position of the meter's window. If a monitor is selected directly using "Display Monitor" in the Rainmeter / skin context menu, this menu is unchecked. This setting can be manually made in either the [Rainmeter] (all configs) or individual config sections of Rainmeter.ini.
AutoSelectScreen
If set to 1, the WindowX and WindowY "@n" settings are made automatically based on the position of the meter's window. If a monitor is selected directly using "Display Monitor" in the Rainmeter / skin context menu, this setting is reset to 0.
-----
* Added the variables for multiple display monitors and the virtual screen.
All X/Y positions are represented in the virtual screen coordinates.
The following variables are for the virtual screen.
#VSCREENAREAX# is the X-position of the left-side of the virtual screen.
#VSCREENAREAY# is the Y-position of the top-side of the virtual screen.
#VSCREENAREAWIDTH# is the width of the virtual screen.
#VSCREENAREAHEIGHT# is the height of the virtual screen.
The following variables are for the PRESENT monitor.
Note that these variables automatically change by the WindowX and WindowY "@n" settings. If "@n" is not set, these variables return the value of the primary monitor.
#WORKAREAX# is the X-position of the left-side of the work area.
#WORKAREAY# is the Y-position of the top-side of the work area.
#WORKAREAWIDTH# is the width of the work area.
#WORKAREAHEIGHT# is the height of the work area.
#SCREENAREAX# is the X-position of the left-side of the monitor screen.
#SCREENAREAY# is the Y-position of the top-side of the monitor screen.
#SCREENAREAWIDTH# is the width of the display resolution.
#SCREENAREAHEIGHT# is the height of the display resolution.
The following variables are for the PRIMARY monitor.
#PWORKAREAX# is the X-position of the left-side of the work area.
#PWORKAREAY# is the Y-position of the top-side of the work area.
#PWORKAREAWIDTH# is the width of the work area.
#PWORKAREAHEIGHT# is the height of the work area.
#PSCREENAREAX# is the X-position of the left-side of the monitor screen. (maybe, always 0)
#PSCREENAREAY# is the Y-position of the top-side of the monitor screen. (maybe, always 0)
#PSCREENAREAWIDTH# is the width of the display resolution.
#PSCREENAREAHEIGHT# is the height of the display resolution.
The following variables are for the SPECIFIED monitor. (@n = @1, @2, ...)
#WORKAREAX@n# is the X-position of the left-side of the work area.
#WORKAREAY@n# is the Y-position of the top-side of the work area.
#WORKAREAWIDTH@n# is the width of the work area.
#WORKAREAHEIGHT@n# is the height of the work area.
#SCREENAREAX@n# is the X-position of the left-side of the monitor screen.
#SCREENAREAY@n# is the Y-position of the top-side of the monitor screen.
#SCREENAREAWIDTH@n# is the width of the display resolution.
#SCREENAREAHEIGHT@n# is the height of the display resolution.
-----
* Other related changes:
- Fixed the problem that the primary monitor isn't recognized correctly.
- Fixed the problem that the information of the multiple display monitors is refreshed excessively.
- For DynamicVariables, when display setting or workarea size has been changed, all variables are now updated to apply changed WORKAREA/SCREENAREA variables.
- Fixed the problem that the "On Desktop" window isn't dragged correctly when the top-left corner of the virtual screen has negative coordinates.
- Changed the way to stick the "On Desktop" window. ("SysListView32/FolderView" is used instead of "Progman/Program Manager".)
-----
* Other changes:
- When the meter window is draggable and isn't dragged, LeftMouseUpAction is now executed.
- Added MouseDoubleClickAction (LeftMouseDoubleClickAction, RightMouseDoubleClickAction, MiddleMouseDoubleClickAction). If MouseDoubleClickAction is empty when mouse button is double-clicked, MouseDownAction is executed instead.
- Fixed the problem that the Meter's hit-test code checks outside the area.
- Changed the way to set the #CURRENTCONFIG#. (CMeterWindow::GetSkinName() is now used instead of parsing the path.)
2009-12-18 05:58:37 +00:00
|
|
|
std::wstring m_MiddleMouseDoubleClickAction;
|
2009-02-10 18:37:48 +00:00
|
|
|
std::wstring m_MouseOverAction;
|
|
|
|
std::wstring m_MouseLeaveAction;
|
2009-09-25 22:20:07 +00:00
|
|
|
|
|
|
|
bool m_HasMouseAction;
|
|
|
|
bool m_MouseActionCursor;
|
2009-02-10 18:37:48 +00:00
|
|
|
|
|
|
|
bool m_MouseOver;
|
|
|
|
METER_POSITION m_RelativeX;
|
|
|
|
METER_POSITION m_RelativeY;
|
|
|
|
|
|
|
|
UINT m_UpdateDivider; // Divider for the update
|
|
|
|
UINT m_UpdateCounter; // Current update counter
|
|
|
|
|
|
|
|
BEVELTYPE m_SolidBevel;
|
|
|
|
Gdiplus::Color m_SolidColor;
|
|
|
|
Gdiplus::Color m_SolidColor2;
|
|
|
|
Gdiplus::REAL m_SolidAngle;
|
2009-07-29 11:52:01 +00:00
|
|
|
bool m_AntiAlias; // If true, the line is antialiased
|
2009-08-27 17:05:10 +00:00
|
|
|
bool m_Initialized;
|
2009-02-10 18:37:48 +00:00
|
|
|
|
|
|
|
CMeterWindow* m_MeterWindow;
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|