@@ -2043,13 +2043,13 @@ class SVGDrawer extends Drawer {
20432043 }
20442044
20452045 draw_text ( text , x , y ) {
2046- const e = this . element ( 'text' , { x : x , y : - y , 'dominant-baseline' : 'central' , transform : ' scale(1,-1)' } , clean_label ( text ) ) ;
2046+ const e = this . element ( 'text' , { 'dominant-baseline' : 'central' , transform : ` scale(1,-1) translate( ${ x } , ${ - y } )` } , clean_label ( text ) ) ;
20472047 this . set_font ( e ) ;
20482048 this . set_fill ( e , false ) ;
20492049 return e ;
20502050 }
20512051
2052- label_point ( A ) {
2052+ label_point ( A , align_angle ) {
20532053 const text = this . local . label_text ;
20542054 if ( ! text ) {
20552055 return ;
@@ -2066,27 +2066,36 @@ class SVGDrawer extends Drawer {
20662066 const y = A . y + dist * sin ( angle ) ;
20672067 const e = this . draw_text ( text , x , y ) ;
20682068 let textAlign = 'start' ;
2069- let dy = '0' ;
2070- if ( angle >= 3 * PI / 4 || angle <= - 3 * PI / 4 ) {
2069+ let dy = 0 ;
2070+ if ( this . local . align_label ) {
2071+ dy = - 0.5 * dist ;
2072+ textAlign = 'middle' ;
2073+ } else if ( angle >= 3 * PI / 4 || angle <= - 3 * PI / 4 ) {
20712074 textAlign = 'end' ;
20722075 } else if ( angle > PI / 4 || angle < - PI / 4 ) {
20732076 textAlign = 'middle' ;
20742077 if ( angle > PI / 4 ) {
2075- dy = ' -0.5em' ;
2078+ dy = - 0.5 ;
20762079 } else {
2077- dy = '0.5em' ;
2080+ dy = 0.5 ;
20782081 }
20792082 }
20802083 if ( dist == 0 ) {
20812084 textAlign = 'middle' ;
20822085 }
2083- e . setAttribute ( 'dy' , dy ) ;
2086+ e . setAttribute ( 'dy' , ` ${ dy } em` ) ;
20842087 e . setAttribute ( 'text-anchor' , textAlign ) ;
20852088 let desc = `label "${ clean_label ( text ) } "` ;
20862089 if ( this . aria_mode == VERBOSE ) {
20872090 desc += ` at ${ A } ` ;
20882091 }
20892092 this . set_aria_label ( e , desc ) ;
2093+ if ( align_angle === undefined ) {
2094+ align_angle = angle ;
2095+ }
2096+ if ( this . local . align_label ) {
2097+ this . transform ( e , `rotate(${ dp ( RTOD ( - align_angle ) ) } )` ) ;
2098+ }
20902099 return e ;
20912100 }
20922101
@@ -2102,9 +2111,8 @@ class SVGDrawer extends Drawer {
21022111 let desc = s . getAttribute ( 'aria-label' ) || '' ;
21032112 g . appendChild ( s ) ;
21042113
2105- let mark , text ;
21062114 if ( this . local . label_segment != NONE ) {
2107- mark = this . transform ( this . element ( 'path' ) , `translate(${ dp ( x ) } ${ dp ( y ) } ) scale(${ dp ( size ) } ) rotate(${ dp ( RTOD ( angle ) ) } )` ) ;
2115+ const mark = this . transform ( this . element ( 'path' ) , `translate(${ dp ( x ) } ${ dp ( y ) } ) scale(${ dp ( size ) } ) rotate(${ dp ( RTOD ( angle ) ) } )` ) ;
21082116 this . set_stroke ( mark ) ;
21092117 mark . setAttribute ( 'stroke-width' , mark . getAttribute ( 'stroke-width' ) / size ) ;
21102118 this . set_style ( mark ) ;
@@ -2132,7 +2140,7 @@ class SVGDrawer extends Drawer {
21322140 this . local . label_direction = argument ( A , B ) + PI / 2 ;
21332141 }
21342142 const m = Point . create_midpoint ( new Set ( [ A , B ] ) ) ;
2135- text = this . label_point ( m ) ;
2143+ const text = this . label_point ( m , angle ) ;
21362144 this . pop_local_settings ( ) ;
21372145 g . appendChild ( text ) ;
21382146 text . removeAttribute ( 'aria-label' ) ;
0 commit comments