[ermine] Basic fullscreen support
Change-Id: I2829e2e7d1d379ad4e811339bb80c003c2fb650a
diff --git a/shell/ermine/lib/src/models/app_model.dart b/shell/ermine/lib/src/models/app_model.dart
index dccba99..78c659f 100644
--- a/shell/ermine/lib/src/models/app_model.dart
+++ b/shell/ermine/lib/src/models/app_model.dart
@@ -111,6 +111,7 @@
KeyChordListener(
onMeta: onMeta,
+ onFullscreen: storyManager.toggleFullscreen,
onLogout: onLogout,
onCancel: onCancel,
).listen(_presentation);
diff --git a/shell/ermine/lib/src/models/story_manager.dart b/shell/ermine/lib/src/models/story_manager.dart
index 503a5db..395c9f3 100644
--- a/shell/ermine/lib/src/models/story_manager.dart
+++ b/shell/ermine/lib/src/models/story_manager.dart
@@ -51,6 +51,9 @@
/// Holds the id of the story that has focus.
String focusedStoryId;
+ bool _isFullscreen = false;
+ bool get isFullscreen => _isFullscreen;
+
final _focusProvider = FocusProviderProxy();
final _focusController = FocusControllerProxy();
final _storyProvider = StoryProviderProxy();
@@ -156,6 +159,12 @@
}
}
+ /// toggles fullscreen mode
+ void toggleFullscreen() {
+ _isFullscreen = !_isFullscreen;
+ notifyListeners();
+ }
+
/// Requests focus to be set on the story.
void setFocus(String storyId) {
_focusProvider.request(storyId);
diff --git a/shell/ermine/lib/src/utils/key_chord_listener.dart b/shell/ermine/lib/src/utils/key_chord_listener.dart
index 77d875a..7f51b83 100644
--- a/shell/ermine/lib/src/utils/key_chord_listener.dart
+++ b/shell/ermine/lib/src/utils/key_chord_listener.dart
@@ -15,6 +15,7 @@
/// Listens for key chords and triggers its callbacks when they occur.
class KeyChordListener extends KeyboardCaptureListenerHack {
final VoidCallback onMeta;
+ final VoidCallback onFullscreen;
final VoidCallback onCancel;
final VoidCallback onLogout;
@@ -32,6 +33,17 @@
): (listener) {
listener.onMeta?.call();
},
+ // Right Alt + Lower case f.
+ KeyboardEvent(
+ deviceId: 0,
+ eventTime: 0,
+ hidUsage: 0,
+ codePoint: ascii.encode('f')[0],
+ modifiers: kModifierRightAlt,
+ phase: KeyboardEventPhase.pressed,
+ ): (listener) {
+ listener.onFullscreen?.call();
+ },
// Lower case o + Right Alt.
KeyboardEvent(
deviceId: 0,
@@ -58,7 +70,12 @@
final _keyListenerBindings = <KeyboardCaptureListenerHackBinding>[];
- KeyChordListener({this.onMeta, this.onLogout, this.onCancel});
+ KeyChordListener({
+ this.onMeta,
+ this.onFullscreen,
+ this.onLogout,
+ this.onCancel,
+ });
/// Starts listening to key chords.
void listen(Presentation presentation) {
diff --git a/shell/ermine/lib/src/widgets/stories.dart b/shell/ermine/lib/src/widgets/stories.dart
index 9988af4..2385076 100644
--- a/shell/ermine/lib/src/widgets/stories.dart
+++ b/shell/ermine/lib/src/widgets/stories.dart
@@ -48,8 +48,10 @@
},
itemBuilder: (context, index) {
final story = index == 0 ? null : stories.elementAt(index - 1);
- return Container(
- padding: EdgeInsets.all(32),
+ return AnimatedPadding(
+ duration: Duration(milliseconds: 200),
+ curve: Curves.ease,
+ padding: EdgeInsets.all(storyManager.isFullscreen ? 0 : 32),
child: index == 0
? null
: Material(
@@ -89,11 +91,13 @@
),
),
),
- Positioned(
- top: 18,
- left: 2,
- right: 2,
- bottom: 2,
+ AnimatedPositioned(
+ duration: Duration(milliseconds: 200),
+ curve: Curves.ease,
+ top: storyManager.isFullscreen ? 0 : 18,
+ left: storyManager.isFullscreen ? 0 : 2,
+ right: storyManager.isFullscreen ? 0 : 2,
+ bottom: storyManager.isFullscreen ? 0 : 2,
child: GestureDetector(
// Disable listview scrolling on top of story.
onHorizontalDragStart: (_) {},