code: func (win *Window) PropertyFloat(name string, min float64, val *float64, max, step, inc_per_pixel float64, prec int) (changed bool) {
  	s, bounds, fitting := win.widget()
  	if fitting != nil {
  		fitting(propertyWidth(int(max+1), &win.ctx.Style.Property, win.ctx.Style.Font))
  	}
  	if !s {
  		return
  	}
  	in := win.inputMaybe(s)
  	text := strconv.FormatFloat(*val, 'G', prec, 32)
  	ret, delta, ed := win.doProperty(bounds, name, text, FilterFloat, in)
  	switch ret {
  	case doPropertyDec:
  		*val -= step
  	case doPropertyInc:
  		*val += step
  	case doPropertyDrag:
  		*val += float64(delta) * inc_per_pixel
  	case doPropertySet:
  		*val, _ = strconv.ParseFloat(string(ed.Buffer), 64)
  	}
  	changed = ret != doPropertyStay
  	if changed {
  		*val = clampFloat(min, *val, max)
  	}
  	return
  }
docs: // Adds a property widget to win for floating point properties.
  // A property widget will display a text label, a small text editor
  // for the property value and one up and one down button.
  // The value can be modified by editing the text value, by clicking
  // the up/down buttons (which will increase/decrease the value by step)
  // or by clicking and dragging over the label.
  // Returns true when the property's value is changed