Mercurial > hg > xemacs-beta
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); |