@@ -236,26 +236,68 @@ draw_key_smooth <- function(data, params, size) {
236
236
# ' @export
237
237
# ' @rdname draw_key
238
238
draw_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 ,
243
247
gp = gpar(
244
248
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
249
255
)
256
+ attr(grob , " width" ) <- convertWidth(grobWidth(grob ), " cm" , valueOnly = TRUE )
257
+ attr(grob , " height" ) <- convertHeight(grobHeight(grob ), " cm" , valueOnly = TRUE )
258
+ grob
250
259
}
251
260
252
261
# ' @export
253
262
# ' @rdname draw_key
254
263
draw_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
+ )
258
291
)
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
259
301
}
260
302
261
303
# ' @export
0 commit comments