~eliasnaur/gio

9f6e09317d8040f4e77bbf9abe6b682f06465ac9 — Chris Waldon 1 year, 4 months ago feacd1e
widget/material: add disabled state support to all widgets

This commit configures all remaining widgets to draw themselves in a disabled state
when their layout.Context is disabled. A description of the
strategy employed by each follows:

- Checkbox and RadioButton: Draws the icon component in a lighter color. Currently the label text is left
in its default color.
- ProgressBar: The "progress" color is lightened, but not as much as the background color. This makes the current progress value still readable.
- Editor: The cursor is no longer drawn and the text is lightened.
- Switch: The track is unchanged, but the circular "thumb" component is lightened.

Signed-off-by: Chris Waldon <christopher.waldon.dev@gmail.com>
M widget/material/checkable.go => widget/material/checkable.go +3 -0
@@ 41,6 41,9 @@ func (c *checkable) layout(gtx layout.Context, checked bool) layout.Dimensions {
				return layout.UniformInset(unit.Dp(2)).Layout(gtx, func(gtx layout.Context) layout.Dimensions {
					size := gtx.Px(c.Size)
					icon.Color = c.IconColor
					if gtx.Queue == nil {
						icon.Color = mulAlpha(icon.Color, 150)
					}
					icon.Layout(gtx, unit.Px(float32(size)))
					return layout.Dimensions{
						Size: image.Point{X: size, Y: size},

M widget/material/editor.go => widget/material/editor.go +10 -3
@@ 52,13 52,20 @@ func (e EditorStyle) Layout(gtx layout.Context) layout.Dimensions {
		gtx.Constraints.Min.Y = h
	}
	dims = e.Editor.Layout(gtx, e.shaper, e.Font, e.TextSize)
	disabled := gtx.Queue == nil
	if e.Editor.Len() > 0 {
		paint.ColorOp{Color: e.Color}.Add(gtx.Ops)
		textColor := e.Color
		if disabled {
			textColor = mulAlpha(textColor, 150)
		}
		paint.ColorOp{Color: textColor}.Add(gtx.Ops)
		e.Editor.PaintText(gtx)
	} else {
		call.Add(gtx.Ops)
	}
	paint.ColorOp{Color: e.Color}.Add(gtx.Ops)
	e.Editor.PaintCaret(gtx)
	if !disabled {
		paint.ColorOp{Color: e.Color}.Add(gtx.Ops)
		e.Editor.PaintCaret(gtx)
	}
	return dims
}

M widget/material/progressbar.go => widget/material/progressbar.go +5 -1
@@ 64,7 64,11 @@ func (p ProgressBarStyle) Layout(gtx layout.Context) layout.Dimensions {
		}),
		layout.Stacked(func(gtx layout.Context) layout.Dimensions {
			fillWidth := (progressBarWidth / 100) * float32(progress)
			return shader(fillWidth, p.Color)
			fillColor := p.Color
			if gtx.Queue == nil {
				fillColor = mulAlpha(fillColor, 200)
			}
			return shader(fillWidth, fillColor)
		}),
	)
}

M widget/material/switch.go => widget/material/switch.go +9 -3
@@ 47,12 47,20 @@ func (s SwitchStyle) Layout(gtx layout.Context) layout.Dimensions {
		X: float32(trackWidth),
		Y: float32(trackHeight),
	}}
	col := s.Color.Disabled
	if s.Switch.Value {
		col = s.Color.Enabled
	}
	if gtx.Queue == nil {
		col = mulAlpha(col, 150)
	}
	trackColor := mulAlpha(col, 150)
	op.TransformOp{}.Offset(f32.Point{Y: trackOff}).Add(gtx.Ops)
	clip.Rect{
		Rect: trackRect,
		NE:   trackCorner, NW: trackCorner, SE: trackCorner, SW: trackCorner,
	}.Op(gtx.Ops).Add(gtx.Ops)
	paint.ColorOp{Color: rgb(0x9b9b9b)}.Add(gtx.Ops)
	paint.ColorOp{Color: trackColor}.Add(gtx.Ops)
	paint.PaintOp{Rect: trackRect}.Add(gtx.Ops)
	stack.Pop()



@@ 79,11 87,9 @@ func (s SwitchStyle) Layout(gtx layout.Context) layout.Dimensions {

	// Compute thumb offset and color.
	stack = op.Push(gtx.Ops)
	col := s.Color.Disabled
	if s.Switch.Value {
		off := trackWidth - thumbSize
		op.TransformOp{}.Offset(f32.Point{X: float32(off)}).Add(gtx.Ops)
		col = s.Color.Enabled
	}

	// Draw thumb shadow, a translucent disc slightly larger than the