7 my $v = AA::new($class, $id);
10 $v->DefSet('color', [ 0.7, 0, 0.7 ]);
11 $v->DefSet('gradient', 0.5);
14 $v->DefSet('rim-color', [ 1, 1, 1 ]);
16 $v->DefSet('label-color', [ 1, 1, 1 ]);
17 $v->DefSet('label-size', 1.5);
24 my ($x, $y, $r) = ($v->Get('x'), $v->Get('y'), $v->Get('r'));
25 my $grad = $v->Get('gradient');
26 my @col = @{$v->Get('color')};
28 $cairo->arc($x, $y, $r, 0, $AA::TWOPI);
30 my $lg = Cairo::RadialGradient->create($x, $y, 0, $x, $y, $r);
31 $lg->add_color_stop_rgb(0, @col);
35 $lg->add_color_stop_rgb(1, @col);
36 $cairo->set_source($lg);
38 $cairo->set_source_rgb(@col);
42 $cairo->arc($x, $y, $r, 0, $AA::TWOPI);
43 $cairo->set_source_rgb(@{$v->Get('rim-color')});
44 $cairo->set_line_width($v->Get('rim'));
47 if ($v->Exists('label')) {
48 my $label = $v->Get('label');
49 $cairo->set_source_rgb(@{$v->Get('label-color')});
50 $cairo->set_font_size($r * $v->Get('label-size'));
51 my $xt = $cairo->text_extents($label);
52 $cairo->move_to($x - $xt->{'width'}/2 - $xt->{'x_bearing'},
53 $y - $xt->{'height'}/2 - $xt->{'y_bearing'});
54 $cairo->show_text($label);
63 my ($class, $id, $v, $w) = @_;
64 my $e = AA::new($class, $id);
65 $e->DefSet('color', [1, 1, 1]);
66 $e->DefSet('width', 3);
67 $e->DefSet('arrow', 0);
68 $e->DefSet('arrow-dist', 20);
69 $e->DefSet('arrow-span', 6);
70 $e->DefBind('ends', sub {
71 my $x1 = $v->Get('x');
72 my $y1 = $v->Get('y');
73 my $r1 = $v->Get('r');
74 my $x2 = $w->Get('x');
75 my $y2 = $w->Get('y');
76 my $r2 = $w->Get('r');
79 my $d = sqrt($dx*$dx + $dy*$dy);
84 return [ $x1, $y1, $x2, $y2 ];
86 $e->DefBind('apos', sub {
87 my $type = $e->Get('arrow') or return undef;
88 my $span = $e->Get('arrow-span');
89 my $dist = $e->Get('arrow-dist');
90 my ($x1, $y1, $x2, $y2) = @{$e->Get('ends')};
93 my $d = sqrt($dx*$dx + $dy*$dy);
94 my $ax = $x2 - $dx * $dist/$d;
95 my $ay = $y2 - $dy * $dist/$d;
98 ($adx, $ady) = ($adx * $span/$d, $ady * $span/$d);
99 return [ $ax+$adx, $ay+$ady,
100 $ax-$adx, $ay-$ady ];
107 my ($v, $cairo) = @_;
109 my ($x1, $y1, $x2, $y2) = @{$v->Get('ends')};
110 $cairo->set_source_rgb(@{$v->Get('color')});
112 $cairo->move_to($x1, $y1);
113 $cairo->line_to($x2, $y2);
114 $cairo->set_line_width($v->Get('width'));
117 if ($v->Get('arrow')) {
118 my ($ax1, $ay1, $ax2, $ay2) = @{$v->Get('apos')};
119 $cairo->move_to($x2, $y2);
120 $cairo->line_to($ax1, $ay1);
121 $cairo->line_to($ax2, $ay2);