Skip to content

Commit

Permalink
Merge pull request AllenDang#362 from gucio321/use-color-interface
Browse files Browse the repository at this point in the history
Use color interface
  • Loading branch information
AllenDang authored Sep 30, 2021
2 parents 34284ab + 5d590a4 commit 7a1a262
Show file tree
Hide file tree
Showing 8 changed files with 88 additions and 49 deletions.
28 changes: 14 additions & 14 deletions Canvas.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ func GetCanvas() *Canvas {
}

// AddLine draws a line (from p1 to p2).
func (c *Canvas) AddLine(p1, p2 image.Point, col color.RGBA, thickness float32) {
func (c *Canvas) AddLine(p1, p2 image.Point, col color.Color, thickness float32) {
c.drawlist.AddLine(ToVec2(p1), ToVec2(p2), ToVec4Color(col), thickness)
}

Expand Down Expand Up @@ -59,52 +59,52 @@ const (
)

// AddRect draws a rectangle.
func (c *Canvas) AddRect(pMin, pMax image.Point, col color.RGBA, rounding float32, roundingCorners DrawFlags, thickness float32) {
func (c *Canvas) AddRect(pMin, pMax image.Point, col color.Color, rounding float32, roundingCorners DrawFlags, thickness float32) {
c.drawlist.AddRect(ToVec2(pMin), ToVec2(pMax), ToVec4Color(col), rounding, int(roundingCorners), thickness)
}

// AddRectFilled draws a rectangle filled with `col`.
func (c *Canvas) AddRectFilled(pMin, pMax image.Point, col color.RGBA, rounding float32, roundingCorners DrawFlags) {
func (c *Canvas) AddRectFilled(pMin, pMax image.Point, col color.Color, rounding float32, roundingCorners DrawFlags) {
c.drawlist.AddRectFilled(ToVec2(pMin), ToVec2(pMax), ToVec4Color(col), rounding, int(roundingCorners))
}

// AddText draws text.
func (c *Canvas) AddText(pos image.Point, col color.RGBA, text string) {
func (c *Canvas) AddText(pos image.Point, col color.Color, text string) {
c.drawlist.AddText(ToVec2(pos), ToVec4Color(col), tStr(text))
}

// AddBezierCubic draws bezier cubic.
func (c *Canvas) AddBezierCubic(pos0, cp0, cp1, pos1 image.Point, col color.RGBA, thickness float32, numSegments int) {
func (c *Canvas) AddBezierCubic(pos0, cp0, cp1, pos1 image.Point, col color.Color, thickness float32, numSegments int) {
c.drawlist.AddBezierCubic(ToVec2(pos0), ToVec2(cp0), ToVec2(cp1), ToVec2(pos1), ToVec4Color(col), thickness, numSegments)
}

// AddTriangle draws a triangle.
func (c *Canvas) AddTriangle(p1, p2, p3 image.Point, col color.RGBA, thickness float32) {
func (c *Canvas) AddTriangle(p1, p2, p3 image.Point, col color.Color, thickness float32) {
c.drawlist.AddTriangle(ToVec2(p1), ToVec2(p2), ToVec2(p3), ToVec4Color(col), thickness)
}

// AddTriangleFilled draws a filled triangle.
func (c *Canvas) AddTriangleFilled(p1, p2, p3 image.Point, col color.RGBA) {
func (c *Canvas) AddTriangleFilled(p1, p2, p3 image.Point, col color.Color) {
c.drawlist.AddTriangleFilled(ToVec2(p1), ToVec2(p2), ToVec2(p3), ToVec4Color(col))
}

// AddCircle draws a circle.
func (c *Canvas) AddCircle(center image.Point, radius float32, col color.RGBA, segments int, thickness float32) {
func (c *Canvas) AddCircle(center image.Point, radius float32, col color.Color, segments int, thickness float32) {
c.drawlist.AddCircle(ToVec2(center), radius, ToVec4Color(col), segments, thickness)
}

// AddCircleFilled draws a filled circle.
func (c *Canvas) AddCircleFilled(center image.Point, radius float32, col color.RGBA) {
func (c *Canvas) AddCircleFilled(center image.Point, radius float32, col color.Color) {
c.drawlist.AddCircleFilled(ToVec2(center), radius, ToVec4Color(col))
}

// AddQuad draws a quad.
func (c *Canvas) AddQuad(p1, p2, p3, p4 image.Point, col color.RGBA, thickness float32) {
func (c *Canvas) AddQuad(p1, p2, p3, p4 image.Point, col color.Color, thickness float32) {
c.drawlist.AddQuad(ToVec2(p1), ToVec2(p2), ToVec2(p3), ToVec2(p4), ToVec4Color(col), thickness)
}

// AddQuadFilled draws a filled quad.
func (c *Canvas) AddQuadFilled(p1, p2, p3, p4 image.Point, col color.RGBA) {
func (c *Canvas) AddQuadFilled(p1, p2, p3, p4 image.Point, col color.Color) {
c.drawlist.AddQuadFilled(ToVec2(p1), ToVec2(p2), ToVec2(p3), ToVec2(p4), ToVec4Color(col))
}

Expand All @@ -122,11 +122,11 @@ func (c *Canvas) PathLineToMergeDuplicate(pos image.Point) {
c.drawlist.PathLineToMergeDuplicate(ToVec2(pos))
}

func (c *Canvas) PathFillConvex(col color.RGBA) {
func (c *Canvas) PathFillConvex(col color.Color) {
c.drawlist.PathFillConvex(ToVec4Color(col))
}

func (c *Canvas) PathStroke(col color.RGBA, closed bool, thickness float32) {
func (c *Canvas) PathStroke(col color.Color, closed bool, thickness float32) {
c.drawlist.PathStroke(ToVec4Color(col), closed, thickness)
}

Expand All @@ -146,6 +146,6 @@ func (c *Canvas) AddImage(texture *Texture, pMin, pMax image.Point) {
c.drawlist.AddImage(texture.id, ToVec2(pMin), ToVec2(pMax))
}

func (c *Canvas) AddImageV(texture *Texture, pMin, pMax, uvMin, uvMax image.Point, col color.RGBA) {
func (c *Canvas) AddImageV(texture *Texture, pMin, pMax, uvMin, uvMax image.Point, col color.Color) {
c.drawlist.AddImageV(texture.id, ToVec2(pMin), ToVec2(pMax), ToVec2(uvMin), ToVec2(uvMax), ToVec4Color(col))
}
11 changes: 6 additions & 5 deletions MasterWindow.go
Original file line number Diff line number Diff line change
Expand Up @@ -163,12 +163,13 @@ func (w *MasterWindow) setTheme() {
}

// SetBgColor sets background color of master window.
func (w *MasterWindow) SetBgColor(bgColor color.RGBA) {
func (w *MasterWindow) SetBgColor(bgColor color.Color) {
r, g, b, a := bgColor.RGBA()
w.clearColor = [4]float32{
float32(bgColor.R) / 255.0,
float32(bgColor.G) / 255.0,
float32(bgColor.B) / 255.0,
float32(bgColor.A) / 255.0,
float32(r) / 255.0,
float32(g) / 255.0,
float32(b) / 255.0,
float32(a) / 255.0,
}
}

Expand Down
22 changes: 11 additions & 11 deletions Style.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,49 +29,49 @@ func PopFont() {

// PushStyleColor wrapps imgui.PushStyleColor
// NOTE: don't forget to call PopStyleColor()!
func PushStyleColor(id StyleColorID, col color.RGBA) {
func PushStyleColor(id StyleColorID, col color.Color) {
imgui.PushStyleColor(imgui.StyleColorID(id), ToVec4Color(col))
}

// PushColorText calls PushStyleColor(StyleColorText,...)
// NOTE: don't forget to call PopStyleColor()!
func PushColorText(col color.RGBA) {
func PushColorText(col color.Color) {
imgui.PushStyleColor(imgui.StyleColorText, ToVec4Color(col))
}

// PushColorTextDisabled calls PushStyleColor(StyleColorTextDisabled,...)
// NOTE: don't forget to call PopStyleColor()!
func PushColorTextDisabled(col color.RGBA) {
func PushColorTextDisabled(col color.Color) {
imgui.PushStyleColor(imgui.StyleColorTextDisabled, ToVec4Color(col))
}

// PushColorWindowBg calls PushStyleColor(StyleColorWindowBg,...)
// NOTE: don't forget to call PopStyleColor()!
func PushColorWindowBg(col color.RGBA) {
func PushColorWindowBg(col color.Color) {
imgui.PushStyleColor(imgui.StyleColorWindowBg, ToVec4Color(col))
}

// PushColorFrameBg calls PushStyleColor(StyleColorFrameBg,...)
// NOTE: don't forget to call PopStyleColor()!
func PushColorFrameBg(col color.RGBA) {
func PushColorFrameBg(col color.Color) {
imgui.PushStyleColor(imgui.StyleColorFrameBg, ToVec4Color(col))
}

// PushColorButton calls PushStyleColor(StyleColorButton,...)
// NOTE: don't forget to call PopStyleColor()!
func PushColorButton(col color.RGBA) {
func PushColorButton(col color.Color) {
imgui.PushStyleColor(imgui.StyleColorButton, ToVec4Color(col))
}

// PushColorButtonHovered calls PushStyleColor(StyleColorButtonHovered,...)
// NOTE: don't forget to call PopStyleColor()!
func PushColorButtonHovered(col color.RGBA) {
func PushColorButtonHovered(col color.Color) {
imgui.PushStyleColor(imgui.StyleColorButtonHovered, ToVec4Color(col))
}

// PushColorButtonActive calls PushStyleColor(StyleColorButtonActive,...)
// NOTE: don't forget to call PopStyleColor()!
func PushColorButtonActive(col color.RGBA) {
func PushColorButtonActive(col color.Color) {
imgui.PushStyleColor(imgui.StyleColorButtonActive, ToVec4Color(col))
}

Expand Down Expand Up @@ -329,7 +329,7 @@ var _ Widget = &StyleSetter{}

// StyleSetter is a user-friendly way to manage imgui styles.
type StyleSetter struct {
colors map[StyleColorID]color.RGBA
colors map[StyleColorID]color.Color
styles map[StyleVarID]imgui.Vec2
font *FontInfo
disabled bool
Expand All @@ -339,14 +339,14 @@ type StyleSetter struct {
// Style initializes a style setter (see examples/setstyle).
func Style() *StyleSetter {
var ss StyleSetter
ss.colors = make(map[StyleColorID]color.RGBA)
ss.colors = make(map[StyleColorID]color.Color)
ss.styles = make(map[StyleVarID]imgui.Vec2)

return &ss
}

// SetColor sets colorID's color.
func (ss *StyleSetter) SetColor(colorID StyleColorID, col color.RGBA) *StyleSetter {
func (ss *StyleSetter) SetColor(colorID StyleColorID, col color.Color) *StyleSetter {
ss.colors[colorID] = col
return ss
}
Expand Down
11 changes: 6 additions & 5 deletions Utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,12 +48,13 @@ func ImageToRgba(img image.Image) *image.RGBA {
}

// ToVec4Color converts rgba color to imgui.Vec4.
func ToVec4Color(col color.RGBA) imgui.Vec4 {
func ToVec4Color(col color.Color) imgui.Vec4 {
r, g, b, a := col.RGBA()
return imgui.Vec4{
X: float32(col.R) / 255,
Y: float32(col.G) / 255,
Z: float32(col.B) / 255,
W: float32(col.A) / 255,
X: float32(r) / 255,
Y: float32(g) / 255,
Z: float32(b) / 255,
W: float32(a) / 255,
}
}

Expand Down
29 changes: 15 additions & 14 deletions Widgets.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import (
"github.com/AllenDang/imgui-go"
resty "github.com/go-resty/resty/v2"
"github.com/sahilm/fuzzy"
"golang.org/x/image/colornames"
)

// GenAutoID automatically generates fidget's id.
Expand Down Expand Up @@ -357,8 +358,8 @@ type ImageButtonWidget struct {
uv0 image.Point
uv1 image.Point
framePadding int
bgColor color.RGBA
tintColor color.RGBA
bgColor color.Color
tintColor color.Color
onClick func()
}

Expand Down Expand Up @@ -394,12 +395,12 @@ func (b *ImageButtonWidget) UV(uv0, uv1 image.Point) *ImageButtonWidget {
return b
}

func (b *ImageButtonWidget) BgColor(bgColor color.RGBA) *ImageButtonWidget {
func (b *ImageButtonWidget) BgColor(bgColor color.Color) *ImageButtonWidget {
b.bgColor = bgColor
return b
}

func (b *ImageButtonWidget) TintColor(tintColor color.RGBA) *ImageButtonWidget {
func (b *ImageButtonWidget) TintColor(tintColor color.Color) *ImageButtonWidget {
b.tintColor = tintColor
return b
}
Expand All @@ -417,8 +418,8 @@ func ImageButton(texture *Texture) *ImageButtonWidget {
uv0: image.Point{X: 0, Y: 0},
uv1: image.Point{X: 1, Y: 1},
framePadding: -1,
bgColor: color.RGBA{0, 0, 0, 0},
tintColor: color.RGBA{255, 255, 255, 255},
bgColor: colornames.Black,
tintColor: colornames.White,
onClick: nil,
}
}
Expand Down Expand Up @@ -454,12 +455,12 @@ func (b *ImageButtonWithRgbaWidget) UV(uv0, uv1 image.Point) *ImageButtonWithRgb
return b
}

func (b *ImageButtonWithRgbaWidget) BgColor(bgColor color.RGBA) *ImageButtonWithRgbaWidget {
func (b *ImageButtonWithRgbaWidget) BgColor(bgColor color.Color) *ImageButtonWithRgbaWidget {
b.ImageButtonWidget.BgColor(bgColor)
return b
}

func (b *ImageButtonWithRgbaWidget) TintColor(tintColor color.RGBA) *ImageButtonWithRgbaWidget {
func (b *ImageButtonWithRgbaWidget) TintColor(tintColor color.Color) *ImageButtonWithRgbaWidget {
b.ImageButtonWidget.TintColor(tintColor)
return b
}
Expand Down Expand Up @@ -826,7 +827,7 @@ type ImageWidget struct {
width float32
height float32
uv0, uv1 image.Point
tintColor, borderColor color.RGBA
tintColor, borderColor color.Color
onClick func()
}

Expand All @@ -848,13 +849,13 @@ func (i *ImageWidget) Uv(uv0, uv1 image.Point) *ImageWidget {
return i
}

func (i *ImageWidget) TintColor(tintColor color.RGBA) *ImageWidget {
func (i *ImageWidget) TintColor(tintColor color.Color) *ImageWidget {
i.tintColor = tintColor
return i
}

// BorderCol sets color of the border.
func (i *ImageWidget) BorderCol(borderColor color.RGBA) *ImageWidget {
func (i *ImageWidget) BorderCol(borderColor color.Color) *ImageWidget {
i.borderColor = borderColor
return i
}
Expand Down Expand Up @@ -2240,7 +2241,7 @@ type TableRowWidget struct {
flags TableRowFlags
minRowHeight float64
layout Layout
bgColor *color.RGBA
bgColor color.Color
}

func TableRow(widgets ...Widget) *TableRowWidget {
Expand All @@ -2252,7 +2253,7 @@ func TableRow(widgets ...Widget) *TableRowWidget {
}
}

func (r *TableRowWidget) BgColor(c *color.RGBA) *TableRowWidget {
func (r *TableRowWidget) BgColor(c color.Color) *TableRowWidget {
r.bgColor = c
return r
}
Expand Down Expand Up @@ -2284,7 +2285,7 @@ func (r *TableRowWidget) Build() {
}

if r.bgColor != nil {
imgui.TableSetBgColor(imgui.TableBgTarget_RowBg0, uint32(imgui.GetColorU32(ToVec4Color(*(r.bgColor)))), -1)
imgui.TableSetBgColor(imgui.TableBgTarget_RowBg0, uint32(imgui.GetColorU32(ToVec4Color(r.bgColor))), -1)
}
}

Expand Down
31 changes: 31 additions & 0 deletions examples/pushfont/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package main

import (
"fmt"

"github.com/AllenDang/giu"
)

var font *giu.FontInfo

func loop() {
fontPushed := false
giu.Window("example").Layout(
giu.Custom(func() {
fontPushed = giu.PushFont(font)
}),
giu.Label("x"),
giu.Custom(func() {
if fontPushed {
giu.PopFont()
}
}),
)
}

func main() {
wnd := giu.NewMasterWindow("example", 640, 480, 0)
font = giu.AddFont("NotoSansSinhala-Regular.ttf", 20)
fmt.Println(font)
wnd.Run(loop)
}
1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,5 @@ require (
github.com/kylelemons/godebug v1.1.0 // indirect
github.com/sahilm/fuzzy v0.1.0
github.com/stretchr/testify v1.7.0
golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d
)
4 changes: 4 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,15 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d h1:RNPAfi2nHY7C2srAV8A49jpsYr0ADedCk1wq6fTMTvs=
golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM=
golang.org/x/net v0.0.0-20200513185701-a91f0712d120 h1:EZ3cVSzKOlJxAd8e8YAJ7no8nNypTxexh/YE/xW3ZEY=
golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
Expand Down

0 comments on commit 7a1a262

Please sign in to comment.