]> git.ipfire.org Git - thirdparty/Chart.js.git/commitdiff
Fix ticks generation for vertical time scale (#6258)
authorJukka Kurkela <jukka.kurkela@gmail.com>
Sun, 12 May 2019 14:34:15 +0000 (17:34 +0300)
committerSimon Brunel <simonbrunel@users.noreply.github.com>
Sun, 12 May 2019 14:34:14 +0000 (16:34 +0200)
src/scales/scale.time.js

index ebe44c55bf1be35efd7d27e6fcb933b91054957f..7d21f47b53d16b4a9277ff1daf74e83e7181884f 100644 (file)
@@ -753,10 +753,9 @@ module.exports = Scale.extend({
        },
 
        /**
-        * Crude approximation of what the label width might be
         * @private
         */
-       getLabelWidth: function(label) {
+       _getLabelSize: function(label) {
                var me = this;
                var ticksOpts = me.options.ticks;
                var tickLabelWidth = me.ctx.measureText(label).width;
@@ -765,7 +764,18 @@ module.exports = Scale.extend({
                var sinRotation = Math.sin(angle);
                var tickFontSize = valueOrDefault(ticksOpts.fontSize, defaults.global.defaultFontSize);
 
-               return (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation);
+               return {
+                       w: (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation),
+                       h: (tickLabelWidth * sinRotation) + (tickFontSize * cosRotation)
+               };
+       },
+
+       /**
+        * Crude approximation of what the label width might be
+        * @private
+        */
+       getLabelWidth: function(label) {
+               return this._getLabelSize(label).w;
        },
 
        /**
@@ -779,17 +789,19 @@ module.exports = Scale.extend({
 
                // pick the longest format (milliseconds) for guestimation
                var format = displayFormats[timeOpts.unit] || displayFormats.millisecond;
-
                var exampleLabel = me.tickFormatFunction(exampleTime, 0, [], format);
-               var tickLabelWidth = me.getLabelWidth(exampleLabel);
+               var size = me._getLabelSize(exampleLabel);
 
                // Using margins instead of padding because padding is not calculated
                // at this point (buildTicks). Margins are provided from previous calculation
                // in layout steps 5/6
-               var innerWidth = me.isHorizontal()
-                       ? me.width - (margins.left + margins.right)
-                       : me.height - (margins.top + margins.bottom);
-               var capacity = Math.floor(innerWidth / tickLabelWidth);
+               var capacity = Math.floor(me.isHorizontal()
+                       ? (me.width - margins.left - margins.right) / size.w
+                       : (me.height - margins.top - margins.bottom) / size.h);
+
+               if (me.options.offset) {
+                       capacity--;
+               }
 
                return capacity > 0 ? capacity : 1;
        }