This change ensures that we only store the results of a hit
test on the initial pointer down event. Moreover, we perform
new hit tests each time a hovering pointer moves. This is
important to ensure correct behavior of input devices which can
hover, such as mice.
Previously the first hover movement after releasing a mouse
button would cause a new pointer state to be recorded along with
hit test results for wherever the pointer happened to be which
caused the following pointer down event to be delivered to the
wrong place.
Fixes issue #1189.
- Remove the unique objects used as slots since we decided 'null' was
fine after all
- Rename 'slot' to 'newSlot' when it's used as an argument to change the
_slot field, to clarify which variable has the newer value
- Remove the RenderObject registry since we'll do listeners a different
way. This also removes handleEvent for the same reason.
- Remove the TODOs for mount/unmount becoming didMount/didUnmount since
the methods do in fact do the mounting/unmounting.
In the old world, we had two ways to bind a Widget tree to a
RenderObject node, one way for RenderView and one mostly untested way
for other cases (it's only tested by the spinning_mixed.dart demo). For
fn3, I made these the same code path.
This patch also introduces GlobalKey, though the GlobalKey logic isn't
hooked in yet.
This is Hello World in the new world:
```dart
import 'package:sky/src/fn3.dart';
void main() {
runApp(new Text('Hello World!'));
}
```
Currently, fling scrolls animate far too long after the display has effectively stopped moving. Use the ScrollSimulation's tolerance property to stop the scrolling roughly when the display stops changing.
- I extracted the BuildScheduler into a separate binding.dart file.
- Various changes to expose private members that are needed by
binding.dart.
- Registering the render objects for event dispatch.
- Convert the tests to use the new binding mechanism.
This doesn't yet have a RenderView or event handling.
Since our build function depends on scrollBehavior.isScrollable, any
time we update scrollBehavior we are implicitly updating our state. As
such, we must do so during a setState() call, or else we won't rebuild
and might not bother to listen to the scroll gestures.
This probably broke when we made Block not listen to gestures if it
wasn't overflowing.
- move _uniqueChild earlier since a comment now mentions it earlier.
- reorder methods in Element to more closely reflect call order.
- change mount to be the place that sets the parent pointer, for consistency.
- make the lifecycleState a purely debug-time thing for consistency.
- make BuildableElement.unmount set dirty to false so that we won't
build unmounted objects.
- rename "updated" to "newWidget" for clarity.
- change how we unmount things so that the slot is reset up to a
RenderObjectElement, but not further, and don't reset the depth.
- adds dartdocs
- replaces config setter with didUpdateConfig() so that you can't replace
the config outside of the system
- renames didUnmount() with destroy().
- rename Component to StatelessComponent, ComponentConfiguration to
StatefulComponent
- move debug dump to end of file
- renamed _holder to _element
Previously EditableText would render a text widget with no cursor if the text
value was empty.
Also adjust the height of the cursor widget to reflect the style's line
height, and update the cursor painting to match.
Previously --stage-two would error out because the LICENSE was git ignored.
This patch includes the LICENSE file in the repo to avoid the error. Also,
refactor the big_red_button.py to be clearer about what's shared between stage
one and stage two of the release process.
This patch contains a prototype of a new widget framework. In this framework,
Components can be reused in the tree as many times as the author desires. Also,
StatefulComponent is split into two pieces, a ComponentConfiguration and a
ComponentState. The ComponentConfiguration is created by the author and can be
reused as many times as desired. When mounted into the tree, the
ComponentConfiguration creates a ComponentState to hold the state for the
component. The state remains in the tree and cannot be reused.
Instead of having to manage the popup menu from your app's build
function, you now just call showPopupMenu() with the menu's position and
it takes care of everything for you.
This solves the problem that the popup menu was trying to mutate the
state of the navigator from within its own initState() function.
Also, remove the "route" argument to RouteBase.build() since it equals
"this" by definition...
Also, remove ModalOverlay, and instead put that logic in the navigator.