Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
X
ximper-welcome
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Ximper Linux
ximper-welcome
Commits
a30ffee3
Commit
a30ffee3
authored
Aug 07, 2020
by
Bilal Elmoussaoui
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add a welcome video page
parent
faa5f3c9
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
311 additions
and
5 deletions
+311
-5
Cargo.lock
Cargo.lock
+202
-2
Cargo.toml
Cargo.toml
+8
-0
resources.gresource.xml
data/resources.gresource.xml
+1
-0
welcome.mp4
data/resources/assets/welcome.mp4
+0
-0
main.rs
src/main.rs
+1
-1
meson.build
src/meson.build
+1
-0
mod.rs
src/widgets/pages/mod.rs
+2
-0
welcome_video.rs
src/widgets/pages/welcome_video.rs
+94
-0
window.rs
src/widgets/window.rs
+2
-2
No files found.
Cargo.lock
View file @
a30ffee3
...
@@ -53,6 +53,12 @@ dependencies = [
...
@@ -53,6 +53,12 @@ dependencies = [
]
]
[[package]]
[[package]]
name = "autocfg"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d"
[[package]]
name = "bitflags"
name = "bitflags"
version = "1.2.1"
version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
source = "registry+https://github.com/rust-lang/crates.io-index"
...
@@ -381,6 +387,8 @@ dependencies = [
...
@@ -381,6 +387,8 @@ dependencies = [
"gettext-rs",
"gettext-rs",
"gio",
"gio",
"glib",
"glib",
"gstreamer",
"gstreamer-player",
"gtk",
"gtk",
"libhandy",
"libhandy",
"log",
"log",
...
@@ -399,6 +407,137 @@ dependencies = [
...
@@ -399,6 +407,137 @@ dependencies = [
]
]
[[package]]
[[package]]
name = "gstreamer"
version = "0.16.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ce4ce1ba28d3293b8cb8c3d33f50e6da2e5cfeefa59a0d10d922ab8015791609"
dependencies = [
"bitflags",
"cfg-if",
"futures-channel",
"futures-core",
"futures-util",
"glib",
"glib-sys",
"gobject-sys",
"gstreamer-sys",
"libc",
"muldiv",
"num-rational",
"once_cell",
"paste",
"pretty-hex",
"thiserror",
]
[[package]]
name = "gstreamer-base"
version = "0.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "872893487ce8876f18c63730402822804c5762869f631d8e3e6b18aafc8399f0"
dependencies = [
"bitflags",
"glib",
"glib-sys",
"gobject-sys",
"gstreamer",
"gstreamer-base-sys",
"gstreamer-sys",
"libc",
]
[[package]]
name = "gstreamer-base-sys"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c0fd5a77d39b47568fba01274dfcb28dc32382513c697009f80b89ef63fd32fd"
dependencies = [
"glib-sys",
"gobject-sys",
"gstreamer-sys",
"libc",
"system-deps",
]
[[package]]
name = "gstreamer-player"
version = "0.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "90e8a850be21b18fb21f21fa16394bfc176013f7fffdc6719db0ea23b3c99a2b"
dependencies = [
"bitflags",
"glib",
"glib-sys",
"gobject-sys",
"gstreamer",
"gstreamer-player-sys",
"gstreamer-sys",
"gstreamer-video",
"libc",
]
[[package]]
name = "gstreamer-player-sys"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b9f0cd125febba8f9b3cae13881c0d845a77a4e4797b9552aa4058330c23e958"
dependencies = [
"glib-sys",
"gobject-sys",
"gstreamer-sys",
"gstreamer-video-sys",
"libc",
"system-deps",
]
[[package]]
name = "gstreamer-sys"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1321f34d53bb5f60ab1aaf581e29b664b8d41601714ee1bb7dbea490b5b9ff60"
dependencies = [
"glib-sys",
"gobject-sys",
"libc",
"system-deps",
]
[[package]]
name = "gstreamer-video"
version = "0.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "42a52c141d83113e6dd080347ca49ef9be296e7900e081f2b67eaad6a3d5ef26"
dependencies = [
"bitflags",
"futures-channel",
"futures-util",
"glib",
"glib-sys",
"gobject-sys",
"gstreamer",
"gstreamer-base",
"gstreamer-base-sys",
"gstreamer-sys",
"gstreamer-video-sys",
"libc",
"once_cell",
]
[[package]]
name = "gstreamer-video-sys"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d6f105143a7676d2032c386c10b2d376106b5562b7a11b694b634113456f1935"
dependencies = [
"glib-sys",
"gobject-sys",
"gstreamer-base-sys",
"gstreamer-sys",
"libc",
"system-deps",
]
[[package]]
name = "gtk"
name = "gtk"
version = "0.9.1"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
source = "registry+https://github.com/rust-lang/crates.io-index"
...
@@ -561,10 +700,46 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
...
@@ -561,10 +700,46 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400"
checksum = "3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400"
[[package]]
[[package]]
name = "muldiv"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0419348c027fa7be448d2ae7ea0e4e04c2334c31dc4e74ab29f00a2a7ca69204"
[[package]]
name = "num-integer"
version = "0.1.43"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8d59457e662d541ba17869cf51cf177c0b5f0cbf476c66bdc90bf1edac4f875b"
dependencies = [
"autocfg",
"num-traits",
]
[[package]]
name = "num-rational"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a5b4d7360f362cfb50dde8143501e6940b22f644be75a4cc90b2d81968908138"
dependencies = [
"autocfg",
"num-integer",
"num-traits",
]
[[package]]
name = "num-traits"
version = "0.2.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ac267bcc07f48ee5f8935ab0d24f316fb722d7a1292e2913f0cc196b29ffd611"
dependencies = [
"autocfg",
]
[[package]]
name = "once_cell"
name = "once_cell"
version = "1.4.
0
"
version = "1.4.
1
"
source = "registry+https://github.com/rust-lang/crates.io-index"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "
0b631f7e854af39a1739f401cf34a8a013dfe09eac4fa4dba91e9768bd28168
d"
checksum = "
260e51e7efe62b592207e9e13a68e43692a7a279171d6ba57abd208bf23645a
d"
[[package]]
[[package]]
name = "pango"
name = "pango"
...
@@ -594,6 +769,25 @@ dependencies = [
...
@@ -594,6 +769,25 @@ dependencies = [
]
]
[[package]]
[[package]]
name = "paste"
version = "0.1.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "45ca20c77d80be666aef2b45486da86238fabe33e38306bd3118fe4af33fa880"
dependencies = [
"paste-impl",
"proc-macro-hack",
]
[[package]]
name = "paste-impl"
version = "0.1.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d95a7db200b97ef370c8e6de0088252f7e0dfff7d047a28528e47456c0fc98b6"
dependencies = [
"proc-macro-hack",
]
[[package]]
name = "pin-project"
name = "pin-project"
version = "0.4.23"
version = "0.4.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
source = "registry+https://github.com/rust-lang/crates.io-index"
...
@@ -626,6 +820,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
...
@@ -626,6 +820,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d36492546b6af1463394d46f0c834346f31548646f6ba10849802c9c9a27ac33"
checksum = "d36492546b6af1463394d46f0c834346f31548646f6ba10849802c9c9a27ac33"
[[package]]
[[package]]
name = "pretty-hex"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "be91bcc43e73799dc46a6c194a55e7aae1d86cc867c860fd4a436019af21bd8c"
[[package]]
name = "pretty_env_logger"
name = "pretty_env_logger"
version = "0.4.0"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
source = "registry+https://github.com/rust-lang/crates.io-index"
...
...
Cargo.toml
View file @
a30ffee3
...
@@ -14,3 +14,11 @@ gettext-rs = { version = "0.4", features = ["gettext-system"] }
...
@@ -14,3 +14,11 @@ gettext-rs = { version = "0.4", features = ["gettext-system"] }
libhandy
=
"1.0.0-alpha"
libhandy
=
"1.0.0-alpha"
pretty_env_logger
=
"0.4"
pretty_env_logger
=
"0.4"
anyhow
=
"1.0"
anyhow
=
"1.0"
[dependencies.gst_player]
version
=
"0.16"
package
=
"gstreamer-player"
[dependencies.gst]
version
=
"0.16"
package
=
"gstreamer"
data/resources.gresource.xml
View file @
a30ffee3
...
@@ -2,6 +2,7 @@
...
@@ -2,6 +2,7 @@
<gresources>
<gresources>
<gresource
prefix=
"/org/gnome/Tour/"
>
<gresource
prefix=
"/org/gnome/Tour/"
>
<file
compressed=
"true"
alias=
"style.css"
>
resources/style.css
</file>
<file
compressed=
"true"
alias=
"style.css"
>
resources/style.css
</file>
<file
alias=
"welcome.mp4"
>
resources/assets/welcome.mp4
</file>
<file
compressed=
"true"
alias=
"activities.svg"
>
resources/assets/activities.svg
</file>
<file
compressed=
"true"
alias=
"activities.svg"
>
resources/assets/activities.svg
</file>
<file
compressed=
"true"
alias=
"calendar.svg"
>
resources/assets/calendar.svg
</file>
<file
compressed=
"true"
alias=
"calendar.svg"
>
resources/assets/calendar.svg
</file>
<file
compressed=
"true"
alias=
"search.svg"
>
resources/assets/search.svg
</file>
<file
compressed=
"true"
alias=
"search.svg"
>
resources/assets/search.svg
</file>
...
...
data/resources/assets/welcome.mp4
0 → 100644
View file @
a30ffee3
File added
src/main.rs
View file @
a30ffee3
...
@@ -20,7 +20,7 @@ fn main() {
...
@@ -20,7 +20,7 @@ fn main() {
glib
::
set_prgname
(
Some
(
"Tour"
));
glib
::
set_prgname
(
Some
(
"Tour"
));
gtk
::
init
()
.expect
(
"Unable to start GTK3"
);
gtk
::
init
()
.expect
(
"Unable to start GTK3"
);
gst
::
init
()
.expect
(
"Unable to start gst"
);
static_resources
::
init
()
.expect
(
"Failed to initialize the resource file."
);
static_resources
::
init
()
.expect
(
"Failed to initialize the resource file."
);
let
app
=
Application
::
new
();
let
app
=
Application
::
new
();
...
...
src/meson.build
View file @
a30ffee3
...
@@ -39,6 +39,7 @@ sources = files(
...
@@ -39,6 +39,7 @@ sources = files(
'widgets/pages/image.rs',
'widgets/pages/image.rs',
'widgets/pages/mod.rs',
'widgets/pages/mod.rs',
'widgets/pages/welcome.rs',
'widgets/pages/welcome.rs',
'widgets/pages/welcome_video.rs',
'widgets/mod.rs',
'widgets/mod.rs',
'widgets/paginator.rs',
'widgets/paginator.rs',
'widgets/window.rs',
'widgets/window.rs',
...
...
src/widgets/pages/mod.rs
View file @
a30ffee3
mod
image
;
mod
image
;
mod
welcome
;
mod
welcome
;
mod
welcome_video
;
pub
use
image
::
ImagePageWidget
;
pub
use
image
::
ImagePageWidget
;
pub
use
welcome
::
WelcomePageWidget
;
pub
use
welcome
::
WelcomePageWidget
;
pub
use
welcome_video
::
WelcomeVideoPageWidget
;
src/widgets/pages/welcome_video.rs
0 → 100644
View file @
a30ffee3
use
gettextrs
::
gettext
;
use
gtk
::
prelude
::
*
;
// The welcome page with a video instead of a static logo
pub
struct
WelcomeVideoPageWidget
{
pub
widget
:
gtk
::
Box
,
}
impl
WelcomeVideoPageWidget
{
pub
fn
new
()
->
Self
{
let
widget
=
gtk
::
Box
::
new
(
gtk
::
Orientation
::
Vertical
,
0
);
let
welcome_page
=
Self
{
widget
};
welcome_page
.init
();
welcome_page
}
fn
init
(
&
self
)
{
self
.widget
.set_property_expand
(
true
);
self
.widget
.set_valign
(
gtk
::
Align
::
Center
);
self
.widget
.set_halign
(
gtk
::
Align
::
Center
);
self
.widget
.set_margin_top
(
24
);
self
.widget
.set_margin_bottom
(
24
);
let
name
=
glib
::
get_os_info
(
"NAME"
)
.unwrap_or_else
(||
"GNOME"
.into
());
let
version
=
glib
::
get_os_info
(
"VERSION"
)
.unwrap_or_else
(||
"3.36"
.into
());
let
dispatcher
=
gst_player
::
PlayerGMainContextSignalDispatcher
::
new
(
None
);
let
sink
=
gst
::
ElementFactory
::
make
(
"gtksink"
,
None
)
.expect
(
"Missing dependency: element gtksink is needed (usually, in gstreamer-plugins-good or in gst-plugin-gtk)."
);
let
renderer
=
gst_player
::
PlayerVideoOverlayVideoRenderer
::
with_sink
(
&
sink
)
.upcast
();
let
player
=
gst_player
::
Player
::
new
(
Some
(
&
renderer
),
Some
(
&
dispatcher
.upcast
::
<
gst_player
::
PlayerSignalDispatcher
>
()));
player
.set_uri
(
"/org/gnome/Tour/welcome.mp4"
);
let
video_widget
=
player
.get_pipeline
()
.get_property
(
"video-sink"
)
.unwrap
()
.get
::
<
gst
::
Element
>
()
.expect
(
"The player of a VideoPlayerWidget should not use the default sink."
)
.unwrap
()
.get_property
(
"widget"
)
.unwrap
()
.get
::
<
gtk
::
Widget
>
()
.unwrap
()
.unwrap
();
video_widget
.set_size_request
(
-
1
,
720
);
video_widget
.show
();
gtk
::
idle_add
(
clone!
(
@
strong
player
=>
move
||
{
player
.play
();
glib
::
Continue
(
false
)
}));
self
.widget
.add
(
&
video_widget
);
let
title
=
gtk
::
Label
::
new
(
Some
(
&
gettext
(
format!
(
"Welcome to {} {}"
,
name
,
version
))));
title
.set_margin_top
(
36
);
title
.get_style_context
()
.add_class
(
"large-title"
);
title
.show
();
self
.widget
.add
(
&
title
);
let
text
=
gtk
::
Label
::
new
(
Some
(
&
gettext
(
"Hi there! Take the tour to learn your way around and discover essential features."
)));
text
.get_style_context
()
.add_class
(
"body"
);
text
.set_margin_top
(
12
);
text
.show
();
self
.widget
.add
(
&
text
);
let
actions_container
=
gtk
::
Box
::
new
(
gtk
::
Orientation
::
Horizontal
,
12
);
actions_container
.set_halign
(
gtk
::
Align
::
Center
);
actions_container
.set_margin_top
(
36
);
let
skip_tour_btn
=
gtk
::
Button
::
with_label
(
&
gettext
(
"_No Thanks"
));
skip_tour_btn
.set_property_height_request
(
40
);
skip_tour_btn
.set_property_width_request
(
180
);
skip_tour_btn
.set_use_underline
(
true
);
skip_tour_btn
.set_action_name
(
Some
(
"app.skip-tour"
));
skip_tour_btn
.show
();
actions_container
.add
(
&
skip_tour_btn
);
let
start_tour_btn
=
gtk
::
Button
::
with_label
(
&
gettext
(
"_Start Tour"
));
start_tour_btn
.set_property_height_request
(
40
);
start_tour_btn
.set_property_width_request
(
180
);
start_tour_btn
.set_use_underline
(
true
);
start_tour_btn
.set_action_name
(
Some
(
"app.start-tour"
));
start_tour_btn
.get_style_context
()
.add_class
(
"suggested-action"
);
start_tour_btn
.show
();
actions_container
.add
(
&
start_tour_btn
);
actions_container
.set_focus_child
(
Some
(
&
start_tour_btn
));
actions_container
.show
();
self
.widget
.add
(
&
actions_container
);
self
.widget
.show
();
}
}
src/widgets/window.rs
View file @
a30ffee3
...
@@ -4,7 +4,7 @@ use gtk::prelude::*;
...
@@ -4,7 +4,7 @@ use gtk::prelude::*;
use
std
::
cell
::
RefCell
;
use
std
::
cell
::
RefCell
;
use
std
::
rc
::
Rc
;
use
std
::
rc
::
Rc
;
use
super
::
pages
::{
ImagePageWidget
,
WelcomePageWidget
};
use
super
::
pages
::{
ImagePageWidget
,
WelcomePageWidget
,
WelcomeVideoPageWidget
};
use
super
::
paginator
::
PaginatorWidget
;
use
super
::
paginator
::
PaginatorWidget
;
use
crate
::
config
::{
APP_ID
,
PROFILE
};
use
crate
::
config
::{
APP_ID
,
PROFILE
};
...
@@ -42,7 +42,7 @@ impl Window {
...
@@ -42,7 +42,7 @@ impl Window {
if
PROFILE
==
"Devel"
{
if
PROFILE
==
"Devel"
{
self
.widget
.get_style_context
()
.add_class
(
"devel"
);
self
.widget
.get_style_context
()
.add_class
(
"devel"
);
}
}
self
.paginator
.borrow_mut
()
.add_page
(
WelcomePageWidget
::
new
()
.widget.upcast
::
<
gtk
::
Widget
>
());
self
.paginator
.borrow_mut
()
.add_page
(
Welcome
Video
PageWidget
::
new
()
.widget.upcast
::
<
gtk
::
Widget
>
());
self
.paginator
.borrow_mut
()
.add_page
(
self
.paginator
.borrow_mut
()
.add_page
(
ImagePageWidget
::
new
(
ImagePageWidget
::
new
(
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment