shape: Minor fixes
This commit is contained in:
parent
491f17f32b
commit
5dbffc73c1
|
@ -8,8 +8,8 @@
|
||||||
-- parameter followed by the widget and height and additional parameters.
|
-- parameter followed by the widget and height and additional parameters.
|
||||||
--
|
--
|
||||||
-- The functions provided by this module only create a path in the content.
|
-- The functions provided by this module only create a path in the content.
|
||||||
-- to actually draw the content, use cr:fill(), cr:mask(), cr:slip() or
|
-- to actually draw the content, use `cr:fill()`, `cr:mask()`, `cr:clip()` or
|
||||||
-- cr:stroke()
|
-- `cr:stroke()`
|
||||||
--
|
--
|
||||||
-- In many case, it is necessary to apply the shape using a transformation
|
-- In many case, it is necessary to apply the shape using a transformation
|
||||||
-- such as a rotation. The preferred way to do this is to wrap the function
|
-- such as a rotation. The preferred way to do this is to wrap the function
|
||||||
|
@ -58,17 +58,18 @@ end
|
||||||
|
|
||||||
--- A rounded rectangle with a triangle at the top
|
--- A rounded rectangle with a triangle at the top
|
||||||
-- @param cr A cairo context
|
-- @param cr A cairo context
|
||||||
-- @tparam number width The shape with
|
-- @tparam number width The shape width
|
||||||
-- @tparam number height The shape height
|
-- @tparam number height The shape height
|
||||||
-- @tparam[opt=5] number corner_radius The corner radius
|
-- @tparam[opt=5] number corner_radius The corner radius
|
||||||
-- @tparam[opt=10] number arrow_size The width and height of the arrow
|
-- @tparam[opt=10] number arrow_size The width and height of the arrow
|
||||||
-- @tparam[opt=width/2 - arrow_size/2] number arrow_position The position of the arrow
|
-- @tparam[opt=width/2 - arrow_size/2] number arrow_position The position of the arrow
|
||||||
function module.infobubble(cr, width, height, corner_radius, arrow_size, arrow_position)
|
function module.infobubble(cr, width, height, corner_radius, arrow_size, arrow_position)
|
||||||
corner_radius = corner_radius or 5
|
|
||||||
arrow_size = arrow_size or 10
|
arrow_size = arrow_size or 10
|
||||||
|
corner_radius = math.min((height-arrow_size)/2, corner_radius or 5)
|
||||||
arrow_position = arrow_position or width/2 - arrow_size/2
|
arrow_position = arrow_position or width/2 - arrow_size/2
|
||||||
|
|
||||||
cr:move_to(0 ,corner_radius)
|
|
||||||
|
cr:move_to(0 ,corner_radius+arrow_size)
|
||||||
|
|
||||||
-- Top left corner
|
-- Top left corner
|
||||||
cr:arc(corner_radius, corner_radius+arrow_size, (corner_radius), math.pi, 3*(math.pi/2))
|
cr:arc(corner_radius, corner_radius+arrow_size, (corner_radius), math.pi, 3*(math.pi/2))
|
||||||
|
@ -89,21 +90,31 @@ end
|
||||||
|
|
||||||
--- A rectangle terminated by an arrow
|
--- A rectangle terminated by an arrow
|
||||||
-- @param cr A cairo context
|
-- @param cr A cairo context
|
||||||
-- @tparam number width The shape with
|
-- @tparam number width The shape width
|
||||||
-- @tparam number height The shape height
|
-- @tparam number height The shape height
|
||||||
function module.rectangular_tag(cr, width, height)
|
-- @tparam[opt=height/2] number arrow_length The length of the arrow part
|
||||||
cr:move_to(0 , height/2)
|
function module.rectangular_tag(cr, width, height, arrow_length)
|
||||||
cr:line_to(height/2 , 0 )
|
arrow_length = arrow_length or height/2
|
||||||
cr:line_to(width , 0 )
|
if arrow_length > 0 then
|
||||||
cr:line_to(width , height )
|
cr:move_to(0 , height/2 )
|
||||||
cr:line_to(height/2 , height )
|
cr:line_to(arrow_length , 0 )
|
||||||
|
cr:line_to(width , 0 )
|
||||||
|
cr:line_to(width , height )
|
||||||
|
cr:line_to(arrow_length , height )
|
||||||
|
else
|
||||||
|
cr:move_to(0 , 0 )
|
||||||
|
cr:line_to(-arrow_length, height/2 )
|
||||||
|
cr:line_to(0 , height )
|
||||||
|
cr:line_to(width , height )
|
||||||
|
cr:line_to(width , 0 )
|
||||||
|
end
|
||||||
|
|
||||||
cr:close_path()
|
cr:close_path()
|
||||||
end
|
end
|
||||||
|
|
||||||
--- A simple arrow shape
|
--- A simple arrow shape
|
||||||
-- @param cr A cairo context
|
-- @param cr A cairo context
|
||||||
-- @tparam number width The shape with
|
-- @tparam number width The shape width
|
||||||
-- @tparam number height The shape height
|
-- @tparam number height The shape height
|
||||||
-- @tparam[opt=head_width] number head_width The width of the head (/\) of the arrow
|
-- @tparam[opt=head_width] number head_width The width of the head (/\) of the arrow
|
||||||
-- @tparam[opt=width /2] number shaft_width The width of the shaft of the arrow
|
-- @tparam[opt=width /2] number shaft_width The width of the shaft of the arrow
|
||||||
|
@ -127,7 +138,7 @@ end
|
||||||
|
|
||||||
--- A squeezed hexagon filling the rectangle
|
--- A squeezed hexagon filling the rectangle
|
||||||
-- @param cr A cairo context
|
-- @param cr A cairo context
|
||||||
-- @tparam number width The shape with
|
-- @tparam number width The shape width
|
||||||
-- @tparam number height The shape height
|
-- @tparam number height The shape height
|
||||||
function module.hexagon(cr, width, height)
|
function module.hexagon(cr, width, height)
|
||||||
cr:move_to(height/2,0)
|
cr:move_to(height/2,0)
|
||||||
|
@ -142,24 +153,32 @@ end
|
||||||
|
|
||||||
--- Double arrow popularized by the vim-powerline module
|
--- Double arrow popularized by the vim-powerline module
|
||||||
-- @param cr A cairo context
|
-- @param cr A cairo context
|
||||||
-- @tparam number width The shape with
|
-- @tparam number width The shape width
|
||||||
-- @tparam number height The shape height
|
-- @tparam number height The shape height
|
||||||
-- @tparam[opt=height/2] number arrow_depth The width of the arrow part of the shape
|
-- @tparam[opt=height/2] number arrow_depth The width of the arrow part of the shape
|
||||||
function module.powerline(cr, width, height, arrow_depth)
|
function module.powerline(cr, width, height, arrow_depth)
|
||||||
arrow_depth = arrow_depth or height/2
|
arrow_depth = arrow_depth or height/2
|
||||||
cr:move_to(0 , 0 )
|
local offset = 0
|
||||||
cr:line_to(width - arrow_depth , 0 )
|
|
||||||
cr:line_to(width , height/2 )
|
-- Avoid going out of the (potential) clip area
|
||||||
cr:line_to(width - arrow_depth , height )
|
if arrow_depth < 0 then
|
||||||
cr:line_to(0 , height )
|
width = width + 2*arrow_depth
|
||||||
cr:line_to(arrow_depth , height/2 )
|
offset = -arrow_depth
|
||||||
|
end
|
||||||
|
|
||||||
|
cr:move_to(offset , 0 )
|
||||||
|
cr:line_to(offset + width - arrow_depth , 0 )
|
||||||
|
cr:line_to(offset + width , height/2 )
|
||||||
|
cr:line_to(offset + width - arrow_depth , height )
|
||||||
|
cr:line_to(offset , height )
|
||||||
|
cr:line_to(offset + arrow_depth , height/2 )
|
||||||
|
|
||||||
cr:close_path()
|
cr:close_path()
|
||||||
end
|
end
|
||||||
|
|
||||||
--- An isosceles triangle
|
--- An isosceles triangle
|
||||||
-- @param cr A cairo context
|
-- @param cr A cairo context
|
||||||
-- @tparam number width The shape with
|
-- @tparam number width The shape width
|
||||||
-- @tparam number height The shape height
|
-- @tparam number height The shape height
|
||||||
function module.isosceles_triangle(cr, width, height)
|
function module.isosceles_triangle(cr, width, height)
|
||||||
cr:move_to( width/2, 0 )
|
cr:move_to( width/2, 0 )
|
||||||
|
|
Loading…
Reference in New Issue