[lightsoff/arnaudb/rework-ui: 22/29] Adapt new UI to small screens.
- From: Robert Roth <robertroth src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [lightsoff/arnaudb/rework-ui: 22/29] Adapt new UI to small screens.
- Date: Fri, 5 Feb 2021 18:16:43 +0000 (UTC)
commit ba9e0456bc6ee11eea52ef42306e49787a408d87
Author: Arnaud Bonatti <arnaud bonatti gmail com>
Date: Sat Oct 31 13:18:29 2020 +0100
Adapt new UI to small screens.
data/lightsoff.css | 21 +++++++++++++++++++
data/lightsoff.ui | 52 ++++++++++++++++++++++++++++++++++++++++-------
src/lightsoff-window.vala | 42 ++++++++++++++++++++++++++++++++------
src/managed-window.vala | 32 +++++++++++++++++++++++++++++
4 files changed, 134 insertions(+), 13 deletions(-)
---
diff --git a/data/lightsoff.css b/data/lightsoff.css
index 80b9821..1fe5615 100644
--- a/data/lightsoff.css
+++ b/data/lightsoff.css
@@ -43,3 +43,24 @@
.aspect {
background-color: black;
}
+
+/*\
+* * actionbar
+\*/
+
+actionbar {
+ min-height: 47px; /* TODO calc() exactly; corresponds to the height of an actionbar with a GtkButton in
it, in usual Adwaita conditions */
+}
+/* TODO move in game-window.css */
+label.level-label:dir(ltr) {
+ margin-left : 12px;
+}
+label.level-label:dir(rtl) {
+ margin-right: 12px;
+}
+label.score-label:dir(rtl) {
+ margin-left : 6px;
+}
+label.score-label:dir(ltr) {
+ margin-right: 6px;
+}
diff --git a/data/lightsoff.ui b/data/lightsoff.ui
index 4e10fb8..894903d 100644
--- a/data/lightsoff.ui
+++ b/data/lightsoff.ui
@@ -48,7 +48,7 @@
</object>
</child>
<child>
- <object class="GtkLabel" id="score_label">
+ <object class="GtkLabel" id="score_label_1">
<property name="visible">True</property>
<property name="label" translatable="no">0</property>
</object>
@@ -79,13 +79,51 @@
</object>
</child>
<child>
- <object class="GtkAspectFrame" id="aspect_frame">
+ <object class="GtkGrid">
<property name="visible">True</property>
- <property name="obey_child">False</property>
- <property name="shadow_type">none</property>
- <style>
- <class name="aspect"/>
- </style>
+ <property name="orientation">vertical</property>
+ <child>
+ <object class="GtkAspectFrame" id="aspect_frame">
+ <property name="visible">True</property>
+ <property name="obey_child">False</property>
+ <property name="shadow_type">none</property>
+ <style>
+ <class name="aspect"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkRevealer" id="revealer">
+ <property name="visible">True</property>
+ <property name="reveal-child">False</property>
+ <child>
+ <object class="GtkActionBar">
+ <property name="visible">True</property>
+ <child>
+ <object class="GtkLabel" id="level_label">
+ <property name="visible">True</property>
+ <property name="label" translatable="no">Puzzle X</property>
+ <style>
+ <class name="level-label"/>
+ </style>
+ </object>
+ </child>
+ <child>
+ <object class="GtkLabel" id="score_label_2">
+ <property name="visible">True</property>
+ <property name="label" translatable="no">0</property>
+ <style>
+ <class name="score-label"/>
+ </style>
+ </object>
+ <packing>
+ <property name="pack_type">end</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
</object>
</child>
</template>
diff --git a/src/lightsoff-window.vala b/src/lightsoff-window.vala
index 67ba221..5aa1e8c 100644
--- a/src/lightsoff-window.vala
+++ b/src/lightsoff-window.vala
@@ -17,14 +17,19 @@ private class LightsoffWindow : ManagedWindow
{
[GtkChild] private HeaderBar headerbar;
[GtkChild] private MenuButton menu_button;
- [GtkChild] private Label score_label;
+ [GtkChild] private Label level_label;
+ [GtkChild] private Label score_label_1;
+ [GtkChild] private Label score_label_2;
[GtkChild] private AspectFrame aspect_frame;
+ [GtkChild] private Revealer revealer;
private GLib.Settings settings;
private GameView game_view;
private SimpleAction previous_level;
private EventControllerKey key_controller;
+ private string custom_title = "";
+
private const GLib.ActionEntry[] window_actions =
{
{ "new-game", new_game_cb },
@@ -41,6 +46,8 @@ private class LightsoffWindow : ManagedWindow
private inline void populate_game_container (int level)
{
GtkGameView gtk_game_view = new GtkGameView (level);
+ gtk_game_view.hexpand = true;
+ gtk_game_view.vexpand = true;
gtk_game_view.show ();
aspect_frame.add (gtk_game_view);
@@ -77,13 +84,16 @@ private class LightsoffWindow : ManagedWindow
private void update_subtitle (int moves)
{
- score_label.set_label (moves.to_string ());
+ string moves_string = moves.to_string ();
+ score_label_1.set_label (moves_string);
+ score_label_2.set_label (moves_string);
}
- private void update_title (int level)
+ private void update_title ()
{
- /* Translators: the title of the window, %d is the level number */
- headerbar.title = _("Puzzle %d").printf (level);
+ if (large_window_size)
+ headerbar.set_title (custom_title);
+ level_label.set_label (custom_title);
update_subtitle (0);
}
@@ -100,7 +110,9 @@ private class LightsoffWindow : ManagedWindow
private void level_changed_cb (int level)
{
previous_level.set_enabled (level > 1);
- update_title (level);
+ /* Translators: the title of the window, %d is the level number */
+ custom_title = _("Puzzle %d").printf (level);
+ update_title ();
set_focus_visible (false);
if (level != settings.get_int ("level"))
settings.set_int ("level", level);
@@ -134,4 +146,22 @@ private class LightsoffWindow : ManagedWindow
{
game_view.reset_game ();
}
+
+ bool large_window_size = true;
+ protected override void change_window_size (bool large)
+ {
+ large_window_size = large;
+ if (large)
+ {
+ score_label_1.show ();
+ headerbar.set_title (custom_title);
+ revealer.set_reveal_child (false);
+ }
+ else
+ {
+ score_label_1.hide ();
+ headerbar.set_title (null);
+ revealer.set_reveal_child (true);
+ }
+ }
}
diff --git a/src/managed-window.vala b/src/managed-window.vala
index 791f356..bfe8dbd 100644
--- a/src/managed-window.vala
+++ b/src/managed-window.vala
@@ -67,6 +67,8 @@ private class ManagedWindow : ApplicationWindow
return;
window_width = (!) _window_width;
window_height = (!) _window_height;
+
+ update_adaptative_children ();
}
private inline void on_destroy ()
@@ -75,6 +77,36 @@ private class ManagedWindow : ApplicationWindow
base.destroy ();
}
+ /*\
+ * * adaptative stuff
+ \*/
+
+ private enum WindowSize
+ {
+ START,
+ SMALL,
+ LARGE
+ }
+ private WindowSize window_size = WindowSize.START;
+
+ private void update_adaptative_children ()
+ {
+ if (window_width < 590)
+ _change_window_size (WindowSize.SMALL);
+ else
+ _change_window_size (WindowSize.LARGE);
+ }
+
+ private void _change_window_size (WindowSize new_window_size)
+ {
+ if (window_size == new_window_size)
+ return;
+ window_size = new_window_size;
+ change_window_size (window_size == WindowSize.LARGE);
+ }
+
+ protected virtual void change_window_size (bool large) {}
+
/*\
* * manage window state
\*/
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]