mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00

Also changes the framework dart code to use the refactored APIs and fixes the various examples and tests. R=abarth@chromium.org, ianh@chromium.org Review URL: https://codereview.chromium.org/1190123003.
61 lines
1.9 KiB
Dart
61 lines
1.9 KiB
Dart
part of sprites;
|
|
|
|
/// The super class of any [Node] that has a size.
|
|
///
|
|
/// NodeWithSize adds the ability for a node to have a size and a pivot point.
|
|
abstract class NodeWithSize extends Node {
|
|
|
|
/// Changing the size will affect the size of the rendering of the node.
|
|
///
|
|
/// myNode.size = new Size(1024.0, 1024.0);
|
|
Size size;
|
|
|
|
/// The normalized point which the node is transformed around.
|
|
///
|
|
/// // Position myNode from is middle top
|
|
/// myNode.pivot = new Point(0.5, 0.0);
|
|
Point pivot;
|
|
|
|
/// Creates a new NodeWithSize.
|
|
///
|
|
/// The default [size] is zero and the default [pivot] point is the origin. Subclasses may change the default values.
|
|
///
|
|
/// var myNodeWithSize = new NodeWithSize(new Size(1024.0, 1024.0));
|
|
NodeWithSize([Size this.size, Point this.pivot]) {
|
|
if (size == null) size = Size.zero;
|
|
if (pivot == null) pivot = Point.origin;
|
|
}
|
|
|
|
/// Call this method in your [paint] method if you want the origin of your drawing to be the top left corner of the
|
|
/// node's bounding box.
|
|
///
|
|
/// If you use this method you will need to save and restore your canvas at the beginning and
|
|
/// end of your [paint] method.
|
|
///
|
|
/// void paint(RenderCanvas canvas) {
|
|
/// canvas.save();
|
|
/// applyTransformForPivot(canvas);
|
|
///
|
|
/// // Do painting here
|
|
///
|
|
/// canvas.restore();
|
|
/// }
|
|
void applyTransformForPivot(RenderCanvas canvas) {
|
|
if (pivot.x != 0 || pivot.y != 0) {
|
|
double pivotInPointsX = size.width * pivot.x;
|
|
double pivotInPointsY = size.height * pivot.y;
|
|
canvas.translate(-pivotInPointsX, -pivotInPointsY);
|
|
}
|
|
}
|
|
|
|
bool isPointInside (Point nodePoint) {
|
|
|
|
double minX = -size.width * pivot.x;
|
|
double minY = -size.height * pivot.y;
|
|
double maxX = minX + size.width;
|
|
double maxY = minY + size.height;
|
|
return (nodePoint.x >= minX && nodePoint.x < maxX &&
|
|
nodePoint.y >= minY && nodePoint.y < maxY);
|
|
}
|
|
}
|