Skip to content

Commit cd01175

Browse files
committed
Add line_cap parameter
1 parent 97fe729 commit cd01175

File tree

2 files changed

+45
-2
lines changed

2 files changed

+45
-2
lines changed

examples/lines.ipynb

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,52 @@
3939
"canvas"
4040
]
4141
},
42+
{
43+
"cell_type": "markdown",
44+
"metadata": {},
45+
"source": [
46+
"# Line cap"
47+
]
48+
},
4249
{
4350
"cell_type": "code",
4451
"execution_count": null,
4552
"metadata": {},
4653
"outputs": [],
47-
"source": []
54+
"source": [
55+
"size = (160, 180)\n",
56+
"\n",
57+
"canvas = Canvas(size=size)\n",
58+
"\n",
59+
"# Possible line_cap values\n",
60+
"line_caps = ['butt', 'round', 'square']\n",
61+
"\n",
62+
"# Draw guides\n",
63+
"canvas.stroke_style = '#09f'\n",
64+
"canvas.begin_path()\n",
65+
"canvas.move_to(10, 30)\n",
66+
"canvas.line_to(140, 30)\n",
67+
"canvas.move_to(10, 140)\n",
68+
"canvas.line_to(140, 140)\n",
69+
"canvas.stroke()\n",
70+
"\n",
71+
"# Draw lines\n",
72+
"canvas.stroke_style = 'black'\n",
73+
"canvas.font = '15px serif'\n",
74+
"for i in range(len(line_caps)):\n",
75+
" line_cap = line_caps[i]\n",
76+
" x = 25 + i * 50\n",
77+
"\n",
78+
" canvas.fill_text(line_cap, x - 15, 15)\n",
79+
" canvas.line_width = 15\n",
80+
" canvas.line_cap = line_cap\n",
81+
" canvas.begin_path()\n",
82+
" canvas.move_to(x, 30)\n",
83+
" canvas.line_to(x, 140)\n",
84+
" canvas.stroke()\n",
85+
"\n",
86+
"canvas"
87+
]
4888
}
4989
],
5090
"metadata": {

ipycanvas/canvas.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,9 @@ class Canvas(DOMWidget):
7777
#: (float) Sets the width of lines drawn in the future, must be a positive number. Default to ``1.0``.
7878
line_width = Float(1.0)
7979

80+
#: (str) Sets the appearance of the ends of lines.
81+
line_cap = Enum(['butt', 'round', 'square'], default_value='butt')
82+
8083
def __init__(self, *args, **kwargs):
8184
"""Create a Canvas widget."""
8285
#: Whether commands should be cached or not
@@ -272,7 +275,7 @@ def flush(self):
272275

273276
@observe('fill_style', 'stroke_style', 'global_alpha', 'font', 'text_align',
274277
'text_baseline', 'direction', 'global_composite_operation',
275-
'line_width')
278+
'line_width', 'line_cap')
276279
def _on_set_attr(self, change):
277280
command = {
278281
'name': 'set',

0 commit comments

Comments
 (0)