Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3220)

Unified Diff: charted/lib/core/scales.dart

Issue 1400473008: Roll Observatory packages and add a roll script (Closed) Base URL: git@github.com:dart-lang/observatory_pub_packages.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « charted/lib/core/interpolators/interpolators.dart ('k') | charted/lib/core/scales/linear_scale.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: charted/lib/core/scales.dart
diff --git a/charted/lib/core/scales.dart b/charted/lib/core/scales.dart
deleted file mode 100644
index 4acd744f0506872189d4d0e74229412fe9616dea..0000000000000000000000000000000000000000
--- a/charted/lib/core/scales.dart
+++ /dev/null
@@ -1,234 +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
-//
-
-/// Collection of scales for use by charts. The role of scales is to map the
-/// input domain to an output range.
-///
-/// Charted supports two types of scales:
-/// - Quantitative, where the scales use a mathematical function for mapping
-/// the input domain to output range.
-/// - Ordinal, where the input domain is discrete (i.e set of values)
-///
-library charted.core.scales;
-
-import 'dart:math' as math;
-import 'package:charted/core/utils.dart';
-import 'package:charted/core/interpolators.dart';
-import 'package:charted/core/time_interval.dart';
-import 'package:charted/locale/locale.dart';
-import 'package:charted/locale/format.dart';
-
-part 'scales/ordinal_scale.dart';
-part 'scales/linear_scale.dart';
-part 'scales/log_scale.dart';
-part 'scales/time_scale.dart';
-
-typedef num RoundFunction(num value);
-
-/// Minimum common interface supported by all scales. [QuantitativeScale] and
-/// [OrdinalScale] contain the interface for their respective types.
-abstract class Scale {
- /// Given a [value] in the input domain, map it to the range.
- /// On [QuantitativeScale]s both parameter and return values are numbers.
- dynamic scale(value);
-
- /// Given a [value] in the output range, return value in the input domain
- /// that maps to the value.
- /// On [QuantitativeScale]s both parameter and return values are numbers.
- dynamic invert(value);
-
- /// Input domain used by this scale.
- Iterable domain;
-
- /// Output range used by this scale.
- Iterable range;
-
- /// Maximum and minimum values of the scale's output range.
- Extent get rangeExtent;
-
- /// Creates tick values over the input domain.
- Iterable get ticks;
-
- /// Creates a formatter that is suitable for formatting the ticks.
- /// For ordinal scale, the returned function is an identity function.
- FormatFunction createTickFormatter([String format]);
-
- /// Creates a clone of this scale.
- Scale clone();
-
- /// Suggested number of ticks on this scale.
- /// Note: This property is only valid on quantitative scales.
- int ticksCount;
-
- /// Indicates if the current scale is using niced values for ticks.
- /// Note: This property is only valid on quantitative scales.
- bool nice;
-
- /// Indicates if output range is clamped. When clamp is not true, any input
- /// value that is not within the input domain may result in a value that is
- /// outside the output range.
- /// Note: This property is only valid on quantitative scales.
- bool clamp;
-
- /// Indicates that the scaled values must be rounded to the nearest
- /// integer. Helps avoid anti-aliasing artifacts in the visualizations.
- /// Note: This property is only valid on quantitative scales.
- bool rounded;
-}
-
-/// Minimum common interface supported by scales whose input domain
-/// contains discreet values (Ordinal scales).
-abstract class OrdinalScale extends Scale {
- factory OrdinalScale() = _OrdinalScale;
-
- /// Amount of space that each value in the domain gets from the range. A band
- /// is available only after [rangeBands] or [rangeRoundBands] is called by
- /// the user. A bar-chart could use this space as width of a bar.
- num get rangeBand;
-
- /// Maps each value on the domain to a single point on output range. When a
- /// non-zero value is specified, [padding] space is left unused on both ends
- /// of the range.
- void rangePoints(Iterable range, [double padding]);
-
- /// Maps each value on the domain to a band in the output range. When a
- /// non-zero value is specified, [padding] space is left between each bands
- /// and [outerPadding] space is left unused at both ends of the range.
- void rangeBands(Iterable range, [double padding, double outerPadding]);
-
- /// Similar to [rangeBands] but ensures that each band starts and ends on a
- /// pixel boundary - helps avoid anti-aliasing artifacts.
- void rangeRoundBands(Iterable range, [double padding, double outerPadding]);
-}
-
-class RoundingFunctions extends Pair<RoundFunction,RoundFunction> {
- RoundingFunctions(RoundFunction floor, RoundFunction ceil)
- : super(floor, ceil);
-
- factory RoundingFunctions.defaults() =>
- new RoundingFunctions((x) => x.floor(), (x) => x.ceil());
-
- factory RoundingFunctions.identity() =>
- new RoundingFunctions(identityFunction, identityFunction);
-
- RoundFunction get floor => super.first;
- RoundFunction get ceil => super.last;
-}
-
-/// Namespacing container for utilities used by scales.
-abstract class ScaleUtils {
- /// Utility to return extent of sorted [values].
- static Extent extent(Iterable values) =>
- values.first < values.last
- ? new Extent(values.first, values.last)
- : new Extent(values.last, values.first);
-
- /// Extends [values] to round numbers based on the given pair of
- /// floor and ceil functions. [functions] is a pair of rounding function
- /// among which the first is used to compute floor of a number and the
- /// second for ceil of the number.
- static List nice(List values, RoundingFunctions functions) {
- if (values.last >= values.first) {
- values[0] = functions.floor(values.first);
- values[values.length - 1] = functions.ceil(values.last);
- } else {
- values[values.length - 1] = functions.floor(values.last);
- values[0] = functions.ceil(values.first);
- }
- return values;
- }
-
- static RoundingFunctions niceStep(num step) => (step > 0)
- ? new RoundingFunctions(
- (x) => (x < step) ? x.floor() : (x / step).floor() * step,
- (x) => (x < step) ? x.ceil() : (x / step).ceil() * step)
- : new RoundingFunctions.identity();
-
- /// Returns a Function that given a value x on the domain, returns the
- /// corresponding value on the range on a bilinear scale.
- ///
- /// @param domain The domain of the scale.
- /// @param range The range of the scale.
- /// @param uninterpolator The uninterpolator for domain values.
- /// @param interpolator The interpolator for range values.
- static Function bilinearScale(List domain, List range,
- Function uninterpolator, Function interpolator) {
- var u = uninterpolator(domain[0], domain[1]),
- i = interpolator(range[0], range[1]);
- return (x) => i(u(x));
- }
-
- /// Returns a Function that given a value x on the domain, returns the
- /// corresponding value on the range on a polylinear scale.
- ///
- /// @param domain The domain of the scale.
- /// @param range The range of the scale.
- /// @param uninterpolator The uninterpolator for domain values.
- /// @param interpolator The interpolator for range values.
- static Function polylinearScale(List domain, List range,
- Function uninterpolator, Function interpolator) {
- var u = [],
- i = [],
- j = 0,
- k = math.min(domain.length, range.length) - 1;
-
- // Handle descending domains.
- if (domain[k] < domain[0]) {
- domain = domain.reversed.toList();
- range = range.reversed.toList();
- }
-
- while (++j <= k) {
- u.add(uninterpolator(domain[j - 1], domain[j]));
- i.add(interpolator(range[j - 1], range[j]));
- }
-
- return (x) {
- int index = bisect(domain, x, 1, k) - 1;
- return i[index](u[index](x));
- };
- }
-
- /// Returns the insertion point i for value x such that all values in a[lo:i]
- /// will be less than x and all values in a[i:hi] will be equal to or greater
- /// than x.
- static int bisectLeft(List a, num x, [int lo = 0, int hi = -1]) {
- if (hi == -1) {
- hi = a.length;
- }
- while (lo < hi) {
- int mid = ((lo + hi) / 2).floor();
- if (a[mid] < x) {
- lo = mid + 1;
- } else {
- hi = mid;
- }
- }
- return lo;
- }
-
- /// Returns the insertion point i for value x such that all values in a[lo:i]
- /// will be less than or equalto x and all values in a[i:hi] will be greater
- /// than x.
- static int bisectRight(List a, num x, [int lo = 0, int hi = -1]) {
- if (hi == -1) {
- hi = a.length;
- }
- while (lo < hi) {
- int mid = ((lo + hi) / 2).floor();
- if (x < a[mid]) {
- hi = mid;
- } else {
- lo = mid + 1;
- }
- }
- return lo;
- }
-
- static Function bisect = bisectRight;
-}
« no previous file with comments | « charted/lib/core/interpolators/interpolators.dart ('k') | charted/lib/core/scales/linear_scale.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698