[Pkg-wmaker-commits] [wmbubble] 64/207: Support localization of the strings for date, although only for ascii characters

Doug Torrance dtorrance-guest at moszumanska.debian.org
Mon Aug 24 04:18:03 UTC 2015


This is an automated email from the git hooks/post-receive script.

dtorrance-guest pushed a commit to branch master
in repository wmbubble.

commit c5cc43b527c4bfb9d2d63653519b75169d505d22
Author: Robert Jacobs <rnjacobs at mit.edu>
Date:   Fri Aug 12 00:14:56 2011 -0700

    Support localization of the strings for date, although only for ascii characters
---
 bubblemon.c | 97 ++++++++++++++++++++++++++++++++++++-------------------------
 1 file changed, 57 insertions(+), 40 deletions(-)

diff --git a/bubblemon.c b/bubblemon.c
index 4a6967a..3ee87b8 100644
--- a/bubblemon.c
+++ b/bubblemon.c
@@ -54,6 +54,7 @@
 #include <unistd.h>
 #include <stdlib.h>
 #include <string.h>
+#include <locale.h>
 #include <ctype.h> /* I know tolower isn't i18n, I'm sorry */
 
 /* x11 includes */
@@ -114,7 +115,7 @@ void alpha_graph(void);
 void rarely_render_secondary(void);
 void roll_history(void);
 
-void draw_datetime(unsigned char *display);
+void alpha_datetime(void);
 void draw_dtchr(const char letter, unsigned char *where);
 
 int animate_correctly(void);
@@ -369,6 +370,9 @@ int main(int argc, char **argv) {
 	/* VERY first thing: zero data structure */
 	memset(&bm, 0, sizeof(bm));
 
+	/* Support localized date strings */
+	setlocale(LC_ALL,"");
+
 	/* initialize Ximage */
 	bm.xim = initwmX11pixmap(argc,argv);
 	XrmInitialize();
@@ -470,7 +474,7 @@ int main(int argc, char **argv) {
 			 * expensive on linux. */
 			if (delay == 0)
 				draw_cpugauge(loadPercentage);
-			/* 30.15us/frame */
+			/* ? */
 			show_graph = calculate_transparencies(proximity);
 		}
 
@@ -478,7 +482,7 @@ int main(int argc, char **argv) {
 			alpha_cpu();
 
 		/* if (clock_mode == DIGITAL_CLOCK) */
-		draw_datetime(bm.rgb_buf);
+		alpha_datetime();
 
 		if (memscreen_enabled && show_graph)
 			alpha_graph();
@@ -1063,33 +1067,49 @@ void draw_cpugauge(int cpu) {
 	draw_cpudigit(10, &cpu_gauge[3*18]);
 }
 
+int dtchr_width(const char letter) {
+	if (letter >= '0' && letter <= '9') {
+		return 6;
+	} else if (letter >= '@' && letter <= '~') {
+		return 5;
+	} else if (letter == ':') {
+		return 2;
+	} else {
+		return 1;
+	}
+}
+
 void draw_dtchr(const char letter, unsigned char * rgbbuf) {
   int x,y;
   unsigned char * attenuator;
 
-  if (letter>='0' && letter<='9') {
-    for (y=0;y<7;y++)
-	    for (x=0,attenuator=&rgbbuf[y*BOX_SIZE*3];x<5;x++) 
-	      if (clockdigit[x+(y*10+(letter-'0'))*6]=='M') {
-		      *(attenuator++)>>=1; *(attenuator++)>>=1; *(attenuator++)>>=1;
-	      } else {
-		      attenuator += 3;
+  switch (dtchr_width(letter)) {
+  case 6:
+	  for (y=0;y<7;y++)
+		  for (x=0,attenuator=&rgbbuf[y*BOX_SIZE*3];x<5;x++) 
+			  if (clockdigit[x+(y*10+(letter-'0'))*6]=='M') {
+				  *(attenuator++)>>=1; *(attenuator++)>>=1; *(attenuator++)>>=1;
+			  } else {
+				  attenuator += 3;
 	      }
-  } else if (letter>='@' && letter<='~') {
+	  break;
+  case 5:
 	  for (y=0;y<7;y++)
 		  for (x=0,attenuator=&rgbbuf[y*BOX_SIZE*3];x<4;x++) 
 			  if (clockalpha[x+(y*63+(letter-'@'))*5]=='M') {
-		      *(attenuator++)>>=1; *(attenuator++)>>=1; *(attenuator++)>>=1;
-	      } else {
-		      attenuator += 3;
+				  *(attenuator++)>>=1; *(attenuator++)>>=1; *(attenuator++)>>=1;
+			  } else {
+				  attenuator += 3;
 	      }
-  } else if (letter==':') {
+	  break;
+  case 2:
 	  rgbbuf[3*BOX_SIZE*3  ]>>=1;
 	  rgbbuf[3*BOX_SIZE*3+1]>>=1;
 	  rgbbuf[3*BOX_SIZE*3+2]>>=1;
 	  rgbbuf[5*BOX_SIZE*3  ]>>=1;
 	  rgbbuf[5*BOX_SIZE*3+1]>>=1;
 	  rgbbuf[5*BOX_SIZE*3+2]>>=1;
+	  break;
   }
 }
 
@@ -1110,13 +1130,13 @@ void draw_largedigit(char number, unsigned char * rgbbuf) {
   }
 }
 
-void draw_datetime(unsigned char * rgbbuf) {
-  const char months[12][3]={"Jan","Feb","Mar","Apr","May","Jun",
-			 "Jul","Aug","Sep","Oct","Nov","Dec"};
-  const char days[7][3]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
+void alpha_datetime(void) {
+	char format[11];
   time_t mytt;
   struct tm * mytime;
   int mday=0, hours=0;
+  int ii, width;
+  unsigned char * rgbptr;
 
   time(&mytt);
   mytime = localtime(&mytt);
@@ -1130,27 +1150,24 @@ void draw_datetime(unsigned char * rgbbuf) {
 	  mytime->tm_hour += hours;
   }
 
-  /* Sat Jan 04 */
-
-#define DOWx  9
-#define MONx 25
-#define DOMx 41
-  /* draw day-of-week (14 px)*/
-  draw_dtchr(days[mytime->tm_wday][0],rgbbuf+(DOWx   )*3+56*3);
-  draw_dtchr(days[mytime->tm_wday][1],rgbbuf+(DOWx+ 5)*3+56*3);
-  draw_dtchr(days[mytime->tm_wday][2],rgbbuf+(DOWx+10)*3+56*3);
-  /* draw month (14 px) */
-  draw_dtchr(months[mytime->tm_mon][0],rgbbuf+(MONx   )*3+56*3);
-  draw_dtchr(months[mytime->tm_mon][1],rgbbuf+(MONx+ 5)*3+56*3);
-  draw_dtchr(months[mytime->tm_mon][2],rgbbuf+(MONx+10)*3+56*3);
-  /* draw day-of-month (11 px) */
-  draw_dtchr((mytime->tm_mday)/10+'0',rgbbuf+(DOMx   )*3+56*3);
-  draw_dtchr((mytime->tm_mday)%10+'0',rgbbuf+(DOMx+ 6)*3+56*3);
-
-  draw_largedigit(mytime->tm_hour/10,rgbbuf+3*(3+BOX_SIZE*13));
-  draw_largedigit(mytime->tm_hour%10,rgbbuf+3*(16+BOX_SIZE*13));
-  draw_largedigit(mytime->tm_min/10,rgbbuf+3*(30+BOX_SIZE*13));
-  draw_largedigit(mytime->tm_min%10,rgbbuf+3*(43+BOX_SIZE*13));
+  if (strftime(format,11,"%a %b %d",mytime) == 0) /* Sat Jan 04 */
+	  strftime(format,11,"%m %d",mytime); /* 01 04   if above fails */
+
+  for (width = ii = 0; ii < strlen(format); ii++) {
+	  width += dtchr_width(format[ii]);
+  }
+
+  rgbptr = &bm.rgb_buf[3*(2*BOX_SIZE+(BOX_SIZE-width)/2)]; /* calculate centered */
+
+  for (ii = 0; ii < strlen(format); ii++) {
+	  draw_dtchr(format[ii],rgbptr);
+	  rgbptr += 3*dtchr_width(format[ii]);
+  }
+
+  draw_largedigit(mytime->tm_hour/10,&bm.rgb_buf[3*(3+BOX_SIZE*13)]);
+  draw_largedigit(mytime->tm_hour%10,&bm.rgb_buf[3*(16+BOX_SIZE*13)]);
+  draw_largedigit(mytime->tm_min/10,&bm.rgb_buf[3*(30+BOX_SIZE*13)]);
+  draw_largedigit(mytime->tm_min%10,&bm.rgb_buf[3*(43+BOX_SIZE*13)]);
 }
 
 int blend = CPUMAXBLEND;

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-wmaker/wmbubble.git



More information about the Pkg-wmaker-commits mailing list