It is currently March 28th, 2024, 9:46 pm

[Feature] Allow the extend modifier to be used on "combine" shapes

Report bugs with the Rainmeter application and suggest features.
User avatar
raiguard
Posts: 660
Joined: June 25th, 2015, 7:02 pm
Location: The Sky, USA

[Feature] Allow the extend modifier to be used on "combine" shapes

Post by raiguard »

Request: I would like to be able to use the Extend modifier on "combine" shape types. Currently, if you wish to perform any transform modifiers on a combined shape, you are forced to tack them on to the end of the combine shape definition.

Why: I am making very heavy use of theAzack9's VectorConverter skin to create dozens of icons out of shape meters. Ideally, I would like to be able to call a specific icon with a MeterStyle, then be able to adjust its attribute and transform modifiers separately. While I can easily do this for the attribute modifiers (since those are defined on the parent shape in a combine), this is impossible to do with transform modifiers. If I wish to make an instance of the icon slightly larger or smaller, or rotate/pan it in any way, I have to completely redefine the combine shape:
2019-05-11 21_32_47-.png

Code: Select all

[Rainmeter]
MiddleMouseUpAction=[!Refresh]
AccurateText=1

[StyleBookIcon]
Shape = Path Path1 | StrokeWidth 0 | Extend Fill
Shape2 = Path Path2 | StrokeWidth 0
Shape3 = Path Path3 | StrokeWidth 0
Shape4 = Path Path4 | StrokeWidth 0
Shape5 = Combine Shape | XOR Shape2 | XOR Shape3 | XOR Shape4
Path1=448, 360 | LineTo 448, 24 | CurveTo 424, 0, 448, 10.7, 437.3, 0 | LineTo 96, 0 | CurveTo 0, 96, 43, 0, 0, 43 | LineTo 0, 416 | CurveTo 96, 512, 0, 469, 43, 512 | LineTo 424, 512 | CurveTo 448, 488, 437.3, 512, 448, 501.3 | LineTo 448, 472 | CurveTo 439.1, 453.3, 448, 464.5, 444.5, 457.7 | CurveTo 439.1, 378.6, 434.9, 437.9, 434.9, 394 | CurveTo 448, 360, 444.5, 374.3, 448, 367.5 | ClosePath 1
Path2=128, 134 | CurveTo 134, 128, 128, 130.7, 130.7, 128 | LineTo 346, 128 | CurveTo 352, 134, 349.3, 128, 352, 130.7 | LineTo 352, 154 | CurveTo 346, 160, 352, 157.3, 349.3, 160 | LineTo 134, 160 | CurveTo 128, 154, 130.7, 160, 128, 157.3 | LineTo 128, 134 | ClosePath 1
Path3=128, 198 | CurveTo 134, 192, 128, 194.7, 130.7, 192 | LineTo 346, 192 | CurveTo 352, 198, 349.3, 192, 352, 194.7 | LineTo 352, 218 | CurveTo 346, 224, 352, 221.3, 349.3, 224 | LineTo 134, 224 | CurveTo 128, 218, 130.7, 224, 128, 221.3 | LineTo 128, 198 | ClosePath 1
Path4=381.4, 448 | LineTo 96, 448 | CurveTo 64, 416, 78.3, 448, 64, 433.7 | CurveTo 96, 384, 64, 398.4, 78.4, 384 | LineTo 381.4, 384 | CurveTo 381.4, 448, 379.5, 401.1, 379.5, 430.9 | ClosePath 1
X=5R
Y=8

[MeterBackground]
Meter=Shape
Shape=Rectangle 1,1,380,150,5 | Fill Color 15,15,15 | Stroke Color 50,50,50 | StrokeWidth 1

[MeterBook_1/4]
Meter=Shape
MeterStyle=StyleBookIcon
Shape5=Combine Shape | XOR Shape2 | XOR Shape3 | XOR Shape4 | Scale (1/4),(1/4),0,0
Fill=Fill Color 181,43,43
X=8

[MeterBook_1/6]
Meter=Shape
MeterStyle=StyleBookIcon
Shape5=Combine Shape | XOR Shape2 | XOR Shape3 | XOR Shape4 | Scale (1/6),(1/6),0,0
Fill=Fill Color 176,181,43

[MeterBook_1/8]
Meter=Shape
MeterStyle=StyleBookIcon
Shape5=Combine Shape | XOR Shape2 | XOR Shape3 | XOR Shape4 | Scale (1/8),(1/8),0,0 | Rotate 90 | Offset 4,0
Fill=Fill Color 61,181,43

[MeterBook_1/10]
Meter=Shape
MeterStyle=StyleBookIcon
Shape5=Combine Shape | XOR Shape2 | XOR Shape3 | XOR Shape4 | Scale (1/10),(1/10),0,0 | Rotate 180 | Skew 9,10,20,20 | Offset 3,5
Fill=Fill Color  43,179,181

[MeterBook_1/12]
Meter=Shape
MeterStyle=StyleBookIcon
Shape5=Combine Shape | XOR Shape2 | XOR Shape3 | XOR Shape4 | Scale (1/12),(1/12),0,0
Fill=Fill Color  43,49,181
And while it's not the complete end of the world, it is still very annoying. If were to, say, switch to a different icon in the MeterStyle, I would have to find every instance where the icon is used and update that meter's version of the combine as well. It's both awkward to work with, and is a bad coding practice in general.

However, if one were able to use the extend modifier on the combine shape, the code could look like this:

Code: Select all

[Rainmeter]
MiddleMouseUpAction=[!Refresh]
AccurateText=1

[StyleBookIcon]
Shape = Path Path1 | StrokeWidth 0 | Extend Fill
Shape2 = Path Path2 | StrokeWidth 0
Shape3 = Path Path3 | StrokeWidth 0
Shape4 = Path Path4 | StrokeWidth 0
Shape5 = Combine Shape | XOR Shape2 | XOR Shape3 | XOR Shape4 | Extend Transform
Path1=448, 360 | LineTo 448, 24 | CurveTo 424, 0, 448, 10.7, 437.3, 0 | LineTo 96, 0 | CurveTo 0, 96, 43, 0, 0, 43 | LineTo 0, 416 | CurveTo 96, 512, 0, 469, 43, 512 | LineTo 424, 512 | CurveTo 448, 488, 437.3, 512, 448, 501.3 | LineTo 448, 472 | CurveTo 439.1, 453.3, 448, 464.5, 444.5, 457.7 | CurveTo 439.1, 378.6, 434.9, 437.9, 434.9, 394 | CurveTo 448, 360, 444.5, 374.3, 448, 367.5 | ClosePath 1
Path2=128, 134 | CurveTo 134, 128, 128, 130.7, 130.7, 128 | LineTo 346, 128 | CurveTo 352, 134, 349.3, 128, 352, 130.7 | LineTo 352, 154 | CurveTo 346, 160, 352, 157.3, 349.3, 160 | LineTo 134, 160 | CurveTo 128, 154, 130.7, 160, 128, 157.3 | LineTo 128, 134 | ClosePath 1
Path3=128, 198 | CurveTo 134, 192, 128, 194.7, 130.7, 192 | LineTo 346, 192 | CurveTo 352, 198, 349.3, 192, 352, 194.7 | LineTo 352, 218 | CurveTo 346, 224, 352, 221.3, 349.3, 224 | LineTo 134, 224 | CurveTo 128, 218, 130.7, 224, 128, 221.3 | LineTo 128, 198 | ClosePath 1
Path4=381.4, 448 | LineTo 96, 448 | CurveTo 64, 416, 78.3, 448, 64, 433.7 | CurveTo 96, 384, 64, 398.4, 78.4, 384 | LineTo 381.4, 384 | CurveTo 381.4, 448, 379.5, 401.1, 379.5, 430.9 | ClosePath 1
X=5R
Y=8

[MeterBackground]
Meter=Shape
Shape=Rectangle 1,1,380,150,5 | Fill Color 15,15,15 | Stroke Color 50,50,50 | StrokeWidth 1

[MeterBook_1/4]
Meter=Shape
MeterStyle=StyleBookIcon
Transform=Scale (1/4),(1/4),0,0
Fill=Fill Color 181,43,43
X=8

[MeterBook_1/6]
Meter=Shape
MeterStyle=StyleBookIcon
Transform=Scale (1/6),(1/6),0,0
Fill=Fill Color 176,181,43

[MeterBook_1/8]
Meter=Shape
MeterStyle=StyleBookIcon
Transform=Scale (1/8),(1/8),0,0 | Rotate 90 | Offset 4,0
Fill=Fill Color 61,181,43

[MeterBook_1/10]
Meter=Shape
MeterStyle=StyleBookIcon
Transform=Scale (1/10),(1/10),0,0 | Rotate 180 | Skew 9,10,20,20 | Offset 3,5
Fill=Fill Color  43,179,181

[MeterBook_1/12]
Meter=Shape
MeterStyle=StyleBookIcon
Transform=Scale (1/12),(1/12),0,0
Fill=Fill Color  43,49,181
Much better!

It is my knowledge that adding this would be pretty trivial, since this function is intentionally excluded from the combine shape. IIRC, the reason given was to avoid confusion with attribute modifiers not working on combine shapes. In other words, the only reason this DOESN'T work is to avoid a bunch of Rainmeter newcomers asking why they can't change a combine shape's color if they happen to be using the extend modifier on a combined shape.

Here is an example of how I am making heavy use of shape meters in my suite. Absolutely every icon you see is a shape meter:
Untitled.png
This is a very good example of why I want this feature: For every icon in the gadget manager I had to redefine the same scale for every individual icon. If I could use the extend modifier on combine shapes, I could set the scale in the global icon meterstyle, allowing me to change all of the icon sizes by the same amount with only one code change.

Thank you for your time!
You do not have the required permissions to view the files attached to this post.
”We are pretty sure that r2922 resolves the regression in resolution caused by a reversion to a revision.” - jsmorley, 2017