0

下面的函数包括使用collage, 仅用于将形状/表单转换为元素。

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]

有没有办法提取表单的维度,比如Graphics.Element.sizeOf,这样makeSlider函数就不需要知道 的显式维度sliderBarForm

或者是否toElement存在一个函数,使得

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

可以替换为

toElement (move (0,0) sliderBarForm)?

4

1 回答 1

3

我认为您不能轻易获得表格的尺寸。我想这是因为一个表单可以是很多不同种类的东西(形状、路径等)。当我以后需要知道尺寸时,我会在创建表单时跟踪它们。

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)}

然后在您的情况下,您可以将 aMyFormcollage.

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]
于 2016-04-07T14:07:37.077 回答