13
0

lollis: draw stems in fill color (optionally)

This commit is contained in:
Paul Davis 2023-06-22 08:39:41 -06:00
parent f3e996bdb7
commit 8a204bcf51
2 changed files with 20 additions and 6 deletions

View File

@ -61,6 +61,7 @@ public:
Coord _radius; Coord _radius;
Coord _length; Coord _length;
Item* bounding_parent; Item* bounding_parent;
bool line_color_is_fill;
}; };
} }

View File

@ -34,6 +34,7 @@ Lollipop::Lollipop (Canvas* c)
, _radius (8) , _radius (8)
, _length (0) , _length (0)
, bounding_parent (0) , bounding_parent (0)
, line_color_is_fill (true)
{ {
} }
@ -42,6 +43,7 @@ Lollipop::Lollipop (Item* parent)
, _radius (8) , _radius (8)
, _length (0) , _length (0)
, bounding_parent (0) , bounding_parent (0)
, line_color_is_fill (true)
{ {
} }
@ -62,8 +64,6 @@ Lollipop::compute_bounding_box () const
void void
Lollipop::render (Rect const & area, Cairo::RefPtr<Cairo::Context> context) const Lollipop::render (Rect const & area, Cairo::RefPtr<Cairo::Context> context) const
{ {
setup_outline_context (context);
Duple p = _parent->item_to_window (Duple (_center.x, _center.y)); Duple p = _parent->item_to_window (Duple (_center.x, _center.y));
Duple l (p); Duple l (p);
@ -72,11 +72,14 @@ Lollipop::render (Rect const & area, Cairo::RefPtr<Cairo::Context> context) cons
l = l.translate (half_a_pixel); l = l.translate (half_a_pixel);
} }
/* the line */ setup_outline_context (context);
if (!line_color_is_fill) {
/* draw line in outline color */
context->move_to (l.x, l.y + _radius); context->move_to (l.x, l.y + _radius);
context->line_to (l.x, l.y + _length); context->line_to (l.x, l.y + _length);
context->stroke (); context->stroke ();
}
/* the circle: clip to avoid weirdness at top and bottom of parent */ /* the circle: clip to avoid weirdness at top and bottom of parent */
@ -89,6 +92,7 @@ Lollipop::render (Rect const & area, Cairo::RefPtr<Cairo::Context> context) cons
context->arc (p.x, p.y, _radius, 0.0 * (M_PI/180.0), 360.0 * (M_PI/180.0)); context->arc (p.x, p.y, _radius, 0.0 * (M_PI/180.0), 360.0 * (M_PI/180.0));
if (fill()) { if (fill()) {
setup_fill_context (context); setup_fill_context (context);
if (outline()) { if (outline()) {
@ -103,6 +107,14 @@ Lollipop::render (Rect const & area, Cairo::RefPtr<Cairo::Context> context) cons
context->stroke (); context->stroke ();
} }
if (line_color_is_fill) {
setup_fill_context (context);
/* draw line in fill color */
context->move_to (l.x, l.y + _radius);
context->line_to (l.x, l.y + _length);
context->stroke ();
}
if (bounding_parent) { if (bounding_parent) {
context->restore (); context->restore ();
} }
@ -172,3 +184,4 @@ Lollipop::covers (Duple const & point) const
return false; return false;
} }