From 6a284a85618f0b7c1fd0b2905ade9ba67fd233f8 Mon Sep 17 00:00:00 2001 From: NishiOwO Date: Thu, 25 Dec 2025 05:01:19 +0900 Subject: [PATCH] stripe --- mpanel/CMakeLists.txt | 4 ++++ mpanel/mde-stripe.png | Bin 0 -> 1353 bytes mpanel/mpanelrc.in | 19 ++++++++++++++++ mpanel/startbutton/module.c | 42 ++++++++++++++++++++++++++++++++++-- 4 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 mpanel/mde-stripe.png diff --git a/mpanel/CMakeLists.txt b/mpanel/CMakeLists.txt index 87e78e4..479a09f 100644 --- a/mpanel/CMakeLists.txt +++ b/mpanel/CMakeLists.txt @@ -28,3 +28,7 @@ install( FILES ${CMAKE_CURRENT_BINARY_DIR}/mpanelrc DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/examples/mpanel ) +install( + FILES mde-stripe.png + DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/mpanel +) diff --git a/mpanel/mde-stripe.png b/mpanel/mde-stripe.png new file mode 100644 index 0000000000000000000000000000000000000000..c3991f81226333affd374e9acc65173c7f2e3bd2 GIT binary patch literal 1353 zcmZ{k3rv$&6vxk}f`C+nG0Rg#VKNXbm0~Rj2yJPFf`Aaj3G&oVQBdY8pzDw*#TUwi zVJ9dSH99PnP8<-y-~%imV4WmueG$;o2h7k9xC5*J@Br`xSOwq(;0@pd;0xdf;17UDOe6q800;zF4?qM!?-B$E%20q1 z#Kdp}!T}-xr~niMB|-s&iU4|B8UP(JF&ZEWAQq5V0Q4ym07*a~p}6?8i%T+>dv$JZ zjzVFI#lr&w;-H{Ry)Vg^5vV3jz`CiRh5)f8VsL0J0HvC%I4-a zKL4&>Z%9cw$YAU>7z{?EQLELCj=mcnmekeVAP~~4t9gEYsd#)^O-;kl&PPE0w-3FRu}a21Z6k8yoM$ z#pQK(_fJhtzkfe26t<_O9nxq%DwPxM?OnOKNBjDQitpMeOij&*iX_t}=ZVMBg=HRX z>jAU}D@}p08bS}E#f1fQ24$hl+QBZstu)+l9AI8BoxE`iQFQSvC&F%{{iC{yv$mcH z#j#|wSERkU>k@}Hi#2xs-d&4*NWFWNLeZ~6!#%_9qP1POPizeDIIL0jKJG2jBtt!> zs=m>zWot@k<1_W;FW9O4w5u;b`Cvb_4Xk}g*58oFAnmCbIqKnjC>QOuf*F>`Y zoHtok8&u0$xHbqYu*i!RT9v6!5A{DJuGC0;T){@cw!c?!n}mO z9>e|DmgIb#Io=h-Ds{J$I&xIyTu~ud-?vB*xwGoSy#N>#PvGU^qRQ2T9!7B}d%*Q=H^$_#pdx%HM zmBj5~!3iNnw~A~1aO6j3s~Ke@*i~vf$7*$X{2TAnmH8OHPu&Oe7{Se0?0Huio#!pC z`q0SZw*TH<$VhJr@i|#G&6Oq1wrx8Vck6O${LtXGMAn+**26n#efjISqLneDs=n)q zs!*2JLakO*uK!KZ`)ub^+jm&u3`?;5hQ(Owy~0yOBh{g%WnxVBV#Y1xw#!3KY#noI zRNk`b{De@i)>IeTq?{SOA(oGRkFn!njcz|cUTw7Nbww`vJ%DEcCAlCgy&#*Exj!3C zfXCqpzW#V$e83ieB8h+}`3Lyma3mZ~!ggByA3^TEEN0H3{}(h$>nl)!*S`)0%-rk) e1?jnYpKI3o|6?-#{N{O719VCZ`BwOjlD`1|;VSw7 literal 0 HcmV?d00001 diff --git a/mpanel/mpanelrc.in b/mpanel/mpanelrc.in index 5d260d1..52917bf 100644 --- a/mpanel/mpanelrc.in +++ b/mpanel/mpanelrc.in @@ -2,10 +2,29 @@ + + @CMAKE_INSTALL_FULL_DATAROOTDIR@/mpanel/mde-stripe.png + xterm + xterm + xterm + xterm + xterm + xterm + xterm + xterm + xterm + xterm + xterm + xterm + xterm + xterm + xterm + xterm + xterm diff --git a/mpanel/startbutton/module.c b/mpanel/startbutton/module.c index 2ed013d..a3aaf53 100644 --- a/mpanel/startbutton/module.c +++ b/mpanel/startbutton/module.c @@ -23,6 +23,9 @@ typedef struct opaque { MwMenu menu; MwMenu current; + MwLLPixmap stripe; + char* stripe_color; + char* name; char* category; char* exec; @@ -250,14 +253,28 @@ static void activate(MwWidget handle, void* user, void* client) { opaque->is_opened = opaque->is_opened ? 0 : 1; if(opaque->is_opened) { - MwPoint p; + MwPoint p; + MwWidget fill, image; + MwRect rc; MwVaApply(handle, MwNpixmap, opaque->opened, MwNforceInverted, 1, NULL); - opaque->submenu = MwCreateWidget(MwSubMenuClass, "submenu", handle, 0, MwGetInteger(handle, MwNheight), 0, 0); + opaque->submenu = MwVaCreateWidget(MwSubMenuClass, "submenu", handle, 0, MwGetInteger(handle, MwNheight), 0, 0, + MwNleftPadding, 16 + MwDefaultBorderWidth(handle), + NULL); + + MwSubMenuGetSize(opaque->submenu, opaque->menu, &rc); + + fill = MwVaCreateWidget(MwFrameClass, "fill", opaque->submenu, MwDefaultBorderWidth(handle), MwDefaultBorderWidth(handle), 16, rc.height - MwDefaultBorderWidth(handle) * 2, + MwNbackground, opaque->stripe_color, + NULL); + + image = MwVaCreateWidget(MwImageClass, "image", fill, 0, MwGetInteger(fill, MwNheight) - 96, 16, 96, + MwNpixmap, opaque->stripe, + NULL); p.x = 0; p.y = 0; @@ -405,11 +422,32 @@ void module(MwWidget box, xl_node_t* node) { opaque->menu->wsub = NULL; opaque->menu->sub = NULL; + opaque->stripe_color = NULL; + + opaque->stripe = NULL; + n = node->first_child; while(n != NULL) { if(n->type == XL_NODE_NODE && strcmp(n->name, "Menu") == 0) { menu_scan(opaque, n); + } else if(n->type == XL_NODE_NODE && strcmp(n->name, "Stripe") == 0) { + xl_attribute_t* a; + + if(opaque->stripe != NULL) MwLLDestroyPixmap(opaque->stripe); + + opaque->stripe = MwLoadImage(box, n->text == NULL ? "" : n->text); + + a = n->first_attribute; + while(a != NULL) { + if(strcmp(a->key, "Color") == 0 && a->value != NULL) { + if(opaque->stripe_color != NULL) free(opaque->stripe_color); + + opaque->stripe_color = MwStringDuplicate(a->value); + } + + a = a->next; + } } n = n->next;