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