@@ -236,26 +236,68 @@ draw_key_smooth <- function(data, params, size) {
236236# ' @export
237237# ' @rdname draw_key
238238draw_key_text <- function (data , params , size ) {
239- if (is.null(data $ label )) data $ label <- " a"
240-
241- textGrob(data $ label , 0.5 , 0.5 ,
242- rot = data $ angle %|| % 0 ,
239+ data $ label <- data $ label %|| % " a"
240+ just <- rotate_just(data $ angle , data $ hjust , data $ vjust )
241+ grob <- titleGrob(
242+ data $ label ,
243+ x = unit(just $ hjust , " npc" ), y = unit(just $ vjust , " npc" ),
244+ angle = data $ angle ,
245+ hjust = data $ hjust ,
246+ vjust = data $ vjust ,
243247 gp = gpar(
244248 col = alpha(data $ colour %|| % data $ fill %|| % " black" , data $ alpha ),
245- fontfamily = data $ family %|| % " " ,
246- fontface = data $ fontface %|| % 1 ,
247- fontsize = (data $ size %|| % 3.88 ) * .pt
248- )
249+ fontfamily = data $ family %|| % " " ,
250+ fontface = data $ fontface %|| % 1 ,
251+ fontsize = (data $ size %|| % 3.88 ) * .pt
252+ ),
253+ margin = margin(0.1 , 0.1 , 0.1 , 0.1 , unit = " lines" ),
254+ margin_x = TRUE , margin_y = TRUE
249255 )
256+ attr(grob , " width" ) <- convertWidth(grobWidth(grob ), " cm" , valueOnly = TRUE )
257+ attr(grob , " height" ) <- convertHeight(grobHeight(grob ), " cm" , valueOnly = TRUE )
258+ grob
250259}
251260
252261# ' @export
253262# ' @rdname draw_key
254263draw_key_label <- function (data , params , size ) {
255- grobTree(
256- draw_key_rect(data , list ()),
257- draw_key_text(data , list ())
264+ data $ label <- data $ label %|| % " a"
265+ just <- rotate_just(data $ angle , data $ hjust , data $ vjust )
266+ padding <- rep(params $ label.padding , length.out = 4 )
267+ descent <- font_descent(
268+ family = data $ family %|| % " " ,
269+ face = data $ fontface %|| % 1 ,
270+ size = data $ size %|| % 3.88
271+ )
272+ grob <- labelGrob(
273+ data $ label ,
274+ x = unit(just $ hjust , " npc" ),
275+ y = unit(just $ vjust , " npc" ) + descent ,
276+ angle = data $ angle ,
277+ just = c(data $ hjust , data $ vjust ),
278+ padding = padding ,
279+ r = params $ label.r ,
280+ text.gp = gpar(
281+ col = data $ colour %|| % " black" ,
282+ fontfamily = data $ family %|| % " " ,
283+ fontface = data $ fontface %|| % 1 ,
284+ fontsize = (data $ size %|| % 3.88 ) * .pt
285+ ),
286+ rect.gp = gpar(
287+ col = if (isTRUE(all.equal(params $ label.size , 0 ))) NA else data $ colour ,
288+ fill = alpha(data $ fill %|| % " white" , data $ alpha ),
289+ lwd = params $ label.size * .pt
290+ )
258291 )
292+ angle <- deg2rad(data $ angle %|| % 0 )
293+ text <- grob $ children [[2 ]]
294+ width <- convertWidth(grobWidth(text ), " cm" , valueOnly = TRUE )
295+ height <- convertHeight(grobHeight(text ), " cm" , valueOnly = TRUE )
296+ x <- c(0 , 0 , width , width )
297+ y <- c(0 , height , height , 0 )
298+ attr(grob , " width" ) <- diff(range(x * cos(angle ) - y * sin(angle )))
299+ attr(grob , " height" ) <- diff(range(x * sin(angle ) + y * cos(angle )))
300+ grob
259301}
260302
261303# ' @export
0 commit comments