Commit 88afaefb authored by Viktor Lidholt's avatar Viktor Lidholt

Updates sprite widget to handle changes to renderbox

parent 41695fb1
......@@ -28,6 +28,20 @@ class SpriteBox extends RenderBox {
// Root node for drawing
NodeWithSize _rootNode;
void set rootNode (NodeWithSize value) {
if (value == _rootNode)
return;
// Remove sprite box references
if (_rootNode != null) _removeSpriteBoxReference(_rootNode);
// Update the value
_rootNode = value;
// Add new references
_addSpriteBoxReference(_rootNode);
}
// Tracking of frame rate and updates
double _lastTimeStamp;
int _numFrames = 0;
......@@ -36,6 +50,15 @@ class SpriteBox extends RenderBox {
// Transformation mode
SpriteBoxTransformMode _transformMode;
void set transformMode (SpriteBoxTransformMode value) {
if (value == _transformMode)
return;
_transformMode = value;
// Invalidate stuff
if (attached) performLayout();
}
/// The transform mode used by the [SpriteBox].
SpriteBoxTransformMode get transformMode => _transformMode;
......@@ -44,6 +67,10 @@ class SpriteBox extends RenderBox {
List<Node> _eventTargets;
Rect _visibleArea;
Rect get visibleArea => _visibleArea;
// Setup
/// Creates a new SpriteBox with a node as its content, by default uses letterboxing.
......@@ -58,15 +85,17 @@ class SpriteBox extends RenderBox {
assert(rootNode._spriteBox == null);
// Setup root node
_rootNode = rootNode;
// Assign SpriteBox reference to all the nodes
_addSpriteBoxReference(_rootNode);
this.rootNode = rootNode;
// Setup transform mode
_transformMode = mode;
this.transformMode = mode;
}
_scheduleTick();
void _removeSpriteBoxReference(Node node) {
node._spriteBox = null;
for (Node child in node._children) {
_removeSpriteBoxReference(child);
}
}
void _addSpriteBoxReference(Node node) {
......@@ -76,6 +105,16 @@ class SpriteBox extends RenderBox {
}
}
void attach() {
super.attach();
_scheduleTick();
}
void detach() {
super.detach();
}
// Properties
/// The root node of the node tree that is rendered by this box.
......@@ -271,6 +310,7 @@ class SpriteBox extends RenderBox {
}
void _tick(double timeStamp) {
if (!attached) return;
// Calculate the time between frames in seconds
if (_lastTimeStamp == null) _lastTimeStamp = timeStamp;
......
......@@ -31,8 +31,7 @@ class SpriteWidget extends OneChildRenderObjectWrapper {
void syncRenderObject(SpriteWidget old) {
super.syncRenderObject(old);
// SpriteBox doesn't allow mutation of these properties
assert(rootNode == root.rootNode);
assert(transformMode == root._transformMode);
root.rootNode = rootNode;
root.transformMode = transformMode;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment