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

Sadly, box.dart has grown much longer than 1000 lines. This patch splits it up into several files based on the class hierarchy. Fortunately, many of these classes are loosely coupled to each other.
100 lines
3.2 KiB
Dart
100 lines
3.2 KiB
Dart
// 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.
|
|
|
|
import 'dart:sky' as sky;
|
|
|
|
import 'package:sky/rendering/box.dart';
|
|
import 'package:sky/rendering/flex.dart';
|
|
import 'package:sky/rendering/proxy_box.dart';
|
|
import 'package:sky/rendering/shifted_box.dart';
|
|
import 'package:sky/rendering/sky_binding.dart';
|
|
|
|
class RenderSolidColor extends RenderDecoratedBox {
|
|
final sky.Size desiredSize;
|
|
final sky.Color backgroundColor;
|
|
|
|
RenderSolidColor(sky.Color backgroundColor, { this.desiredSize: sky.Size.infinite })
|
|
: backgroundColor = backgroundColor,
|
|
super(decoration: new BoxDecoration(backgroundColor: backgroundColor)) {
|
|
}
|
|
|
|
double getMinIntrinsicWidth(BoxConstraints constraints) {
|
|
return constraints.constrainWidth(desiredSize.width);
|
|
}
|
|
|
|
double getMaxIntrinsicWidth(BoxConstraints constraints) {
|
|
return constraints.constrainWidth(desiredSize.width);
|
|
}
|
|
|
|
double getMinIntrinsicHeight(BoxConstraints constraints) {
|
|
return constraints.constrainHeight(desiredSize.height);
|
|
}
|
|
|
|
double getMaxIntrinsicHeight(BoxConstraints constraints) {
|
|
return constraints.constrainHeight(desiredSize.height);
|
|
}
|
|
|
|
void performLayout() {
|
|
size = constraints.constrain(desiredSize);
|
|
}
|
|
|
|
EventDisposition handleEvent(sky.Event event, BoxHitTestEntry entry) {
|
|
if (event.type == 'pointerdown') {
|
|
decoration = new BoxDecoration(backgroundColor: const sky.Color(0xFFFF0000));
|
|
return EventDisposition.processed;
|
|
} else if (event.type == 'pointerup') {
|
|
decoration = new BoxDecoration(backgroundColor: backgroundColor);
|
|
return EventDisposition.processed;
|
|
}
|
|
return super.handleEvent(event, entry);
|
|
}
|
|
}
|
|
|
|
RenderBox buildFlexExample() {
|
|
RenderFlex flexRoot = new RenderFlex(direction: FlexDirection.vertical);
|
|
|
|
RenderDecoratedBox root = new RenderDecoratedBox(
|
|
decoration: new BoxDecoration(backgroundColor: const sky.Color(0xFF000000)),
|
|
child: flexRoot
|
|
);
|
|
|
|
void addFlexChildSolidColor(RenderFlex parent, sky.Color backgroundColor, { int flex: 0 }) {
|
|
RenderSolidColor child = new RenderSolidColor(backgroundColor);
|
|
parent.add(child);
|
|
child.parentData.flex = flex;
|
|
}
|
|
|
|
// Yellow bar at top
|
|
addFlexChildSolidColor(flexRoot, const sky.Color(0xFFFFFF00), flex: 1);
|
|
|
|
// Turquoise box
|
|
flexRoot.add(new RenderSolidColor(const sky.Color(0x7700FFFF), desiredSize: new sky.Size(100.0, 100.0)));
|
|
|
|
var renderDecoratedBlock = new RenderDecoratedBox(
|
|
decoration: new BoxDecoration(backgroundColor: const sky.Color(0xFFFFFFFF))
|
|
);
|
|
|
|
flexRoot.add(new RenderPadding(padding: const EdgeDims.all(10.0), child: renderDecoratedBlock));
|
|
|
|
var row = new RenderFlex(direction: FlexDirection.horizontal);
|
|
|
|
// Purple and blue cells
|
|
addFlexChildSolidColor(row, const sky.Color(0x77FF00FF), flex: 1);
|
|
addFlexChildSolidColor(row, const sky.Color(0xFF0000FF), flex: 2);
|
|
|
|
var decoratedRow = new RenderDecoratedBox(
|
|
decoration: new BoxDecoration(backgroundColor: const sky.Color(0xFF333333)),
|
|
child: row
|
|
);
|
|
|
|
flexRoot.add(decoratedRow);
|
|
decoratedRow.parentData.flex = 3;
|
|
|
|
return root;
|
|
}
|
|
|
|
void main() {
|
|
new SkyBinding(root: buildFlexExample());
|
|
}
|