blob: bf365a6764913872560224ec063c1f0133616d4c [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
part of dart.sky;
/// Holds a 2D floating-point offset.
/// Think of this as a vector from an unspecified point
class Offset extends OffsetBase {
const Offset(dx, dy) : super(dx, dy);
Offset.copy(Offset source) : super(source.dx, source.dy);
double get dx => _dx;
double get dy => _dy;
double get distance => math.sqrt(_dx * _dx + _dy * _dy);
static const Offset zero = const Offset(0.0, 0.0);
static const Offset infinite = const Offset(double.INFINITY, double.INFINITY);
Offset scale(double scaleX, double scaleY) => new Offset(dx * scaleX, dy * scaleY);
Offset translate(double translateX, double translateY) => new Offset(dx + translateX, dy + translateY);
Offset operator -() => new Offset(-dx, -dy);
Offset operator -(Offset other) => new Offset(dx - other.dx, dy - other.dy);
Offset operator +(Offset other) => new Offset(dx + other.dx, dy + other.dy);
Offset operator *(double operand) => new Offset(dx * operand, dy * operand);
Offset operator /(double operand) => new Offset(dx / operand, dy / operand);
Offset operator ~/(double operand) => new Offset((dx ~/ operand).toDouble(), (dy ~/ operand).toDouble());
Offset operator %(double operand) => new Offset(dx % operand, dy % operand);
Rect operator &(Size other) => new Rect.fromLTWH(dx, dy, other.width, other.height);
// does the equivalent of "return new Point(0,0) + this"
Point toPoint() => new Point(this.dx, this.dy);
String toString() => "Offset($dx, $dy)";
}