#define IMAGE_UNSPECIFIED_GEOMETRY -1
#define IMAGE_UNCHANGED_GEOMETRY -2
-#define WIDGET_BORDER_HEIGHT 4
-#define WIDGET_BORDER_WIDTH 4
+#define DEFAULT_WIDGET_BORDER_WIDTH 2
+#define DEFAULT_WIDGET_SPACING 3
+#define DEFAULT_WIDGET_SHADOW_WIDTH 2
enum governing_domain
{
struct image_instantiator_methods *format##_image_instantiator_methods
#define INITIALIZE_IMAGE_INSTANTIATOR_FORMAT_NO_SYM(format, obj_name) \
-do { \
- format##_image_instantiator_methods = \
- xnew_and_zero (struct image_instantiator_methods); \
- format##_image_instantiator_methods->symbol = Q##format; \
- format##_image_instantiator_methods->device = Qnil; \
- format##_image_instantiator_methods->keywords = \
- Dynarr_new (ii_keyword_entry); \
- format##_image_instantiator_methods->consoles = \
- Dynarr_new (console_type_entry); \
- add_entry_to_image_instantiator_format_list \
- (Q##format, format##_image_instantiator_methods); \
- dumpstruct (&format##_image_instantiator_methods, \
- &iim_description); \
+do { \
+ format##_image_instantiator_methods = \
+ xnew_and_zero (struct image_instantiator_methods); \
+ format##_image_instantiator_methods->symbol = Q##format; \
+ format##_image_instantiator_methods->device = Qnil; \
+ format##_image_instantiator_methods->keywords = \
+ Dynarr_new (ii_keyword_entry); \
+ format##_image_instantiator_methods->consoles = \
+ Dynarr_new (console_type_entry); \
+ add_entry_to_image_instantiator_format_list \
+ (Q##format, format##_image_instantiator_methods); \
+ dump_add_root_struct_ptr (&format##_image_instantiator_methods, \
+ &iim_description); \
} while (0)
#define INITIALIZE_IMAGE_INSTANTIATOR_FORMAT(format, obj_name) \
DECLARE_IMAGE_INSTANTIATOR_FORMAT(format); \
struct image_instantiator_methods *type##_##format##_image_instantiator_methods
-#define INITIALIZE_DEVICE_IIFORMAT(type, format) \
-do { \
- type##_##format##_image_instantiator_methods = \
- xnew_and_zero (struct image_instantiator_methods); \
- type##_##format##_image_instantiator_methods->symbol = Q##format; \
- type##_##format##_image_instantiator_methods->device = Q##type; \
- type##_##format##_image_instantiator_methods->keywords = \
- Dynarr_new (ii_keyword_entry); \
- add_entry_to_device_ii_format_list \
- (Q##type, Q##format, type##_##format##_image_instantiator_methods); \
- IIFORMAT_VALID_CONSOLE(type,format); \
- dumpstruct (&type##_##format##_image_instantiator_methods, \
- &iim_description); \
+#define INITIALIZE_DEVICE_IIFORMAT(type, format) \
+do { \
+ type##_##format##_image_instantiator_methods = \
+ xnew_and_zero (struct image_instantiator_methods); \
+ type##_##format##_image_instantiator_methods->symbol = Q##format; \
+ type##_##format##_image_instantiator_methods->device = Q##type; \
+ type##_##format##_image_instantiator_methods->keywords = \
+ Dynarr_new (ii_keyword_entry); \
+ add_entry_to_device_ii_format_list \
+ (Q##type, Q##format, type##_##format##_image_instantiator_methods); \
+ IIFORMAT_VALID_CONSOLE(type,format); \
+ dump_add_root_struct_ptr (&type##_##format##_image_instantiator_methods, \
+ &iim_description); \
} while (0)
/* Declare that image-instantiator format FORMAT has method M; used in
#define IIFORMAT_INHERITS_SHARED_DEVMETHOD(type, from, format, m, fromformat) \
(type##_##format##_image_instantiator_methods->m##_method = from##_##fromformat##_##m)
+#define INSTANTIATOR_TYPE(inst) (XVECTOR_DATA ((inst))[0])
+
struct image_instantiator_methods *
decode_device_ii_format (Lisp_Object device, Lisp_Object format,
Error_behavior errb);
int width, int height, int xoffset, int yoffset,
Lisp_Object domain);
int invalidate_glyph_geometry_maybe (Lisp_Object glyph_or_ii, struct window* w);
+Lisp_Object make_image_instance_cache_hash_table (void);
DECLARE_DOESNT_RETURN (incompatible_image_types (Lisp_Object instantiator,
int given_dest_mask,
Lisp_Object attachee_property;/* property of that face or glyph */
};
-#define IMAGE_SPECIFIER_DATA(g) (SPECIFIER_TYPE_DATA (g, image))
+#define IMAGE_SPECIFIER_DATA(g) SPECIFIER_TYPE_DATA (g, image)
#define IMAGE_SPECIFIER_ALLOWED(g) (IMAGE_SPECIFIER_DATA (g)->allowed)
#define IMAGE_SPECIFIER_ATTACHEE(g) (IMAGE_SPECIFIER_DATA (g)->attachee)
#define IMAGE_SPECIFIER_ATTACHEE_PROPERTY(g) \
unsigned int v_resize : 1; /* Whether the vsize is allowed to change. */
unsigned int h_resize : 1; /* Whether the hsize is allowed to change. */
unsigned int orientation : 1; /* Vertical or horizontal. */
- unsigned int justification : 2; /* Left, right or center. */
+ unsigned int h_justification : 2; /* left, right or center. */
+ unsigned int v_justification : 2; /* top, bottom or center. */
/* Face for colors and font. We specify this here because we
want people to be able to put :face in the instantiator
spec. Using glyph-face is more inconvenient, although more
#define LAYOUT_VERTICAL 1
#define LAYOUT_JUSTIFY_LEFT 0
+#define LAYOUT_JUSTIFY_TOP 0
#define LAYOUT_JUSTIFY_RIGHT 1
+#define LAYOUT_JUSTIFY_BOTTOM 1
#define LAYOUT_JUSTIFY_CENTER 2
#define IMAGE_INSTANCE_HASH_DEPTH 0
((i)->u.subwindow.h_resize)
#define IMAGE_INSTANCE_SUBWINDOW_ORIENT(i) \
((i)->u.subwindow.orientation)
-#define IMAGE_INSTANCE_SUBWINDOW_JUSTIFY(i) \
-((i)->u.subwindow.justification)
+#define IMAGE_INSTANCE_SUBWINDOW_H_JUSTIFY(i) \
+((i)->u.subwindow.h_justification)
+#define IMAGE_INSTANCE_SUBWINDOW_V_JUSTIFY(i) \
+((i)->u.subwindow.v_justification)
+#define IMAGE_INSTANCE_SUBWINDOW_RIGHT_JUSTIFIED(i) \
+ (IMAGE_INSTANCE_SUBWINDOW_H_JUSTIFY(i) == LAYOUT_JUSTIFY_RIGHT)
+#define IMAGE_INSTANCE_SUBWINDOW_LEFT_JUSTIFIED(i) \
+ (IMAGE_INSTANCE_SUBWINDOW_H_JUSTIFY(i) == LAYOUT_JUSTIFY_LEFT)
+#define IMAGE_INSTANCE_SUBWINDOW_TOP_JUSTIFIED(i) \
+ (IMAGE_INSTANCE_SUBWINDOW_V_JUSTIFY(i) == LAYOUT_JUSTIFY_TOP)
+#define IMAGE_INSTANCE_SUBWINDOW_BOTTOM_JUSTIFIED(i) \
+ (IMAGE_INSTANCE_SUBWINDOW_V_JUSTIFY(i) == LAYOUT_JUSTIFY_BOTTOM)
+#define IMAGE_INSTANCE_SUBWINDOW_H_CENTERED(i) \
+ (IMAGE_INSTANCE_SUBWINDOW_H_JUSTIFY(i) == LAYOUT_JUSTIFY_CENTER)
+#define IMAGE_INSTANCE_SUBWINDOW_V_CENTERED(i) \
+ (IMAGE_INSTANCE_SUBWINDOW_V_JUSTIFY(i) == LAYOUT_JUSTIFY_CENTER)
+#define IMAGE_INSTANCE_SUBWINDOW_LOGICAL_LAYOUT(i) \
+ (IMAGE_INSTANCE_SUBWINDOW_ORIENT (i) \
+ == LAYOUT_VERTICAL && !IMAGE_INSTANCE_SUBWINDOW_V_CENTERED (i))
+
#define IMAGE_INSTANCE_SUBWINDOW_FACE(i) \
((i)->u.subwindow.face)
#define IMAGE_INSTANCE_WIDGET_PENDING_ITEMS(i) \
((i)->u.subwindow.pending_items)
#define IMAGE_INSTANCE_WIDGET_ITEM(i) \
-(CONSP (IMAGE_INSTANCE_WIDGET_ITEMS (i)) ? \
-XCAR (IMAGE_INSTANCE_WIDGET_ITEMS (i)) : \
- IMAGE_INSTANCE_WIDGET_ITEMS (i))
-#define IMAGE_INSTANCE_WIDGET_TEXT(i) XGUI_ITEM (IMAGE_INSTANCE_WIDGET_ITEM (i))->name
+ (CONSP (IMAGE_INSTANCE_WIDGET_ITEMS (i)) ? \
+ XCAR (IMAGE_INSTANCE_WIDGET_ITEMS (i)) : \
+ IMAGE_INSTANCE_WIDGET_ITEMS (i))
+#define IMAGE_INSTANCE_WIDGET_TEXT(i) \
+ XGUI_ITEM (IMAGE_INSTANCE_WIDGET_ITEM (i))->name
/* Layout properties */
#define IMAGE_INSTANCE_LAYOUT_CHILDREN(i) ((i)->u.subwindow.children)
int check_for_ignored_expose (struct frame* f, int x, int y, int width, int height);
extern int hold_ignored_expose_registration;
+#define ROUND_UP(arg, unit) (((int)((arg) + (unit) - 1) / (int)(unit)) * (int)(unit))
+
#endif /* INCLUDED_glyphs_h_ */