2016-04-07 12 views
0

Die folgende Funktion beinhaltet die Verwendung von collage, nur um die Form/Form in ein Element zu konvertieren.Elm - Forminspektion

makeSlider : Element -> Form -> Element 
makeSlider sliderShape sliderBarForm = 
    let                         
    sliderBar = 
     --convert sliderBarForm from type Form to Element 
     collage 1000 1000 [(move (0,0) sliderBarForm)] 
    in 
    layers [sliderShape, sliderBar] 

Gibt es eine Möglichkeit, ein Formular Dimensionen zu extrahieren, wie Graphics.Element.sizeOf, so dass die makeSlider Funktion muss nicht die expliziten Dimensionen von sliderBarForm wissen?

Oder eine toElement Funktion vorhanden sein, damit

collage 1000 1000 [(move (0,0) sliderBarForm)]

mit

toElement (move (0,0) sliderBarForm) ersetzt werden?

Antwort

3

Ich glaube nicht, dass Sie leicht die Dimensionen eines Formulars bekommen können. Ich schätze, das liegt daran, dass eine Form so viele verschiedene Dinge (Formen, Wege usw.) haben kann. Wenn ich die Dimensionen später kennen muss, behalte ich sie beim Erstellen des Formulars im Auge.

type alias MyForm = 
    { form : Form 
    , width : Int 
    , height : Int 
    } 

makeRectForm: Float -> Float -> MyForm 
makeRectForm w h = {form: (filled grey (rect w h)), width: (round w), height: (round h)} 

in Ihrem Fall Dann können Sie eine MyForm mit dem collage verwenden.

makeSlider : Element -> MyForm -> Element 
makeSlider sliderShape sliderBarMyForm = 
    let                         
    sliderBar = 
     --convert sliderBarForm from type Form to Element 
     collage sliderBarMyForm.width sliderBarMyForm.height [(move (0,0) sliderBarMyForm)] 
    in 
    layers [sliderShape, sliderBar] 
+0

Macht Sinn - danke - großartig, da ich keine zusätzlichen Parameter für 'makeSlider' verwenden muss. – category