comparison src/glyphs-widget.c @ 404:2f8bb876ab1d r21-2-32

Import from CVS: tag r21-2-32
author cvs
date Mon, 13 Aug 2007 11:16:07 +0200
parents a86b2b5e0111
children b8cc9ab3f761
comparison
equal deleted inserted replaced
403:9f011ab08d48 404:2f8bb876ab1d
147 signal_simple_error (":callback must be a function or expression", data); 147 signal_simple_error (":callback must be a function or expression", data);
148 } 148 }
149 } 149 }
150 150
151 static void 151 static void
152 check_valid_int_or_function (Lisp_Object data)
153 {
154 if (!INTP (data) && !CONSP (data))
155 signal_simple_error ("must be an integer or expresssion", data);
156 }
157
158 static void
152 check_valid_symbol (Lisp_Object data) 159 check_valid_symbol (Lisp_Object data)
153 { 160 {
154 CHECK_SYMBOL (data); 161 CHECK_SYMBOL (data);
155 } 162 }
156 163
358 unsigned int* width, unsigned int* height, 365 unsigned int* width, unsigned int* height,
359 enum image_instance_geometry disp, Lisp_Object domain) 366 enum image_instance_geometry disp, Lisp_Object domain)
360 { 367 {
361 Lisp_Image_Instance* ii = XIMAGE_INSTANCE (image_instance); 368 Lisp_Image_Instance* ii = XIMAGE_INSTANCE (image_instance);
362 struct image_instantiator_methods* meths; 369 struct image_instantiator_methods* meths;
370 Lisp_Object dynamic_width = Qnil;
371 Lisp_Object dynamic_height = Qnil;
363 372
364 /* First just set up what we already have. */ 373 /* First just set up what we already have. */
365 if (width) *width = IMAGE_INSTANCE_WIDTH (ii); 374 if (width) *width = IMAGE_INSTANCE_WIDTH (ii);
366 if (height) *height = IMAGE_INSTANCE_HEIGHT (ii); 375 if (height) *height = IMAGE_INSTANCE_HEIGHT (ii);
367 376
400 *width = w + 2 * WIDGET_BORDER_WIDTH; 409 *width = w + 2 * WIDGET_BORDER_WIDTH;
401 if (IMAGE_INSTANCE_SUBWINDOW_V_RESIZEP (ii)) 410 if (IMAGE_INSTANCE_SUBWINDOW_V_RESIZEP (ii))
402 *height = h + 2 * WIDGET_BORDER_HEIGHT; 411 *height = h + 2 * WIDGET_BORDER_HEIGHT;
403 } 412 }
404 } 413 }
414 /* Finish off with dynamic sizing. */
415 if (!NILP (IMAGE_INSTANCE_WIDGET_WIDTH_SUBR (ii)))
416 {
417 dynamic_width = Feval (IMAGE_INSTANCE_WIDGET_WIDTH_SUBR (ii));
418 if (INTP (dynamic_width))
419 *width = XINT (dynamic_width);
420 }
421 if (!NILP (IMAGE_INSTANCE_WIDGET_HEIGHT_SUBR (ii)))
422 {
423 dynamic_height = Feval (IMAGE_INSTANCE_WIDGET_HEIGHT_SUBR (ii));
424 if (INTP (dynamic_height))
425 *height = XINT (dynamic_height);
426 }
405 } 427 }
406 } 428 }
407 429
408 static void 430 static void
409 widget_layout (Lisp_Object image_instance, 431 widget_layout (Lisp_Object image_instance,
482 /* initialize_subwindow_image_instance (ii);*/ 504 /* initialize_subwindow_image_instance (ii);*/
483 IMAGE_INSTANCE_WIDGET_TYPE (ii) = type; 505 IMAGE_INSTANCE_WIDGET_TYPE (ii) = type;
484 IMAGE_INSTANCE_WIDGET_PROPS (ii) = Qnil; 506 IMAGE_INSTANCE_WIDGET_PROPS (ii) = Qnil;
485 SET_IMAGE_INSTANCE_WIDGET_FACE (ii, Qnil); 507 SET_IMAGE_INSTANCE_WIDGET_FACE (ii, Qnil);
486 IMAGE_INSTANCE_WIDGET_ITEMS (ii) = allocate_gui_item (); 508 IMAGE_INSTANCE_WIDGET_ITEMS (ii) = allocate_gui_item ();
509 IMAGE_INSTANCE_WIDGET_PENDING_ITEMS (ii) = Qnil;
510 IMAGE_INSTANCE_WIDGET_WIDTH_SUBR (ii) = Qnil;
511 IMAGE_INSTANCE_WIDGET_HEIGHT_SUBR (ii) = Qnil;
487 IMAGE_INSTANCE_SUBWINDOW_H_RESIZEP (ii) = 1; 512 IMAGE_INSTANCE_SUBWINDOW_H_RESIZEP (ii) = 1;
488 IMAGE_INSTANCE_SUBWINDOW_V_RESIZEP (ii) = 1; 513 IMAGE_INSTANCE_SUBWINDOW_V_RESIZEP (ii) = 1;
489 IMAGE_INSTANCE_SUBWINDOW_ORIENT (ii) = 0; 514 IMAGE_INSTANCE_SUBWINDOW_ORIENT (ii) = 0;
490 IMAGE_INSTANCE_SUBWINDOW_JUSTIFY (ii) = 0; 515 IMAGE_INSTANCE_SUBWINDOW_JUSTIFY (ii) = 0;
491 } 516 }
616 gives us some explicitly, or there are some constraints that we 641 gives us some explicitly, or there are some constraints that we
617 can't change later on. Otherwise we postpone sizing until query 642 can't change later on. Otherwise we postpone sizing until query
618 geometry gets called. */ 643 geometry gets called. */
619 if (!NILP (pixwidth)) /* pixwidth takes precendent */ 644 if (!NILP (pixwidth)) /* pixwidth takes precendent */
620 { 645 {
621 pw = XINT (pixwidth); 646 if (!INTP (pixwidth))
622 IMAGE_INSTANCE_SUBWINDOW_H_RESIZEP (ii) = 0; 647 IMAGE_INSTANCE_WIDGET_WIDTH_SUBR (ii) = pixwidth;
648 else
649 {
650 pw = XINT (pixwidth);
651 IMAGE_INSTANCE_SUBWINDOW_H_RESIZEP (ii) = 0;
652 }
623 } 653 }
624 else if (!NILP (width)) 654 else if (!NILP (width))
625 { 655 {
626 tw = XINT (width); 656 tw = XINT (width);
627 IMAGE_INSTANCE_SUBWINDOW_H_RESIZEP (ii) = 0; 657 IMAGE_INSTANCE_SUBWINDOW_H_RESIZEP (ii) = 0;
628 } 658 }
629 659
630 if (!NILP (pixheight)) 660 if (!NILP (pixheight))
631 { 661 {
632 ph = XINT (pixheight); 662 if (!INTP (pixwidth))
633 IMAGE_INSTANCE_SUBWINDOW_V_RESIZEP (ii) = 0; 663 IMAGE_INSTANCE_WIDGET_HEIGHT_SUBR (ii) = pixheight;
664 else
665 {
666 ph = XINT (pixheight);
667 IMAGE_INSTANCE_SUBWINDOW_V_RESIZEP (ii) = 0;
668 }
634 } 669 }
635 else if (!NILP (height) && XINT (height) > 1) 670 else if (!NILP (height) && XINT (height) > 1)
636 { 671 {
637 th = XINT (height); 672 th = XINT (height);
638 IMAGE_INSTANCE_SUBWINDOW_V_RESIZEP (ii) = 0; 673 IMAGE_INSTANCE_SUBWINDOW_V_RESIZEP (ii) = 0;
754 /* Record new items for update. *_tab_control_update will do the 789 /* Record new items for update. *_tab_control_update will do the
755 rest. */ 790 rest. */
756 if (EQ (prop, Q_items)) 791 if (EQ (prop, Q_items))
757 { 792 {
758 Lisp_Image_Instance* ii = XIMAGE_INSTANCE (image_instance); 793 Lisp_Image_Instance* ii = XIMAGE_INSTANCE (image_instance);
794
759 check_valid_item_list_1 (val); 795 check_valid_item_list_1 (val);
760 796
761 IMAGE_INSTANCE_WIDGET_ITEMS (ii) = 797 /* Don't set the actual items since we might decide not to use
762 Fcons (XCAR (IMAGE_INSTANCE_WIDGET_ITEMS (ii)), 798 the new ones (because nothing has really changed). If we did
799 set them and didn't use them then we would get into whole
800 heaps of trouble when the old items get GC'd. */
801 IMAGE_INSTANCE_WIDGET_PENDING_ITEMS (ii) =
802 Fcons (XCAR (IMAGE_INSTANCE_WIDGET_ITEMS (ii)),
763 parse_gui_item_tree_children (val)); 803 parse_gui_item_tree_children (val));
764
765 IMAGE_INSTANCE_WIDGET_ITEMS_CHANGED (ii) = 1; 804 IMAGE_INSTANCE_WIDGET_ITEMS_CHANGED (ii) = 1;
766 805
767 return Qt; 806 return Qt;
768 } 807 }
769 return Qunbound; 808 return Qunbound;
1097 } while (0) 1136 } while (0)
1098 1137
1099 #define VALID_WIDGET_KEYWORDS(type) do { \ 1138 #define VALID_WIDGET_KEYWORDS(type) do { \
1100 IIFORMAT_VALID_KEYWORD (type, Q_width, check_valid_int); \ 1139 IIFORMAT_VALID_KEYWORD (type, Q_width, check_valid_int); \
1101 IIFORMAT_VALID_KEYWORD (type, Q_height, check_valid_int); \ 1140 IIFORMAT_VALID_KEYWORD (type, Q_height, check_valid_int); \
1102 IIFORMAT_VALID_KEYWORD (type, Q_pixel_width, check_valid_int); \ 1141 IIFORMAT_VALID_KEYWORD (type, Q_pixel_width, check_valid_int_or_function);\
1103 IIFORMAT_VALID_KEYWORD (type, Q_pixel_height, check_valid_int); \ 1142 IIFORMAT_VALID_KEYWORD (type, Q_pixel_height, check_valid_int_or_function);\
1104 IIFORMAT_VALID_KEYWORD (type, Q_face, check_valid_face); \ 1143 IIFORMAT_VALID_KEYWORD (type, Q_face, check_valid_face); \
1105 } while (0) 1144 } while (0)
1106 1145
1107 1146
1108 static void image_instantiator_widget (void) 1147 static void image_instantiator_widget (void)
1144 IIFORMAT_HAS_SHARED_METHOD (combo_box, possible_dest_types, widget); 1183 IIFORMAT_HAS_SHARED_METHOD (combo_box, possible_dest_types, widget);
1145 VALID_GUI_KEYWORDS (combo_box); 1184 VALID_GUI_KEYWORDS (combo_box);
1146 1185
1147 IIFORMAT_VALID_KEYWORD (combo_box, Q_width, check_valid_int); 1186 IIFORMAT_VALID_KEYWORD (combo_box, Q_width, check_valid_int);
1148 IIFORMAT_VALID_KEYWORD (combo_box, Q_height, check_valid_int); 1187 IIFORMAT_VALID_KEYWORD (combo_box, Q_height, check_valid_int);
1149 IIFORMAT_VALID_KEYWORD (combo_box, Q_pixel_width, check_valid_int); 1188 IIFORMAT_VALID_KEYWORD (combo_box, Q_pixel_width, check_valid_int_or_function);
1150 IIFORMAT_VALID_KEYWORD (combo_box, Q_face, check_valid_face); 1189 IIFORMAT_VALID_KEYWORD (combo_box, Q_face, check_valid_face);
1151 IIFORMAT_VALID_KEYWORD (combo_box, Q_properties, check_valid_item_list); 1190 IIFORMAT_VALID_KEYWORD (combo_box, Q_properties, check_valid_item_list);
1152 } 1191 }
1153 1192
1154 static void image_instantiator_scrollbar (void) 1193 static void image_instantiator_scrollbar (void)
1157 IIFORMAT_HAS_SHARED_METHOD (scrollbar, validate, widget); 1196 IIFORMAT_HAS_SHARED_METHOD (scrollbar, validate, widget);
1158 IIFORMAT_HAS_SHARED_METHOD (scrollbar, possible_dest_types, widget); 1197 IIFORMAT_HAS_SHARED_METHOD (scrollbar, possible_dest_types, widget);
1159 IIFORMAT_HAS_SHARED_METHOD (scrollbar, instantiate, widget); 1198 IIFORMAT_HAS_SHARED_METHOD (scrollbar, instantiate, widget);
1160 VALID_GUI_KEYWORDS (scrollbar); 1199 VALID_GUI_KEYWORDS (scrollbar);
1161 1200
1162 IIFORMAT_VALID_KEYWORD (scrollbar, Q_pixel_width, check_valid_int); 1201 IIFORMAT_VALID_KEYWORD (scrollbar, Q_pixel_width, check_valid_int_or_function);
1163 IIFORMAT_VALID_KEYWORD (scrollbar, Q_pixel_height, check_valid_int); 1202 IIFORMAT_VALID_KEYWORD (scrollbar, Q_pixel_height, check_valid_int_or_function);
1164 IIFORMAT_VALID_KEYWORD (scrollbar, Q_face, check_valid_face); 1203 IIFORMAT_VALID_KEYWORD (scrollbar, Q_face, check_valid_face);
1165 } 1204 }
1166 1205
1167 static void image_instantiator_progress_guage (void) 1206 static void image_instantiator_progress_guage (void)
1168 { 1207 {
1216 IIFORMAT_HAS_METHOD (layout, possible_dest_types); 1255 IIFORMAT_HAS_METHOD (layout, possible_dest_types);
1217 IIFORMAT_HAS_SHARED_METHOD (layout, instantiate, widget); 1256 IIFORMAT_HAS_SHARED_METHOD (layout, instantiate, widget);
1218 IIFORMAT_HAS_METHOD (layout, normalize); 1257 IIFORMAT_HAS_METHOD (layout, normalize);
1219 IIFORMAT_HAS_METHOD (layout, query_geometry); 1258 IIFORMAT_HAS_METHOD (layout, query_geometry);
1220 IIFORMAT_HAS_METHOD (layout, layout); 1259 IIFORMAT_HAS_METHOD (layout, layout);
1221 IIFORMAT_VALID_KEYWORD (layout, Q_pixel_width, check_valid_int); 1260 IIFORMAT_VALID_KEYWORD (layout, Q_pixel_width, check_valid_int_or_function);
1222 IIFORMAT_VALID_KEYWORD (layout, Q_pixel_height, check_valid_int); 1261 IIFORMAT_VALID_KEYWORD (layout, Q_pixel_height, check_valid_int_or_function);
1223 IIFORMAT_VALID_KEYWORD (layout, Q_orientation, check_valid_orientation); 1262 IIFORMAT_VALID_KEYWORD (layout, Q_orientation, check_valid_orientation);
1224 IIFORMAT_VALID_KEYWORD (layout, Q_justify, check_valid_justification); 1263 IIFORMAT_VALID_KEYWORD (layout, Q_justify, check_valid_justification);
1225 IIFORMAT_VALID_KEYWORD (layout, Q_border, check_valid_border); 1264 IIFORMAT_VALID_KEYWORD (layout, Q_border, check_valid_border);
1226 IIFORMAT_VALID_KEYWORD (layout, Q_items, 1265 IIFORMAT_VALID_KEYWORD (layout, Q_items,
1227 check_valid_glyph_or_instantiator_list); 1266 check_valid_glyph_or_instantiator_list);