| Index: charted/lib/core/text_metrics.dart
|
| diff --git a/charted/lib/core/text_metrics.dart b/charted/lib/core/text_metrics.dart
|
| deleted file mode 100644
|
| index 59335947249dcf8d388fd5411fbb853c091f8aef..0000000000000000000000000000000000000000
|
| --- a/charted/lib/core/text_metrics.dart
|
| +++ /dev/null
|
| @@ -1,113 +0,0 @@
|
| -//
|
| -// Copyright 2014 Google Inc. All rights reserved.
|
| -//
|
| -// Use of this source code is governed by a BSD-style
|
| -// license that can be found in the LICENSE file or at
|
| -// https://developers.google.com/open-source/licenses/bsd
|
| -//
|
| -
|
| -/// Provides a way to measure rendered text width for clipping
|
| -/// text on tooltips and ticks when they are too long.
|
| -library charted.core.text_metrics;
|
| -
|
| -import "dart:html";
|
| -import "package:charted/core/text_metrics/segmentation.dart";
|
| -
|
| -/// Utilities to measure text width.
|
| -class TextMetrics {
|
| - static CanvasElement canvas;
|
| - static CanvasRenderingContext2D context;
|
| - static TextMetrics instance;
|
| -
|
| - static const MAX_STRING_LENGTH = 250;
|
| - static final FONT_SIZE_REGEX = new RegExp("\s?([0-9]+)px\s?");
|
| -
|
| - final String fontStyle;
|
| - int fontSize = 16;
|
| -
|
| - String currentFontStyle;
|
| -
|
| - factory TextMetrics({String fontStyle}) {
|
| - if (canvas == null || context == null) {
|
| - canvas = document.createElement('canvas');
|
| - context = canvas.getContext('2d');
|
| - }
|
| - if (instance == null) {
|
| - instance = new TextMetrics._internal(fontStyle);
|
| - }
|
| - return instance;
|
| - }
|
| - TextMetrics._internal(this.fontStyle) {
|
| - Match match = FONT_SIZE_REGEX.firstMatch(fontStyle);
|
| - fontSize = int.parse(match.group(1));
|
| - }
|
| -
|
| - void setFontStyle(String fontStyle) {
|
| - if (fontStyle == null) {
|
| - fontStyle = this.fontStyle;
|
| - }
|
| - if (currentFontStyle != fontStyle) {
|
| - context.font = fontStyle;
|
| - currentFontStyle = fontStyle;
|
| - }
|
| - }
|
| -
|
| - /// Measure width of [text] in pixels.
|
| - /// Optionally, uses [fontStyle] instead of using the default style
|
| - double getTextWidth(String text, {String fontStyle}) {
|
| - assert(text.length <= MAX_STRING_LENGTH);
|
| - setFontStyle(fontStyle);
|
| - return context.measureText(text).width;
|
| - }
|
| -
|
| - /// Gets length of the longest string in the given [strings].
|
| - /// Optionally, uses [fontStyle] instead of using the default style.
|
| - double getLongestTextWidth(Iterable<String> strings, {String fontStyle}) {
|
| - setFontStyle(fontStyle);
|
| - double maxWidth = 0.0;
|
| - for (int i = 0; i < strings.length; ++i) {
|
| - assert(strings.elementAt(i).length <= MAX_STRING_LENGTH);
|
| - double width = context.measureText(strings.elementAt(i)).width;
|
| - if (width > maxWidth) {
|
| - maxWidth = width;
|
| - }
|
| - }
|
| -
|
| - return maxWidth;
|
| - }
|
| -
|
| - /// Truncates given [text] to fit in [width]. Adds an ellipsis to the
|
| - /// returned string, if it needed to be truncated.
|
| - /// Optionally, uses [fontStyle] instead of using the default style.
|
| - String ellipsizeText(String text, double width, {String fontStyle}) {
|
| - assert(text.length <= MAX_STRING_LENGTH);
|
| - setFontStyle(fontStyle);
|
| - double computedWidth = context.measureText(text).width;
|
| - if (computedWidth > width) {
|
| - var indices = graphemeBreakIndices(text);
|
| - var position = 0,
|
| - min = 0, max = indices.length - 1, mid,
|
| - ellipsis = context.measureText('…').width;
|
| - width = width - ellipsis;
|
| - while (max >= min) {
|
| - mid = (min + max) ~/ 2;
|
| - position = indices[mid];
|
| - if (context.measureText(text.substring(0, position)).width > width) {
|
| - max = mid - 1;
|
| - } else {
|
| - min = mid + 1;
|
| - }
|
| - }
|
| - text = text.substring(0, indices[max]) + '…';
|
| - }
|
| - return text;
|
| - }
|
| -
|
| - /// Truncates text in the given [element], which is either a [SvgTextElement]
|
| - /// or a [SvgTspanElement] to fit in [width]. Appends an ellipsis to the text
|
| - /// if it had to be truncated.
|
| - /// Calling this method may force a layout on the document. For better
|
| - /// performance, use [TextMetrics.ellipsizeText].
|
| - static ellipsizeTextElement() {
|
| - }
|
| -}
|
|
|