From 6653e82f7e8fd389c78271bc480934519c3b81af Mon Sep 17 00:00:00 2001 From: kurkle Date: Mon, 4 Oct 2021 20:20:33 +0300 Subject: [PATCH] Add layout.autoPadding option --- docs/configuration/layout.md | 1 + src/core/core.controller.js | 10 +++---- src/core/core.layouts.js | 1 + .../controller.bubble/autoPadding-disabled.js | 26 ++++++++++++++++++ .../autoPadding-disabled.png | Bin 0 -> 10314 bytes 5 files changed, 33 insertions(+), 5 deletions(-) create mode 100644 test/fixtures/controller.bubble/autoPadding-disabled.js create mode 100644 test/fixtures/controller.bubble/autoPadding-disabled.png diff --git a/docs/configuration/layout.md b/docs/configuration/layout.md index aad50c62d35..9cce256448f 100644 --- a/docs/configuration/layout.md +++ b/docs/configuration/layout.md @@ -4,4 +4,5 @@ Namespace: `options.layout`, the global options for the chart layout is defined | Name | Type | Default | [Scriptable](../general/options.md#scriptable-options) | Description | ---- | ---- | ------- | :----: | ----------- +| `autoPadding` | `boolean` | `true` | No | Apply automatic padding so visible elements are completely drawn. | `padding` | [`Padding`](../general/padding.md) | `0` | Yes | The padding to add inside the chart. diff --git a/src/core/core.controller.js b/src/core/core.controller.js index c5b77a0f989..33ba6734ce7 100644 --- a/src/core/core.controller.js +++ b/src/core/core.controller.js @@ -422,21 +422,21 @@ class Chart { const config = this.config; config.update(); - this._options = config.createResolver(config.chartOptionScopes(), this.getContext()); + const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext()); each(this.scales, (scale) => { layouts.removeBox(this, scale); }); - const animsDisabled = this._animationsDisabled = !this.options.animation; + const animsDisabled = this._animationsDisabled = !options.animation; this.ensureScalesHaveIDs(); this.buildOrUpdateScales(); const existingEvents = new Set(Object.keys(this._listeners)); - const newEvents = new Set(this.options.events); + const newEvents = new Set(options.events); - if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== this.options.responsive) { + if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) { // The configured events have changed. Rebind. this.unbindEvents(); this.bindEvents(); @@ -465,7 +465,7 @@ class Chart { controller.buildOrUpdateElements(reset); minPadding = Math.max(+controller.getMaxOverflow(), minPadding); } - this._minPadding = minPadding; + minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0; this._updateLayout(minPadding); // Only reset the controllers if we have animations diff --git a/src/core/core.layouts.js b/src/core/core.layouts.js index fd830ffc3d7..c5c7e46749f 100644 --- a/src/core/core.layouts.js +++ b/src/core/core.layouts.js @@ -260,6 +260,7 @@ function placeBoxes(boxes, chartArea, params, stacks) { } defaults.set('layout', { + autoPadding: true, padding: { top: 0, right: 0, diff --git a/test/fixtures/controller.bubble/autoPadding-disabled.js b/test/fixtures/controller.bubble/autoPadding-disabled.js new file mode 100644 index 00000000000..bc0d166cc24 --- /dev/null +++ b/test/fixtures/controller.bubble/autoPadding-disabled.js @@ -0,0 +1,26 @@ +module.exports = { + config: { + type: 'bubble', + data: { + datasets: [{ + backgroundColor: 'red', + data: [{x: 12, y: 54, r: 22.4}] + }, { + backgroundColor: 'blue', + data: [{x: 18, y: 38, r: 25}] + }] + }, + options: { + layout: { + autoPadding: false, + } + } + }, + options: { + spriteText: true, + canvas: { + width: 256, + height: 256 + } + } +}; diff --git a/test/fixtures/controller.bubble/autoPadding-disabled.png b/test/fixtures/controller.bubble/autoPadding-disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..deed2ff4f72e33f06167c514cb31552f79eb3939 GIT binary patch literal 10314 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