aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans-Christoph Steiner <eighthave@users.sourceforge.net>2007-11-14 07:49:26 +0000
committerHans-Christoph Steiner <eighthave@users.sourceforge.net>2007-11-14 07:49:26 +0000
commit078d4d3de414a38fa2987a1aa1dc6c3ef3f11654 (patch)
tree2019105c0dd0e5700d6e16a4ed174b24efea5c64
parent8f5463c88b3370e922f03fd94b05c379f4cbdb6f (diff)
- renamed [scrollbar( to [scrollbars( since there should be a bottom one too
- got full querying working, including C-side attributes - starting working on store/restore/save mechanism, but was stymied by how to trigger the store_options() callback so that the stuff can be saved. - removed [entry]'s old attribute storage where redundant svn path=/trunk/externals/tkwidgets/; revision=9004
-rw-r--r--text-help.pd82
-rw-r--r--text-test.pd75
-rw-r--r--text.c205
3 files changed, 190 insertions, 172 deletions
diff --git a/text-help.pd b/text-help.pd
index 92d83ed..245d7d0 100644
--- a/text-help.pd
+++ b/text-help.pd
@@ -1,11 +1,11 @@
#N canvas 343 45 785 704 10;
-#X obj 52 -48 text 130 60;
+#X obj 52 -48 text 130 60 0;
#X obj 53 -198 bng 15 250 50 0 empty empty empty 0 -6 0 8 -262144 -1
-1;
#X obj 12 60 print;
#X msg 89 -183 clear;
#X msg 107 -162 set one two three four five six;
-#X obj 36 137 text 130 60;
+#X obj 36 137 text 130 60 0;
#X obj 231 -2 select return;
#X obj 59 61 pddp/print;
#X obj 198 -91 trigger bang bang;
@@ -14,7 +14,7 @@
#X text 235 19 ^-- hit return to output;
#X msg 118 -139 append seven eight nine;
#X msg 122 -119 append ten eleven.;
-#X obj 554 -176 text 130 60;
+#X obj 554 -176 text 130 60 0;
#X obj 581 -218 symbol;
#X msg 479 -245 flat;
#X msg 514 -245 groove;
@@ -30,9 +30,9 @@
#X msg 680 251 disabled;
#X msg 26 105 size 100 50;
#X text 633 231 disable editing;
-#X obj 582 -39 text 130 60;
+#X obj 582 -39 text 130 60 0;
#X obj 581 -84 symbol;
-#X obj 513 147 text 130 60;
+#X obj 513 147 text 130 60 0;
#X obj 577 102 symbol;
#X msg 539 -109 none;
#X msg 574 -109 char;
@@ -43,10 +43,10 @@
#X msg 707 69 magenta;
#X obj 452 40 pddp/pddplink http://en.wikipedia.org/wiki/X11_color_names
;
-#X obj 394 -39 text 130 60;
+#X obj 394 -39 text 130 60 0;
#X obj 396 -89 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 10 -262144
-1 -1 0 1;
-#X obj 62 345 text 130 60;
+#X obj 62 345 text 130 60 0;
#X obj 61 300 symbol;
#X obj 49 409 pddp/pddplink http://tcl.tk/man/tcl8.4/TkCmd/cursors.htm
;
@@ -56,7 +56,6 @@
#X msg 205 265 gobbler;
#X obj 404 -217 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 10 -262144
-1 -1 0 1;
-#X msg 471 119 scrollbar \$1;
#X obj 471 99 tgl 15 0 empty empty empty 0 -6 0 10 -262144 -1 -1 0
1;
#X msg 109 -85 key a;
@@ -65,8 +64,8 @@
#X msg 352 293 key \$1;
#X floatatom 369 275 5 0 0 0 - - -;
#X msg 249 -46 key 3322;
-#X obj 560 330 text 130 60;
-#X obj 352 328 text 130 60;
+#X obj 560 330 text 130 60 0;
+#X obj 352 328 text 130 60 0;
#X text 347 232 type single chars:;
#X msg 421 279 key a;
#X msg 422 301 key 9;
@@ -85,7 +84,7 @@
#X msg 113 105 size 200 100;
#X msg 577 70 #00f;
#X text 528 231 turn off undo;
-#X obj 261 152 text 130 60;
+#X obj 261 152 text 130 60 0;
#X msg 285 128 font "Lucida Sans" 18 bold;
#X msg 261 103 font Arial 16;
#X obj 339 407 pddp/pddplink http://tcl.tk/man/tcl8.4/TkCmd/keysyms.htm
@@ -96,6 +95,7 @@ TkWidget library;
#X obj 186 -234 pddp/pddplink http://tcl.tk/man/tcl8.4/TkCmd/text.htm
-text text;
#X text 37 -234 This object is based on:;
+#X msg 471 119 scrollbars \$1;
#X connect 0 0 2 0;
#X connect 0 0 7 0;
#X connect 0 1 6 0;
@@ -109,56 +109,56 @@ TkWidget library;
#X connect 9 0 0 0;
#X connect 12 0 0 0;
#X connect 13 0 0 0;
-#X connect 15 0 72 0;
+#X connect 15 0 71 0;
#X connect 16 0 15 0;
#X connect 17 0 15 0;
#X connect 18 0 15 0;
#X connect 19 0 15 0;
#X connect 20 0 15 0;
#X connect 21 0 15 0;
-#X connect 22 0 76 0;
-#X connect 23 0 75 0;
+#X connect 22 0 75 0;
+#X connect 23 0 74 0;
#X connect 24 0 23 0;
#X connect 25 0 23 0;
#X connect 26 0 22 0;
#X connect 27 0 22 0;
#X connect 28 0 5 0;
-#X connect 31 0 73 0;
-#X connect 33 0 70 0;
+#X connect 31 0 72 0;
+#X connect 33 0 69 0;
#X connect 34 0 31 0;
#X connect 35 0 31 0;
#X connect 36 0 31 0;
#X connect 38 0 33 0;
#X connect 39 0 33 0;
#X connect 40 0 33 0;
-#X connect 43 0 74 0;
-#X connect 45 0 69 0;
+#X connect 43 0 73 0;
+#X connect 45 0 68 0;
#X connect 47 0 45 0;
#X connect 48 0 45 0;
#X connect 49 0 45 0;
#X connect 50 0 45 0;
-#X connect 51 0 71 0;
-#X connect 52 0 32 0;
-#X connect 53 0 52 0;
+#X connect 51 0 70 0;
+#X connect 52 0 87 0;
+#X connect 53 0 0 0;
#X connect 54 0 0 0;
-#X connect 55 0 0 0;
-#X connect 56 0 57 0;
-#X connect 56 0 58 0;
-#X connect 57 0 61 0;
-#X connect 59 0 0 0;
-#X connect 63 0 61 0;
-#X connect 64 0 61 0;
-#X connect 67 0 61 0;
-#X connect 68 0 45 0;
-#X connect 69 0 44 0;
-#X connect 70 0 32 0;
+#X connect 55 0 56 0;
+#X connect 55 0 57 0;
+#X connect 56 0 60 0;
+#X connect 58 0 0 0;
+#X connect 62 0 60 0;
+#X connect 63 0 60 0;
+#X connect 66 0 60 0;
+#X connect 67 0 45 0;
+#X connect 68 0 44 0;
+#X connect 69 0 32 0;
+#X connect 70 0 14 0;
#X connect 71 0 14 0;
-#X connect 72 0 14 0;
-#X connect 73 0 30 0;
-#X connect 74 0 42 0;
-#X connect 75 0 60 0;
-#X connect 76 0 60 0;
-#X connect 77 0 5 0;
-#X connect 78 0 33 0;
-#X connect 81 0 80 0;
-#X connect 82 0 80 0;
+#X connect 72 0 30 0;
+#X connect 73 0 42 0;
+#X connect 74 0 59 0;
+#X connect 75 0 59 0;
+#X connect 76 0 5 0;
+#X connect 77 0 33 0;
+#X connect 80 0 79 0;
+#X connect 81 0 79 0;
+#X connect 87 0 32 0;
diff --git a/text-test.pd b/text-test.pd
index 649c63a..57f713c 100644
--- a/text-test.pd
+++ b/text-test.pd
@@ -1,50 +1,45 @@
-#N canvas 165 195 721 672 10;
-#X obj 130 117 text 130 60;
+#N canvas 171 184 721 672 10;
+#X obj 256 77 text 400 200 1;
#X msg 47 29 size 100 100;
-#X obj 48 540 text 130 60;
+#X obj 48 470 text 130 60 0;
#X msg 130 30 size 400 200;
-#X obj 310 11 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 0
+#X obj 310 11 tgl 15 0 empty empty empty 17 7 0 10 -262144 -1 -1 1
1;
-#X msg 309 31 scrollbar \$1;
-#X msg 376 479;
-#X obj 310 269 hcs/sys_gui;
-#X msg 310 221 puts stderr [concat [.x6a74d0.c.frame6a7af0.text6a7af0
-find all]];
-#X msg 23 315 highlightthickness \$1;
-#X obj 26 289 hsl 128 15 0 127 0 0 empty empty empty -2 -8 0 10 -262144
+#X msg 655 333;
+#X msg 23 245 highlightthickness \$1;
+#X obj 26 219 hsl 128 15 0 127 0 0 empty empty empty -2 -8 0 10 -262144
-1 -1 0 1;
-#X msg 76 402 padx \$1;
-#X obj 79 381 hsl 128 15 0 127 0 0 empty empty empty -2 -8 0 10 -262144
+#X msg 49 290 padx \$1;
+#X obj 52 269 hsl 128 15 0 127 0 0 empty empty empty -2 -8 0 10 -262144
-1 -1 0 1;
-#X msg 132 515 font "Lucida Sans" 18 bold;
-#X msg 272 425 size 200 50;
-#X msg 89 490 font Arial 16;
-#X obj 200 612 print QUERY;
-#X floatatom 309 620 5 0 0 0 - - -;
-#X obj 309 596 route highlightthickness font;
-#X obj 396 624 pddp/print;
-#X msg 421 372 width 8;
-#X obj 309 642 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
+#X msg 110 405 font "Lucida Sans" 18 bold;
+#X msg 124 429 font Arial 16;
+#X obj 200 542 print QUERY;
+#X floatatom 309 550 5 0 0 0 - - -;
+#X obj 309 526 route highlightthickness font;
+#X obj 396 554 pddp/print;
+#X obj 309 572 bng 15 250 50 0 empty empty empty 17 7 0 10 -262144
-1 -1;
-#X msg 114 435 query highlightthickness;
-#X msg 143 458 query;
-#X connect 0 1 6 0;
+#X msg 68 321 query highlightthickness;
+#X msg 78 345 query;
+#X msg 309 31 scrollbars \$1;
+#X msg 85 367 query size;
+#X connect 0 1 5 0;
#X connect 1 0 0 0;
-#X connect 2 1 18 0;
+#X connect 2 1 14 0;
+#X connect 2 1 12 0;
#X connect 3 0 0 0;
-#X connect 4 0 5 0;
-#X connect 5 0 0 0;
-#X connect 8 0 7 0;
-#X connect 9 0 2 0;
-#X connect 10 0 9 0;
+#X connect 4 0 19 0;
+#X connect 6 0 2 0;
+#X connect 7 0 6 0;
+#X connect 8 0 2 0;
+#X connect 9 0 8 0;
+#X connect 10 0 2 0;
#X connect 11 0 2 0;
-#X connect 12 0 11 0;
-#X connect 13 0 2 0;
-#X connect 14 0 2 0;
-#X connect 15 0 2 0;
-#X connect 17 0 21 0;
-#X connect 18 0 17 0;
-#X connect 18 1 19 0;
+#X connect 13 0 16 0;
+#X connect 14 0 13 0;
+#X connect 14 1 15 0;
+#X connect 17 0 2 0;
+#X connect 18 0 2 0;
+#X connect 19 0 0 0;
#X connect 20 0 2 0;
-#X connect 22 0 2 0;
-#X connect 23 0 2 0;
diff --git a/text.c b/text.c
index 0f34c5e..b62a251 100644
--- a/text.c
+++ b/text.c
@@ -25,6 +25,8 @@
/* TODO: get Ctrl-A working to select all */
/* TODO: set message doesnt work with a loadbang */
+/* TODO: add size to query and save */
+/* TODO: add scrollbars to query and save */
#define DEFAULT_COLOR "grey70"
@@ -47,21 +49,14 @@ typedef struct _textwidget
t_symbol* receive_name;
- int optionc;
- t_atom* optionv;
+ t_binbuf* options_binbuf;
+
+ int size_x;
+ int size_y;
+ int x_have_scrollbars;
- int x_height;
- int x_width;
int x_resizing;
-
- t_symbol* x_font_face;
- t_int x_font_size;
- t_symbol* x_font_weight;
-
- t_float x_border;
- t_symbol* x_relief;
- t_int x_have_scrollbar;
- t_int x_selected;
+ int x_selected;
/* IDs for Tk widgets */
char* tcl_namespace;
@@ -119,6 +114,8 @@ static char *textwidget_tk_options[] = {
/* move these to tkwidgets.c */
+static t_symbol *scrollbars_symbol;
+static t_symbol *size_symbol;
static t_symbol *backspace_symbol;
static t_symbol *return_symbol;
static t_symbol *space_symbol;
@@ -140,8 +137,10 @@ static void textwidget_vis(t_gobj *z, t_glist *glist, int vis);
//static int textwidget_click(t_gobj *z, t_glist *glist, int xpix, int ypix, int shift, int alt, int dbl, int doit);
static void textwidget_save(t_gobj *z, t_binbuf *b);
+static void textwidget_query_callback(t_textwidget *x, t_symbol *s, int argc, t_atom *argv);
+
-static t_widgetbehavior textwidget_widgetbehavior = {
+static t_widgetbehavior textwidget_widgetbehavior = {
w_getrectfn: textwidget_getrect,
w_displacefn: textwidget_displace,
w_selectfn: textwidget_select,
@@ -153,30 +152,33 @@ w_clickfn: NULL,
/* widget helper functions */
-static void save_options(t_textwidget *x, int argc, char** argv)
+static void store_options(t_textwidget *x)
{
+ // build list then send the whole shebang to store_callback
int i;
+ int argc = sizeof(textwidget_tk_options)/sizeof(char *);
post("total options: %d", argc);
for(i = 0; i < argc; i++)
{
-// sys_vgui("lappend ::%s::optionsList %s \n", x->tcl_namespace, argv[i]);
- sys_vgui("pd [concat %s query_callback %s [%s cget -%s] \\;]\n",
- x->receive_name->s_name, argv[i], x->text_id, argv[i]);
- post("option %d: %s", i, argv[i]);
+ sys_vgui("lappend ::%s::store_list -%s \n",
+ x->tcl_namespace, textwidget_tk_options[i]);
+ sys_vgui("lappend ::%s::store_list [%s cget -%s] \n",
+ x->tcl_namespace, x->text_id, textwidget_tk_options[i]);
+ post("option %d: %s", i, textwidget_tk_options[i]);
}
-/* sys_vgui("foreach ::%s::option $::%s::optionsList {\n",x->tcl_namespace,x->tcl_namespace); */
-/* sys_vgui("pd [concat %s query_callback $::%s::option [%s cget [format \"-%%s\" $::%s::option]] \\;]\n", */
-/* x->receive_name->s_name, x->tcl_namespace, x->text_id, x->tcl_namespace); */
-// sys_vgui("puts stderr [concat %s query_callback $::%s::option [%s cget [format \"-%%s\" $::%s::option]] \\;] \n",
-// x->receive_name->s_name, x->tcl_namespace, x->text_id, x->tcl_namespace);
-/* sys_gui("}\n"); */
-/* sys_vgui("unset ::%s::optionsList \n", x->tcl_namespace); */
+ sys_vgui("pd [concat %s store_callback $::%s::store_list \\;]\n",
+ x->receive_name->s_name, x->tcl_namespace);
+ sys_vgui("unset ::%s::store_list \n", x->tcl_namespace);
+}
+
+static void restore_options(t_textwidget *x)
+{
+ // TODO restore options from x->options_binbuf
}
static void query_options(t_textwidget *x, int argc, char** argv)
{
int i;
- post("total options: %d", argc);
for(i = 0; i < argc; i++)
sys_vgui("pd [concat %s query_callback %s [%s cget -%s] \\;]\n",
x->receive_name->s_name, argv[i], x->text_id, argv[i]);
@@ -224,7 +226,7 @@ static int calculate_onset(t_textwidget *x, t_glist *glist,
int current_iolet, int total_iolets)
{
post("calculate_onset");
- return(text_xpix(&x->x_obj, glist) + (x->x_width - IOWIDTH) \
+ return(text_xpix(&x->x_obj, glist) + (x->size_x - IOWIDTH) \
* current_iolet / (total_iolets == 1 ? 1 : total_iolets - 1));
}
@@ -246,8 +248,8 @@ static void textwidget_draw_inlets(t_textwidget *x, t_glist *glist, int firsttim
{
onset = calculate_onset(x, glist, i, total_outlets);
sys_vgui("%s create rectangle %d %d %d %d -tags {%xo%d %xo %s}\n",
- x->canvas_id, onset, text_ypix(&x->x_obj, glist) + x->x_height,
- onset + IOWIDTH, text_ypix(&x->x_obj, glist) + x->x_height + 2,
+ x->canvas_id, onset, text_ypix(&x->x_obj, glist) + x->size_y,
+ onset + IOWIDTH, text_ypix(&x->x_obj, glist) + x->size_y + 2,
x, i, x, x->all_tag);
}
}
@@ -265,13 +267,13 @@ static void draw_scrollbar(t_textwidget *x)
{
sys_vgui("pack %s -side right -fill y -before %s \n",
x->scrollbar_id, x->text_id);
- x->x_have_scrollbar = 1;
+ x->x_have_scrollbars = 1;
}
static void erase_scrollbar(t_textwidget *x)
{
sys_vgui("pack forget %s \n", x->scrollbar_id);
- x->x_have_scrollbar = 0;
+ x->x_have_scrollbars = 0;
}
static void bind_standard_keys(t_textwidget *x)
@@ -326,11 +328,10 @@ static void create_widget(t_textwidget *x)
/* Seems we have to delete the widget in case it already exists (Provided by Guenter)*/
sys_vgui("destroy %s\n", x->frame_id);
sys_vgui("frame %s \n", x->frame_id);
- sys_vgui("text %s -font {%s %d %s} -border 1 \
+ sys_vgui("text %s -border 1 \
-highlightthickness 1 -relief sunken -bg \"%s\" -fg \"%s\" \
-yscrollcommand {%s set} \n",
x->text_id,
- x->x_font_face->s_name, x->x_font_size, x->x_font_weight->s_name,
DEFAULT_COLOR, "black",
x->scrollbar_id);
sys_vgui("scrollbar %s -command {%s yview}\n",
@@ -352,11 +353,11 @@ static void textwidget_drawme(t_textwidget *x, t_glist *glist, int firsttime)
{
create_widget(x);
textwidget_draw_inlets(x, glist, firsttime, TOTAL_INLETS, TOTAL_OUTLETS);
- if(x->x_have_scrollbar) draw_scrollbar(x);
+ if(x->x_have_scrollbars) draw_scrollbar(x);
sys_vgui("%s create window %d %d -anchor nw -window %s \
-tags {%s %s} -width %d -height %d \n", x->canvas_id,
text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist),
- x->frame_id, x->window_tag, x->all_tag, x->x_width, x->x_height);
+ x->frame_id, x->window_tag, x->all_tag, x->size_x, x->size_y);
}
else
{
@@ -389,8 +390,8 @@ static void textwidget_getrect(t_gobj *z, t_glist *owner,
t_textwidget *x = (t_textwidget*)z;
*xp1 = text_xpix(&x->x_obj, owner);
*yp1 = text_ypix(&x->x_obj, owner);
- *xp2 = *xp1 + x->x_width;
- *yp2 = *yp1 + x->x_height + 2; // add 2 to give space for outlets
+ *xp2 = *xp1 + x->size_x;
+ *yp2 = *yp1 + x->size_y + 2; // add 2 to give space for outlets
}
static void textwidget_displace(t_gobj *z, t_glist *glist, int dx, int dy)
@@ -406,8 +407,8 @@ static void textwidget_displace(t_gobj *z, t_glist *glist, int dx, int dy)
sys_vgui("%s move RSZ %d %d\n", x->canvas_id, dx, dy);
/* sys_vgui("%s coords %s %d %d %d %d\n", x->canvas_id, x->all_tag,
text_xpix(&x->x_obj, glist), text_ypix(&x->x_obj, glist)-1,
- text_xpix(&x->x_obj, glist) + x->x_width,
- text_ypix(&x->x_obj, glist) + x->x_height-2);*/
+ text_xpix(&x->x_obj, glist) + x->size_x,
+ text_ypix(&x->x_obj, glist) + x->size_y-2);*/
// textwidget_drawme(x, glist, 0);
canvas_fixlinesfor(glist_getcanvas(glist), (t_text*) x);
}
@@ -573,12 +574,7 @@ static void textwidget_set(t_textwidget* x, t_symbol *s, int argc, t_atom *argv
textwidget_append(x, s, argc, argv);
}
-static void textwidget_output(t_textwidget* x, t_symbol *s, int argc, t_atom *argv)
-{
- outlet_list(x->x_data_outlet, s, argc, argv );
-}
-
-/* Pass the contents of the text widget onto the textwidget_output fuction above */
+/* Pass the contents of the text widget onto the textwidget_output_callback fuction above */
static void textwidget_bang_output(t_textwidget* x)
{
/* With "," and ";" escaping thanks to JMZ */
@@ -587,6 +583,11 @@ static void textwidget_bang_output(t_textwidget* x)
x->receive_name->s_name, x->text_id);
}
+static void textwidget_output_callback(t_textwidget* x, t_symbol *s, int argc, t_atom *argv)
+{
+ outlet_list(x->x_data_outlet, s, argc, argv );
+}
+
static void textwidget_keyup_callback(t_textwidget *x, t_float f)
{
/* DEBUG(post("textwidget_keyup_callback");); */
@@ -640,10 +641,10 @@ static void textwidget_save(t_gobj *z, t_binbuf *b)
{
t_textwidget *x = (t_textwidget *)z;
- binbuf_addv(b, "ssiisii;", &s__X, gensym("obj"),
+ binbuf_addv(b, "ssiisiii;", &s__X, gensym("obj"),
x->x_obj.te_xpix, x->x_obj.te_ypix,
atom_getsymbol(binbuf_getvec(x->x_obj.te_binbuf)),
- x->x_width, x->x_height);
+ x->size_x, x->size_y, x->x_have_scrollbars);
}
static void textwidget_option(t_textwidget *x, t_symbol *s, int argc, t_atom *argv)
@@ -664,16 +665,41 @@ static void textwidget_option(t_textwidget *x, t_symbol *s, int argc, t_atom *ar
}
}
+static void query_scrollbars(t_textwidget *x)
+{
+ t_atom state[2];
+ SETSYMBOL(state, scrollbars_symbol);
+ SETFLOAT(state + 1, (t_float)x->x_have_scrollbars);
+ textwidget_query_callback(x, gensym("query_callback"), 2, state);
+}
+
+static void query_size(t_textwidget *x)
+{
+ t_atom coords[3];
+ SETSYMBOL(coords, size_symbol);
+ SETFLOAT(coords + 1, (t_float)x->size_x);
+ SETFLOAT(coords + 2, (t_float)x->size_y);
+ textwidget_query_callback(x, gensym("query_callback"), 3, coords);
+}
+
static void textwidget_query(t_textwidget *x, t_symbol *s)
{
post("textwidget_query %s", s->s_name);
if(s == &s_)
+ {
query_options(x, sizeof(textwidget_tk_options)/sizeof(char *), textwidget_tk_options);
+ query_scrollbars(x);
+ query_size(x);
+ }
+ else if(s == scrollbars_symbol)
+ query_scrollbars(x);
+ else if(s == size_symbol)
+ query_size(x);
else
query_options(x, 1, &(s->s_name));
}
-static void textwidget_scrollbar(t_textwidget *x, t_float f)
+static void textwidget_scrollbars(t_textwidget *x, t_float f)
{
if(f > 0)
draw_scrollbar(x);
@@ -681,30 +707,15 @@ static void textwidget_scrollbar(t_textwidget *x, t_float f)
erase_scrollbar(x);
}
-static void textwidget_fontsize(t_textwidget *x, t_float font_size)
-{
- DEBUG(post("textwidget_fontsize"););
- if(font_size > 8)
- {
- x->x_font_size = (t_int)font_size;
- sys_vgui("%s configure -font {%s %d %s} \n",
- x->text_id,
- x->x_font_face->s_name, x->x_font_size,
- x->x_font_weight->s_name);
- }
- else
- pd_error(x,"textwidget: invalid font size: %f",font_size);
-}
-
static void textwidget_size(t_textwidget *x, t_float width, t_float height)
{
DEBUG(post("textwidget_size"););
- x->x_height = height;
- x->x_width = width;
+ x->size_y = height;
+ x->size_x = width;
if(glist_isvisible(x->x_glist))
{
sys_vgui("%s itemconfigure %s -width %d -height %d\n",
- x->canvas_id, x->window_tag, x->x_width, x->x_height);
+ x->canvas_id, x->window_tag, x->size_x, x->size_y);
erase_inlets(x);
textwidget_draw_inlets(x, x->x_glist, 1, TOTAL_INLETS, TOTAL_OUTLETS);
canvas_fixlinesfor(x->x_glist, (t_text *)x); // 2nd inlet
@@ -713,6 +724,12 @@ static void textwidget_size(t_textwidget *x, t_float width, t_float height)
/* callback functions */
+static void textwidget_store_callback(t_textwidget *x, t_symbol *s, int argc, t_atom *argv)
+{
+ if(s != &s_)
+ binbuf_restore(x->options_binbuf, argc, argv);
+}
+
static void textwidget_query_callback(t_textwidget *x, t_symbol *s, int argc, t_atom *argv)
{
t_symbol *tmp_symbol = atom_getsymbolarg(0, argc, argv);
@@ -762,11 +779,11 @@ static void textwidget_resize_motion_callback(t_textwidget *x, t_floatarg f1, t_
int dx = (int)f1, dy = (int)f2;
if (glist_isvisible(x->x_glist))
{
- x->x_width += dx;
- x->x_height += dy;
+ x->size_x += dx;
+ x->size_y += dy;
sys_vgui("%s itemconfigure %s -width %d -height %d\n",
x->canvas_id, x->window_tag,
- x->x_width, x->x_height);
+ x->size_x, x->size_y);
sys_vgui("%s move RSZ %d %d\n",
x->canvas_id, dx, dy);
}
@@ -784,23 +801,28 @@ static void *textwidget_new(t_symbol *s, int argc, t_atom *argv)
t_textwidget *x = (t_textwidget *)pd_new(textwidget_class);
char buf[MAXPDSTRING];
- x->x_height = 1;
- x->x_font_face = gensym("helvetica");
- x->x_font_size = 10;
- x->x_font_weight = gensym("normal");
- x->x_have_scrollbar = 0;
+ x->options_binbuf = binbuf_new();
+
x->x_selected = 0;
+ x->x_resizing = 0;
- if (argc < 4)
+ if (argc < 3)
{
- post("textwidget: You must enter at least 4 arguments. Default values used.");
- x->x_width = TEXT_DEFAULT_WIDTH;
- x->x_height = TEXT_DEFAULT_HEIGHT;
-
- } else {
- /* Copy args into structure */
- x->x_width = atom_getint(argv);
- x->x_height = atom_getint(argv+1);
+ post("[text]: less than 3 arguments entered, default values used.");
+ x->size_x = TEXT_DEFAULT_WIDTH;
+ x->size_y = TEXT_DEFAULT_HEIGHT;
+ x->x_have_scrollbars = 0;
+ }
+ else
+ {
+ x->size_x = atom_getint(argv);
+ x->size_y = atom_getint(argv + 1);
+ x->x_have_scrollbars = atom_getint(argv + 2);
+ if(argc > 3)
+ {
+ binbuf_add(x->options_binbuf, argc - 3, argv + 3);
+ restore_options(x);
+ }
}
x->x_data_outlet = outlet_new(&x->x_obj, &s_float);
@@ -828,17 +850,12 @@ void text_setup(void) {
class_addbang(textwidget_class, (t_method)textwidget_bang_output);
class_addanything(textwidget_class, (t_method)textwidget_option);
-
class_addmethod(textwidget_class, (t_method)textwidget_query,
gensym("query"), A_DEFSYMBOL, 0);
- class_addmethod(textwidget_class, (t_method)textwidget_scrollbar,
- gensym("scrollbar"), A_DEFFLOAT, 0);
+ class_addmethod(textwidget_class, (t_method)textwidget_scrollbars,
+ gensym("scrollbars"), A_DEFFLOAT, 0);
class_addmethod(textwidget_class, (t_method)textwidget_size,
gensym("size"), A_DEFFLOAT, A_DEFFLOAT, 0);
- class_addmethod(textwidget_class, (t_method)textwidget_fontsize,
- gensym("fontsize"), A_DEFFLOAT, 0);
- class_addmethod(textwidget_class, (t_method)textwidget_output,
- gensym("output"), A_GIMME, 0);
class_addmethod(textwidget_class, (t_method)textwidget_set,
gensym("set"), A_GIMME, 0);
class_addmethod(textwidget_class, (t_method)textwidget_append,
@@ -848,8 +865,12 @@ void text_setup(void) {
class_addmethod(textwidget_class, (t_method)textwidget_clear,
gensym("clear"), 0);
/* callbacks */
+ class_addmethod(textwidget_class, (t_method)textwidget_store_callback,
+ gensym("store_callback"), A_GIMME, 0);
class_addmethod(textwidget_class, (t_method)textwidget_query_callback,
gensym("query_callback"), A_GIMME, 0);
+ class_addmethod(textwidget_class, (t_method)textwidget_output_callback,
+ gensym("output"), A_GIMME, 0);
class_addmethod(textwidget_class, (t_method)textwidget_keyup_callback,
gensym("keyup"), A_DEFFLOAT, 0);
class_addmethod(textwidget_class, (t_method)textwidget_click_callback,
@@ -863,6 +884,8 @@ void text_setup(void) {
class_setsavefn(textwidget_class,&textwidget_save);
/* commonly used symbols */
+ size_symbol = gensym("size");
+ scrollbars_symbol = gensym("scrollbars");
backspace_symbol = gensym("backspace");
return_symbol = gensym("return");
space_symbol = gensym("space");