209 Commits

Author SHA1 Message Date
Ojan Vafai
fc1dff4288 Expose minContentWidth/maxContentWidth and a callback for computing them.
This exposes the last hooks needed to implement flexbox layout. For now,
I didn't worry too much about the exact API we're exposing since this will
all change with the upcoming redesign (e.g. https://codereview.chromium.org/1093633002).

minContentWidth == the width if the element were to wrap at every wrapping point (not including border/padding)

maxContentWidth == the width if the element were to only wrap at hard wrapping points (e.g. \n inside a whitespace: pre).

R=eseidel@chromium.org

Review URL: https://codereview.chromium.org/1101793003
2015-04-24 13:14:41 -07:00
Zachary Anderson
ec37fed8f9 Dart: Put generated .mojom.dart files under mojoms pacakge.
BUG=
R=eseidel@chromium.org

Review URL: https://codereview.chromium.org/1092793005
2015-04-23 15:23:50 -07:00
Ryan Macnak
a6ffc52bea Ensure isolates have a root library so createMirrorSystem() and spawnUri() are happy.
https://github.com/domokit/mojo/issues/98

R=eseidel@chromium.org

Review URL: https://codereview.chromium.org/1088263004
2015-04-16 15:49:11 -07:00
Zachary Anderson
11315b5314 Uses mojom module names as Dart's package: import URI
At present there is a special case in Dart bindings generation which
makes the Mojo SDK and things under mojo/services portable. However,
we must not require things under mojo/services to be next to the
Mojo SDK under mojo/public/... in client repos. Further, other
collections of mojoms should also be portable.

To fix this, instead of using the path in the host repo as the
canonical package: import URI for the generated Dart code, this CL
uses the mojom module name.

BUG=https://github.com/domokit/mojo/issues/73
R=blundell@chromium.org, johnmccutchan@google.com, tonyg@chromium.org

Review URL: https://codereview.chromium.org/1071693003
2015-04-16 07:50:47 -07:00
Ojan Vafai
c8d918efa9 Make changing your layout manager work.
If your layout manager changes, then you need to setNeedsLayout,
otherwise the next frame doesn't even get scheduled. We already
correctly handle going from not having layout to having one or
vice versa by doing the more drastic reattaching since that
requires changing your actual render class.

R=eseidel@chromium.org

Review URL: https://codereview.chromium.org/1060013005
2015-04-15 11:08:32 -07:00
Ojan Vafai
a1d93b2847 Fix getChildElements.
It was returing all element descendants instead of all element
immediate children.

R=eseidel@chromium.org

Review URL: https://codereview.chromium.org/1048333006
2015-04-14 16:40:58 -07:00
Ojan Vafai
7c974ed8cd Fix crash when removing layout managers.
We weren't correctly marking an element as needing style
recalc if it was *losing* it's layout manager. We were
only doing so when it was gaining a layout manager for
the first time.

Review URL: https://codereview.chromium.org/1082273004
2015-04-14 13:57:07 -07:00
Hixie
f46c5d49d4 Fix the test broken by https://codereview.chromium.org/1078973002 by
making sure the basic.sky test exposes the right (new) DOM now that
text is always wrapped in a display:paragraph div.

BUG=85
R=eseidel@chromium.org

Review URL: https://codereview.chromium.org/1083443002
2015-04-10 15:04:54 -07:00
Tony Gentilcore
940ac886a2 Disable sky/tests/framework/basic.sky due to issue #85
TBR=ianh@google.com

Review URL: https://codereview.chromium.org/1073173002
2015-04-10 07:26:36 -07:00
Ojan Vafai
b9f182a6bd Stop rendering text inside flex boxes.
Text can only only inside paragraphs and inlines. This patch makes it
so we stop putting such text nodes in the render tree at all if their
parent is not a paragraph or an inline.

This is the final step in making it so that we don't create anonymous
renderers, which fixes a crash in the new custom layout code.

R=eseidel@chromium.org

Review URL: https://codereview.chromium.org/1077473002
2015-04-09 11:40:03 -07:00
Eric Seidel
5a8da4db70 Update test expectations
This test was failing because I changed the url.
The new url is correct.  Sorry for not running the tests
before committing.

https://codereview.chromium.org/1065073002/
https://github.com/domokit/mojo/issues/81
TBR=ojan@chromium.org

Review URL: https://codereview.chromium.org/1075603002
2015-04-08 12:25:07 -07:00
Tony Gentilcore
05c7de2f4a Disable sky/tests/framework/basic.sky due to issue #81
TBR=eseidel@chromium.org

Review URL: https://codereview.chromium.org/1063233003
2015-04-07 17:53:11 -07:00
Ojan Vafai
b9df2edb7d Delete RenderBlockFlow.
We only ever create RenderParagraphs now. The only non-trivial change here
is making RenderView a RenderFlexibleBox. This required changing custom.sky.
That test was written in a fragile way that behaved differently if we
did multiple layouts. Instead, having it be less racy and only change
values during the test itself.

This also throws a wrench in moving all the layout code to dart
because we can't set the layout manager on the RenderView. Maybe
we need to explicitly let you do so.

R=eseidel@chromium.org

Review URL: https://codereview.chromium.org/1068683002
2015-04-07 16:59:36 -07:00
Eric Seidel
cb473bbf48 Attempt to de-flake tests/framework/basic.sky
new Image() is likely to cause the image to try
and load as soon as the underlying Image element
is inserted into the real DOM.

This at least points it at a real image so that
it won't dump 404 response text into the test
output if the image load kicks off before the test
completes.

Example:
http://build.chromium.org/p/client.mojo/builders/Mojo%20Linux%20NaCl/builds/1130/steps/Sky%20tests/logs/stdio

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

Review URL: https://codereview.chromium.org/1065073002
2015-04-07 15:53:19 -07:00
Ojan Vafai
88f38ce0e6 Remove all uses of display:block and display:inline-block.
-Make display:flex, flex-direction: column, flex-shrink: 1 the default.
-Simplify StyleAdjuster::adjustStyleForAlignment to remove special cases we
won't need as we make flex the default and remove absolute positioning.
-Fix a bug this exposed in column flexboxes where we'd apply the wrong edge
of border/padding/margin.
-For now leave the default of align-items:stretch. The main change here is
that iframe/img will do width:auto the same as blocks (i.e. the width of
the parent). I think this is a good change, but we'll have to see how it feels
in practice.

R=eseidel@chromium.org

Review URL: https://codereview.chromium.org/1061163002
2015-04-06 16:44:12 -07:00
Ojan Vafai
6bfa21b190 Make custom layout actually work.
-Temporarily add setting override width as well so that we correctly bypass in RenderBox::computeLogicalWidth.
-Add setNeedsLayout so that the author code can force layouts (e.g. when the container's width changes).
-Have setLayoutManager force a reattach of the element if it's renderer wasn't a custom layout one before.
-Remove the laying out of children from RenderCustomLayout::layout. This is the job of the author code.
-Add a test case.

R=eseidel@chromium.org

Review URL: https://codereview.chromium.org/1055263002
2015-04-06 12:53:35 -07:00
Hixie
98af3d0dee Issue 1043283003 changed the framework class names but I missed the test.
R=ojan@chromium.org

Review URL: https://codereview.chromium.org/1056663002
2015-04-01 13:49:05 -07:00
Adam Barth
e8907cd059 Remove flights example
Flights is not longer a good example of something you can build wity Sky.
Restore the flights-app-pixel test and move the assets needed for the test into
the tests directory.

R=ojan@chromium.org

Review URL: https://codereview.chromium.org/1034953003
2015-03-26 13:28:23 -07:00
Adam Barth
0dd797975c Remove <canvas>
Folks should use custom paint instead (see sky/engine/core/painting for a
sketch).

R=ojan@chromium.org

Review URL: https://codereview.chromium.org/1001913003
2015-03-25 16:15:05 -07:00
Rafael Weinstein
36ad366ba0 [Effen] Add a basic layout test
BUG=
R=abarth@chromium.org

Review URL: https://codereview.chromium.org/1038583003
2015-03-25 10:53:51 -07:00
Zachary Anderson
d83427c165 Dart: Removes all but native calls and the handle watcher from the snapshot.
The bindings, core, and application libraries are now referred to as, e.g.:

package:mojo/public/dart/core.dart

Since the handle watcher remains in the snapshot, it no
longer refers to types defined in core.dart. References to types defined
in core.dart are also removed from mojo_natives.cc.

In Dart packaged apps, the SDK is zipped up under mojo/public/dart.

For embedder tests, the SDK is copied into the generated source output directory.

A base_dir parameter is added to the 'dart_package' and 'mojom' GN macros so that
consumers of the Mojo SDK can all import using the same URIs regardless of where
the SDK lives in their source trees.

BUG=
R=erg@chromium.org

Review URL: https://codereview.chromium.org/1027603002
2015-03-23 11:04:03 -07:00
Rafael Weinstein
3b42fcfddd Move dom-serializer.sky to dom_serializer.dart (and clean up some analyizer errors)
TBR=abarth

Review URL: https://codereview.chromium.org/1025013003
2015-03-20 15:42:35 -07:00
Rafael Weinstein
3c70e47312 Removing Sky JS Framework tests
BUG=
R=eseidel@chromium.org

Review URL: https://codereview.chromium.org/1023213003
2015-03-20 14:04:34 -07:00
Ojan Vafai
5968e0308a Fix hit-testing in the stocks apps when scrolled.
We were not passing the transformed HitTestLocation when we recursed
into child layers, which meant that we wouldn't take transforms
correctly into account when hit testing.

R=abarth@chromium.org

Review URL: https://codereview.chromium.org/1019723002
2015-03-18 18:55:54 -07:00
Tony Gentilcore
6f32e8387f Disable flaky custom-elements/registration.sky test.
BUG=#62
TBR=eseidel@chromium.org

Review URL: https://codereview.chromium.org/1006353002
2015-03-16 07:06:52 -07:00
Eric Seidel
8ad5f14611 Currently we use package: to mean "/gen", which is not at all how
Dart actually expects package: to work.  This CL makes package:foo
map to /packages/foo, similar to how Dartium or bin/dart would expect.

This also means overlaying the /gen directory over the actual package
outputs (as consumers of an SDK would expect) as well as adding
an additional /lib indirection for the actual package source as
the Dart pub tool will expect.

This is far from perfect, but it unlocks us actually producing a
sky SDK.

I expect there may be some fallout from this change as I'm sure I
missed some package: uses.  We also don't have a general solution
for all /foo/bar/baz includes which randomly included parts
of mojo's source directory.  Those will need to be updated to use
a package: and deploy_sdk.py taught how to build a package for them.

R=abarth@chromium.org

Review URL: https://codereview.chromium.org/990493002
2015-03-13 16:58:53 -07:00
Nick Bray
f81a60de48 Update from https://crrev.com/320343
This required some manual patching to ui/event and ui/gfx.

Sky tests were suppressed.
https://github.com/domokit/mojo/issues/64

BUG=401761
R=jamesr@chromium.org

Review URL: https://codereview.chromium.org/1001833005
2015-03-12 16:29:36 -07:00
Zachary Anderson
3cc4de9295 Dart: Rename mojo:X -> dart:mojo.X
This is to better support integration with Dart SDK tools.

BUG=
R=erg@chromium.org

Review URL: https://codereview.chromium.org/998933005
2015-03-11 16:22:21 -07:00
Eric Seidel
8be96a9e8d Move sky-*.sky into framework/elements
We're not actively developing these at the moment.

I could also just delete them, not sure if we're ready for that yet.

TBR=abarth@chromium.org

Review URL: https://codereview.chromium.org/999873002
2015-03-11 13:50:09 -07:00
Ojan Vafai
a0c612c89b Fix hit-testing of elements with the same z-index.
hit-testing needs to walk in backwards order from paint.
The previous attempt at reverse sorting by z-index didn't
reverse things with the same z-index. Instead, forward
sort the same way as we do with paint and then reverse
the whole vector.

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

Review URL: https://codereview.chromium.org/986793002
2015-03-06 15:53:02 -08:00
Eric Seidel
3a73d55159 Fix test_sky after 14270f1151aacfa650985c4333572c356d15c024
In order to make the Dart Analyzer stop complaining about
Event not having a default constructor (and all Event subclasses
not having an explicit constructor, thus having an implicit one
which calls the default Event() constructor), I made all of
Event()'s parameters named and thus optional, but did not update
our one sky test which used Event().

The real fix is probably to make the autogenerator smart enough
to have FooEvent() call super("foo"), but I was lazy.

This at least fixes the tests (and greens the waterfall) for now.

TBR=abarth@chromium.org
BUG=

Review URL: https://codereview.chromium.org/988573002
2015-03-05 15:45:06 -08:00
Adam Barth
4df0891248 Organize sky/framework a bit
- Removed out-of-date README.md
- Moved fling-curve into the animation directory because it's part of the
  animation behavior of the system.
- Moved view-configuration into the theme directory because it's a collection
  of constants similar in flavor to the colors and the shadows. Eventually
  we'll want to make the theme configurable and have these all together will
  hopefully make that easier.
- Moved dom-serializer into tests/resources because it is used only by tests.

R=eseidel@chromium.org

Review URL: https://codereview.chromium.org/980423002
2015-03-05 09:59:50 -08:00
Ojan Vafai
2fa3e52b6d Make removing a transform not crash.
This broke with https://codereview.chromium.org/965013003.
Before that patch, updateTransform was only called on the
RenderLayer itself. Now it's called on the RenderBox,
so we need to null check the RenderLayer.

R=abarth@chromium.org

Review URL: https://codereview.chromium.org/969893002
2015-03-02 14:37:12 -08:00
Ojan Vafai
ece11cc9ed Remove unused foregroundRect argument to RenderLayerClipper::calculateRects.
The only thing that uses it is RenderTreeAsText.

R=abarth@chromium.org

Review URL: https://codereview.chromium.org/964023002
2015-03-02 12:10:05 -08:00
Zachary Anderson
7da01c7c5e Dart: Removes name conflicts from generated bindings.
This change causes the generated abstract class having the same name as the interface to contain only the interface's method declarations. The generated Proxy class then implements the base class. In addition to implementing the interface methods, the generated Proxy class has one private field _proxyImpl, which is a MojoEventStreamListener and manages sending messages and receiving responses. Operations on the ProxyImpl (close, bind, etc.) are exposed through generated utility functions.

The generated Stub is largely as before with the difference that a class providing a service will implement the mojo interface and *have* a Stub rather than be a Stub. Where appropriate, this change also calls listen() immediately where a Stub is constructed.

BUG=
R=hansmuller@google.com, sky@chromium.org

Review URL: https://codereview.chromium.org/959993002
2015-02-26 15:16:14 -08:00
Zachary Anderson
b3b197fcf8 Dart: Renames dart:mojo_blah -> mojo:blah
This improves consistency with the convention that the dart: scheme is
only for things from the Dart standard library.

BUG=
R=erg@chromium.org

Review URL: https://codereview.chromium.org/951783004
2015-02-25 14:29:41 -08:00
Ojan Vafai
5a5460c54e Fix clipping of content outside the bounds of the window.
https://codereview.chromium.org/899753003 incorrectly passed down the
RenderView's clipping rect all the down through transforms instead of
using the one from the LayerPaintingInfo, which is adjusted for transforms
as you recurse down the tree.

TBR=abarth@chromium.org

Review URL: https://codereview.chromium.org/957643002
2015-02-24 20:40:10 -08:00
Eric Seidel
ab273a8433 Make splash animations abort on scroll.
I also fixed the transform hack in material-element to clean
up after itself.

I also discovered that our namedSetter implementation did not
handle null (it crashed) while doing this.  I fixed that
and tested my fix.

This runs great on a Nexus 5, but poorly on an Nexus 10.

R=abarth@chromium.org
BUG=

Review URL: https://codereview.chromium.org/956753002
2015-02-24 17:20:18 -08:00
Ojan Vafai
c885cea0f7 Cleanup transform-related methods in RenderLayer.
-Get rid of paintsWithTransform.
-Remove currentTransform. It was only ever called with
IncludeTransformOrigin and on non-null transforms.
-Remove renderableTransform. It was only called on
non-null transforms.
-Remove a layer()->parent() branch. The ASSERT had been
added in a previous patch, but the branch wasn't removed.
-Inline makeMatrixRenderable. It was only called in one
place.
-Add a test to make sure that transform origin is corrrectly
excluded from the transform computedStyle.

R=abarth@chromium.org

Review URL: https://codereview.chromium.org/958463002
2015-02-24 14:31:48 -08:00
Scott Violet
15d7cd9b47 Gets HTMLIFrameElement::embedViewManagerClient to work with dart
R=abarth@chromium.org

Review URL: https://codereview.chromium.org/948943002
2015-02-23 15:29:22 -08:00
Adam Barth
fe31fd0e4c Port sky-scrollable to Dart
This CL ports sky-scrollable to the new sky-element.

R=esprehn@chromium.org

Review URL: https://codereview.chromium.org/950603002
2015-02-21 09:56:22 -08:00
Adam Barth
16db84fde1 Add a basic sky-element custom element
After this CL, you can use <sky-element> to describe custom elements. The
current iteration is very basic and is hardcoded to "example", but its a start.

This CL renames the |init| function to |_init| to prevent importers from
calling it directly. Also, we now pass the <script> element to |_init| to give
some context.

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

Review URL: https://codereview.chromium.org/950493003
2015-02-20 21:45:36 -08:00
Ojan Vafai
a267c39c01 Remove the concept of staticly positioned absolutes.
On the web, if you set position:absolute, but not
top/right/bottom/left, then the absolute goes where it
would have gone if it wasn't positioned. The use-cases for
this are slim and it introduces a lot of complexity to the
engine.

Also changes behavior in the presence of direction:rtl.
On the web, direction:rtl and top/left:auto would
sometimes set right:0. Instead we always position at
0,0 if the opposing values are auto.

This removes the code for this positioning and allows
simplifying a bunch of dirty bit handling code since
we don't need to setNeedsLayout if lines move around
or wrap differently.

The test cases did change their output, but the new
positioning all looks correct to me.

Review URL: https://codereview.chromium.org/944073006
2015-02-20 20:26:59 -08:00
Ojan Vafai
0c37a8a322 Fix painting of position:absolute inside display: paragraphs.
We only need to walk the immediate children of the paragraph.
The other inline children of the paragraph will get paint called
on them and they will then appropriately add the self painting
layers to the array inside their paint calls.

R=abarth@chromium.org

Review URL: https://codereview.chromium.org/945223002
2015-02-20 20:24:57 -08:00
Ojan Vafai
ee7448297c Add render tree dump and pixel tests for statically placed position:absolute.
This exposes a bug that we position and size position:absolute
correctly inside paragraphs, but we fail to paint them.

R=abarth@chromium.org

Review URL: https://codereview.chromium.org/943113003
2015-02-20 18:20:23 -08:00
Adam Barth
7d00bd5e06 Implement Custom Elements
This CL implements custom elements. The design is as follows:

1) Authors subclass Element and call registerElement.
2) When we create C++ elements for custom elements, we call the author's
   constructor synchronously.
3) The attach/detach/attributeChanged callbacks are called either:
   a) when exiting the current custom element callback scoped (e.g., before
      returning from appendChild), or
   b) when draining the microtask queue.

The implementation in this CL is a bit fragile because we don't detect name
registration conflicts and we let you create custom elements with the same name
as built-in elements. Also, not every part of the engine is prepared to execute
script synchronously below createElement. We'll need to iron out these issues
over time, but this CL is a start.

R=ojan@chromium.org

Review URL: https://codereview.chromium.org/943013002
2015-02-20 16:15:42 -08:00
Hans Muller
3663c45619 Added Sky Mojo embedder singleton, restored network test
Currently the embedder is just an encapsulation of the Mojo shell. Exposing an ApplicationConnection that encapsulates the ViewManager Embed SPs is next.

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

Review URL: https://codereview.chromium.org/948463003
2015-02-20 15:07:29 -08:00
Ojan Vafai
8ba8641a1d Remove LayoutState.
The only bit that was still used was the
containingBlockLogicalWidthChanged check in
RenderBlock::widthAvailableToChildrenHasChanged.
a4f1e657ff
is the patch that added that code. I added a
test to confirm we still pass the test case
that code was added for.

R=eseidel@chromium.org

Review URL: https://codereview.chromium.org/945003002
2015-02-20 14:02:42 -08:00
Eric Seidel
c78cea7e54 Allow multiple dart <script> tags in .sky files
This does several things:
1.  Teaches sky about asynchronous script execution. Previously once all imports
were loaded and the script text was available, we executed a script and assumed
it completed synchronously.  We left the parser loop to do so, but that was fine
as the next chunk from the background thread would resume the parser.  In this
change scripts now load and execute separately.  The "load" step may trigger
further dart import loads which may cause the execution to happen asynchronously
which required teaching both the DartController and the HTMLScriptRunner to
take callbacks to allow HTMLDocumentParser to know to continue parsing after
the Dart script has resolved its imports and executed.

This required re-working some of how the parser executes scripts and I
re-purposed isWaitingForScripts to include "is the parser blocked" where
as before it was limited only to "does the treebuilder have a script", even
though the imports system may have had pending scripts as well.

I made HTMLScriptRunner live only as long as the script it was executing
since it only contained per-script state at this point.

2.  Fixed an error reporting bug whereby we would not show errors when "init"
failed to execute, only "main".  This required using the dart_mirrors_api.h
which required adding an include path to the core build. :(

3.  Made it possible for a single sky file to contain multiple dart <script>
tags.  Each <script> is a separate library and executes as
soon as </script> is seen.  main or init is called for each.  This required
mangling "urls" for these script blocks since Dart unique's libraries by urls.
Before this change it may have been possible to do <import 'foo.sky'> and then
<script>import 'foo.sky'</script> and have it work!?

R=abarth@chromium.org
BUG=

Review URL: https://codereview.chromium.org/938623005
2015-02-20 11:08:28 -08:00
Adam Barth
0a6bdfed49 Make it possible to create reasonable subclasses of Event
After this CL, authors can create custom subclasses of Event that actually work
in a reasonable way, including being able to dispatch.

R=hansmuller@google.com, hansmuller@chromium.org

Review URL: https://codereview.chromium.org/938003004
2015-02-19 23:19:06 -08:00