Commit fef65fc4 authored by Collin Jackson's avatar Collin Jackson

Implement RenderImage and Image for Sky

This also fixes a bug that was preventing markNeedsLayout from working

R=abarth@chromium.org, eseidel@chromium.org, abarth, eseidel

Review URL: https://codereview.chromium.org/1160013004
parent 006da931
...@@ -5,6 +5,17 @@ ...@@ -5,6 +5,17 @@
import 'dart:sky' as sky; import 'dart:sky' as sky;
import 'package:sky/framework/fn2.dart'; import 'package:sky/framework/fn2.dart';
import 'package:sky/framework/rendering/box.dart'; import 'package:sky/framework/rendering/box.dart';
import '../lib/solid_color_box.dart';
class Rectangle extends RenderNodeWrapper {
RenderSolidColorBox root;
RenderSolidColorBox createNode() =>
new RenderSolidColorBox(color, desiredSize: new sky.Size(40.0, 130.0));
final int color;
Rectangle(this.color, { Object key }) : super(key: key);
}
class ContainerApp extends App { class ContainerApp extends App {
UINode build() { UINode build() {
...@@ -20,7 +31,11 @@ class ContainerApp extends App { ...@@ -20,7 +31,11 @@ class ContainerApp extends App {
new Container( new Container(
decoration: new BoxDecoration(backgroundColor: const sky.Color(0xFFFFFF00)), decoration: new BoxDecoration(backgroundColor: const sky.Color(0xFFFFFF00)),
desiredSize: new sky.Size(double.INFINITY, 20.0) desiredSize: new sky.Size(double.INFINITY, 20.0)
) ),
new Image(src: "https://www.dartlang.org/logos/dart-logo.png",
size: new sky.Size(300.0, 300.0),
key: 1
),
])), ])),
]), ]),
onPointerDown: _handlePointerDown); onPointerDown: _handlePointerDown);
......
// 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';
import 'package:sky/framework/rendering/box.dart';
class RenderSolidColorBox extends RenderDecoratedBox {
final Size desiredSize;
final Color backgroundColor;
RenderSolidColorBox(Color backgroundColor, { this.desiredSize: const Size.infinite() })
: backgroundColor = backgroundColor,
super(decoration: new BoxDecoration(backgroundColor: backgroundColor));
Size getIntrinsicDimensions(BoxConstraints constraints) {
return constraints.constrain(desiredSize);
}
void performLayout() {
size = constraints.constrain(desiredSize);
}
void handlePointer(PointerEvent event) {
if (event.type == 'pointerdown')
decoration = new BoxDecoration(backgroundColor: const Color(0xFFFF0000));
else if (event.type == 'pointerup')
decoration = new BoxDecoration(backgroundColor: backgroundColor);
}
}
\ No newline at end of file
// 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';
import 'dart:math' as math;
import 'package:sky/framework/net/image_cache.dart' as image_cache;
import 'package:sky/framework/app.dart';
import 'package:sky/framework/rendering/box.dart';
import 'package:sky/framework/rendering/block.dart';
import 'package:sky/framework/rendering/flex.dart';
import 'package:sky/framework/rendering/node.dart';
import 'package:sky/framework/rendering/paragraph.dart';
import '../lib/solid_color_box.dart';
class Touch {
final double x;
final double y;
const Touch(this.x, this.y);
}
class RenderImageGrow extends RenderImage {
final Size _startingSize;
RenderImageGrow(String src, Size size) : _startingSize = size, super(src, size);
double _growth = 0.0;
double get growth => _growth;
void set growth(double value) {
_growth = value;
double newWidth = _startingSize.width == null ? null : _startingSize.width + growth;
double newHeight = _startingSize.height == null ? null : _startingSize.height + growth;
requestedSize = new Size(newWidth, newHeight);
}
}
AppView app;
RenderImageGrow image;
Map<int, Touch> touches = new Map();
void handleEvent(event) {
if (event is PointerEvent) {
if (event.type == 'pointermove')
image.growth = math.max(0.0, image.growth + event.x - touches[event.pointer].x);
touches[event.pointer] = new Touch(event.x, event.y);
}
}
void main() {
void addFlexChildSolidColor(RenderFlex parent, Color backgroundColor, { int flex: 0 }) {
RenderSolidColorBox child = new RenderSolidColorBox(backgroundColor);
parent.add(child);
child.parentData.flex = flex;
}
var row = new RenderFlex(direction: FlexDirection.Horizontal);
// Left cell
addFlexChildSolidColor(row, const Color(0xFF00D2B8), flex: 1);
// Resizeable image
image = new RenderImageGrow("https://www.dartlang.org/logos/dart-logo.png",
new Size(100.0, null));
var padding = new RenderPadding(padding: const EdgeDims.all(10.0), child: image);
row.add(padding);
RenderFlex column = new RenderFlex(direction: FlexDirection.Vertical);
// Top cell
addFlexChildSolidColor(column, const Color(0xFF55DDCA), flex: 1);
// The internet is a beautiful place. https://baconipsum.com/
String meatyString = """Bacon ipsum dolor amet ham fatback tri-tip, prosciutto
porchetta bacon kevin meatball meatloaf pig beef ribs chicken. Brisket ribeye
andouille leberkas capicola meatloaf. Chicken pig ball tip pork picanha bresaola
alcatra. Pork pork belly alcatra, flank chuck drumstick biltong doner jowl.
Pancetta meatball tongue tenderloin rump tail jowl boudin.""";
RenderParagraph paragraph = new RenderParagraph(text: meatyString, color: const Color(0xFF009900));
padding = new RenderPadding(padding: const EdgeDims.all(10.0), child: paragraph);
column.add(padding);
// Bottom cell
addFlexChildSolidColor(column, const Color(0xFF0081C6), flex: 2);
row.add(column);
column.parentData.flex = 8;
RenderDecoratedBox root = new RenderDecoratedBox(
decoration: new BoxDecoration(backgroundColor: const Color(0xFFFFFFFF)),
child: row
);
app = new AppView(root);
view.setEventCallback(handleEvent);
}
...@@ -8,30 +8,7 @@ import 'package:sky/framework/rendering/box.dart'; ...@@ -8,30 +8,7 @@ import 'package:sky/framework/rendering/box.dart';
import 'package:sky/framework/rendering/node.dart'; import 'package:sky/framework/rendering/node.dart';
import 'package:sky/framework/rendering/flex.dart'; import 'package:sky/framework/rendering/flex.dart';
import 'package:sky/framework/rendering/paragraph.dart'; import 'package:sky/framework/rendering/paragraph.dart';
import '../lib/solid_color_box.dart';
class RenderSolidColor extends RenderDecoratedBox {
final Size desiredSize;
final Color backgroundColor;
RenderSolidColor(Color backgroundColor, { this.desiredSize: const Size.infinite() })
: backgroundColor = backgroundColor,
super(decoration: new BoxDecoration(backgroundColor: backgroundColor));
Size getIntrinsicDimensions(BoxConstraints constraints) {
return constraints.constrain(desiredSize);
}
void performLayout() {
size = constraints.constrain(desiredSize);
}
void handlePointer(PointerEvent event) {
if (event.type == 'pointerdown')
decoration = new BoxDecoration(backgroundColor: const Color(0xFFFF0000));
else if (event.type == 'pointerup')
decoration = new BoxDecoration(backgroundColor: backgroundColor);
}
}
AppView app; AppView app;
...@@ -43,7 +20,7 @@ void main() { ...@@ -43,7 +20,7 @@ void main() {
child: flexRoot child: flexRoot
); );
RenderNode child = new RenderSolidColor(const Color(0xFFFFFF00)); RenderNode child = new RenderSolidColorBox(const Color(0xFFFFFF00));
flexRoot.add(child); flexRoot.add(child);
child.parentData.flex = 2; child.parentData.flex = 2;
......
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