module MeterF where import AllFudgets import Data.Ratio meterF :: RealFrac v => InF v (Ratio Int) -- because of the monomorphism restr meterF = meterF' standard meterF' pm = post >^^=< border3dF True 1 (graphicsDispF' params) >=^< pre where params = pm . --setSizing Static . --setGfxEventMask [GfxButtonMask,GfxDragMask] . setBgColor meterBg . setFgColorSpec meterFg . setBorderWidth 0 pre = Right . replaceAllGfx . meterD post = mapFilterSP pick pick (GfxButtonEvent {gfxType=Pressed,gfxPaths=p:_}) = change p pick (GfxButtonEvent {gfxType=Released,gfxPaths=p:_}) = done p pick (GfxMotionEvent {gfxPaths=p:_}) = change p pick _ = Nothing change = Just . inputChange . extr done = Just . inputMsg . extr extr (_,(p,Rect p0 s)) = xcoord (p-p0) % xcoord s meterD r = FlexD (Point 50 5) False True drawfun where drawfun (Rect p (Point w h)) = [FillRectangle (Rect p (Point w' h))] where w' = scale r w meterFg = colorSpec $ argKeyList "meterfg" ["blue2",fgColor,"black"] meterBg = colorSpec $ argKeyList "meterbg" [bgColor,"white"]