17 Commits

Author SHA1 Message Date
Rafael Weinstein
8879e082ef Refactor Effen to make explicit the distinction between render & non-render nodes.
All Effen which can directly create a sky.Node are now derived from RenderNode. In contrast, Component now derives from the (now) base Node class which simply represents a position in the Effen hierarchy.

A fair amount of clean-up & refactoring went into this change, simplifying & unifying the "sync" logic between Element & Component as well as making the Component.didMount/didUnmount signals async WRT component building.

BUG=
R=abarth@chromium.org

Review URL: https://codereview.chromium.org/1009543008
2015-03-14 17:27:27 -07:00
Adam Barth
10d63a0744 Begin work on the PopupMenu entrance animation
This CL also refactors how animations work, particularly for the Drawer. I've
renamed DrawerAnimation to DrawerController and switched it from being an
Animation to having an Animation. I've also renamed Animation to AnimatedValue
to capture the idea that the class actually presents the value being animated.
Finally, I've factored AnimatedValueListener out of Drawer so that it can be
used by PopupMenuItem as well.

Finally, I've added a scheduleBuild convienence function to Component instead
of having to call setState(() {}), which has come up a couple times.

R=eseidel@chromium.org

Review URL: https://codereview.chromium.org/1016093002
2015-03-18 11:31:07 -07:00
Rafael Weinstein
8a9a12b10f Sky/Effen refactor: all nodes receive _mount/_unmount signal.
This patch refactors Effen in advance of allowing a final transform step from Effen nodes to sky nodes. The central changes here are:

1) Effen nodes get a _parentNode pointer
2) The lifetime of effen nodes is
  ->_sync (0 to N times)
     -> the first _sync() causes a _mount()
  ->_unmount
3) Node should expect to sync even when they are first inserted (in which case they sync against a prototypical empty node which their class must provide).
4) Subclasses now override _syncNode() no longer takes host & insertBefore (_mount does). In the one case that a node must be replaced without being unmounted (inside _syncInternal), the old node is inspected for it's sky position.

TBR=abarth

Review URL: https://codereview.chromium.org/996103008
2015-03-13 00:29:41 -07:00
Rafael Weinstein
0765e85bf5 Allow Effen Styles to be extendable
R=abarth@chromium.org

Review URL: https://codereview.chromium.org/1006053002
2015-03-13 14:08:24 -07:00
Adam Barth
24a53815a0 Update Button to be made of Material
To accomplish this, I made the following changes:

1) Material is now in charge of drawing the material shadows.
2) In order to mix in the style for the shadow, Element now takes a list of
   Styles instead of a single style.
3) Update all clients of Element#style to understand that we now have a list.
4) Update components that drawer shadows to have Material do that work instead.
   a) One exception: FloatingActionButton draws its own shadow because of its
      crazy clip requirements. We'll probably want to find a better way for
      FloatingActionButton to clip in the future.

I've also added a widgets-fn example to demo the fn material widgets.

This CL introduces a bug into Drawer whereby you can get ink splashes
everywhere in the drawer. In the future, we'll need to separate out the
different material aspects to get non-splashable materials.

R=rafaelw@chromium.org

Review URL: https://codereview.chromium.org/1003553002
2015-03-11 14:20:11 -07:00
Adam Barth
8c4edc7374 Re-work MaterialComponent
Instead of MaterialComponent being a base class, components that want material
behavior simply create a MaterialComponent during their render function. This
approach gives the component more flexibility as to its structure and gives
MaterialComponent more flexibility has to how the components it generates are
related to the existing children.

Also, I've improved some of the event delegation code. There's no reason to
attach event handlers to the root component you emit during |render| because
the framework already delegates events from your root component to you.

R=rafaelw@chromium.org

Review URL: https://codereview.chromium.org/983903003
2015-03-11 10:17:54 -07:00
Rafael Weinstein
e109f30916 Change the name of Component.render to Component.build in Effen.
"Render" is misleading. "Build" may not be the best word either, it's closer to what's actually happening.

R=ojan@chromium.org
TBR=abarth
BUG=

Review URL: https://codereview.chromium.org/992033002
2015-03-09 13:30:13 -07:00
Rafael Weinstein
def96f0fd4 Ensure that sky Nodes are in the document when didMount() is fired. Refactor FixedHeightScrollable to inspect heights rather than having the passed in
BUG=
R=abarth@chromium.org

Review URL: https://codereview.chromium.org/994553003
2015-03-09 12:39:10 -07:00
Rafael Weinstein
a77b1efd52 Prevent already scheduled-for-render fn components which become removed from rendering
This can occur, for instance, if a child component runs before a parent component within a single animation frame, and the child does setState() while the parent removes it. The child will already have been entered into the rendering queue.

TBR=eseidel
BUG=

Review URL: https://codereview.chromium.org/983793004
2015-03-06 14:16:16 -08:00
Rafael Weinstein
21a3cbab83 Correctly allow components to return different top-level nodes during different renderings
TBR=abarth
BUG=

Review URL: https://codereview.chromium.org/984983004
2015-03-06 13:32:07 -08:00
Rafael Weinstein
c3823b9204 Add back didMount
Sorry I keep changing my mind about this. My thinking had been since this was computable by just setting a bit and checking it in render(), that it was silly, but I keep finding uses for it and it's annoying to re-implement in each component.

TBR=eseidel
BUG=

Review URL: https://codereview.chromium.org/986753002
2015-03-06 12:50:42 -08:00
Rafael Weinstein
2c788c3e6d Effen: willUmount->didUnmount, allow setState after didUnmount
This patch changes the timing of the unmount call until after the component is removed (and marked as such) and allows setState to be called after this point. If this happens, setState will still invoke the closer to do any neccesary cleanup, but doesn't schedule the component for render

R=eseidel@chromium.org, eseidel
BUG=

Review URL: https://codereview.chromium.org/985853002
2015-03-06 12:23:53 -08:00
Eric Seidel
e2a00dd49d Add an assert that we don't schedule a render during render
In production I added an early return.  I don't bother to log
in production since no one is looking at the log anyway.

Unfortunately this currently only fires when using a debug build
we should fix our Release build to have a checked-mode option
or consider hacks like having all localhost urls enable checked
mode, etc.

R=ianh@google.com, rafaelw@chromium.org
BUG=

Review URL: https://codereview.chromium.org/983973005
2015-03-06 10:42:49 -08:00
Eric Seidel
bbeb05afb7 Make stocksapp.dart almost pass the dart analyzer.
To test:
sky/tools/shelldb analyze sky/examples/stocks-fn/stocksapp.dart

It prints 600+ warnings about the "native" keyword, and after
this change only a couple warnings about missing library names
which I don't fully understand.

R=abarth@chromium.org

Review URL: https://codereview.chromium.org/987613002
2015-03-05 16:52:14 -08:00
Hixie
88df817d43 fix typo in _syncEvent; make it possible for a component to entirely change the class of its rendering's component
R=abarth@chromium.org

Review URL: https://codereview.chromium.org/986463003
2015-03-05 16:06:33 -08:00
Adam Barth
1f77a79a2c fn.dart shouldn't spam the log
This CL introduces a flag to control whether fn.dart prints the render duration
to the console. By default, the flag is off to avoid log spam.

Also, improve the way we intialize _isInCheckedMode to make use of the fact
that Dart intializes final fields lazily.

R=eseidel@chromium.org

Review URL: https://codereview.chromium.org/982073002
2015-03-05 11:38:17 -08:00
Adam Barth
e3812af9c0 Move fn.dart into /sky/framework
It's awkward to work on fn.dart in the examples directory so this CL moves it
to /sky/framework. Also, I've merged the whole library into one file instead of
using the |part| mechanism. The whole thing isn't that big.

R=eseidel@chromium.org

Review URL: https://codereview.chromium.org/987463002
2015-03-05 10:53:01 -08:00