DO NOT REPLY TO THIS MESSAGE.  INSTEAD, POST ANY RESPONSES TO THE LINK BELOW.

[STR Active]

Link: http://www.fltk.org/str.php?L2772
Version: 1.3-current


Added a test to unittest called "symbol text"  to check
fl_measure()'s handling of symbols (r9850~9852) to test my mods.

Attaching a revised patch (simplify-v2.patch) to handle some
boundary cases the original patch did not. Probably going to
commit the v2, but again, leaving it here to sleep on it..


Link: http://www.fltk.org/str.php?L2772
Version: 1.3-current
Index: fl_draw.cxx
===================================================================
--- fl_draw.cxx (revision 9849)
+++ fl_draw.cxx (working copy)
@@ -413,29 +413,22 @@
   int lines;
   double width=0;
   int W = 0;
-  char symbol[2][255], *symptr;
   int symwidth[2], symtotal;
 
-  // count how many lines and put the last one into the buffer:
-  symbol[0][0] = '\0';
-  symwidth[0]  = 0;
+  symwidth[0] = 0;     // size of symbol at beginning of string (if any)
+  symwidth[1] = 0;     // size of symbol at end of string (if any)
 
-  symbol[1][0] = '\0';
-  symwidth[1]  = 0;
-
   if (draw_symbols) {
-    if (str && str[0] == '@' && str[1] && str[1] != '@') {
-      // Start with a symbol...
-      for (symptr = symbol[0];
-           *str && !isspace(*str) && symptr < (symbol[0] + sizeof(symbol[0]) - 
1);
-           *symptr++ = *str++);
-      *symptr = '\0';
-      if (isspace(*str)) str++;
+    // Symbol at beginning of string?
+    const char *sym2 = (str[0]=='@' && str[1]=='@') ? str+2 : str;     // sym2 
check will skip leading @@
+    if (str[0] == '@' && str[1] != '@') {
+      while (*str && !isspace(*str)) { ++str; }                // skip over 
symbol
+      if (isspace(*str)) ++str;                                // skip over 
trailing space
+      sym2 = str;                                      // sym2 check will skip 
leading symbol
       symwidth[0] = h;
     }
-
-    if (str && (p = strrchr(str, '@')) != NULL && p > (str + 1) && p[-1]!='@') 
{
-      strlcpy(symbol[1], p, sizeof(symbol[1]));
+    // Symbol at end of string?
+    if ((p=strchr(sym2,'@')) != NULL && p[1] != '@') {
       symwidth[1] = h;
     }
   }
_______________________________________________
fltk-bugs mailing list
[email protected]
http://lists.easysw.com/mailman/listinfo/fltk-bugs

Reply via email to