mirror of
https://git.sr.ht/~eliasnaur/gio
synced 2026-07-04 08:55:35 +00:00
all: [API] change op.Offset to take integer coordinates
op.Offset is a convenience function most often used by layouts. Layouts usually operate in integer coordinates, and the float32 version of op.Offset needlessly force conversions from int to float32. This change makes op.Offset take integer coordinates, to better match its intended use. Signed-off-by: Elias Naur <mail@eliasnaur.com>
This commit is contained in:
+1
-1
@@ -64,7 +64,7 @@ func (d *Draggable) Layout(gtx layout.Context, w, drag layout.Widget) layout.Dim
|
||||
|
||||
if drag != nil && d.drag.Pressed() {
|
||||
rec := op.Record(gtx.Ops)
|
||||
op.Offset(pos).Add(gtx.Ops)
|
||||
op.Offset(pos.Round()).Add(gtx.Ops)
|
||||
drag(gtx)
|
||||
op.Defer(gtx.Ops, rec.Stop())
|
||||
}
|
||||
|
||||
+2
-2
@@ -724,7 +724,7 @@ func (e *Editor) PaintSelection(gtx layout.Context) {
|
||||
|
||||
dotStart := image.Pt(leftmost.x.Round(), leftmost.y)
|
||||
dotEnd := image.Pt(rightmost.x.Round(), rightmost.y)
|
||||
t := op.Offset(layout.FPt(scroll.Mul(-1))).Push(gtx.Ops)
|
||||
t := op.Offset(scroll.Mul(-1)).Push(gtx.Ops)
|
||||
size := image.Rectangle{
|
||||
Min: dotStart.Sub(image.Point{Y: line.Ascent.Ceil()}),
|
||||
Max: dotEnd.Add(image.Point{Y: line.Descent.Ceil()}),
|
||||
@@ -760,7 +760,7 @@ func (e *Editor) PaintText(gtx layout.Context) {
|
||||
}
|
||||
l := subLayout(line, start, end)
|
||||
|
||||
t := op.Offset(layout.FPt(off)).Push(gtx.Ops)
|
||||
t := op.Offset(off).Push(gtx.Ops)
|
||||
op := clip.Outline{Path: e.shaper.Shape(e.font, e.textSize, l)}.Op().Push(gtx.Ops)
|
||||
paint.PaintOp{}.Add(gtx.Ops)
|
||||
op.Pop()
|
||||
|
||||
+1
-3
@@ -3,8 +3,6 @@
|
||||
package widget
|
||||
|
||||
import (
|
||||
"image"
|
||||
|
||||
"gioui.org/gesture"
|
||||
"gioui.org/io/key"
|
||||
"gioui.org/io/pointer"
|
||||
@@ -65,7 +63,7 @@ func (e *Enum) Layout(gtx layout.Context, k string, content layout.Widget) layou
|
||||
m := op.Record(gtx.Ops)
|
||||
dims := content(gtx)
|
||||
c := m.Stop()
|
||||
defer clip.Rect(image.Rectangle{Max: dims.Size}).Push(gtx.Ops).Pop()
|
||||
defer clip.Rect{Max: dims.Size}.Push(gtx.Ops).Pop()
|
||||
|
||||
state := e.index(k)
|
||||
if state == nil {
|
||||
|
||||
+1
-1
@@ -119,7 +119,7 @@ func (l Label) Layout(gtx layout.Context, s text.Shaper, font text.Font, size un
|
||||
lt := subLayout(line, start, end)
|
||||
|
||||
off := image.Point{X: start.x.Floor(), Y: start.y}
|
||||
t := op.Offset(layout.FPt(off)).Push(gtx.Ops)
|
||||
t := op.Offset(off).Push(gtx.Ops)
|
||||
op := clip.Outline{Path: s.Shape(font, textSize, lt)}.Op().Push(gtx.Ops)
|
||||
paint.PaintOp{}.Add(gtx.Ops)
|
||||
op.Pop()
|
||||
|
||||
@@ -297,9 +297,9 @@ func drawInk(gtx layout.Context, c widget.Press) {
|
||||
ink := paint.ColorOp{Color: rgba}
|
||||
ink.Add(gtx.Ops)
|
||||
rr := size * .5
|
||||
defer op.Offset(layout.FPt(c.Position).Add(f32.Point{
|
||||
X: -rr,
|
||||
Y: -rr,
|
||||
defer op.Offset(c.Position.Add(image.Point{
|
||||
X: -int(rr),
|
||||
Y: -int(rr),
|
||||
})).Push(gtx.Ops).Pop()
|
||||
defer clip.UniformRRect(f32.Rectangle{Max: f32.Pt(size, size)}, rr).Push(gtx.Ops).Pop()
|
||||
paint.PaintOp{}.Add(gtx.Ops)
|
||||
|
||||
@@ -109,7 +109,7 @@ func (d *DecorationsStyle) layoutDecorations(gtx layout.Context) layout.Dimensio
|
||||
if size.Y < dims.Size.Y {
|
||||
size.Y = dims.Size.Y
|
||||
}
|
||||
op.Offset(f32.Point{X: float32(dims.Size.X)}).Add(gtx.Ops)
|
||||
op.Offset(image.Pt(dims.Size.X, 0)).Add(gtx.Ops)
|
||||
}
|
||||
return layout.Dimensions{Size: size}
|
||||
}),
|
||||
|
||||
@@ -193,7 +193,7 @@ func (s ScrollbarStyle) layout(gtx layout.Context, axis layout.Axis, viewportSta
|
||||
|
||||
// Lay out the indicator.
|
||||
offset := axis.Convert(image.Pt(viewStart, 0))
|
||||
defer op.Offset(layout.FPt(offset)).Push(gtx.Ops).Pop()
|
||||
defer op.Offset(offset).Push(gtx.Ops).Pop()
|
||||
paint.FillShape(gtx.Ops, s.Indicator.Color, clip.RRect{
|
||||
Rect: f32.Rectangle{
|
||||
Max: indicatorDimsF,
|
||||
|
||||
@@ -35,18 +35,18 @@ func (l LoaderStyle) Layout(gtx layout.Context) layout.Dimensions {
|
||||
diam = gtx.Px(unit.Dp(24))
|
||||
}
|
||||
sz := gtx.Constraints.Constrain(image.Pt(diam, diam))
|
||||
radius := float32(sz.X) * .5
|
||||
defer op.Offset(f32.Pt(radius, radius)).Push(gtx.Ops).Pop()
|
||||
radius := sz.X / 2
|
||||
defer op.Offset(image.Pt(radius, radius)).Push(gtx.Ops).Pop()
|
||||
|
||||
dt := float32((time.Duration(gtx.Now.UnixNano()) % (time.Second)).Seconds())
|
||||
startAngle := dt * math.Pi * 2
|
||||
endAngle := startAngle + math.Pi*1.5
|
||||
|
||||
defer clipLoader(gtx.Ops, startAngle, endAngle, radius).Push(gtx.Ops).Pop()
|
||||
defer clipLoader(gtx.Ops, startAngle, endAngle, float32(radius)).Push(gtx.Ops).Pop()
|
||||
paint.ColorOp{
|
||||
Color: l.Color,
|
||||
}.Add(gtx.Ops)
|
||||
defer op.Offset(f32.Pt(-radius, -radius)).Push(gtx.Ops).Pop()
|
||||
defer op.Offset(image.Pt(-radius, -radius)).Push(gtx.Ops).Pop()
|
||||
paint.PaintOp{}.Add(gtx.Ops)
|
||||
op.InvalidateOp{}.Add(gtx.Ops)
|
||||
return layout.Dimensions{
|
||||
|
||||
@@ -7,7 +7,6 @@ import (
|
||||
"image/color"
|
||||
"math"
|
||||
|
||||
"gioui.org/f32"
|
||||
"gioui.org/layout"
|
||||
"gioui.org/op"
|
||||
"gioui.org/op/paint"
|
||||
@@ -35,10 +34,10 @@ func (p ProgressCircleStyle) Layout(gtx layout.Context) layout.Dimensions {
|
||||
diam = gtx.Px(unit.Dp(24))
|
||||
}
|
||||
sz := gtx.Constraints.Constrain(image.Pt(diam, diam))
|
||||
radius := float32(sz.X) * .5
|
||||
defer op.Offset(f32.Pt(radius, radius)).Push(gtx.Ops).Pop()
|
||||
radius := sz.X / 2
|
||||
defer op.Offset(image.Pt(radius, radius)).Push(gtx.Ops).Pop()
|
||||
|
||||
defer clipLoader(gtx.Ops, -math.Pi/2, -math.Pi/2+math.Pi*2*p.Progress, radius).Push(gtx.Ops).Pop()
|
||||
defer clipLoader(gtx.Ops, -math.Pi/2, -math.Pi/2+math.Pi*2*p.Progress, float32(radius)).Push(gtx.Ops).Pop()
|
||||
paint.ColorOp{
|
||||
Color: p.Color,
|
||||
}.Add(gtx.Ops)
|
||||
|
||||
@@ -50,7 +50,7 @@ func (s SliderStyle) Layout(gtx layout.Context) layout.Dimensions {
|
||||
size := axis.Convert(image.Pt(sizeMain, sizeCross))
|
||||
|
||||
o := axis.Convert(image.Pt(thumbRadius, 0))
|
||||
trans := op.Offset(layout.FPt(o)).Push(gtx.Ops)
|
||||
trans := op.Offset(o).Push(gtx.Ops)
|
||||
gtx.Constraints.Min = axis.Convert(image.Pt(sizeMain-2*thumbRadius, sizeCross))
|
||||
s.Float.Layout(gtx, thumbRadius, s.Min, s.Max)
|
||||
gtx.Constraints.Min = gtx.Constraints.Min.Add(axis.Convert(image.Pt(0, sizeCross)))
|
||||
|
||||
+10
-10
@@ -44,7 +44,7 @@ func (s SwitchStyle) Layout(gtx layout.Context) layout.Dimensions {
|
||||
trackWidth := gtx.Px(unit.Dp(36))
|
||||
trackHeight := gtx.Px(unit.Dp(16))
|
||||
thumbSize := gtx.Px(unit.Dp(20))
|
||||
trackOff := float32(thumbSize-trackHeight) * .5
|
||||
trackOff := (thumbSize - trackHeight) / 2
|
||||
|
||||
// Draw track.
|
||||
trackCorner := float32(trackHeight) / 2
|
||||
@@ -60,7 +60,7 @@ func (s SwitchStyle) Layout(gtx layout.Context) layout.Dimensions {
|
||||
col = f32color.Disabled(col)
|
||||
}
|
||||
trackColor := s.Color.Track
|
||||
t := op.Offset(f32.Point{Y: trackOff}).Push(gtx.Ops)
|
||||
t := op.Offset(image.Point{Y: trackOff}).Push(gtx.Ops)
|
||||
cl := clip.UniformRRect(trackRect, trackCorner).Push(gtx.Ops)
|
||||
paint.ColorOp{Color: trackColor}.Add(gtx.Ops)
|
||||
paint.PaintOp{}.Add(gtx.Ops)
|
||||
@@ -70,9 +70,9 @@ func (s SwitchStyle) Layout(gtx layout.Context) layout.Dimensions {
|
||||
// Draw thumb ink.
|
||||
inkSize := gtx.Px(unit.Dp(44))
|
||||
rr := float32(inkSize) * .5
|
||||
inkOff := f32.Point{
|
||||
X: float32(trackWidth)*.5 - rr,
|
||||
Y: -rr + float32(trackHeight)*.5 + trackOff,
|
||||
inkOff := image.Point{
|
||||
X: trackWidth/2 - int(rr),
|
||||
Y: -int(rr) + trackHeight/2 + trackOff,
|
||||
}
|
||||
t = op.Offset(inkOff).Push(gtx.Ops)
|
||||
gtx.Constraints.Min = image.Pt(inkSize, inkSize)
|
||||
@@ -85,8 +85,8 @@ func (s SwitchStyle) Layout(gtx layout.Context) layout.Dimensions {
|
||||
|
||||
// Compute thumb offset.
|
||||
if s.Switch.Value {
|
||||
xoff := float32(trackWidth - thumbSize)
|
||||
defer op.Offset(f32.Point{X: xoff}).Push(gtx.Ops).Pop()
|
||||
xoff := trackWidth - thumbSize
|
||||
defer op.Offset(image.Point{X: xoff}).Push(gtx.Ops).Pop()
|
||||
}
|
||||
|
||||
thumbRadius := float32(thumbSize) / 2
|
||||
@@ -115,9 +115,9 @@ func (s SwitchStyle) Layout(gtx layout.Context) layout.Dimensions {
|
||||
|
||||
// Set up click area.
|
||||
clickSize := gtx.Px(unit.Dp(40))
|
||||
clickOff := f32.Point{
|
||||
X: thumbRadius - float32(clickSize)*.5,
|
||||
Y: (float32(trackHeight)-float32(clickSize))*.5 + trackOff,
|
||||
clickOff := image.Point{
|
||||
X: (thumbSize - clickSize) / 2,
|
||||
Y: (trackHeight-clickSize)/2 + trackOff,
|
||||
}
|
||||
defer op.Offset(clickOff).Push(gtx.Ops).Pop()
|
||||
sz := image.Pt(clickSize, clickSize)
|
||||
|
||||
Reference in New Issue
Block a user