@@ -160,8 +160,7 @@ draw_key_path <- function(data, params, size) {
160160 } else {
161161 data $ linetype [is.na(data $ linetype )] <- 0
162162 }
163-
164- segmentsGrob(0.1 , 0.5 , 0.9 , 0.5 ,
163+ grob <- segmentsGrob(0.1 , 0.5 , 0.9 , 0.5 ,
165164 gp = gpar(
166165 col = alpha(data $ colour %|| % data $ fill %|| % " black" , data $ alpha ),
167166 fill = alpha(params $ arrow.fill %|| % data $ colour
@@ -172,12 +171,19 @@ draw_key_path <- function(data, params, size) {
172171 ),
173172 arrow = params $ arrow
174173 )
174+ if (! is.null(params $ arrow )) {
175+ angle <- deg2rad(params $ arrow $ angle )
176+ length <- convertUnit(params $ arrow $ length , " cm" , valueOnly = TRUE )
177+ attr(grob , " width" ) <- cos(angle ) * length * 1.25
178+ attr(grob , " height" ) <- sin(angle ) * length * 2
179+ }
180+ grob
175181}
176182
177183# ' @export
178184# ' @rdname draw_key
179185draw_key_vpath <- function (data , params , size ) {
180- segmentsGrob(0.5 , 0.1 , 0.5 , 0.9 ,
186+ grob <- segmentsGrob(0.5 , 0.1 , 0.5 , 0.9 ,
181187 gp = gpar(
182188 col = alpha(data $ colour %|| % data $ fill %|| % " black" , data $ alpha ),
183189 lwd = (data $ linewidth %|| % 0.5 ) * .pt ,
@@ -186,6 +192,13 @@ draw_key_vpath <- function(data, params, size) {
186192 ),
187193 arrow = params $ arrow
188194 )
195+ if (! is.null(params $ arrow )) {
196+ angle <- deg2rad(params $ arrow $ angle )
197+ length <- convertUnit(params $ arrow $ length , " cm" , valueOnly = TRUE )
198+ attr(grob , " width" ) <- sin(angle ) * length * 2
199+ attr(grob , " height" ) <- cos(angle ) * length * 1.25
200+ }
201+ grob
189202}
190203
191204# ' @export
@@ -215,10 +228,14 @@ draw_key_linerange <- function(data, params, size) {
215228# ' @export
216229# ' @rdname draw_key
217230draw_key_pointrange <- function (data , params , size ) {
218- grobTree(
219- draw_key_linerange(data , params , size ),
231+ linerange <- draw_key_linerange(data , params , size )
232+ grob <- grobTree(
233+ linerange ,
220234 draw_key_point(transform(data , size = (data $ size %|| % 1.5 ) * 4 ), params )
221235 )
236+ attr(grob , " width" ) <- attr(linerange , " width" )
237+ attr(grob , " height" ) <- attr(linerange , " height" )
238+ grob
222239}
223240
224241# ' @export
@@ -227,10 +244,15 @@ draw_key_smooth <- function(data, params, size) {
227244 data $ fill <- alpha(data $ fill %|| % " grey60" , data $ alpha )
228245 data $ alpha <- 1
229246
230- grobTree(
247+ path <- draw_key_path(data , params , size )
248+
249+ grob <- grobTree(
231250 if (isTRUE(params $ se )) rectGrob(gp = gpar(col = NA , fill = data $ fill )),
232- draw_key_path( data , params , size )
251+ path
233252 )
253+ attr(grob , " width" ) <- attr(path , " width" )
254+ attr(grob , " height" ) <- attr(path , " height" )
255+ grob
234256}
235257
236258# ' @export
0 commit comments