@@ -473,19 +473,6 @@ function appendBarText(gd, plotinfo, bar, cd, i, x0, x1, y0, y1, r, overhead, op
473
473
var barWidth = lx - 2 * TEXTPAD ;
474
474
var barHeight = ly - 2 * TEXTPAD ;
475
475
476
- // If corners are rounded, subtract extra from barWidth and barHeight
477
- // to account for rounding
478
- if ( barIsRounded ) {
479
- if ( hasB ) {
480
- barWidth -= 2 * r ;
481
- barHeight -= 2 * r ;
482
- } else if ( isHorizontal ) {
483
- barWidth -= r - overhead ;
484
- } else {
485
- barHeight -= r - overhead ;
486
- }
487
- }
488
-
489
476
var textSelection ;
490
477
491
478
var textBB ;
@@ -511,17 +498,31 @@ function appendBarText(gd, plotinfo, bar, cd, i, x0, x1, y0, y1, r, overhead, op
511
498
textHeight = textBB . height ;
512
499
513
500
var textHasSize = ( textWidth > 0 && textHeight > 0 ) ;
514
- var fitsInside = ( textWidth <= barWidth && textHeight <= barHeight ) ;
515
- var fitsInsideIfRotated = ( textWidth <= barHeight && textHeight <= barWidth ) ;
516
- var fitsInsideIfShrunk = ( isHorizontal ) ?
517
- ( barWidth >= textWidth * ( barHeight / textHeight ) ) :
518
- ( barHeight >= textHeight * ( barWidth / textWidth ) ) ;
519
-
520
- if ( textHasSize && (
521
- fitsInside ||
522
- fitsInsideIfRotated ||
523
- fitsInsideIfShrunk )
524
- ) {
501
+
502
+ var fitsInside ;
503
+ if ( barIsRounded ) {
504
+ // If bar is rounded, check if text fits between rounded corners
505
+ if ( hasB ) {
506
+ fitsInside = (
507
+ textfitsInsideBar ( barWidth - 2 * r , barHeight , textWidth , textHeight , isHorizontal ) ||
508
+ textfitsInsideBar ( barWidth , barHeight - 2 * r , textWidth , textHeight , isHorizontal )
509
+ ) ;
510
+ } else if ( isHorizontal ) {
511
+ fitsInside = (
512
+ textfitsInsideBar ( barWidth - ( r - overhead ) , barHeight , textWidth , textHeight , isHorizontal ) ||
513
+ textfitsInsideBar ( barWidth , barHeight - 2 * ( r - overhead ) , textWidth , textHeight , isHorizontal )
514
+ ) ;
515
+ } else {
516
+ fitsInside = (
517
+ textfitsInsideBar ( barWidth , barHeight - ( r - overhead ) , textWidth , textHeight , isHorizontal ) ||
518
+ textfitsInsideBar ( barWidth - 2 * ( r - overhead ) , barHeight , textWidth , textHeight , isHorizontal )
519
+ ) ;
520
+ }
521
+ } else {
522
+ fitsInside = textfitsInsideBar ( barWidth , barHeight , textWidth , textHeight , isHorizontal ) ;
523
+ }
524
+
525
+ if ( textHasSize && fitsInside ) {
525
526
textPosition = 'inside' ;
526
527
} else {
527
528
textPosition = 'outside' ;
@@ -589,6 +590,16 @@ function appendBarText(gd, plotinfo, bar, cd, i, x0, x1, y0, y1, r, overhead, op
589
590
Lib . setTransormAndDisplay ( s , transform ) ;
590
591
}
591
592
593
+ function textfitsInsideBar ( barWidth , barHeight , textWidth , textHeight , isHorizontal ) {
594
+ if ( barWidth < 0 || barHeight < 0 ) return false ;
595
+ var fitsInside = ( textWidth <= barWidth && textHeight <= barHeight ) ;
596
+ var fitsInsideIfRotated = ( textWidth <= barHeight && textHeight <= barWidth ) ;
597
+ var fitsInsideIfShrunk = ( isHorizontal ) ?
598
+ ( barWidth >= textWidth * ( barHeight / textHeight ) ) :
599
+ ( barHeight >= textHeight * ( barWidth / textWidth ) ) ;
600
+ return fitsInside || fitsInsideIfRotated || fitsInsideIfShrunk ;
601
+ }
602
+
592
603
function getRotateFromAngle ( angle ) {
593
604
return ( angle === 'auto' ) ? 0 : angle ;
594
605
}
0 commit comments