It is currently July 21st, 2019, 9:34 am

Syncing skins

Help with creating, editing & fixing problems with skins
User avatar
balala
Rainmeter Sage
Posts: 8391
Joined: October 11th, 2010, 6:27 pm
Location: Gheorgheni, Romania

Re: Syncing skins

balala » March 14th, 2019, 7:20 pm

qwerky wrote:
March 14th, 2019, 7:13 pm
One thing, though. The pendulum is swinging fully right and fully left each second. My original intention was that the pendulum would swing left-to-right in one second, and right-to-left in the next second. Can that be changed?
Yes, for sure. Let me do it and I'll be back soon.
User avatar
qwerky
Posts: 181
Joined: April 10th, 2014, 12:31 am
Location: Canada

Re: Syncing skins

qwerky » March 14th, 2019, 7:25 pm

balala wrote:
March 14th, 2019, 7:19 pm
Thanks.

I'm surprised, because I have both sound and the shadows. The balls have also been disappearing for me too (before have been fixed), but the sound is played and the shadows are there. So:
  • About the sound: have you turned on the speakers (if needed)? (I hope you did). Are other skins playing the sounds?
  • About the shadows: click the clock to hide it. You should have to see the shadows on the horizontal plane of the base (see the attached screenshot). Aren't they there?
Sound is working fine from other applications, but I don't think I have any other Rainmeter skins that produce sound. O.O

Okay, the shadows are there, all right. I just hadn't looked for them with the clock hidden--my dumb mistake! :oops: But those shadows just make me think how much more work that skin must have been for you! :thumbup:
User avatar
balala
Rainmeter Sage
Posts: 8391
Joined: October 11th, 2010, 6:27 pm
Location: Gheorgheni, Romania

Re: Syncing skins

balala » March 14th, 2019, 7:39 pm

qwerky wrote:
March 14th, 2019, 7:25 pm
Sound is working fine from other applications, but I don't think I have any other Rainmeter skins that produce sound. O.O
Ok, attached you can find a very simple skin. If you load it you have one single PLAY string. If you click it, the skin plays a half minute sound. Do you hear it?
Sound_1.rmskin
qwerky wrote:
March 14th, 2019, 7:25 pm
Okay, the shadows are there, all right. I just hadn't looked for them with the clock hidden--my dumb mistake! :oops:
Ok, don't worry, it happens to all of us sometimes to not notice a detail. Especially that those shadows are not extremely well visible, especially while the clock is displayed.
qwerky wrote:
March 14th, 2019, 7:25 pm
But those shadows just make me think how much more work that skin must have been for you! :thumbup:
Yep, I worked quite much with the whole skin, but I enjoyed it. In fact I enjoy every work with any Rainmeter skin. I love this small program and what can be done with it.
You do not have the required permissions to view the files attached to this post.
User avatar
balala
Rainmeter Sage
Posts: 8391
Joined: October 11th, 2010, 6:27 pm
Location: Gheorgheni, Romania

Re: Syncing skins

balala » March 14th, 2019, 8:01 pm

balala wrote:
March 14th, 2019, 7:20 pm
Yes, for sure. Let me do it and I'll be back soon.
This is what you need?
GIF.gif
Here is the rewritten code:

Code: Select all

[Rainmeter]
Update=1000
AccurateText=1

[Variables]
skinWidth=274
skinHeight=50
cornerRoundness=7

; pendulumHeight:  height of pendulum skin.
; pendulumBorder:  size of pendulum border.
pendulumHeight=50
pendulumBorder=2

pendulumLEDBorder=1
pendulumLEDSize=5
pendulumSpan=(#skinWidth#-#pendulumBorder#-((#pendulumLEDSize#+#pendulumLEDBorder#+2)*2))
pendulumLEDSpacing=(Trunc(#pendulumSpan#/9))
pendulumStartX=((#skinWidth#-(#pendulumLEDSpacing#*9))/2)

colorPendulumBackground=0,10,36,255
colorPendulumBorder=0,64,192,255
colorPendulumTitleBar=0,64,192,255
;colorLEDBorder=255,255,255,255
colorLEDBorder=0,10,36,255
colorLEDOff=0,10,36,255
colorLEDOn=255,063,063,255
U=[!UpdateMeasure "MeasureSlide"][!UpdateMeasure "msrPendulumWrap"][!UpdateMeterGroup "PendulumLED"][!UpdateMeter "Uptime"][!Redraw]
Num=1
W=80

[MeasureSlide]
Measure=Plugin
Plugin=ActionTimer
Group=Sliders
ActionList1=Repeat Forth,#W#,10
Forth=[!SetVariable Num "(Clamp((#Num#+1),1,10))"]#U#
ActionList2=Repeat Back,#W#,10
Back=[!SetVariable Num "(Clamp((#Num#-1),1,10))"]#U#
DynamicVariables=1

[msrPendulumWrap]
Measure=Calc
DynamicVariables=1
Formula=#Num#
IfConditionMode=1
IfCondition=1
IfTrueAction=[!SetOptionGroup PendulumLED PendulumFillColor "Fill Color #*colorLEDOff*#"][!SetOption mtrLED[&msrPendulumWrap] PendulumFillColor "Fill Color #*colorLEDOn*#"]
IfCondition2=((#CURRENTSECTION#=1)||(#CURRENTSECTION#=10))
IfTrueAction2=[!CommandMeasure "MeasureSlide" "Stop 1"][!CommandMeasure "MeasureSlide" "Stop 2"]
;IfAboveValue=9
;IfAboveAction=[!SetOption msrPendulumWrap Formula "msrPendulumWrap-1"]
;IfBelowValue=2
;IfBelowAction=[!SetOption msrPendulumWrap Formula "msrPendulumWrap+1"]

[MeasureTime]
Measure=Time
Format=%#H:%M:%S

[MeasureSec]
Measure=Time
Format=%#S

[MeasureSeconds]
Measure=Calc
Formula=( MeasureSec % 2 )
IfCondition=(#CURRENTSECTION#=0)
IfTrueAction=[!CommandMeasure "MeasureSlide" "Execute 1"][!CommandMeasure "MeasureSlide" "Stop 2"]
IfFalseAction=[!CommandMeasure "MeasureSlide" "Stop 1"][!CommandMeasure "MeasureSlide" "Execute 2"]

;[msrPendulumArc1]
;Measure=Calc
;DynamicVariables=1
;Formula=msrPendulumArc+1
;IfConditionMode=1
;ifCondition=1
;IfTrueAction=[!SetVariable PendulumLEDNum "[msrPendulumArc]"]
;IfAboveValue=9
;IfAboveAction=[!SetOption msrPendulumArc Formula "msrPendulumArc-1"]
;IfBelowValue=2
;IfBelowAction=[!SetOption msrPendulumArc Formula "msrPendulumArc+1"]
;
;[msrPendulumArc2]
;Measure=Calc
;DynamicVariables=1
;Formula=Clamp(msrPendulumArc+2,2,21)
;IfConditionMode=1
;ifCondition=1
;IfTrueAction=[!SetVariable PendulumLEDNum "(Clamp(Trunc([msrPendulumArc]/2), 1, 10))"]
;IfAboveValue=20
;IfAboveAction=[!SetOption msrPendulumArc Formula "Clamp(msrPendulumArc-2,2,21)"]
;IfBelowValue=3
;IfBelowAction=[!SetOption msrPendulumArc Formula "Clamp(msrPendulumArc+2,2,21)"]
;
;[msrPendulumSwing]
;Measure=Calc
;DynamicVariables=1
;Formula=1
;IfConditionMode=1
;ifCondition=1
;IfTrueAction=[!SetOptionGroup PendulumLED PendulumFillColor "Fill Color #*colorLEDOff*#"][!SetOption mtrLED#PendulumLEDNum# PendulumFillColor "Fill Color #*colorLEDOn*#"]

[mtrPendulumBackground]
Meter=Shape
Shape=Rectangle 0,0,#skinWidth#,#skinHeight#,#cornerRoundness# | StrokeWidth #pendulumBorder# | Stroke Color #colorPendulumBorder# | Fill Color #colorPendulumBackground#
AntiAlias=1
X=0
Y=0
W=#skinWidth#
H=#skinHeight#

;[mtrArc]
;Meter=Shape
;Shape=Arc 0,0,(#pendulumLEDSpacing#*9),0,41,10,*,1 | StrokeWidth 1 | Stroke Color #colorWhite#
;X=#pendulumStartX#
;Y=10
;DynamicVariables=1

[mtrLED1]
Meter=Shape
Group=PendulumLED
Shape=Ellipse 0,0,#pendulumLEDSize# | StrokeWidth #pendulumLEDBorder# | Stroke Color #colorLEDBorder# | Extend PendulumFillColor
PendulumFillColor=Fill Color #colorLEDOn#
X=#pendulumStartX#
Y=10
DynamicVariables=1

[mtrLED2]
Meter=Shape
Group=PendulumLED
Shape=Ellipse 0,0,#pendulumLEDSize# | StrokeWidth #pendulumLEDBorder# | Stroke Color #colorLEDBorder# | Extend PendulumFillColor
PendulumFillColor=Fill Color #colorLEDOn#
X=(#pendulumLEDSpacing#-6)r
Y=26
DynamicVariables=1

[mtrLED3]
Meter=Shape
Group=PendulumLED
Shape=Ellipse 0,0,#pendulumLEDSize# | StrokeWidth #pendulumLEDBorder# | Stroke Color #colorLEDBorder# | Extend PendulumFillColor
PendulumFillColor=Fill Color #colorLEDOn#
X=(#pendulumLEDSpacing#+0)r
Y=34
DynamicVariables=1

[mtrLED4]
Meter=Shape
Group=PendulumLED
Shape=Ellipse 0,0,#pendulumLEDSize# | StrokeWidth #pendulumLEDBorder# | Stroke Color #colorLEDBorder# | Extend PendulumFillColor
PendulumFillColor=Fill Color #colorLEDOn#
X=(#pendulumLEDSpacing#+3)r
Y=38
DynamicVariables=1

[mtrLED5]
Meter=Shape
Group=PendulumLED
Shape=Ellipse 0,0,#pendulumLEDSize# | StrokeWidth #pendulumLEDBorder# | Stroke Color #colorLEDBorder# | Extend PendulumFillColor
PendulumFillColor=Fill Color #colorLEDOn#
X=(#pendulumLEDSpacing#+3)r
Y=40
DynamicVariables=1

[mtrLED6]
Meter=Shape
Group=PendulumLED
Shape=Ellipse 0,0,#pendulumLEDSize# | StrokeWidth #pendulumLEDBorder# | Stroke Color #colorLEDBorder# | Extend PendulumFillColor
PendulumFillColor=Fill Color #colorLEDOn#
X=#pendulumLEDSpacing#r
Y=40
DynamicVariables=1

[mtrLED7]
Meter=Shape
Group=PendulumLED
Shape=Ellipse 0,0,#pendulumLEDSize# | StrokeWidth #pendulumLEDBorder# | Stroke Color #colorLEDBorder# | Extend PendulumFillColor
PendulumFillColor=Fill Color #colorLEDOn#
X=(#pendulumLEDSpacing#+3)r
Y=38
DynamicVariables=1

[mtrLED8]
Meter=Shape
Group=PendulumLED
Shape=Ellipse 0,0,#pendulumLEDSize# | StrokeWidth #pendulumLEDBorder# | Stroke Color #colorLEDBorder# | Extend PendulumFillColor
PendulumFillColor=Fill Color #colorLEDOn#
X=(#pendulumLEDSpacing#+3)r
Y=34
DynamicVariables=1

[mtrLED9]
Meter=Shape
Group=PendulumLED
Shape=Ellipse 0,0,#pendulumLEDSize# | StrokeWidth #pendulumLEDBorder# | Stroke Color #colorLEDBorder# | Extend PendulumFillColor
PendulumFillColor=Fill Color #colorLEDOn#
X=(#pendulumLEDSpacing#+0)r
Y=26
DynamicVariables=1

[mtrLED10]
Meter=Shape
Group=PendulumLED
Shape=Ellipse 0,0,#pendulumLEDSize# | StrokeWidth #pendulumLEDBorder# | Stroke Color #colorLEDBorder# | Extend PendulumFillColor
PendulumFillColor=Fill Color #colorLEDOn#
X=(#pendulumLEDSpacing#-6)r
Y=10
DynamicVariables=1

[MeterTime]
Meter=STRING
MeasureName=MeasureTime
X=(#SkinWidth#/2)
Y=0
Padding=15,5,15,5
FontColor=220,220,220
FontEffectColor=0,0,0
StringEffect=Shadow
FontSize=8
FontFace=Segoe UI
StringStyle=BOLD
StringAlign=Center
AntiAlias=1
Text=%1
Again, you can freely change the format of the [MeasureTime] measure, if want the clock to have another one.
You do not have the required permissions to view the files attached to this post.
User avatar
qwerky
Posts: 181
Joined: April 10th, 2014, 12:31 am
Location: Canada

Re: Syncing skins

qwerky » March 14th, 2019, 9:05 pm

balala wrote:
March 14th, 2019, 7:39 pm
Ok, attached you can find a very simple skin. If you load it you have one single PLAY string. If you click it, the skin plays a half minute sound. Do you hear it?
Sound_1.rmskin
Yes, loud and clear! :) Still no sound from the Pendulum, though.

In order to install this sound skin, I needed to update Rainmeter, from 4.3 r3273, to 4.3 r3294. After the update, my previous skins are a bit off! Some of the text is now overflowing the bottom of a window (font size increase?); some windows wrong location, etc. Will have to look further into it. :-(
Last edited by qwerky on March 14th, 2019, 9:23 pm, edited 1 time in total.
User avatar
balala
Rainmeter Sage
Posts: 8391
Joined: October 11th, 2010, 6:27 pm
Location: Gheorgheni, Romania

Re: Syncing skins

balala » March 14th, 2019, 9:16 pm

qwerky wrote:
March 14th, 2019, 9:05 pm
Yes, loud and clear! :)
Well, this is weird, because I hear the sound when the balls on the pendulum are colliding. Don't know what to say, why you don't have the sound. Honestly don't know. :confused:
User avatar
balala
Rainmeter Sage
Posts: 8391
Joined: October 11th, 2010, 6:27 pm
Location: Gheorgheni, Romania

Re: Syncing skins

balala » March 15th, 2019, 7:22 pm

Yincognito wrote:
March 13th, 2019, 6:17 pm
Wow, that's a really nice skin - you probably worked a bit on the TransformationMatrix formulas there! :thumbup: I know it's a finished work, but if you'll ever want to add something extra to it in the future, putting the H H : M M characters on the balls when animating it (to make them look like pool game balls, maybe even having diiferent colors) would make it even cooler... 8-)
So, here is the implementation of this request. I used the same balls, didn't recolor them yet, so they are still grey. Someone who is better at image manipulation will have to recolor them, because I don't work with images. I just added the digits of time. However when you load or refresh the skin, still the old time and date are visible. But if you click it, it is hidden and the digits on the balls are shown (yep, at next click these are again hidden and the old clock is shown again).
As usual, you can change the time format of the [MeasureTime] measure, if desired.
The rewrote code:

Code: Select all

[Rainmeter]
Update=100
DynamicWindowSize=1
BackgroundMode=2
SolidColor=0,0,0,1
MouseOverAction=[!ShowMeter "MeterSettingsButton"][!SetVariable ShowStop "1"][!UpdateMeter "MeterStopButton"][!Redraw]
MouseLeaveAction=[!HideMeter "MeterSettingsButton"][!SetVariable ShowStop "0"][!UpdateMeter "MeterStopButton"][!Redraw]

[Metadata]
Name=Pendulum (Newton's Cradle)
Author=Balala (blaci75@gmail.com) & Chevin
Version=1
License=Creative Commons Attribution-Non-Commercial-Share Alike 3.0
Information=It shows a fully functional Newton's cradle, with clock. You can start moving from one to four balls.

[Variables]
@Include=#@#Settings.inc
Balls=0
Start=0
Stop=0
ShowStop=0
ShowStop2=1

[DateTimeStyle]
X=(#Width#/2)
Y=([MeterCenter:H]-#Width#/20)
Padding=13,0,15,2
FontSize=(#Width#/30)
FontFace=SF Digital Readout
StringStyle=BOLD
StringAlign=CENTER
AntiAlias=1
Text=%2#CRLF#%1
InlineSetting=Size | (#Width#/20)
InlinePattern=^(.*)#CRLF#.*$
DynamicVariables=1

[TimeDigitStyle]
FontColor=0,0,0
FontEffectColor=220,220,220
StringEffect=Shadow
FontSize=16
FontFace=SF Digital Readout
StringStyle=BOLD
StringAlign=CenterCenter
AntiAlias=1
Text=%1

[MeasureDate]
Measure=Time
Format=locale-date
UpdateDivider=5

[MeasureTime]
Measure=Time
Format=%H:%M
UpdateDivider=5

[MeasureTime1Digit]
Measure=String
String=[MeasureTime]
RegExpSubstitute=1
Substitute="^(\d{1})(\d{1})(.)(\d{1})(\d{1})$":"\1"

[MeasureTime2Digit]
Measure=String
String=[MeasureTime]
RegExpSubstitute=1
Substitute="^(\d{1})(\d{1})(.)(\d{1})(\d{1})$":"\2"

[MeasureTime3Digit]
Measure=String
String=[MeasureTime]
RegExpSubstitute=1
Substitute="^(\d{1})(\d{1})(.)(\d{1})(\d{1})$":"\3"

[MeasureTime4Digit]
Measure=String
String=[MeasureTime]
RegExpSubstitute=1
Substitute="^(\d{1})(\d{1})(.)(\d{1})(\d{1})$":"\4"

[MeasureTime5Digit]
Measure=String
String=[MeasureTime]
RegExpSubstitute=1
Substitute="^(\d{1})(\d{1})(.)(\d{1})(\d{1})$":"\5"

[Timer]
Measure=Calc
Formula=( Timer + 1 )
IfCondition=((MeasureTimerLeft>-0.4)&&(MeasureTimerRight<0.4)&&(#Stop#=1))
IfTrueAction=[!DisableMeasure "#CURRENTSECTION#"]
IfCondition2=(Timer*#Attenuated#>9*#Attenuation#*#Attenuated#)
IfTrueAction2=[!DisableMeasure "#CURRENTSECTION#"]
DynamicVariables=1
Disabled=1

[Timer2]
Measure=Calc
Formula=Timer
IfCondition=(Timer2=0)
IfTrueAction=[!SetOption MeterLeft LeftMouseUpAction """[!SetVariable Start "-1"][!SetVariable Stop "0"][!SetVariable Balls "0"][!UpdateMeasureGroup "Timers"][!UpdateMeasure "Timer"][!EnableMeasure "Timer"][!UpdateMeterGroup "Balls"]"""][!SetOption MeterLeft2 LeftMouseUpAction """[!SetVariable Start "-1"][!SetVariable Stop "0"][!SetVariable Balls "1"][!UpdateMeasureGroup "Timers"][!UpdateMeasure "Timer"][!EnableMeasure "Timer"][!UpdateMeterGroup "Balls"]"""][!SetOption MeterCenter LeftMouseUpAction """[!SetVariable Start "-1"][!SetVariable Stop "0"][!SetVariable Balls "2"][!UpdateMeasureGroup "Timers"][!UpdateMeasure "Timer"][!EnableMeasure "Timer"][!UpdateMeterGroup "Balls"]"""][!SetOption MeterRight2 LeftMouseUpAction """[!SetVariable Start "-1"][!SetVariable Stop "0"][!SetVariable Balls "3"][!UpdateMeasureGroup "Timers"][!UpdateMeasure "Timer"][!EnableMeasure "Timer"][!UpdateMeterGroup "Balls"]"""][!SetOption MeterRight LeftMouseUpAction """[!SetVariable Start "1"][!SetVariable Stop "0"][!SetVariable Balls "0"][!UpdateMeasureGroup "Timers"][!UpdateMeasure "Timer"][!EnableMeasure "Timer"][!UpdateMeterGroup "Balls"]"""][!SetVariable ShowStop2 "0"][!UpdateMeterGroup "Balls"][!UpdateMeter "MeterStopButton"]
IfFalseAction=[!SetOption MeterLeft LeftMouseUpAction ""][!SetOption MeterLeft2 LeftMouseUpAction ""][!SetOption MeterCenter LeftMouseUpAction ""][!SetOption MeterRight2 LeftMouseUpAction ""][!SetOption MeterRight LeftMouseUpAction ""][!SetVariable ShowStop2 "1"][!UpdateMeterGroup "Balls"][!UpdateMeter "MeterStopButton"]

[MeasureSound]
Measure=Calc
Formula=#Sound#
IfCondition=(MeasureSound=1)
IfTrueAction=[!SetOption MeasureTimer IfTrueAction """[PLAY "#@#Newtons_Cradle.wav"]"""][!UpdateMeasure "MeasureTimer"]
IfFalseAction=[!SetOption MeasureTimer IfTrueAction ""][!UpdateMeasure "MeasureTimer"]

[MeasureShadow]
Measure=Calc
Formula=#Shadow#
IfCondition=(MeasureShadow=1)
IfTrueAction=[!ShowMeterGroup "Shadow"][!Redraw]
IfFalseAction=[!HideMeterGroup "Shadow"][!Redraw]

[MeasureTimer]
Measure=Calc
Formula=(( 1 - #Attenuated# * Timer / ( 9 * #Attenuation# )) * Sin ( 2 * PI * ( Timer % 21 ) / 20 ))
IfCondition=(Abs(MeasureTimer)<0.01)

[MeasureTimerLeft]
Measure=Calc
Formula=( Clamp (( #Start# * MeasureTimer ), -1, 0 ))
DynamicVariables=1
Group=Timers

[MeasureTimerRight]
Measure=Calc
Formula=( Clamp (( #Start# * MeasureTimer ), 0, 1 ))
DynamicVariables=1
Group=Timers

[MeterLeft]
Meter=Image
Imagename=#@#Left.png
X=((#Width#-5*[MeterLeft:W]-4*((#Width#<250)?-2:((#Width#<450)?-3:-4)))/2)
Y=(-6*#Width#/100)
W=(#Width#/12)
PreserveAspectRatio=1
TransformationMatrix=(Cos([MeasureTimerLeft]*PI/8));(-(Sin([MeasureTimerLeft]*PI/8)));(Sin([MeasureTimerLeft]*PI/8));(Cos([MeasureTimerLeft]*PI/8));(([MeterLeft:X]+([MeterLeft:W]/2))-([MeterLeft:X]+([MeterLeft:W]/2))*Cos([MeasureTimerLeft]*PI/8)-(0.022*#Width#)*Sin([MeasureTimerLeft]*PI/8));((0.022*#Width#)+([MeterLeft:X]+([MeterLeft:W]/2))*Sin([MeasureTimerLeft]*PI/8)-(0.022*#Width#)*Cos([MeasureTimerLeft]*PI/8))
LeftMouseUpAction=[!SetVariable Start "-1"][!SetVariable Stop "0"][!SetVariable Balls "0"][!UpdateMeasureGroup "Timers"][!UpdateMeasure "Timer"][!EnableMeasure "Timer"][!UpdateMeterGroup "Balls"]
DynamicVariables=1
Group=Balls

[MeterLeft2]
Meter=Image
Imagename=#@#Left.png
X=((#Width#<250)?-2:((#Width#<450)?-3:-4))R
Y=0r
W=[MeterLeft:W]
PreserveAspectRatio=1
TransformationMatrix=((#Balls#>=1)?(Cos(([MeasureTimerLeft]+(#Balls#>=3)*[MeasureTimerRight])*PI/8)):1);(-(#Balls#>=1)*(Sin(([MeasureTimerLeft]+(#Balls#>=3)*[MeasureTimerRight])*PI/8)));((#Balls#>=1)*Sin(([MeasureTimerLeft]+(#Balls#>=3)*[MeasureTimerRight])*PI/8));((#Balls#>=1)?(Cos(([MeasureTimerLeft]+(#Balls#>=3)*[MeasureTimerRight])*PI/8)):1);((#Balls#>=1)*(([MeterLeft2:X]+([MeterLeft2:W]/2))-([MeterLeft2:X]+([MeterLeft2:W]/2))*Cos(([MeasureTimerLeft]+(#Balls#>=3)*[MeasureTimerRight])*PI/8)-(0.022*#Width#)*Sin(([MeasureTimerLeft]+(#Balls#>=3)*[MeasureTimerRight])*PI/8)));((#Balls#>=1)*((0.022*#Width#)+([MeterLeft2:X]+([MeterLeft2:W]/2))*Sin(([MeasureTimerLeft]+(#Balls#>=3)*[MeasureTimerRight])*PI/8)-(0.022*#Width#)*Cos(([MeasureTimerLeft]+(#Balls#>=3)*[MeasureTimerRight])*PI/8)))
LeftMouseUpAction=[!SetVariable Start "-1"][!SetVariable Stop "0"][!SetVariable Balls "1"][!UpdateMeasureGroup "Timers"][!UpdateMeasure "Timer"][!EnableMeasure "Timer"][!UpdateMeterGroup "Balls"]
DynamicVariables=1
Group=Balls

[MeterCenter]
Meter=Image
Imagename=#@#Left.png
X=((#Width#<250)?-2:((#Width#<450)?-3:-4))R
Y=0r
W=[MeterLeft:W]
PreserveAspectRatio=1
TransformationMatrix=((#Balls#>=2)?(Cos(([MeasureTimerLeft]+[MeasureTimerRight])*PI/8)):1);(-(#Balls#>=2)*(Sin(([MeasureTimerLeft]+[MeasureTimerRight])*PI/8)));((#Balls#>=2)*Sin(([MeasureTimerLeft]+[MeasureTimerRight])*PI/8));((#Balls#>=2)?(Cos(([MeasureTimerLeft]+[MeasureTimerRight])*PI/8)):1);((#Balls#>=2)*(([MeterCenter:X]+([MeterCenter:W]/2))-([MeterCenter:X]+([MeterCenter:W]/2))*Cos(([MeasureTimerLeft]+[MeasureTimerRight])*PI/8)-(0.022*#Width#)*Sin(([MeasureTimerLeft]+[MeasureTimerRight])*PI/8)));((#Balls#>=2)*((0.022*#Width#)+([MeterCenter:X]+([MeterCenter:W]/2))*Sin(([MeasureTimerLeft]+[MeasureTimerRight])*PI/8)-(0.022*#Width#)*Cos(([MeasureTimerLeft]+[MeasureTimerRight])*PI/8)))
LeftMouseUpAction=[!SetVariable Start "-1"][!SetVariable Stop "0"][!SetVariable Balls "2"][!UpdateMeasureGroup "Timers"][!UpdateMeasure "Timer"][!EnableMeasure "Timer"][!UpdateMeterGroup "Balls"]
DynamicVariables=1
Group=Balls

[MeterRight2]
Meter=Image
Imagename=#@#Left.png
X=((#Width#<250)?-2:((#Width#<450)?-3:-4))R
Y=0r
W=[MeterLeft:W]
PreserveAspectRatio=1
TransformationMatrix=((#Balls#>=1)?(Cos(([MeasureTimerRight]+(#Balls#>=3)*[MeasureTimerLeft])*PI/8)):1);(-(#Balls#>=1)*(Sin(([MeasureTimerRight]+(#Balls#>=3)*[MeasureTimerLeft])*PI/8)));((#Balls#>=1)*Sin(([MeasureTimerRight]+(#Balls#>=3)*[MeasureTimerLeft])*PI/8));((#Balls#>=1)?(Cos(([MeasureTimerRight]+(#Balls#>=3)*[MeasureTimerLeft])*PI/8)):1);((#Balls#>=1)*(([MeterRight2:X]+([MeterRight2:W]/2))-([MeterRight2:X]+([MeterRight2:W]/2))*Cos(([MeasureTimerRight]+(#Balls#>=3)*[MeasureTimerLeft])*PI/8)-(0.022*#Width#)*Sin(([MeasureTimerRight]+(#Balls#>=3)*[MeasureTimerLeft])*PI/8)));((#Balls#>=1)*((0.022*#Width#)+([MeterRight2:X]+([MeterRight2:W]/2))*Sin(([MeasureTimerRight]+(#Balls#>=3)*[MeasureTimerLeft])*PI/8)-(0.022*#Width#)*Cos(([MeasureTimerRight]+(#Balls#>=3)*[MeasureTimerLeft])*PI/8)))
LeftMouseUpAction=[!SetVariable Start "-1"][!SetVariable Stop "0"][!SetVariable Balls "3"][!UpdateMeasureGroup "Timers"][!UpdateMeasure "Timer"][!EnableMeasure "Timer"][!UpdateMeterGroup "Balls"]
DynamicVariables=1
Group=Balls

[MeterRight]
Meter=Image
Imagename=#@#Left.png
X=((#Width#<250)?-2:((#Width#<450)?-3:-4))R
Y=0r
W=[MeterLeft:W]
PreserveAspectRatio=1
TransformationMatrix=(Cos([MeasureTimerRight]*PI/8));(-(Sin([MeasureTimerRight]*PI/8)));(Sin([MeasureTimerRight]*PI/8));(Cos([MeasureTimerRight]*PI/8));(([MeterRight:X]+([MeterRight:W]/2))-([MeterRight:X]+([MeterRight:W]/2))*Cos([MeasureTimerRight]*PI/8)-(0.022*#Width#)*Sin([MeasureTimerRight]*PI/8));((0.022*#Width#)+([MeterRight:X]+([MeterRight:W]/2))*Sin([MeasureTimerRight]*PI/8)-(0.022*#Width#)*Cos([MeasureTimerRight]*PI/8))
LeftMouseUpAction=[!SetVariable Start "1"][!SetVariable Stop "0"][!SetVariable Balls "0"][!UpdateMeasureGroup "Timers"][!UpdateMeasure "Timer"][!EnableMeasure "Timer"][!UpdateMeterGroup "Balls"]
DynamicVariables=1
Group=Balls

[MeterLeftTimeDigit]
Meter=String
MeasureName=MeasureTime1Digit
MeterStyle=TimeDigitStyle
X=((#Width#-5*[MeterLeft:W]-4*((#Width#<250)?-2:((#Width#<450)?-3:-4)))/2+[MeterLeft:W]/2-2)
Y=(-6*#Width#/100+[MeterLeft:H]-12)
TransformationMatrix=(Cos([MeasureTimerLeft]*PI/8));(-(Sin([MeasureTimerLeft]*PI/8)));(Sin([MeasureTimerLeft]*PI/8));(Cos([MeasureTimerLeft]*PI/8));(([MeterLeft:X]+([MeterLeft:W]/2))-([MeterLeft:X]+([MeterLeft:W]/2))*Cos([MeasureTimerLeft]*PI/8)-(0.022*#Width#)*Sin([MeasureTimerLeft]*PI/8));((0.022*#Width#)+([MeterLeft:X]+([MeterLeft:W]/2))*Sin([MeasureTimerLeft]*PI/8)-(0.022*#Width#)*Cos([MeasureTimerLeft]*PI/8))
DynamicVariables=1
Hidden=1
Group=Balls | TimeDigits

[MeterLeft2TimeDigit]
Meter=String
MeasureName=MeasureTime2Digit
MeterStyle=TimeDigitStyle
X=(((#Width#<250)?-2:((#Width#<450)?-3:-4))+[MeterLeft2:W]/2-2)R
Y=0r
TransformationMatrix=((#Balls#>=1)?(Cos(([MeasureTimerLeft]+(#Balls#>=3)*[MeasureTimerRight])*PI/8)):1);(-(#Balls#>=1)*(Sin(([MeasureTimerLeft]+(#Balls#>=3)*[MeasureTimerRight])*PI/8)));((#Balls#>=1)*Sin(([MeasureTimerLeft]+(#Balls#>=3)*[MeasureTimerRight])*PI/8));((#Balls#>=1)?(Cos(([MeasureTimerLeft]+(#Balls#>=3)*[MeasureTimerRight])*PI/8)):1);((#Balls#>=1)*(([MeterLeft2:X]+([MeterLeft2:W]/2))-([MeterLeft2:X]+([MeterLeft2:W]/2))*Cos(([MeasureTimerLeft]+(#Balls#>=3)*[MeasureTimerRight])*PI/8)-(0.022*#Width#)*Sin(([MeasureTimerLeft]+(#Balls#>=3)*[MeasureTimerRight])*PI/8)));((#Balls#>=1)*((0.022*#Width#)+([MeterLeft2:X]+([MeterLeft2:W]/2))*Sin(([MeasureTimerLeft]+(#Balls#>=3)*[MeasureTimerRight])*PI/8)-(0.022*#Width#)*Cos(([MeasureTimerLeft]+(#Balls#>=3)*[MeasureTimerRight])*PI/8)))
DynamicVariables=1
Hidden=1
Group=Balls | TimeDigits

[MeterCenterTimeDigit]
Meter=String
MeasureName=MeasureTime3Digit
MeterStyle=TimeDigitStyle
X=(((#Width#<250)?-2:((#Width#<450)?-3:-4))+[MeterCenter:W]/2-2)R
Y=0r
TransformationMatrix=((#Balls#>=2)?(Cos(([MeasureTimerLeft]+[MeasureTimerRight])*PI/8)):1);(-(#Balls#>=2)*(Sin(([MeasureTimerLeft]+[MeasureTimerRight])*PI/8)));((#Balls#>=2)*Sin(([MeasureTimerLeft]+[MeasureTimerRight])*PI/8));((#Balls#>=2)?(Cos(([MeasureTimerLeft]+[MeasureTimerRight])*PI/8)):1);((#Balls#>=2)*(([MeterCenter:X]+([MeterCenter:W]/2))-([MeterCenter:X]+([MeterCenter:W]/2))*Cos(([MeasureTimerLeft]+[MeasureTimerRight])*PI/8)-(0.022*#Width#)*Sin(([MeasureTimerLeft]+[MeasureTimerRight])*PI/8)));((#Balls#>=2)*((0.022*#Width#)+([MeterCenter:X]+([MeterCenter:W]/2))*Sin(([MeasureTimerLeft]+[MeasureTimerRight])*PI/8)-(0.022*#Width#)*Cos(([MeasureTimerLeft]+[MeasureTimerRight])*PI/8)))
DynamicVariables=1
Hidden=1
Group=Balls | TimeDigits

[MeterRight2TimeDigit]
Meter=String
MeasureName=MeasureTime4Digit
MeterStyle=TimeDigitStyle
X=(((#Width#<250)?-2:((#Width#<450)?-3:-4))+[MeterRight2:W]/2-2)R
Y=0r
TransformationMatrix=((#Balls#>=1)?(Cos(([MeasureTimerRight]+(#Balls#>=3)*[MeasureTimerLeft])*PI/8)):1);(-(#Balls#>=1)*(Sin(([MeasureTimerRight]+(#Balls#>=3)*[MeasureTimerLeft])*PI/8)));((#Balls#>=1)*Sin(([MeasureTimerRight]+(#Balls#>=3)*[MeasureTimerLeft])*PI/8));((#Balls#>=1)?(Cos(([MeasureTimerRight]+(#Balls#>=3)*[MeasureTimerLeft])*PI/8)):1);((#Balls#>=1)*(([MeterRight2:X]+([MeterRight2:W]/2))-([MeterRight2:X]+([MeterRight2:W]/2))*Cos(([MeasureTimerRight]+(#Balls#>=3)*[MeasureTimerLeft])*PI/8)-(0.022*#Width#)*Sin(([MeasureTimerRight]+(#Balls#>=3)*[MeasureTimerLeft])*PI/8)));((#Balls#>=1)*((0.022*#Width#)+([MeterRight2:X]+([MeterRight2:W]/2))*Sin(([MeasureTimerRight]+(#Balls#>=3)*[MeasureTimerLeft])*PI/8)-(0.022*#Width#)*Cos(([MeasureTimerRight]+(#Balls#>=3)*[MeasureTimerLeft])*PI/8)))
DynamicVariables=1
Hidden=1
Group=Balls | TimeDigits

[MeterRightTimeDigit]
Meter=String
MeasureName=MeasureTime5Digit
MeterStyle=TimeDigitStyle
X=(((#Width#<250)?-2:((#Width#<450)?-3:-4))+[MeterRight:W]/2-2)R
Y=0r
TransformationMatrix=(Cos([MeasureTimerRight]*PI/8));(-(Sin([MeasureTimerRight]*PI/8)));(Sin([MeasureTimerRight]*PI/8));(Cos([MeasureTimerRight]*PI/8));(([MeterRight:X]+([MeterRight:W]/2))-([MeterRight:X]+([MeterRight:W]/2))*Cos([MeasureTimerRight]*PI/8)-(0.022*#Width#)*Sin([MeasureTimerRight]*PI/8));((0.022*#Width#)+([MeterRight:X]+([MeterRight:W]/2))*Sin([MeasureTimerRight]*PI/8)-(0.022*#Width#)*Cos([MeasureTimerRight]*PI/8))
DynamicVariables=1
Hidden=1
Group=Balls | TimeDigits

[MeterUpperBar]
Meter=Image
ImageName=#@#Deck.png
X=0
Y=0
W=#Width#
PreserveAspectRatio=1
Hidden=0

[MeterBallShadowLeft]
Meter=Image
ImageName=#@#Ball-shadow.png
X=([MeterLeft:X]-2*(#Width#>250)+0.12*#Width#*[MeasureTimerLeft])
Y=(0.394*#Width#)
W=(#Width#/11)
PreserveAspectRatio=1
DynamicVariables=1
Group=Shadow

[MeterBallShadowLeft2]
Meter=Image
ImageName=#@#Ball-shadow.png
X=([MeterLeft2:X]-2*(#Width#>250)+0.12*#Width#*([MeasureTimerLeft]+(#Balls#>=3)*[MeasureTimerRight])*(#Balls#>=1))
Y=0r
W=[MeterBallShadowLeft:W]
PreserveAspectRatio=1
DynamicVariables=1
Group=Shadow

[MeterBallShadowCenter]
Meter=Image
ImageName=#@#Ball-shadow.png
X=([MeterCenter:X]-2*(#Width#>250)+0.12*#Width#*([MeasureTimerLeft]+[MeasureTimerRight])*(#Balls#>=2))
Y=0r
W=[MeterBallShadowLeft:W]
PreserveAspectRatio=1
DynamicVariables=1
Group=Shadow

[MeterBallShadowRight2]
Meter=Image
ImageName=#@#Ball-shadow.png
X=([MeterRight2:X]-2*(#Width#>250)+0.12*#Width#*([MeasureTimerRight]+(#Balls#>=3)*[MeasureTimerLeft])*(#Balls#>=1))
Y=0r
W=[MeterBallShadowLeft:W]
PreserveAspectRatio=1
DynamicVariables=1
Group=Shadow

[MeterBallShadowRight]
Meter=Image
ImageName=#@#Ball-shadow.png
X=([MeterRight:X]-2*(#Width#>250)+0.12*#Width#*[MeasureTimerRight])
Y=0r
W=[MeterBallShadowLeft:W]
PreserveAspectRatio=1
DynamicVariables=1
Group=Shadow

[MeterShowHideDateTime]
MeasureName=MeasureDate
MeasureName2=MeasureTime
Meter=STRING
MeterStyle=DateTimeStyle
FontColor=0,0,0,1
SolidColor=0,0,0,1
LeftMouseUpAction=[!ToggleMeter "MeterDateTime"][!ToggleMeterGroup "TimeDigits"][!Redraw]

[MeterDateTime]
MeasureName=MeasureDate
MeasureName2=MeasureTime
Meter=STRING
MeterStyle=DateTimeStyle
FontColor=0,0,0
SolidColor=180,180,180,180
BevelType=1

[MeterSettingsButton]
Meter=STRING
X=(#Width#/15)
Y=(0.47*#Width#)
H=(#Width#/10)
W=(#Width#/20)
StringEffect=Border
FontSize=(#Width#/20)
FontFace=ToolTime
FontColor=255,255,255
SolidColor=199,80,80,1
StringAlign=CENTERCENTER
AntiAlias=1
Text=C
TransformationMatrix=(Cos(PI/2));(-Sin(PI/2));(Sin(PI/2));(Cos(PI/2));((#Width#/15)-(#Width#/15)*Cos(PI/2)-(0.47*#Width#*Sin(PI/2)));((0.47*#Width#)+(#Width#/15)*Sin(PI/2)-(0.47*#Width#*Cos(PI/2)))
MouseOverAction=[!SetOption #CURRENTSECTION# SolidColor "229,229,229,120"][!UpdateMeter "#CURRENTSECTION#"][!Redraw]
MouseLeaveAction=[!SetOption #CURRENTSECTION# SolidColor "199,80,80,1"][!UpdateMeter "#CURRENTSECTION#"][!Redraw]
LeftMouseDownAction=[!SetOption #CURRENTSECTION# X "(#Width#/15-1)"][!SetOption #CURRENTSECTION# Y "(0.47*#Width#+1)"][!SetOption #CURRENTSECTION# SolidColor "229,229,229,200"][!UpdateMeter "#CURRENTSECTION#"][!Redraw]
LeftMouseUpAction=[!ActivateConfig "#CURRENTCONFIG#" "Settings.ini"][!SetOption #CURRENTSECTION# X "(#Width#/15)"][!SetOption #CURRENTSECTION# Y "(0.47*#Width#)"][!SetOption #CURRENTSECTION# SolidColor "229,229,229,120"][!UpdateMeter "#CURRENTSECTION#"][!Redraw]
Group=Buttons
Hidden=1

[MeterStopButton]
Meter=STRING
X=(3+#Width#/6)
Y=(0.47*#Width#)
W=(#Width#/10)
H=(#Width#/20)
StringEffect=Border
FontSize=(#Width#/37.5)
FontFace=Wingdings
FontColor=255,255,255
SolidColor=199,80,80,1
StringAlign=CENTERCENTER
AntiAlias=1
Text=n
MouseOverAction=[!SetOption #CURRENTSECTION# SolidColor "229,229,229,120"][!UpdateMeter "#CURRENTSECTION#"][!Redraw]
MouseLeaveAction=[!SetOption #CURRENTSECTION# SolidColor "199,80,80,1"][!UpdateMeter "#CURRENTSECTION#"][!Redraw]
LeftMouseDownAction=[!SetOption #CURRENTSECTION# X "(4+#Width#/6)"][!SetOption #CURRENTSECTION# Y "(0.47*#Width#+1)"][!SetOption #CURRENTSECTION# SolidColor "229,229,229,200"][!UpdateMeter "#CURRENTSECTION#"][!Redraw]
LeftMouseUpAction=[!SetOption #CURRENTSECTION# X "(3+#Width#/6)"][!SetOption #CURRENTSECTION# Y "(0.47*#Width#)"][!SetOption #CURRENTSECTION# SolidColor "229,229,229,120"][!SetVariable Stop "1"][!UpdateMeasure "Timer"][!UpdateMeter "#CURRENTSECTION#"][!Redraw]
Group=Buttons
DynamicVariables=1
Hidden=(1-#ShowStop#*#ShowStop2#)
Replace the old code with this one.
Please test it and let me know what you think about it.
Yincognito
Posts: 653
Joined: February 27th, 2015, 2:38 pm

Re: Syncing skins

Yincognito » March 15th, 2019, 9:58 pm

balala wrote:
March 15th, 2019, 7:22 pm
So, here is the implementation of this request. I used the same balls, didn't recolor them yet, so they are still grey. Someone who is better at image manipulation will have to recolor them, because I don't work with images. I just added the digits of time. However when you load or refresh the skin, still the old time and date are visible. But if you click it, it is hidden and the digits on the balls are shown (yep, at next click these are again hidden and the old clock is shown again).
As usual, you can change the time format of the [MeasureTime] measure, if desired.
Replace the old code with this one.
Please test it and let me know what you think about it.
Wow, that was fast! :jawdrop It was just an idea, not a "request" though, but since you took it literally, well, I can only be happy about it ;-)
I tested both your original skin (which lacked 3 balls in the middle, but I guess this was the problem that you said in your previous comments it needed to be fixed, so I guess it's the fault of the "old code" - since I took the first packed skin you posted here) and the skin with the digits on the balls and they worked fine. I didn't know I had to click it to put the digits on the balls, so at first I thought it didn't work, but eventually I figured it out and it's all good.

The images can be taken from the internet and resized, so it's not a problem. I'm good enough at image manipulation, so I can easily do it. However, what I had in mind was:
- the digits on the balls to be "curved", like a map that you put on a globe (I guess this involves a lot of skewing and stuff with the TransformationMatrix, so it's a challenge)
- the digits on the balls dynamically changing according to the current time
- the color of the balls dynamically changing according to the digits on the balls (e.g. if it's a 2 on the ball, the ball should be blue, and if it's a 6, green)
- this is only in theory, but making some balls solids and some stripes would have added a bit of realism to it as well

Anyway, like I said, this was just an idea, if you wanted to play with it, not a request. I guess such a "clock" would be significantly attractive to users, generating lots of downloads...but that's just a guess. Bottom line, my idea was meant to make your skin really "boombastic", for you own satisfaction and fame, if it makes any sense. :)
User avatar
balala
Rainmeter Sage
Posts: 8391
Joined: October 11th, 2010, 6:27 pm
Location: Gheorgheni, Romania

Re: Syncing skins

balala » March 15th, 2019, 10:17 pm

Yincognito wrote:
March 15th, 2019, 9:58 pm
Wow, that was fast! :jawdrop It was just an idea, not a "request" though, but since you took it literally, well, I can only be happy about it
No, it wasn't fast enough, but this doesn't matter. I try to always update my skins, especially if I get an interesting request / idea (say it how want). And this was an interesting one.
Yincognito wrote:
March 15th, 2019, 9:58 pm
The images can be taken from the internet and resized, so it's not a problem. I'm good enough at image manipulation, so I can easily do it.
Ok, do it, let's see what we can get out of it. If you found / manipulated properly the needed images, having differently colored balls, post them back here and we'll see...
Yincognito wrote:
March 15th, 2019, 9:58 pm
However, what I had in mind was:
- the digits on the balls to be "curved", like a map that you put on a globe (I guess this involves a lot of skewing and stuff with the TransformationMatrix, so it's a challenge)
I'm not sure this can be done dynamically through Rainmeter code. At least for now I don't see a good way.
Yincognito wrote:
March 15th, 2019, 9:58 pm
- the digits on the balls dynamically changing according to the current time
My mistake. A DyanmicVariables=1 option is required on the newly added [MeasureTime1Digit], [MeasureTime2Digit], [MeasureTime3Digit],
[MeasureTime4Digit] and [MeasureTime5Digit] measures. Add them and the digits will always show the actual time.
Sorry for the mistake...
Yincognito wrote:
March 15th, 2019, 9:58 pm
- the color of the balls dynamically changing according to the digits on the balls (e.g. if it's a 2 on the ball, the ball should be blue, and if it's a 6, green)
- this is only in theory, but making some balls solids and some stripes would have added a bit of realism to it as well
Probably both are possible, if we have the appropriate images, as discussed above.
Yincognito
Posts: 653
Joined: February 27th, 2015, 2:38 pm

Re: Syncing skins

Yincognito » March 15th, 2019, 10:50 pm

balala wrote:
March 15th, 2019, 10:17 pm
I try to always update my skins, especially if I get an interesting request / idea (say it how want). And this was an interesting one.
Thanks - I'm never out of ideas, LOL.
balala wrote:
March 15th, 2019, 10:17 pm
Ok, do it, let's see what we can get out of it. If you found / manipulated properly the needed images, having differently colored balls, post them back here and we'll see...
Working on it as we "speak"...
balala wrote:
March 15th, 2019, 10:17 pm
My mistake. A DynamicVariables=1 option is required on the newly added [MeasureTime1Digit], [MeasureTime2Digit], [MeasureTime3Digit], [MeasureTime4Digit] and [MeasureTime5Digit] measures. Add them and the digits will always show the actual time. Sorry for the mistake...
Done - it works. However, you have another mistake (sorry about that, I'm direct with people): when resizing the balls, the digits are misplaced, and probably not resized as well (my guess is that they retain their default original position). I tried increasing the size of the balls to 400 and the digits were not centered on the balls and some were a bit outside the ball area. Thinking about it, I'm not sure this is a mistake, since initially the skin wasn't made to show digits on the balls, so when you added that feature, you probably forgot to adjust the digits' position and/or size to the new position and/or dimension of the balls...

That being said, I know a bit about Newton's cradle, so I assume the balls stoping their movement after a while is intentional (and physically correct), right?