Commit graph

546 commits

Author SHA1 Message Date
Hixie aef18a90ab Add asserts to catch potential misuses of the rendering framework.
New asserts:
- verify that after layout, the size fits the constraints
- verify that after layout, the size isn't infinite
- verify that you don't set the size in performLayout() if you have
  sizedByParent set
- verify that nobody reads your size during layout except you, or your
  parent if they said parentUsesSize:true

Fixes some bugs found by those asserts:
- RenderBlock, RenderStack, and RenderScaffold were not always setting
  parentUsesSize correctly
- RenderScaffold was setting its slot entries to null rather than
  removing them when the slot went away, which led to null derefs in
  certain circumstances

Also, rename a local variable in RenderStack.performLayout() because
it was shadowing a variable on the object itself, which was really
confusing when I first tried to debug this function...

R=abarth@chromium.org

Review URL: https://codereview.chromium.org/1213473003.
2015-06-25 17:08:06 -07:00
Hans Muller ab246ebcef Version 0 of TabLabel, Tab, and TabBar components
There's is no support for animating the selected tab indicator, there isn't a TabNavigator container yet, overflow layout (tabs don't fit) isn't supported yet, etc.

R=abarth@chromium.org, ianh@google.com

Review URL: https://codereview.chromium.org/1205953002.
2015-06-25 14:25:33 -07:00
Viktor Lidholt 2e32c6721d Adds support for rotated textures
Adds documentation to Texture and SpriteSheet

R=abarth@chromium.org

Review URL: https://codereview.chromium.org/1212073002.
2015-06-25 13:13:33 -07:00
Carlos Pizano 45ccc2e812 fix minedigger win bug
Win was not being detected.

BUG=none
R=abarth@chromium.org

Review URL: https://codereview.chromium.org/1209823002.
2015-06-24 18:14:51 -07:00
Hixie 3df2427540 Use the baseline information exposed by C++ to pipe baseline data through RenderBox.
This also fixes the C++ side to give the right baseline information.
Previously it was giving the baseline distance for the font, but not
for the actual laid-out text.

I considered also providing a "defaultBaseline" accessor that returns
the distance for the actual dominant baseline, but it turns out right
now we never decide the baseline is ideographic. We always use the
alphabetic baseline. We should probably fix that...

R=eseidel@chromium.org

Review URL: https://codereview.chromium.org/1200233002.
2015-06-24 17:01:14 -07:00
Hixie a7f7e1e564 Add support for line-height in TextStyle.
Also, some minor cleanup in TextStyle to make it more readable.

R=eseidel@chromium.org

Review URL: https://codereview.chromium.org/1203253002.
2015-06-24 13:25:17 -07:00
Hixie 09c9d5b5ce Fix baseline example (missed merge with Ian's new graphics APIs).
TBR=iansf

Review URL: https://codereview.chromium.org/1201383005.
2015-06-24 11:33:54 -07:00
Hixie 8a465ac6d9 Expose baseline information in the Sky API.
R=eseidel@chromium.org

Review URL: https://codereview.chromium.org/1208483002.
2015-06-24 11:24:45 -07:00
Ian Fischer 82d1eb2fdb Decouple Canvas from DisplayList and map Picture and PictureRecorder more directly to their Skia counterparts.
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.
2015-06-24 10:21:45 -07:00
Viktor Lidholt 9b1985c237 Adds basic sprite sheet support to sprites
Adds drawImageRect to Canvas bindings

R=eseidel@chromium.org

Review URL: https://codereview.chromium.org/1204783003.
2015-06-23 16:38:28 -07:00
Eric Seidel edda0bb855 Use new Widgets in mine_digger.
I'm not sure I made it look better.  But it uses Widgets
instead of rolling its own Flex, etc.

R=ianh@google.com, cpu@chromium.org

Review URL: https://codereview.chromium.org/1201293003.
2015-06-23 15:20:44 -07:00
Collin Jackson efe36a6829 Add a confirmation dialog to stock app Settings page and style it by default
R=ianh@google.com, abarth, hixie

Review URL: https://codereview.chromium.org/1201273002.
2015-06-23 14:19:00 -07:00
Carlos Pizano 6a858a9486 Add minedigger example
A very basic minesweeper clone. Currently only tested in linux.

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

Review URL: https://codereview.chromium.org/1196213012.
2015-06-23 11:19:35 -07:00
Eric Seidel 7044a9dc75 Fix game to depend on Sky
Also updated the version range on stocks2.

https://github.com/domokit/mojo/issues/262

R=ianh@google.com

Review URL: https://codereview.chromium.org/1195933004.
2015-06-23 09:55:45 -07:00
Hixie 4ce1eff3ca Make the checkbox in settings control the radio buttons in the drawer, to demonstrate how to link state in different places in an app.
R=jackson@google.com

Review URL: https://codereview.chromium.org/1197333002.
2015-06-23 09:54:19 -07:00
Hixie ed010499b5 Prettier arrows in the stock app.
This returns us to a more stocks1-like arrow style.
Also it uses math rather than transforms to rotate the arrow, since transforms are expensive.
It also removes the save/restore calls, which are _really_ expensive.

Also some minor style fixes.

R=eseidel@chromium.org

Review URL: https://codereview.chromium.org/1203443007.
2015-06-22 17:32:25 -07:00
Collin Jackson 3616adbab3 Add Material light and dark themes to Sky widgets
R=ianh@google.com, hixie

Review URL: https://codereview.chromium.org/1204523002.
2015-06-22 17:14:27 -07:00
Hixie e352ec9fc4 Short-circuit the relayoutSubtreeRoot when the child couldn't change dimensions anyway because the parent constrained it.
The relayout subtree root concept is intended to handle the case where
a node, when it lays itself out for a second time, changes its opinion
about what dimensions it should be. In such a situation, the parent,
if it based its own opinion about what size _it_ should be on the
child's dimensions, would also need to lay itself out again. Thus,
when this scenario is possible, the child remembers the parent, and
when it would be told to relayout, we actually start the layout with
the parent.

In practice, this chains, and we end up with nodes that point to
ancestors ten or more steps up the tree such that when the inner most
child re-lays-out, the whole app ends up relaying out.

This patch tries to short-circuit this for the case where the
constraints being applied to the child are such that actually, the
child has no choice about its dimensions. In that case, the parent
can't change dimensions when the child re-lays-out.

This makes a huge difference on the stocks demo app. Without this, on
the third rendered frame, there are 72 relayoutSubtreeRoot links, the
deepest chain is 8 deep, and 9 of the chains are only 1 level deep.
With it, there are 63 relayoutSubtreeRoot links, the deepest chain is
only 4 deep, and 38 of the chains are only 1 level deep.

R=eseidel@chromium.org

Review URL: https://codereview.chromium.org/1196553004.
2015-06-22 16:51:25 -07:00
Eric Seidel 14e9b5d564 Remove home.sky, update home.dart
TBR=ianh@google.com

Review URL: https://codereview.chromium.org/1204483002.
2015-06-22 13:13:27 -07:00
Collin Jackson 6c38fc1b40 Add a new Theme widget to control color and text color of apps
R=abarth@chromium.org, abarth, hixie

Review URL: https://codereview.chromium.org/1194743003.
2015-06-22 12:10:30 -07:00
Viktor Lidholt 639e47bd7f Adds API documentation, improves the API names, and cleans up code.
R=ianh@google.com

Review URL: https://codereview.chromium.org/1201983004.
2015-06-22 10:13:23 -07:00
Hixie 5b594b7c7c Turn on wavy underlines. The waves aren't very pretty yet (they are too short somehow), I'll fix that in a subsequent CL.
I abstracted out the wavy underline code so that it doesn't duplicate the code for horizontal and vertical lines.

R=abarth@chromium.org

Review URL: https://codereview.chromium.org/1201503003.
2015-06-19 16:11:18 -07:00
Viktor Lidholt 43d97f6903 Correctly handle touches together with zPosition
Renames hitTest to isPointInside

Refactor sorting of children in nodes

Fixes zPosition in sprites and hides internal methods

Adds scaleX / scaleY properties

R=abarth@chromium.org

Review URL: https://codereview.chromium.org/1190393004.
2015-06-19 11:15:58 -07:00
Hans Muller 0dd98719dc Adds TextStyle decoration, decorationColor, decorationStyle
Currently only the decoration property is actually translated to a CSS style.

R=abarth@chromium.org

Review URL: https://codereview.chromium.org/1174213005.
2015-06-19 10:30:38 -07:00
Viktor Lidholt b06190fb7b Adds a SpriteWidget and simplifies sample game setup
R=abarth@chromium.org

Review URL: https://codereview.chromium.org/1197493002.
2015-06-19 09:14:12 -07:00
Collin Jackson 7c438ac2fd fix back button in stocks app by calling super.didMount()
TBR=abarth

Review URL: https://codereview.chromium.org/1189113004.
2015-06-18 16:03:29 -07:00
Collin Jackson dbb876b22b Make back button control drawer in stocks app
Currently you lose your scroll and drawer state when coming back from the settings pane.
I think we should solve this by having the Navigator maintain a Stack and
keeping the StockHome alive underneath it. But this is good enough for a first iteration.

R=abarth@chromium.org, abarth

Review URL: https://codereview.chromium.org/1191153002.
2015-06-18 15:36:04 -07:00
Viktor Lidholt 627aeff31a Optimizes sprite transformations for box to node
Enabling/disabling of handling multiple pointers
Adds basic touch handling

R=abarth@chromium.org

Review URL: https://codereview.chromium.org/1179413009.
2015-06-18 15:29:26 -07:00
Hans Muller 59c4078a09 StyledText is just a convenient way to specify a
tree of InlineStyle and InlineText elements.
StyledText builds an Inline that renders the tree.

For example this StyledText object:

  new StyledText(["FOO", [boldLargerStyle, [greenStyle "BAR"], "BAZ"] BORF]);

Renders the same way the following HTML would,
assuming that TextStyles boldLargerStyle and
greenStyle were defined.

<style>
div {
  display: inline;
}
</style>
<p>
  <div>
    FOO
    <div style="font-weight:bold; font-size:larger">
      <div style="color:green">
        BAR
      </div>
      BAZ
    </div>
    BORF
  </div>
</p>

R=abarth@chromium.org

Review URL: https://codereview.chromium.org/1194693002.
2015-06-18 14:35:11 -07:00
Hixie 82fc647c12 Rename editing2/ and theme2/ to editing/ and theme/.
Flesh out a README.md file for the SDK.
Make the stocks app test wait for the app to be mounted, to catch some more errors, like typos in the mount callback.

R=abarth@chromium.org

Review URL: https://codereview.chromium.org/1182053012.
2015-06-18 12:44:10 -07:00
Matt Perry 4c506fb41d Resurrect painting.sky example as painting.dart.
I use it a lot to test and demo the painting API.

R=ianh@google.com

Review URL: https://codereview.chromium.org/1188823008.
2015-06-18 14:19:57 -04:00
Matt Perry 4d66e7d0f0 Add a Paint::toString() method to describe our Paint objects.
Add a test for RenderDecoratedBox sets up the Paint object correctly.

R=abarth@chromium.org

Review URL: https://codereview.chromium.org/1185423003.
2015-06-18 13:47:28 -04:00
Ian Fischer 259ebc4a8b Delete old raw .sky examples since they are no longer valid examples.
R=ianh@google.com, abarth@chromium.org

Review URL: https://codereview.chromium.org/1182993003.
2015-06-18 10:34:38 -07:00
Adam Barth d79ef3a6c6 Fix data loading in the stocks app
We can't have two copies of |embedder.dart| or |shell.dart| because they take
ownership of some underlying Mojo handles. Instead of duplicating the code,
this CL makes the old locations just export all the symbols from the new
location. I've also done the same with fetch.dart to avoid code duplication.

Finally, I've removed image_cache.dart in the old location because the only
clients already live in the new world and ought to use the new location.

TBR=ianh@google.com

Review URL: https://codereview.chromium.org/1179923004.
2015-06-18 09:14:51 -07:00
Hixie d2d11a04a1 Cleanup of SkyBinding, and resultant yak shaving.
Some files are moved by this:
  Copy framework/node.dart into types/ - preparing for framework/'s decomissioning.
  Move app/scheduler.dart into sky/scheduler.dart - "app" doesn't really make sense.

As part of the SkyBinding cleanup, I made the hit-testing less
RenderBox-specific, by having the HitTestEntry.target member be a
HitTestTarget, which is an interface with the handleEvent() function,
which is then implemented by RenderBox. In theory, someone could now
extend hit testing from the RenderBox world into their own tree of
nodes, and take part in all the same dispatch logic automatically.

This involved moving all the hit testing type definitions into a new
sky/hittest.dart file.

Renamed SkyBinding._app to SkyBinding._instance for clarity.

Moved code around in SkyBinding so that related things are together.

Made WidgetSkyBinding use the existing SkyBinding.instance singleton
logic rather than having its own copy.

I also added some stub README.md files that describe dependencies.

R=abarth@chromium.org

Review URL: https://codereview.chromium.org/1187393002.
2015-06-17 19:54:11 -07:00
Hixie 5136d5209b Rename AppView to SkyBinding.
Move app/view.dart to rendering/sky_binding.dart since it's part of the RenderObject API, really (it knows about RenderView intimately).
The tests pass. I didn't check every last example.

R=abarth@chromium.org

Review URL: https://codereview.chromium.org/1183913006.
2015-06-17 17:07:31 -07:00
Adam Barth 8e5245c9a1 Implement ColorFilter in widgets/basic.dart
Also, trim the redundant |Mode| suffix from the TransferMode names.

R=ianh@google.com

Review URL: https://codereview.chromium.org/1188003006.
2015-06-17 17:06:27 -07:00
Adam Barth 63bfa891c6 Use semantic names for callbacks instead of onGestureTap
Buttons and menu items use onPressed. Also, don't pass along the sky.Event
because that's a lower-level concept.

I've also reordered parameter lists to put the |child| argument last in a
number of places.

Also, fixed a bug where FloatingActionButton was missing syncFields.

R=ianh@google.com

Review URL: https://codereview.chromium.org/1188993003.
2015-06-17 16:04:13 -07:00
Hans Muller 5c961fffb5 Add TextStyle fontFamily:, extend support for fontWeight:
Defined constants for all 9 CSS font-weight values
with conventional names from the "Common weight
name mapping" section of
https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight.

The FontWeight enum now just enumerates the actual
CSS weight values.

I've moved the TextStyle class into its own file.

R=ianh@google.com

Review URL: https://codereview.chromium.org/1173323004.
2015-06-17 15:48:21 -07:00
Hixie 6bec75ad2b Add a test for the sector app.
This also moves the test for stocks into a new tests/examples/
directory, where we can put tests that test the examples.

TBR=abarth

Review URL: https://codereview.chromium.org/1182223004.
2015-06-17 15:44:20 -07:00
Hixie 1133260198 Remove keys from the examples.
TBR=abarth

Review URL: https://codereview.chromium.org/1194473004.
2015-06-17 15:23:41 -07:00
Hixie 95d090bc5a Make the popup menu work again.
This removes the requirement that things with the same type things have unique keys.
Now, anything without a key is assumed to be interchangeable.

R=abarth@chromium.org

Review URL: https://codereview.chromium.org/1178723010.
2015-06-17 15:10:42 -07:00
Collin Jackson 29c1668582 fix analyzer warnings in stocks app
R=ianh@google.com
TBR=hixie

Review URL: https://codereview.chromium.org/1185283004.
2015-06-17 14:19:52 -07:00
Adam Barth 99e115d06c Settings menu item in stock2 doesn't work
The underlying problem is that we lacked a RenderObjectWrapper for the
RenderView, which meant we couldn't handle changing the RenderObject that was
the root of the RenderView. This CL introduces a RenderViewWrapper and uses it
in a new AppContainer widget root. This change allows us to make App a
non-magical Component that is inserted into the AppContainer in the newly
introduced runApp function.

R=ianh@google.com

Review URL: https://codereview.chromium.org/1184823006.
2015-06-17 12:36:56 -07:00
Collin Jackson 2460ce37b0 Refactor Navigator to put state in separate class, initial back button plumbing
R=abarth@chromium.org, abarth

Review URL: https://codereview.chromium.org/1195493002.
2015-06-17 12:21:08 -07:00
Collin Jackson 40e7ecbf71 Enable render view override for stocks app to enable testing
This fixes the test

TBR=abarth

Review URL: https://codereview.chromium.org/1192533002.
2015-06-16 23:37:29 -07:00
Collin Jackson a3a80969a5 Add settings page to Sky’s stocks example app
R=abarth@chromium.org, abarth

Review URL: https://codereview.chromium.org/1191863002.
2015-06-16 17:59:12 -07:00
Hans Muller 9cb9e2ed8d Styling for text fragments
This is a completion of Eric's WIP patch:
https://codereview.chromium.org/1179663005/

Low level support for creating a paragraph that contains
runs of styled text. The styles may be nested.

The Paragraph and RenderParagraph classes have been
replaced by Inline and RenderInline. Styled text is defined
with a tree of InlineText and InlineStyle objects.

R=abarth@chromium.org

Review URL: https://codereview.chromium.org/1177833012.
2015-06-16 16:48:08 -07:00
Collin Jackson cc76b90450 Add back/forward history to navigation
R=abarth@chromium.org, abarth, hixie

Review URL: https://codereview.chromium.org/1181773006.
2015-06-16 16:14:55 -07:00
Hixie db90d5f046 Rename UINode to Widget.
Also, move a widget example from examples/raw/ to examples/widgets/

R=abarth@chromium.org

Review URL: https://codereview.chromium.org/1190793002.
2015-06-16 11:09:16 -07:00