From 12d34517e9636835a8ebf1842b66afa2b6213a41 Mon Sep 17 00:00:00 2001 From: Noah Petherbridge Date: Wed, 3 Jul 2019 20:24:04 -0700 Subject: [PATCH] Add Tool Bar to Editor Mode * Toolbar has icon buttons for the Pencil Tool, Line Tool, Rect Tool, Actor Tool and Link Tool. * Remove the tab buttons from the top of the Palette window. The palette tab is now toggled between Swatches and Doodads by the tool selected on the tool bar, instead of the tab buttons setting the tool. * Remove the "Link Doodads" button from the Doodad Palette. The Link Tool has its own dedicated toolbar button with the others. --- assets/sprites/actor-tool.png | Bin 0 -> 687 bytes assets/sprites/line-tool.png | Bin 0 -> 626 bytes assets/sprites/link-tool.png | Bin 0 -> 679 bytes assets/sprites/new-button.png | Bin 0 -> 709 bytes assets/sprites/pencil-tool.png | Bin 0 -> 752 bytes assets/sprites/rect-tool.png | Bin 0 -> 648 bytes lib/ui/image.go | 7 ++ pkg/editor_ui.go | 34 ++++++++- pkg/editor_ui_doodad.go | 29 -------- pkg/editor_ui_palette.go | 42 ----------- pkg/editor_ui_toolbar.go | 123 +++++++++++++++++++++++++++++++++ pkg/shell.go | 4 +- pkg/sprites/sprites.go | 61 ++++++++++++++++ 13 files changed, 225 insertions(+), 75 deletions(-) create mode 100644 assets/sprites/actor-tool.png create mode 100644 assets/sprites/line-tool.png create mode 100644 assets/sprites/link-tool.png create mode 100644 assets/sprites/new-button.png create mode 100644 assets/sprites/pencil-tool.png create mode 100644 assets/sprites/rect-tool.png create mode 100644 pkg/editor_ui_toolbar.go create mode 100644 pkg/sprites/sprites.go diff --git a/assets/sprites/actor-tool.png b/assets/sprites/actor-tool.png new file mode 100644 index 0000000000000000000000000000000000000000..c7135bb6bf987cc6661a4f28ada30c2ab4a2d2d8 GIT binary patch literal 687 zcmV;g0#N;lP)EX>4Tx04R}tkv&MmP!xqv(@I4u4t5ZA$WWau6cusQDionYs1;guFnQ@8G%+M8 zE{=k0!NH%!s)LKOt`4q(Aov5~;_9U6A|>9J6k5c1;qgAsyXWxUeSpxYGR+Dl08O{e zOe!hn@+)Ha6=8%Bzz`BLvy53uO2fCl?x~aNF3z+3`~Iw6wO}zIAQI0o!?cOliKjMg zgY!Odl$B+b_?&pmqze*1a$WKGjdRImfoDd|Y-Wx)N-UN-Sm|I^HZ|f&;+U%GlrQ8w zRyl8R)~Yqux+i~Oq@XV^ah=vMQdqzuB#2N@Lj_gXh|{izBx-kgEbl zj(KcAgY5dj|KRs*t>VPEmlR0?T`!LFF#?2lfo9!tzK)BVfh)c3-)I2SpQP8@ zTI>ku+XgPK+nTZmTeSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{004(cL_t(o!|jzz4!|G?M1k~1<^Ct|PSb5;)0X-}Q)XjC z-wH6ADjR5DJBybpRly V6Dq<>%`gA}002ovPDHLkV1niDDHQ+! literal 0 HcmV?d00001 diff --git a/assets/sprites/line-tool.png b/assets/sprites/line-tool.png new file mode 100644 index 0000000000000000000000000000000000000000..460aff0315d55c838f550acdea4ea35ec3abbb6f GIT binary patch literal 626 zcmV-&0*(ENP)EX>4Tx04R}tkv&MmP!xqv(@I4u4t5ZA$WWau6cusQDionYs1;guFnQ@8G%+M8 zE{=k0!NH%!s)LKOt`4q(Aov5~;_9U6A|>9J6k5c1;qgAsyXWxUeSpxYGR+Dl08O{e zOe!hn@+)Ha6=8%Bzz`BLvy53uO2fCl?x~aNF3z+3`~Iw6wO}zIAQI0o!?cOliKjMg zgY!Odl$B+b_?&pmqze*1a$WKGjdRImfoDd|Y-Wx)N-UN-Sm|I^HZ|f&;+U%GlrQ8w zRyl8R)~Yqux+i~Oq@XV^ah=vMQdqzuB#2N@Lj_gXh|{izBx-kgEbl zj(KcAgY5dj|KRs*t>VPEmlR0?T`!LFF#?2lfo9!tzK)BVfh)c3-)I2SpQP8@ zTI>ku+XgPK+nTZmTeSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{002r!L_t(o!|m1~4geqwL(xLG|CNVBVKD15e%;h-GE?dI zj3g(F_O-ydr~3u=0?YV@{xCQ=I5;>sIQa7{uREPvui|pEJVcVS0ey-Y`w$sqC;$Ke M07*qoM6N<$g2-EX>4Tx04R}tkv&MmP!xqv(@I4u4t5ZA$WWau6cusQDionYs1;guFnQ@8G%+M8 zE{=k0!NH%!s)LKOt`4q(Aov5~;_9U6A|>9J6k5c1;qgAsyXWxUeSpxYGR+Dl08O{e zOe!hn@+)Ha6=8%Bzz`BLvy53uO2fCl?x~aNF3z+3`~Iw6wO}zIAQI0o!?cOliKjMg zgY!Odl$B+b_?&pmqze*1a$WKGjdRImfoDd|Y-Wx)N-UN-Sm|I^HZ|f&;+U%GlrQ8w zRyl8R)~Yqux+i~Oq@XV^ah=vMQdqzuB#2N@Lj_gXh|{izBx-kgEbl zj(KcAgY5dj|KRs*t>VPEmlR0?T`!LFF#?2lfo9!tzK)BVfh)c3-)I2SpQP8@ zTI>ku+XgPK+nTZmTeSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{004hUL_t(o!|hf<4!|G`lE(jknVol7Vy93O?cG9XKw3L} zV8Y=Sc2p~H2^>iP)dXIS=q|gtPJnE-gj!-Z0cKOSo4}#|3;1^@D#2F};Os6`g3mnU zDiu))KAHnmfoFq=0{advqOwPZ*|tj*aJFf0Jz~WPVkZUUmfKQ+I}iNJ6EY>iegpsj N002ovPDHLkV1he!9_Ro7 literal 0 HcmV?d00001 diff --git a/assets/sprites/new-button.png b/assets/sprites/new-button.png new file mode 100644 index 0000000000000000000000000000000000000000..83d8db58747f9b42ee16a13c60b6677cbd655612 GIT binary patch literal 709 zcmV;$0y_PPP)EX>4Tx04R}tkv&MmP!xqv(@I4u4t5ZA$WWau6cusQDionYs1;guFnQ@8G%+M8 zE{=k0!NH%!s)LKOt`4q(Aov5~;_9U6A|>9J6k5c1;qgAsyXWxUeSpxYGR+Dl08O{e zOe!hn@+)Ha6=8%Bzz`BLvy53uO2fCl?x~aNF3z+3`~Iw6wO}zIAQI0o!?cOliKjMg zgY!Odl$B+b_?&pmqze*1a$WKGjdRImfoDd|Y-Wx)N-UN-Sm|I^HZ|f&;+U%GlrQ8w zRyl8R)~Yqux+i~Oq@XV^ah=vMQdqzuB#2N@Lj_gXh|{izBx-kgEbl zj(KcAgY5dj|KRs*t>VPEmlR0?T`!LFF#?2lfo9!tzK)BVfh)c3-)I2SpQP8@ zTI>ku+XgPK+nTZmTQtLmTmw502y>eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{005myL_t(o!|j(@3d1lAM8}~=@|lz~WzIBrQa_r~e#EKM z#lfxw27x6!JjomI@0KcJyy05=0{ne3#k}e45`=(DO^})0YDhl(14i;Akw0z1AP@wC zKoA(7fIp4)1V};>a?a-wkkppIPQ88Wc~<)-Om_n5b&g9aPOjxRCcw-901JtE^=k;IXrbw+fk00000NkvXXu0mjf_4_ok literal 0 HcmV?d00001 diff --git a/assets/sprites/pencil-tool.png b/assets/sprites/pencil-tool.png new file mode 100644 index 0000000000000000000000000000000000000000..8dd76f6ea49b05917293431fc6a0fefe30dcda30 GIT binary patch literal 752 zcmVEX>4Tx04R}tkv&MmP!xqv(@I4u4t5ZA$WWau6cusQDionYs1;guFnQ@8G%+M8 zE{=k0!NH%!s)LKOt`4q(Aov5~;_9U6A|>9J6k5c1;qgAsyXWxUeSpxYGR+Dl08O{e zOe!hn@+)Ha6=8%Bzz`BLvy53uO2fCl?x~aNF3z+3`~Iw6wO}zIAQI0o!?cOliKjMg zgY!Odl$B+b_?&pmqze*1a$WKGjdRImfoDd|Y-Wx)N-UN-Sm|I^HZ|f&;+U%GlrQ8w zRyl8R)~Yqux+i~Oq@XV^ah=vMQdqzuB#2N@Lj_gXh|{izBx-kgEbl zj(KcAgY5dj|KRs*t>VPEmlR0?T`!LFF#?2lfo9!tzK)BVfh)c3-)I2SpQP8@ zTI>ku+XgPK+nTZmTi02y>eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{0078IL_t(o!^M|L4#Y4B1Zgz?|8mdGn#Dn2F!)G>i?x%8 z^d9~iFa$?;0NmIhBBD)jJOzd3vj4RK17&B&4A6Ln+gsp#dILBdZEWCBJ-L$xL>84(m_I`Xci7kcZVV1Mt9EtpU3h iAUoCBmr)D!^Sl8>aW*lU>k0e-0000EX>4Tx04R}tkv&MmP!xqv(@I4u4t5ZA$WWau6cusQDionYs1;guFnQ@8G%+M8 zE{=k0!NH%!s)LKOt`4q(Aov5~;_9U6A|>9J6k5c1;qgAsyXWxUeSpxYGR+Dl08O{e zOe!hn@+)Ha6=8%Bzz`BLvy53uO2fCl?x~aNF3z+3`~Iw6wO}zIAQI0o!?cOliKjMg zgY!Odl$B+b_?&pmqze*1a$WKGjdRImfoDd|Y-Wx)N-UN-Sm|I^HZ|f&;+U%GlrQ8w zRyl8R)~Yqux+i~Oq@XV^ah=vMQdqzuB#2N@Lj_gXh|{izBx-kgEbl zj(KcAgY5dj|KRs*t>VPEmlR0?T`!LFF#?2lfo9!tzK)BVfh)c3-)I2SpQP8@ zTI>ku+XgPK+nTZmTeSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{003Y~L_t(o!|m3)3cxT7Ls7T*|9@HCI;F*>i9F 0; i-- { flash := s.Flashes[i-1] if d.ticks >= flash.Expires { @@ -342,7 +342,7 @@ func (s *Shell) Draw(d *Doodle, ev *events.State) error { Shadow: render.Black, }, render.Point{ - X: balance.ShellPadding, + X: balance.ShellPadding + toolbarWidth, Y: outputY, }, ) diff --git a/pkg/sprites/sprites.go b/pkg/sprites/sprites.go new file mode 100644 index 0000000..6ddbf88 --- /dev/null +++ b/pkg/sprites/sprites.go @@ -0,0 +1,61 @@ +package sprites + +import ( + "bytes" + "errors" + "image/png" + "io/ioutil" + "os" + + "git.kirsle.net/apps/doodle/lib/render" + "git.kirsle.net/apps/doodle/lib/ui" + "git.kirsle.net/apps/doodle/pkg/bindata" + "git.kirsle.net/apps/doodle/pkg/log" +) + +// LoadImage loads a sprite as a ui.Image object. It checks Doodle's embedded +// bindata, then the filesystem before erroring out. +// +// NOTE: only .png images supported as of now. TODO +func LoadImage(e render.Engine, filename string) (*ui.Image, error) { + // Try the bindata first. + if data, err := bindata.Asset(filename); err == nil { + log.Debug("sprites.LoadImage: %s from bindata", filename) + + img, err := png.Decode(bytes.NewBuffer(data)) + if err != nil { + return nil, err + } + + tex, err := e.StoreTexture(filename, img) + if err != nil { + return nil, err + } + + return ui.ImageFromTexture(tex), nil + } + + // Then try the file system. + if _, err := os.Stat(filename); !os.IsNotExist(err) { + log.Debug("sprites.LoadImage: %s from filesystem", filename) + + data, err := ioutil.ReadFile(filename) + if err != nil { + return nil, err + } + + img, err := png.Decode(bytes.NewBuffer(data)) + if err != nil { + return nil, err + } + + tex, err := e.StoreTexture(filename, img) + if err != nil { + return nil, err + } + + return ui.ImageFromTexture(tex), nil + } + + return nil, errors.New("no such sprite found") +}