implement arrowstyle for GR

This commit is contained in:
Daniel Schwabeneder 2019-06-11 22:55:54 +02:00
parent 505989eec7
commit e9abb6d021

View File

@ -84,12 +84,21 @@ gr_set_transparency(c, α) = gr_set_transparency(α)
gr_set_transparency(c::Colorant, ::Nothing) = gr_set_transparency(c) gr_set_transparency(c::Colorant, ::Nothing) = gr_set_transparency(c)
gr_set_transparency(c::Colorant) = GR.settransparency(alpha(c)) gr_set_transparency(c::Colorant) = GR.settransparency(alpha(c))
const _gr_arrow_map = Dict(
:simple => 1,
:hollow => 3,
:filled => 4,
:triangle => 5,
:filledtriangle => 6,
)
gr_set_arrowstyle(s::Symbol) = GR.setarrowstyle(get(_gr_arrow_map, s, 1))
# -------------------------------------------------------------------------------------- # --------------------------------------------------------------------------------------
# draw line segments, splitting x/y into contiguous/finite segments # draw line segments, splitting x/y into contiguous/finite segments
# note: this can be used for shapes by passing func `GR.fillarea` # note: this can be used for shapes by passing func `GR.fillarea`
function gr_polyline(x, y, func = GR.polyline; arrowside=:none) function gr_polyline(x, y, func = GR.polyline; arrowside = :none, arrowstyle = :simple)
iend = 0 iend = 0
n = length(x) n = length(x)
while iend < n-1 while iend < n-1
@ -118,9 +127,11 @@ function gr_polyline(x, y, func = GR.polyline; arrowside=:none)
if istart > 0 && iend > 0 if istart > 0 && iend > 0
func(x[istart:iend], y[istart:iend]) func(x[istart:iend], y[istart:iend])
if arrowside in (:head,:both) if arrowside in (:head,:both)
gr_set_arrowstyle(arrowstyle)
GR.drawarrow(x[iend-1], y[iend-1], x[iend], y[iend]) GR.drawarrow(x[iend-1], y[iend-1], x[iend], y[iend])
end end
if arrowside in (:tail,:both) if arrowside in (:tail,:both)
gr_set_arrowstyle(arrowstyle)
GR.drawarrow(x[istart+1], y[istart+1], x[istart], y[istart]) GR.drawarrow(x[istart+1], y[istart+1], x[istart], y[istart])
end end
else else
@ -1269,7 +1280,9 @@ function gr_display(sp::Subplot{GRBackend}, w, h, viewport_canvas)
gr_set_line(get_linewidth(series, i), get_linestyle(series, i), lc) #, series[:linealpha]) gr_set_line(get_linewidth(series, i), get_linestyle(series, i), lc) #, series[:linealpha])
gr_set_transparency(lc, get_linealpha(series, i)) gr_set_transparency(lc, get_linealpha(series, i))
arrowside = isa(series[:arrow], Arrow) ? series[:arrow].side : :none arrowside = isa(series[:arrow], Arrow) ? series[:arrow].side : :none
gr_polyline(x[rng], y[rng]; arrowside = arrowside) arrowstyle = isa(series[:arrow], Arrow) ? series[:arrow].style : :simple
gr_set_fillcolor(lc)
gr_polyline(x[rng], y[rng]; arrowside = arrowside, arrowstyle = arrowstyle)
end end
end end
end end