I'm not totally sure this is right.  First time I've mucked about on the 
interior of PicoGUI.  As an aside, I think some of the text field stuff is a 
bit messed up..., seems like multiple copies of the buffer are laying about?  
(Probably my imagination)

Anyway, patch inlined below, and a ChangeLog entry.

2001-05-14    Shane Nay <[EMAIL PROTECTED]>

Added sizing to text size to field widget.

        * widget/field.c: added resizefield() routine, and calling it when
          the font changes, or when the text is changed.

Index: field.c
===================================================================
RCS file: /cvsroot/pgui/pgserver/widget/field.c,v
retrieving revision 1.24
diff -u -r1.24 field.c
--- field.c     2001/04/29 17:28:40     1.24
+++ field.c     2001/05/26 05:12:46
@@ -20,9 +20,9 @@
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, 
USA.
  * 
  * Contributors:
+ * Shane R. Nay <[EMAIL PROTECTED]>
  * 
  * 
- * 
  */
 
 #include <pgserver/common.h>
@@ -39,6 +39,8 @@
 #define FLASHTIME_ON   250
 #define FLASHTIME_OFF  150
 
+void resizefield(struct widget *self);
+
 struct fielddata {
   handle font;
   int focus,on,flash_on;
@@ -166,6 +168,7 @@
     if (self->in->split != psplit) {
       self->in->flags |= DIVNODE_PROPAGATE_RECALC;
     }
+    resizefield(self);
     self->in->flags |= DIVNODE_NEED_RECALC;
     self->dt->flags |= DIVTREE_NEED_RECALC;
     break;
@@ -188,6 +191,7 @@
      
      /* Update text */
      strcpy(DATA->buffer,str);
+     resizefield(self);
 //     div_setstate(self->in->div,self->in->div->state);
      break;
 
@@ -378,6 +382,38 @@
   return rehandle(DATA->hbuffer,DATA->buffer);
 }
 
+/* Resize the field.  Mostly taken from label.c */
+void resizefield(struct widget *self) {
+  s16 w,h,m = theme_lookup(self->in->div->state,PGTH_P_MARGIN);
+  s16 osplit;
+  struct fontdesc *fd;
+  char *str;
+  handle font = DATA->font ? DATA->font : 
+    theme_lookup(self->in->div->state, PGTH_P_FONT);
+
+  /* Redraw the containing widget if we're transparent
+  if (DATA->transparent || DATA->osplit!=self->in->split)
+  redraw_bg(self); */
+
+  /* With PG_S_ALL we'll get ignored anyway... */
+  if (self->in->flags & PG_S_ALL) return;
+  if (self->sizelock) return;
+  if (iserror(rdhandle((void **)&fd,PG_TYPE_FONTDESC,-1,font))
+             || !fd) return;
+  sizetext(fd,&w,&h,DATA->buffer);
+
+  osplit = self->in->split;
+  if ((self->in->flags & PG_S_TOP) ||
+      (self->in->flags & PG_S_BOTTOM))
+    self->in->split = h+m;
+  else if ((self->in->flags & PG_S_LEFT) ||
+          (self->in->flags & PG_S_RIGHT))
+    self->in->split = w+m;
+  if (osplit!=self->in->split) {
+    self->in->flags |= DIVNODE_NEED_RECALC | DIVNODE_PROPAGATE_RECALC;
+    self->dt->flags |= DIVTREE_NEED_RECALC;
+  }
+}
 /* The End */
 
 

_______________________________________________
Pgui-devel mailing list
[EMAIL PROTECTED]
http://lists.sourceforge.net/lists/listinfo/pgui-devel

Reply via email to