|  | // 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:math" as math; | 
|  | import 'dart:sky'; | 
|  |  | 
|  | double timeBase = null; | 
|  | LayoutRoot layoutRoot = new LayoutRoot(); | 
|  |  | 
|  | void beginFrame(double timeStamp) { | 
|  | if (timeBase == null) | 
|  | timeBase = timeStamp; | 
|  | double delta = timeStamp - timeBase; | 
|  | PictureRecorder recorder = new PictureRecorder(); | 
|  | final double devicePixelRatio = view.devicePixelRatio; | 
|  | Canvas canvas = new Canvas(recorder, new Rect.fromLTWH(0.0, 0.0, view.width * devicePixelRatio, view.height * devicePixelRatio)); | 
|  | canvas.scale(devicePixelRatio, devicePixelRatio); | 
|  | canvas.translate(view.width / 2.0, view.height / 2.0); | 
|  | canvas.rotate(math.PI * delta / 1800); | 
|  | canvas.drawRect(new Rect.fromLTRB(-100.0, -100.0, 100.0, 100.0), | 
|  | new Paint()..color = const Color.fromARGB(255, 0, 255, 0)); | 
|  |  | 
|  | double sin = math.sin(delta / 200); | 
|  | layoutRoot.maxWidth = 150.0 + (50 * sin); | 
|  | layoutRoot.layout(); | 
|  |  | 
|  | canvas.translate(layoutRoot.maxWidth / -2.0, (layoutRoot.maxWidth / 2.0) - 125); | 
|  | layoutRoot.paint(canvas); | 
|  |  | 
|  | view.picture = recorder.endRecording(); | 
|  | view.scheduleFrame(); | 
|  | } | 
|  |  | 
|  | void main() { | 
|  | var document = new Document(); | 
|  | var arabic = document.createText("هذا هو قليلا طويلة من النص الذي يجب التفاف ."); | 
|  | var more = document.createText(" و أكثر قليلا لجعله أطول. "); | 
|  | var block = document.createElement('p'); | 
|  | block.style['display'] = 'paragraph'; | 
|  | block.style['direction'] = 'rtl'; | 
|  | block.style['unicode-bidi'] = 'plaintext'; | 
|  | block.appendChild(arabic); | 
|  | block.appendChild(more); | 
|  |  | 
|  | layoutRoot.rootElement = block; | 
|  |  | 
|  | view.setFrameCallback(beginFrame); | 
|  | view.scheduleFrame(); | 
|  | } |