0
@@ -113,27 +113,30 @@ void shoes_ruby_init(void);
0
// Common funcs for dealing with attribute hashes
0
#define ATTR(attr, n) shoes_hash_get(attr, s_##n)
0
-#define PX(attr, n, dn, pn) shoes_px(attr, s_##n, dn, pn, 1)
0
-#define PXN(attr, n, dn, pn) shoes_px(attr, s_##n, dn, pn, 0)
0
+#define PX(attr, n, dn, pn) shoes_px(shoes_hash_get(attr, s_##n), dn, pn, 1)
0
+#define PXN(attr, n, dn, pn) shoes_px(shoes_hash_get(attr, s_##n), dn, pn, 0)
0
#define PX2(attr, n1, n2, dn, dr, pn) shoes_px2(attr, s_##n1, s_##n2, dn, dr, pn)
0
#define ATTR2(typ, attr, n, dn) shoes_hash_##typ(attr, s_##n, dn)
0
#define ATTRSET(attr, k, v) attr = shoes_hash_set(attr, s_##k, v)
0
-#define ATTR_MARGINS(attr, dm) \
0
- int margin = 0, lmargin, rmargin, tmargin, bmargin; \
0
+#define ATTR_MARGINS(attr, dm, canvas) \
0
+ int lmargin, rmargin, tmargin, bmargin; \
0
VALUE margino = ATTR(attr, margin); \
0
if (rb_obj_is_kind_of(margino, rb_cArray)) \
0
- lmargin = NUM2INT(rb_ary_entry(margino, 0)); \
0
- tmargin = NUM2INT(rb_ary_entry(margino, 1)); \
0
- rmargin = NUM2INT(rb_ary_entry(margino, 2)); \
0
- bmargin = NUM2INT(rb_ary_entry(margino, 3)); \
0
+ lmargin = shoes_px(rb_ary_entry(margino, 0), dm, CPW(canvas), 1); \
0
+ tmargin = shoes_px(rb_ary_entry(margino, 1), dm, CPH(canvas), 1); \
0
+ rmargin = shoes_px(rb_ary_entry(margino, 2), dm, CPW(canvas), 1); \
0
+ bmargin = shoes_px(rb_ary_entry(margino, 3), dm, CPH(canvas), 1); \
0
- margin = lmargin = tmargin = rmargin = bmargin = ATTR2(int, attr, margin, dm); \
0
- lmargin = ATTR2(int, attr, margin_left, lmargin); \
0
- rmargin = ATTR2(int, attr, margin_right, rmargin); \
0
- tmargin = ATTR2(int, attr, margin_top, tmargin); \
0
- bmargin = ATTR2(int, attr, margin_bottom, bmargin)
0
+ lmargin = rmargin = PX(attr, margin, dm, CPW(canvas)); \
0
+ tmargin = bmargin = PX(attr, margin, dm, CPH(canvas)); \
0
+ lmargin = PX(attr, margin_left, lmargin, CPW(canvas)); \
0
+ rmargin = PX(attr, margin_right, rmargin, CPW(canvas)); \
0
+ tmargin = PX(attr, margin_top, tmargin, CPH(canvas)); \
0
+ bmargin = PX(attr, margin_bottom, bmargin, CPH(canvas))
0
#define CHECK_HOVER(self_t, h, touch) \
0
if ((self_t->hover & HOVER_MOTION) != h && !NIL_P(self_t->attr)) \
0
@@ -153,7 +156,7 @@ void shoes_ruby_init(void);
0
y >= self_t->place.iy + self_t->place.dy && \
0
y <= self_t->place.iy + self_t->place.dy + self_t->place.ih)
0
-int shoes_px(VALUE,
ID, int, int, int);
0
+int shoes_px(VALUE,
int, int, int);
0
int shoes_px2(VALUE, ID, ID, int, int, int);
0
VALUE shoes_hash_set(VALUE, ID, VALUE);
0
VALUE shoes_hash_get(VALUE, ID);