From 23a04a9cdbd0a07485310d9241b890aa54efdc6d Mon Sep 17 00:00:00 2001 From: Sasha Koshka Date: Thu, 10 Nov 2022 02:02:08 -0500 Subject: [PATCH] Added icon setting --- application.go | 39 +++++++++++++++++++++++++++++------- assets/scaffold16.png | Bin 0 -> 589 bytes assets/scaffold32.png | Bin 0 -> 1190 bytes backend.go | 4 ++-- backends/x/x.go | 44 +++++++++++++++++++++++++++++++++++++---- examples/hello/main.go | 18 +++++++++++++++++ 6 files changed, 92 insertions(+), 13 deletions(-) create mode 100644 assets/scaffold16.png create mode 100644 assets/scaffold32.png diff --git a/application.go b/application.go index 7fe44c4..811e197 100644 --- a/application.go +++ b/application.go @@ -1,5 +1,6 @@ package stone +import "image" import "image/color" // Application represents an application. @@ -7,17 +8,11 @@ type Application struct { DamageBuffer title string + icons []image.Image backend Backend config Config } -// SetTitle sets the application's title. If in a window, it will appear as the -// window's name. -func (application *Application) SetTitle (title string) { - application.title = title - application.backend.SetTitle(title) -} - // Run initializes the application, starts it, and then returns a channel that // broadcasts events. If no suitable backend can be found, an error is returned. func (application *Application) Run () ( @@ -49,6 +44,36 @@ func (application *Application) Run () ( return } +// SetTitle sets the application's title. If in a window, it will appear as the +// window's name. +func (application *Application) SetTitle (title string) (err error) { + application.title = title + if application.backend != nil { + err = application.backend.SetTitle(title) + } + + return +} + +func (application *Application) Title () (title string) { + title = application.title + return +} + +func (application *Application) SetIcon (sizes []image.Image) (err error) { + application.icons = sizes + if application.backend != nil { + err = application.backend.SetIcon(sizes) + } + + return +} + +func (application *Application) Icon () (sizes []image.Image) { + sizes = application.icons + return +} + // Config returns a pointer to the application's configuration. func (application *Application) Config () (config *Config) { config = &application.config diff --git a/assets/scaffold16.png b/assets/scaffold16.png new file mode 100644 index 0000000000000000000000000000000000000000..6fb689039f27a07338097797f4a8d99422477113 GIT binary patch literal 589 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uuz(rC1}QWNE&K$eWHMd+Lx40B zNDK%#fLH@cgV;YOU5S1Lq>p;KIEGjVPMKgRbTC1{ZE?aepK}LQO)|GwHZwnAvXa$% zz!alUb*sefp~|Hdb?-MC25G!GGg<%l+q|+=&80$7Kg{1~8rO-ipGf3f{>J@{tmAMjM~IAriCFR1k$?}u|vhaJ`@i2Q1r*Y<6WT1kGx>b?II ze4D>>>O5e(D|xS;-`*A&B>(>>JEd3wJ+u$xp{WxM`I;OATs3txb$o2v-4|?rtP*qJ zmc&;%wQDzmi{&-89QuAEcJl?xlj&*y{u{q>G8ANWlybfZ$ad54ru zY-^|XTr6n0y?zJRy8d5Dj?EX;jK8w&IcQl}_=5Gij+jHq1Li%)ba?~h5174ve{u2k znFUOrI4ibm7kF~pteUgo+u5wDCv$%4&ajUYx$~~{j~X9Gw&m74*7_2P@>~bj##(){ oTJ72&m+to8DVOmdZ~80!6%B_a7Im!K3-k$tr>mdKI;Vst0IgxyuK)l5 literal 0 HcmV?d00001 diff --git a/assets/scaffold32.png b/assets/scaffold32.png new file mode 100644 index 0000000000000000000000000000000000000000..abb193a0fc03783866bbac183d69bf3cd19cd548 GIT binary patch literal 1190 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}E~ycoX}-P; zT0k}j17mw80}DtA5K93u0|WB{Mh0de%?J`(zyz07Sip>6gA}f5OZp6?WHMd+Lx40B zNDK%BfLH@c1KCVQQgctt1RD3x)5S3)f^*AMdwmv1iT1yq>xxZOREmV+9UplId|))u z3S4={QV`=5x&sUgiCiU)Wxv}QoqH}S}rIT~`cdLI)V~mSGul%_8?BeQ+ zM{YFbTC_{Q2(bvid~H=t{EYt8plL#8^6r9MFP>&Ft}kHvexXfuMyp$Ev1#tF7ui1h z_uOTwlAYT7g|F{%X}L&At=4@bwHGft`un#Q`mF%VT`` z`q9SKJAc;AO1Q8U?B?J-#rY9$S2GA3#j{yofA;ZbWy?)#clowZi-zPIjW1&oU(9RS zc_uUOyGDHWvG+`m5=v%k{AP5LZ#AxHbH35+UD0yX!hgo%>h0=@vTj@Mvo6?r!0()y z%&zzEna{X(+Dug5!4+k*==O|fI`J11lIQ9kIF`-6yyVEUyZ>KtZ(;o~%O^Qz@$asG z86I;_zju&nc*dTpd5vwRurYs}v1NV9e&OdEeV@lL)?H0YKJNJJ$eP2tJx~6ee zTe_`*uS&V>jp^}nF0+I7)3;j1=kUHbQg-dAIxs=}|G#zn>b<~}a1WFcwoWnhVh$8& z3%;q!=IvO-q@S28(4VN7^ptl`Lj~JGwFJc_CvD#}w?=V9sYJc_p8IXB{^NZvj^cIC z&)OUR@5xWU{PV%f6#jQIIVmBpFUovilRLrk&d7#6vIb{YxaNy8S+?Cezw^?}J=q&#yPofvl_0a@nzV)TMd_ z(PoPKvXS{gwj^`C;d7AW>S;o+53QA2;J!yHq0QEdcd_cTP+z6}=e8fa6(qM&+2Hej zsmAmR+gdUsSDjy`a_!h+a~8cQ&+GG)**|E>HM9i3tbTj;`K4>= 8 + g >>= 8 + b >>= 8 + a >>= 8 + wmIcon.Data[index] = + (uint(a) << 24) | + (uint(r) << 16) | + (uint(g) << 8) | + (uint(b) << 0) + index ++ + }} + + wmIcons = append(wmIcons, wmIcon) + } + + err = ewmh.WmIconSet(backend.connection, backend.window.Id, wmIcons) + return } func (backend *Backend) handleXEvent (event xgb.Event) { @@ -192,6 +226,8 @@ func factory (application *stone.Application) (output stone.Backend, err error) 0) backend.window.Map() backend.window.Listen(xproto.EventMaskStructureNotify) + backend.SetTitle(application.Title()) + backend.SetIcon(application.Icon()) // create a canvas backend.canvas = xgraphics.New ( diff --git a/examples/hello/main.go b/examples/hello/main.go index 1dd1f89..38b168b 100644 --- a/examples/hello/main.go +++ b/examples/hello/main.go @@ -3,11 +3,29 @@ package main import "os" import "fmt" import "time" +import "image" +import _ "image/png" import "git.tebibyte.media/sashakoshka/stone" import _ "git.tebibyte.media/sashakoshka/stone/backends/x" func main () { application := &stone.Application { } + application.SetTitle("hellorld") + application.SetSize(12, 2) + + iconFile16, err := os.Open("assets/scaffold16.png") + if err != nil { panic(err) } + icon16, _, err := image.Decode(iconFile16) + if err != nil { panic(err) } + iconFile16.Close() + iconFile32, err := os.Open("assets/scaffold32.png") + if err != nil { panic(err) } + icon32, _, err := image.Decode(iconFile32) + if err != nil { panic(err) } + iconFile16.Close() + + application.SetIcon([]image.Image { icon16, icon32 }) + channel, err := application.Run() if err != nil { panic(err) }