My dmenu build
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.
 
 
 
 
 
 

62 rindas
1.4 KiB

  1. /* See LICENSE file for copyright and license details. */
  2. #include "dmenu.h"
  3. #include <string.h>
  4. /* extern */
  5. void
  6. drawtext(const char *text, unsigned long col[ColLast]) {
  7. int x, y, w, h;
  8. static char buf[256];
  9. unsigned int len, olen;
  10. XRectangle r = { dc.x, dc.y, dc.w, dc.h };
  11. XSetForeground(dpy, dc.gc, col[ColBG]);
  12. XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1);
  13. if(!text)
  14. return;
  15. w = 0;
  16. olen = len = strlen(text);
  17. if(len >= sizeof buf)
  18. len = sizeof buf - 1;
  19. memcpy(buf, text, len);
  20. buf[len] = 0;
  21. h = dc.font.ascent + dc.font.descent;
  22. y = dc.y + (dc.h / 2) - (h / 2) + dc.font.ascent;
  23. x = dc.x + (h / 2);
  24. /* shorten text if necessary */
  25. while(len && (w = textnw(buf, len)) > dc.w - h)
  26. buf[--len] = 0;
  27. if(len < olen) {
  28. if(len > 1)
  29. buf[len - 1] = '.';
  30. if(len > 2)
  31. buf[len - 2] = '.';
  32. if(len > 3)
  33. buf[len - 3] = '.';
  34. }
  35. if(w > dc.w)
  36. return; /* too long */
  37. XSetForeground(dpy, dc.gc, col[ColFG]);
  38. if(dc.font.set)
  39. XmbDrawString(dpy, dc.drawable, dc.font.set, dc.gc, x, y, buf, len);
  40. else
  41. XDrawString(dpy, dc.drawable, dc.gc, x, y, buf, len);
  42. }
  43. unsigned int
  44. textw(const char *text) {
  45. return textnw(text, strlen(text)) + dc.font.height;
  46. }
  47. unsigned int
  48. textnw(const char *text, unsigned int len) {
  49. XRectangle r;
  50. if(dc.font.set) {
  51. XmbTextExtents(dc.font.set, text, len, NULL, &r);
  52. return r.width;
  53. }
  54. return XTextWidth(dc.font.xfont, text, len);
  55. }