GitHub Sale: sign up for any paid plan this week and pay nothing until January 1, 2009!  [ hide ]

public
Description: a tiny graphical app kit for ruby
Homepage: http://code.whytheluckystiff.net/shoes
Clone URL: git://github.com/why/shoes.git
 * shoes/ruby.c: store stroke and fill of shape in the style.
 * lib/shoes.rb: allow Shoes.fill= and Shoes.stroke=.
why (author)
Fri Jul 25 14:17:03 -0700 2008
commit  e559340c3534ee8303d85ae8183b130ba90ed287
tree    e9c8c5ee8a04141ea106d261703a48f7164ef405
parent  56cce496bb01e2b346a14648de9875079c3a068a
...
14
15
16
 
 
 
 
 
 
 
 
 
17
18
19
...
231
232
233
 
 
 
 
234
235
236
237
238
239
 
 
240
241
242
...
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
...
240
241
242
243
244
245
246
247
 
 
 
 
 
248
249
250
251
252
0
@@ -14,6 +14,15 @@ if Object.const_defined? :Shoes
0
   require 'shoes/cache'
0
 end
0
  
0
+class Class
0
+ def setup_styles *styles
0
+ styles.each do |m|
0
+ define_method(m) { style[m] }
0
+ define_method("#{m}=") { |v| style[m] = v }
0
+ end
0
+ end
0
+end
0
+
0
 class Range
0
   def rand
0
     conv = (Integer === self.end && Integer === self.begin ? :to_i : :to_f)
0
@@ -231,12 +240,13 @@ class Shoes
0
     Shoes.mount(path, [self, meth])
0
   end
0
 
0
+ class Shape
0
+ setup_styles :stroke, :fill
0
+ end
0
+
0
   class Text
0
- [:stroke, :fill, :strikecolor, :undercolor, :font, :size, :family, :weight,
0
- :rise, :kerning, :emphasis, :strikethrough, :stretch, :underline, :variant].each do |m|
0
- define_method(m) { style[m] }
0
- define_method("#{m}=") { |v| style[m] = v }
0
- end
0
+ setup_styles :stroke, :fill, :strikecolor, :undercolor, :font, :size, :family, :weight,
0
+ :rise, :kerning, :emphasis, :strikethrough, :stretch, :underline, :variant
0
   end
0
 
0
   def Widget.inherited subc
...
16
17
18
19
 
20
21
22
...
530
531
532
533
534
535
536
537
...
554
555
556
557
558
559
560
561
 
 
562
563
564
...
573
574
575
576
577
578
579
580
581
582
 
583
 
 
 
584
585
586
587
 
588
589
590
...
604
605
606
607
608
 
 
609
610
611
...
4022
4023
4024
 
4025
4026
4027
...
16
17
18
 
19
20
21
22
...
530
531
532
 
 
533
534
535
...
552
553
554
 
 
555
556
557
558
559
560
561
562
...
571
572
573
 
 
574
575
576
577
 
578
579
580
581
582
583
584
585
 
586
587
588
589
...
603
604
605
 
 
606
607
608
609
610
...
4021
4022
4023
4024
4025
4026
4027
0
@@ -16,7 +16,7 @@ VALUE cShoes, cApp, cDialog, cShoesWindow, cMouse, cCanvas, cFlow, cStack, cMask
0
 VALUE eVlcError, eImageError, eNotImpl;
0
 VALUE reHEX_SOURCE, reHEX3_SOURCE, reRGB_SOURCE, reRGBA_SOURCE, reGRAY_SOURCE, reGRAYA_SOURCE, reLF;
0
 VALUE symAltQuest, symAltSlash, symAltDot;
0
-ID s_aref, s_mult, s_perc, s_bind, s_gsub, s_keys, s_update, s_new, s_run, s_to_pattern, s_to_i, s_to_s, s_URI, s_angle, s_arrow, s_autoplay, s_begin, s_body, s_call, s_center, s_change, s_checked, s_checked_q, s_choose, s_click, s_corner, s_curve, s_distance, s_displace_left, s_displace_top, s_downcase, s_draw, s_end, s_fill, s_finish, s_font, s_group, s_hand, s_headers, s_hidden, s_host, s_hover, s_href, s_inner, s_insert, s_items, s_keypress, s_link, s_method, s_motion, s_path, s_port, s_progress, s_release, s_save, s_wheel, s_scroll, s_start, s_attach, s_leading, s_leave, s_match, s_text, s_title, s_top, s_right, s_bottom, s_left, s_up, s_down, s_height, s_resizable, s_remove, s_strokewidth, s_width, s_margin, s_margin_left, s_margin_right, s_margin_top, s_margin_bottom, s_radius, s_secret, s_now, s_debug, s_error, s_warn, s_info;
0
+ID s_aref, s_mult, s_perc, s_bind, s_gsub, s_keys, s_update, s_new, s_run, s_to_pattern, s_to_i, s_to_s, s_URI, s_angle, s_arrow, s_autoplay, s_begin, s_body, s_call, s_center, s_change, s_checked, s_checked_q, s_choose, s_click, s_corner, s_curve, s_distance, s_displace_left, s_displace_top, s_downcase, s_draw, s_end, s_fill, s_finish, s_font, s_group, s_hand, s_headers, s_hidden, s_host, s_hover, s_href, s_inner, s_insert, s_items, s_keypress, s_link, s_method, s_motion, s_path, s_port, s_progress, s_release, s_save, s_wheel, s_stroke, s_scroll, s_start, s_attach, s_leading, s_leave, s_match, s_text, s_title, s_top, s_right, s_bottom, s_left, s_up, s_down, s_height, s_resizable, s_remove, s_strokewidth, s_width, s_margin, s_margin_left, s_margin_right, s_margin_top, s_margin_bottom, s_radius, s_secret, s_now, s_debug, s_error, s_warn, s_info;
0
 
0
 //
0
 // Mauricio's instance_eval hack (he bested my cloaker back in 06 Jun 2006)
0
@@ -530,8 +530,6 @@ shoes_control_show_ref(SHOES_CONTROL_REF ref)
0
 static void
0
 shoes_shape_mark(shoes_shape *path)
0
 {
0
- rb_gc_mark_maybe(path->fg);
0
- rb_gc_mark_maybe(path->bg);
0
   rb_gc_mark_maybe(path->parent);
0
   rb_gc_mark_maybe(path->attr);
0
 }
0
@@ -554,11 +552,11 @@ shoes_shape_new(cairo_path_t *line, VALUE parent, VALUE x, VALUE y, int w, int h
0
   Data_Get_Struct(parent, shoes_canvas, canvas);
0
   path->line = line;
0
   path->parent = parent;
0
- path->fg = canvas->fg;
0
- path->bg = canvas->bg;
0
   path->sw = canvas->sw;
0
   path->width = w;
0
   path->height = h;
0
+ if (NIL_P(ATTR(path->attr, stroke))) ATTRSET(path->attr, stroke, canvas->fg);
0
+ if (NIL_P(ATTR(path->attr, fill))) ATTRSET(path->attr, fill, canvas->bg);
0
   ATTRSET(path->attr, left, x);
0
   ATTRSET(path->attr, top, y);
0
   return obj;
0
@@ -573,18 +571,19 @@ shoes_shape_alloc(VALUE klass)
0
   obj = Data_Wrap_Struct(klass, shoes_shape_mark, shoes_shape_free, shape);
0
   shape->attr = Qnil;
0
   shape->parent = Qnil;
0
- shape->fg = Qnil;
0
- shape->bg = Qnil;
0
   return obj;
0
 }
0
 
0
 #define PATH_OUT(pen, cfunc) \
0
- if (!NIL_P(self_t->pen)) \
0
+ if (!NIL_P(ATTR(self_t->attr, pen))) \
0
   { \
0
+ VALUE p = ATTR(self_t->attr, pen); \
0
+ if (!rb_obj_is_kind_of(p, cPattern)) \
0
+ ATTRSET(self_t->attr, pen, p = rb_funcall(p, s_to_pattern, 0)); \
0
     double r = 0., sw = self_t->sw; \
0
     cairo_matrix_t matrix1, matrix2; \
0
     shoes_pattern *pattern; \
0
- Data_Get_Struct(self_t->pen, shoes_pattern, pattern); \
0
+ Data_Get_Struct(ATTR(self_t->attr, pen), shoes_pattern, pattern); \
0
     PATTERN_SCALE(pattern); \
0
     cairo_set_line_width(canvas->cr, sw); \
0
     cairo_set_source(canvas->cr, PATTERN(pattern)); \
0
@@ -604,8 +603,8 @@ shoes_shape_draw(VALUE self, VALUE c, VALUE actual)
0
     cairo_new_path(canvas->cr);
0
     cairo_append_path(canvas->cr, self_t->line);
0
 
0
- PATH_OUT(bg, cairo_fill_preserve);
0
- PATH_OUT(fg, cairo_stroke);
0
+ PATH_OUT(fill, cairo_fill_preserve);
0
+ PATH_OUT(stroke, cairo_stroke);
0
 
0
     cairo_restore(canvas->cr);
0
   }
0
@@ -4022,6 +4021,7 @@ shoes_ruby_init()
0
   s_save = rb_intern("save");
0
   s_wheel = rb_intern("wheel");
0
   s_scroll = rb_intern("scroll");
0
+ s_stroke = rb_intern("stroke");
0
   s_start = rb_intern("start");
0
   s_attach = rb_intern("attach");
0
   s_text = rb_intern("text");

Comments

    No one has commented yet.