This commit is contained in:
Thomas Perl 2014-02-07 17:23:56 +01:00
parent 3d7128a421
commit 99cf0780c1
43 changed files with 239 additions and 182 deletions

View file

@ -27,10 +27,20 @@ var layout = {
var colors = { var colors = {
download: '#8ae234', /* download green */ download: '#8ae234', /* download green */
select: '#7f5785', /* gpodder dark purple */ select: '#7f5785', /* gpodder dark purple */
fresh: '#cf65de', /* gpodder purple */ fresh: '#815c86', /* gpodder purple */
playback: '#729fcf', /* playback blue */ playback: '#729fcf', /* playback blue */
text: '#333333', /* text color */
placeholder: '#666666',
highlight: '#433b67',
secondaryHighlight: '#605885',
background: '#948db3',
area: '#cccccc',
secondaryBackground: '#d0cce1',
}; };
var font = 'Source Sans Pro';
var state = { var state = {
normal: 0, normal: 0,
downloaded: 1, downloaded: 1,

View file

@ -20,14 +20,18 @@
import QtQuick 2.0 import QtQuick 2.0
import 'common/constants.js' as Constants
MouseArea { MouseArea {
id: mouseArea id: mouseArea
property bool transparent: false property bool transparent: false
property bool canHighlight: true property bool canHighlight: true
Rectangle { Rectangle {
id: background
anchors.fill: parent anchors.fill: parent
color: (mouseArea.pressed && mouseArea.canHighlight)?'#33ffffff':(mouseArea.transparent?'#00000000':'#88000000') color: Constants.colors.area
visible: parent.enabled opacity: (mouseArea.pressed && mouseArea.canHighlight) ? 1 : .5
visible: parent.enabled && ((mouseArea.canHighlight && mouseArea.pressed) || !mouseArea.transparent)
} }
} }

View file

@ -21,6 +21,8 @@
import QtQuick 2.0 import QtQuick 2.0
import 'common/constants.js' as Constants
Item { Item {
id: coverArt id: coverArt
@ -42,15 +44,15 @@ Item {
} }
Rectangle { Rectangle {
opacity: 1 - cover.opacity opacity: 0.3 * (1 - cover.opacity)
anchors.fill: cover anchors.fill: cover
clip: true clip: true
color: '#11ffffff' color: Constants.colors.background
PLabel { PLabel {
text: coverArt.text[0] text: coverArt.text[0]
color: '#55ffffff' color: Constants.colors.highlight
anchors.centerIn: parent anchors.centerIn: parent
font.pixelSize: parent.height * .8 font.pixelSize: parent.height * .8
} }

View file

@ -27,6 +27,8 @@ SlidePage {
ListView { ListView {
anchors.fill: parent anchors.fill: parent
boundsBehavior: Flickable.StopAtBounds
PScrollDecorator {}
model: GPodderDirectorySearchModel { id: directorySearchModel } model: GPodderDirectorySearchModel { id: directorySearchModel }

View file

@ -36,6 +36,7 @@ SlidePage {
Flickable { Flickable {
id: flickable id: flickable
anchors.fill: parent anchors.fill: parent
boundsBehavior: Flickable.StopAtBounds
contentWidth: detailColumn.width contentWidth: detailColumn.width
contentHeight: detailColumn.height + detailColumn.spacing contentHeight: detailColumn.height + detailColumn.spacing

View file

@ -22,6 +22,7 @@ import QtQuick 2.0
import 'common/constants.js' as Constants import 'common/constants.js' as Constants
import 'common/util.js' as Util import 'common/util.js' as Util
import 'icons/icons.js' as Icons
Item { Item {
id: episodeItem id: episodeItem
@ -32,7 +33,7 @@ Item {
height: (opened ? 160 : 80) * pgst.scalef height: (opened ? 160 : 80) * pgst.scalef
Behavior on height { PropertyAnimation { duration: 100 } } Behavior on height { PropertyAnimation { duration: 100 } }
Rectangle { Item {
clip: true clip: true
anchors { anchors {
left: parent.left left: parent.left
@ -40,7 +41,6 @@ Item {
bottom: parent.bottom bottom: parent.bottom
} }
height: parent.height - 80 * pgst.scalef height: parent.height - 80 * pgst.scalef
color: '#66000000'
IconContextMenu { IconContextMenu {
height: parent.height height: parent.height
@ -48,7 +48,8 @@ Item {
IconMenuItem { IconMenuItem {
text: episodeItem.isPlaying ? 'Pause' : 'Play' text: episodeItem.isPlaying ? 'Pause' : 'Play'
iconSource: 'icons/' + (episodeItem.isPlaying ? 'pause_24x32.png' : 'play_24x32.png') color: titleLabel.color
icon: episodeItem.isPlaying ? Icons.pause : Icons.play
onClicked: { onClicked: {
if (episodeItem.isPlaying) { if (episodeItem.isPlaying) {
player.pause(); player.pause();
@ -60,7 +61,8 @@ Item {
IconMenuItem { IconMenuItem {
text: 'Download' text: 'Download'
iconSource: 'icons/cloud_download_32x32.png' color: titleLabel.color
icon: Icons.cloud_download
visible: downloadState != Constants.state.downloaded visible: downloadState != Constants.state.downloaded
onClicked: { onClicked: {
episodeList.selectedIndex = -1; episodeList.selectedIndex = -1;
@ -70,21 +72,24 @@ Item {
IconMenuItem { IconMenuItem {
text: 'Delete' text: 'Delete'
iconSource: 'icons/trash_stroke_32x32.png' color: titleLabel.color
icon: Icons.trash
visible: downloadState != Constants.state.deleted visible: downloadState != Constants.state.deleted
onClicked: py.call('main.delete_episode', [id]); onClicked: py.call('main.delete_episode', [id]);
} }
IconMenuItem { IconMenuItem {
id: toggleNew id: toggleNew
color: titleLabel.color
text: 'Toggle New' text: 'Toggle New'
iconSource: 'icons/star_32x32.png' icon: Icons.star
onClicked: Util.disableUntilReturn(toggleNew, py, 'main.toggle_new', [id]); onClicked: Util.disableUntilReturn(toggleNew, py, 'main.toggle_new', [id]);
} }
IconMenuItem { IconMenuItem {
text: 'Shownotes' text: 'Shownotes'
iconSource: 'icons/document_alt_stroke_24x32.png' color: titleLabel.color
icon: Icons.article
onClicked: pgst.loadPage('EpisodeDetail.qml', {episode_id: id, title: title}); onClicked: pgst.loadPage('EpisodeDetail.qml', {episode_id: id, title: title});
} }
} }
@ -93,8 +98,8 @@ Item {
ButtonArea { ButtonArea {
id: episodeItemArea id: episodeItemArea
opacity: canHighlight ? 1 : 0.2 opacity: (canHighlight || episodeList.selectedIndex == index) ? 1 : 0.2
canHighlight: (episodeList.selectedIndex == index) || (episodeList.selectedIndex == -1) canHighlight: (episodeList.selectedIndex == -1)
onClicked: { onClicked: {
if (episodeList.selectedIndex == index) { if (episodeList.selectedIndex == index) {
@ -109,7 +114,7 @@ Item {
Rectangle { Rectangle {
anchors.fill: parent anchors.fill: parent
color: titleLabel.color color: titleLabel.color
visible: (progress > 0) || isPlaying visible: (progress > 0) || isPlaying || episodeItem.opened
opacity: 0.1 opacity: 0.1
} }
@ -133,7 +138,7 @@ Item {
height: parent.height * .2 height: parent.height * .2
width: parent.width * playbackProgress width: parent.width * playbackProgress
color: Constants.colors.playback color: titleLabel.color
opacity: episodeItem.isPlaying ? .6 : .2 opacity: episodeItem.isPlaying ? .6 : .2
} }
@ -163,10 +168,12 @@ Item {
return Constants.colors.playback; return Constants.colors.playback;
} else if (progress > 0) { } else if (progress > 0) {
return Constants.colors.download; return Constants.colors.download;
} else if (episodeItem.opened) {
return Constants.colors.highlight;
} else if (isNew && downloadState != Constants.state.downloaded) { } else if (isNew && downloadState != Constants.state.downloaded) {
return Constants.colors.fresh; return Constants.colors.fresh;
} else { } else {
return 'white'; return Constants.colors.text;
} }
} }
@ -179,8 +186,9 @@ Item {
} }
} }
Image { PIcon {
id: downloadedIcon id: downloadedIcon
color: titleLabel.color
anchors { anchors {
right: parent.right right: parent.right
@ -189,7 +197,7 @@ Item {
} }
visible: downloadState == Constants.state.downloaded visible: downloadState == Constants.state.downloaded
source: 'icons/cd_32x32.png' icon: Icons.cd
} }
} }
} }

View file

@ -22,6 +22,7 @@ import QtQuick 2.0
import 'common' import 'common'
import 'common/util.js' as Util import 'common/util.js' as Util
import 'icons/icons.js' as Icons
SlidePage { SlidePage {
id: episodesPage id: episodesPage
@ -38,7 +39,8 @@ SlidePage {
PullMenu { PullMenu {
PullMenuItem { PullMenuItem {
source: 'icons/play_24x32.png' text: 'Now Playing'
icon: Icons.play
onClicked: { onClicked: {
pgst.loadPage('PlayerPage.qml'); pgst.loadPage('PlayerPage.qml');
episodesPage.unPull(); episodesPage.unPull();
@ -46,7 +48,8 @@ SlidePage {
} }
PullMenuItem { PullMenuItem {
source: 'icons/trash_stroke_32x32.png' text: 'Unsubscribe'
icon: Icons.trash
onClicked: { onClicked: {
py.call('main.unsubscribe', [episodesPage.podcast_id]); py.call('main.unsubscribe', [episodesPage.podcast_id]);
episodesPage.closePage(); episodesPage.closePage();

View file

@ -20,13 +20,11 @@
import QtQuick 2.0 import QtQuick 2.0
Rectangle { Item {
id: contextMenu id: contextMenu
default property alias children: contextMenuRow.children default property alias children: contextMenuRow.children
height: 80 * pgst.scalef height: 80 * pgst.scalef
color: '#33000000'
Row { Row {
id: contextMenuRow id: contextMenuRow
anchors.centerIn: parent anchors.centerIn: parent

View file

@ -20,26 +20,34 @@
import QtQuick 2.0 import QtQuick 2.0
import 'common/constants.js' as Constants
ButtonArea { ButtonArea {
id: iconMenuItem id: iconMenuItem
property alias text: label.text property alias text: label.text
property alias iconSource: icon.source property color color: Constants.colors.secondaryHighlight
property alias icon: icon.icon
property bool alwaysShowText: false
transparent: true transparent: true
canHighlight: false
height: 80 * pgst.scalef height: 80 * pgst.scalef
width: height width: height
Image { PIcon {
id: icon id: icon
anchors.centerIn: parent anchors.centerIn: parent
opacity: iconMenuItem.enabled ? 1 : .2 opacity: iconMenuItem.enabled ? 1 : .2
color: label.color
} }
PLabel { PLabel {
id: label id: label
font.pixelSize: 15 * pgst.scalef font.pixelSize: 15 * pgst.scalef
visible: parent.pressed visible: parent.pressed || parent.alwaysShowText
color: parent.pressed ? Qt.darker(iconMenuItem.color, 1.1) : iconMenuItem.color
anchors { anchors {
bottom: icon.top bottom: icon.top

View file

@ -43,6 +43,7 @@ Item {
} }
children[index-1].opacity = x / width; children[index-1].opacity = x / width;
//children[index-1].pushPhase = x / width;
} }
property bool loadPageInProgress: false property bool loadPageInProgress: false

View file

@ -20,31 +20,23 @@
import QtQuick 2.0 import QtQuick 2.0
import 'icons/icons.js' as Icons
Item { Item {
height: 64 * pgst.scalef height: 64 * pgst.scalef
width: 64 * pgst.scalef width: 64 * pgst.scalef
Image { PIcon {
anchors { anchors.centerIn: parent
horizontalCenter: parent.horizontalCenter icon: Icons.aperture
bottom: parent.bottom rotation: 180 * parent.phase
bottomMargin: 30*Math.abs(Math.sin(phase)) * pgst.scalef
}
transform: Scale {
origin.x: 32 * pgst.scalef
origin.y: 32 * pgst.scalef
xScale: 1.0 - 0.3 * (1.0 - Math.abs(Math.sin(phase)))
}
source: 'images/gpodder.png'
} }
property real phase: 0 property real phase: 0
PropertyAnimation on phase { PropertyAnimation on phase {
loops: Animation.Infinite loops: Animation.Infinite
duration: 2000 duration: 5000
running: parent.visible running: parent.visible
from: 0 from: 0
to: 2*Math.PI to: 2*Math.PI

36
touch/PIcon.qml Normal file
View file

@ -0,0 +1,36 @@
/**
*
* gPodder QML UI Reference Implementation
* Copyright (c) 2013, Thomas Perl <m@thp.io>
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
* REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
* INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
* LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
* OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*
*/
import QtQuick 2.0
import 'common/constants.js' as Constants
import 'icons/icons.js' as Icons
PLabel {
id: picon
property int size: 48 * pgst.scalef
property string icon
text: icon
font.pixelSize: picon.size
font.family: Icons.font
}

View file

@ -20,8 +20,11 @@
import QtQuick 2.0 import QtQuick 2.0
import 'common/constants.js' as Constants
Text { Text {
font.pixelSize: 30 * pgst.scalef font.pixelSize: 30 * pgst.scalef
color: 'white' font.family: Constants.font
color: Constants.colors.text
} }

View file

@ -26,7 +26,9 @@ ListView {
anchors.fill: parent anchors.fill: parent
property string title property string title
property real pushPhase: 0
boundsBehavior: Flickable.StopAtBounds
header: SlidePageHeader { title: pListView.title } header: SlidePageHeader { title: pListView.title }
PScrollDecorator { flickable: pListView } PScrollDecorator { flickable: pListView }

View file

@ -20,6 +20,8 @@
import QtQuick 2.0 import QtQuick 2.0
import 'common/constants.js' as Constants
Rectangle { Rectangle {
property var flickable property var flickable
@ -28,7 +30,7 @@ Rectangle {
width: 5 * pgst.scalef width: 5 * pgst.scalef
height: flickable.visibleArea.heightRatio * flickable.height height: flickable.visibleArea.heightRatio * flickable.height
visible: flickable.visibleArea.heightRatio < 1 visible: flickable.visibleArea.heightRatio < 1
color: '#ffffff' color: Constants.colors.background
opacity: flickable.moving ? .2 : 0 opacity: flickable.moving ? 1 : 0
Behavior on opacity { PropertyAnimation { duration: 100 } } Behavior on opacity { PropertyAnimation { duration: 100 } }
} }

View file

@ -20,13 +20,15 @@
import QtQuick 2.0 import QtQuick 2.0
Rectangle { import 'common/constants.js' as Constants
Item {
id: slider id: slider
property real value property real value
property real min: 0.0 property real min: 0.0
property real max: 1.0 property real max: 1.0
property color fillColor: '#333333' property color color: Constants.colors.highlight
property real displayedValue: mouseArea.pressed ? temporaryValue : value property real displayedValue: mouseArea.pressed ? temporaryValue : value
property real temporaryValue property real temporaryValue
@ -34,7 +36,6 @@ Rectangle {
signal valueChangeRequested(real newValue) signal valueChangeRequested(real newValue)
clip: true clip: true
color: '#000000'
height: 50 * pgst.scalef height: 50 * pgst.scalef
@ -51,28 +52,20 @@ Rectangle {
preventStealing: true preventStealing: true
} }
Rectangle {
anchors.fill: parent
color: slider.color
opacity: .3
}
Rectangle { Rectangle {
id: fillBackground id: fillBackground
color: slider.fillColor color: slider.color
height: parent.height * 0.8 height: parent.height
width: parent.width * (parent.displayedValue - parent.min) / (parent.max - parent.min) width: parent.width * (parent.displayedValue - parent.min) / (parent.max - parent.min)
anchors { anchors {
verticalCenter: parent.verticalCenter verticalCenter: parent.verticalCenter
} }
} }
Rectangle {
height: parent.height * 0.9
width: height
radius: width / 2
color: Qt.lighter(slider.fillColor, 1.5)
anchors {
verticalCenter: parent.verticalCenter
left: fillBackground.right
leftMargin: -(width / 2)
}
}
} }

View file

@ -20,32 +20,34 @@
import QtQuick 2.0 import QtQuick 2.0
Rectangle { import 'common/constants.js' as Constants
Item {
id: textField id: textField
property alias text: textInput.text property alias text: textInput.text
property string placeholderText: '' property string placeholderText: ''
radius: 10 * pgst.scalef
height: 50 * pgst.scalef height: 50 * pgst.scalef
color: 'white'
TextInput { TextInput {
anchors { anchors {
fill: parent fill: parent
margins: 5 * pgst.scalef margins: 5 * pgst.scalef
} }
color: 'black' color: Constants.colors.text
selectionColor: Constants.colors.background
id: textInput id: textInput
font.pixelSize: height font.pixelSize: height
font.family: placeholder.font.family
} }
Text { PLabel {
id: placeholder
anchors.fill: textInput anchors.fill: textInput
visible: !textInput.focus && (textInput.text == '') visible: !textInput.focus && (textInput.text == '')
text: textField.placeholderText text: textField.placeholderText
color: '#aaa' color: Constants.colors.placeholder
font.pixelSize: textInput.font.pixelSize font.pixelSize: textInput.font.pixelSize
} }
} }

View file

@ -22,6 +22,7 @@ import QtQuick 2.0
import 'common/util.js' as Util import 'common/util.js' as Util
import 'common/constants.js' as Constants import 'common/constants.js' as Constants
import 'icons/icons.js' as Icons
SlidePage { SlidePage {
id: playerPage id: playerPage
@ -29,6 +30,7 @@ SlidePage {
Flickable { Flickable {
id: flickable id: flickable
anchors.fill: parent anchors.fill: parent
boundsBehavior: Flickable.StopAtBounds
contentWidth: column.width contentWidth: column.width
contentHeight: column.height + column.spacing contentHeight: column.height + column.spacing
@ -41,6 +43,7 @@ SlidePage {
SlidePageHeader { SlidePageHeader {
title: 'Now playing' title: 'Now playing'
color: Constants.colors.playback
} }
Column { Column {
@ -61,46 +64,6 @@ SlidePage {
} }
} }
IconContextMenu {
width: parent.width
IconMenuItem {
text: player.isPlaying ? 'Pause' : 'Play'
iconSource: 'icons/' + (player.isPlaying ? 'pause_24x32.png' : 'play_24x32.png')
onClicked: {
if (player.isPlaying) {
player.pause();
} else {
player.play();
}
}
}
IconMenuItem {
text: '-1m'
iconSource: 'icons/first_32x32.png'
onClicked: player.seekAndSync(player.position - 60 * 1000);
}
IconMenuItem {
text: '-10s'
iconSource: 'icons/arrow_left_32x32.png'
onClicked: player.seekAndSync(player.position - 10 * 1000);
}
IconMenuItem {
text: '+10s'
iconSource: 'icons/arrow_right_32x32.png'
onClicked: player.seekAndSync(player.position + 10 * 1000);
}
IconMenuItem {
text: '+1m'
iconSource: 'icons/last_32x32.png'
onClicked: player.seekAndSync(player.position + 60 * 1000);
}
}
PLabel { PLabel {
anchors.horizontalCenter: parent.horizontalCenter anchors.horizontalCenter: parent.horizontalCenter
text: Util.formatPosition(slider.displayedValue/1000, player.duration/1000) text: Util.formatPosition(slider.displayedValue/1000, player.duration/1000)
@ -112,11 +75,56 @@ SlidePage {
value: player.position value: player.position
min: 0 min: 0
max: player.duration max: player.duration
fillColor: Constants.colors.playback color: Constants.colors.playback
onValueChangeRequested: { onValueChangeRequested: {
player.seekAndSync(newValue); player.seekAndSync(newValue);
} }
} }
IconContextMenu {
width: parent.width
IconMenuItem {
text: player.isPlaying ? 'Pause' : 'Play'
color: Constants.colors.playback
icon: player.isPlaying ? Icons.pause : Icons.play
onClicked: {
if (player.isPlaying) {
player.pause();
} else {
player.play();
}
}
}
IconMenuItem {
text: '-1m'
color: Constants.colors.playback
icon: Icons.first
onClicked: player.seekAndSync(player.position - 60 * 1000);
}
IconMenuItem {
text: '-10s'
color: Constants.colors.playback
icon: Icons.arrow_left
onClicked: player.seekAndSync(player.position - 10 * 1000);
}
IconMenuItem {
text: '+10s'
color: Constants.colors.playback
icon: Icons.arrow_right
onClicked: player.seekAndSync(player.position + 10 * 1000);
}
IconMenuItem {
text: '+1m'
color: Constants.colors.playback
icon: Icons.last
onClicked: player.seekAndSync(player.position + 60 * 1000);
}
}
} }
} }

View file

@ -22,6 +22,7 @@ import QtQuick 2.0
import 'common' import 'common'
import 'common/util.js' as Util import 'common/util.js' as Util
import 'icons/icons.js' as Icons
SlidePage { SlidePage {
id: podcastsPage id: podcastsPage
@ -29,7 +30,8 @@ SlidePage {
PullMenu { PullMenu {
PullMenuItem { PullMenuItem {
source: 'icons/play_24x32.png' text: 'Now Playing'
icon: Icons.play
onClicked: { onClicked: {
pgst.loadPage('PlayerPage.qml'); pgst.loadPage('PlayerPage.qml');
podcastsPage.unPull(); podcastsPage.unPull();
@ -37,7 +39,8 @@ SlidePage {
} }
PullMenuItem { PullMenuItem {
source: 'icons/reload_24x28.png' text: 'Refresh feeds'
icon: Icons.reload
onClicked: { onClicked: {
podcastsPage.unPull(); podcastsPage.unPull();
py.call('main.check_for_episodes'); py.call('main.check_for_episodes');
@ -45,7 +48,8 @@ SlidePage {
} }
PullMenuItem { PullMenuItem {
source: 'icons/plus_32x32.png' text: 'Subscribe'
icon: Icons.plus
onClicked: { onClicked: {
pgst.loadPage('Subscribe.qml'); pgst.loadPage('Subscribe.qml');
podcastsPage.unPull(); podcastsPage.unPull();

View file

@ -20,6 +20,8 @@
import QtQuick 2.0 import QtQuick 2.0
import 'common/constants.js' as Constants
MouseArea { MouseArea {
id: pullMenu id: pullMenu
default property alias items: pullMenuColumn.children default property alias items: pullMenuColumn.children
@ -31,10 +33,6 @@ MouseArea {
Column { Column {
id: pullMenuColumn id: pullMenuColumn
anchors.fill: parent anchors.fill: parent
spacing: (width - 72 * pgst.scalef) / 2
Item { width: 1; height: 1 }
} }
} }

View file

@ -20,17 +20,14 @@
import QtQuick 2.0 import QtQuick 2.0
ButtonArea { import 'common/constants.js' as Constants
IconMenuItem {
id: pullMenuItem id: pullMenuItem
property alias source: img.source alwaysShowText: true
width: 72 * pgst.scalef width: parent.width
height: 72 * pgst.scalef height: width
Image {
id: img
anchors.centerIn: parent
}
anchors.horizontalCenter: parent.horizontalCenter anchors.horizontalCenter: parent.horizontalCenter
} }

View file

@ -20,6 +20,8 @@
import QtQuick 2.0 import QtQuick 2.0
import 'common/constants.js' as Constants
Item { Item {
property alias text: pLabel.text property alias text: pLabel.text
@ -33,7 +35,7 @@ Item {
margins: 10 * pgst.scalef margins: 10 * pgst.scalef
} }
color: '#aaa' color: Constants.colors.secondaryHighlight
} }
} }

View file

@ -23,10 +23,8 @@ import QtQuick 2.0
SlidePage { SlidePage {
SlidePageHeader { title: 'Settings' } SlidePageHeader { title: 'Settings' }
Text { PLabel {
anchors.centerIn: parent anchors.centerIn: parent
color: 'white'
font.pixelSize: 50 * pgst.scalef
text: 'TODO' text: 'TODO'
} }
} }

View file

@ -22,7 +22,7 @@ import QtQuick 2.0
Rectangle { Rectangle {
id: page id: page
color: '#88000000' color: 'white'
default property alias children: dragging.children default property alias children: dragging.children
property alias hasPull: dragging.hasPull property alias hasPull: dragging.hasPull
@ -52,10 +52,10 @@ Rectangle {
} }
Rectangle { Rectangle {
color: 'black' color: '#ffffff'
anchors.fill: parent anchors.fill: parent
opacity: page.pullPhase * 0.8 opacity: page.pullPhase * 0.9
MouseArea { MouseArea {
enabled: parent.opacity > 0 enabled: parent.opacity > 0
@ -72,19 +72,6 @@ Rectangle {
} }
width: 10 * pgst.scalef width: 10 * pgst.scalef
source: 'images/pageshadow.png' source: 'images/pageshadow.png'
opacity: .2 opacity: .1
}
Image {
anchors {
left: parent.right
top: parent.top
bottom: parent.bottom
}
mirror: true
width: 10 * pgst.scalef
source: 'images/pageshadow.png'
opacity: .2
} }
} }

View file

@ -24,24 +24,14 @@ import 'common/constants.js' as Constants
Item { Item {
id: slidePageHeader id: slidePageHeader
property string title property alias title: label.text
property alias color: label.color
width: parent.width width: parent.width
height: Constants.layout.header.height * pgst.scalef height: Constants.layout.header.height * pgst.scalef
Rectangle { PLabel {
anchors { id: label
left: parent.left
right: parent.right
top: parent.top
topMargin: slidePageHeader.height * 0.15
}
height: slidePageHeader.height * 0.7
color: '#33000000'
}
Text {
anchors { anchors {
left: parent.left left: parent.left
right: parent.right right: parent.right
@ -50,11 +40,10 @@ Item {
verticalCenter: parent.verticalCenter verticalCenter: parent.verticalCenter
} }
color: 'white' color: Constants.colors.highlight
horizontalAlignment: Text.AlignRight horizontalAlignment: Text.AlignRight
font.pixelSize: parent.height * .4 font.pixelSize: parent.height * .4
elide: Text.ElideRight elide: Text.ElideRight
text: parent.title
} }
} }

View file

@ -20,6 +20,8 @@
import QtQuick 2.0 import QtQuick 2.0
import 'icons/icons.js' as Icons
SlidePage { SlidePage {
id: startPage id: startPage
canClose: false canClose: false
@ -44,6 +46,7 @@ SlidePage {
Flickable { Flickable {
id: flickable id: flickable
boundsBehavior: Flickable.StopAtBounds
Connections { Connections {
target: py target: py
@ -96,9 +99,9 @@ SlidePage {
width: subscriptions.width + 2*subscriptions.anchors.margins width: subscriptions.width + 2*subscriptions.anchors.margins
height: subscriptions.height + 2*subscriptions.anchors.margins height: subscriptions.height + 2*subscriptions.anchors.margins
Image { PIcon {
id: subscriptions id: subscriptions
source: 'icons/plus_32x32.png' icon: Icons.plus
anchors { anchors {
bottom: parent.bottom bottom: parent.bottom
@ -158,9 +161,9 @@ SlidePage {
width: refresher.width + 2*refresher.anchors.margins width: refresher.width + 2*refresher.anchors.margins
height: refresher.height + 2*refresher.anchors.margins height: refresher.height + 2*refresher.anchors.margins
Image { PIcon {
id: refresher id: refresher
source: 'icons/reload_24x28.png' icon: Icons.reload
anchors { anchors {
bottom: parent.bottom bottom: parent.bottom

Binary file not shown.

View file

@ -20,21 +20,10 @@
import QtQuick 2.0 import QtQuick 2.0
Rectangle { Rectangle {
color: '#336688' color: 'white'
width: 480 width: 480
height: 800 height: 800
Image {
anchors.fill: parent
source: 'images/mask.png'
}
Image {
anchors.fill: parent
source: 'images/noise.png'
fillMode: Image.Tile
}
Main {} Main {}
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 239 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 270 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 394 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 436 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 214 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 271 B

BIN
touch/icons/iconic_fill.ttf Normal file

Binary file not shown.

15
touch/icons/icons.js Normal file
View file

@ -0,0 +1,15 @@
var font = 'Iconic';
var trash = '\ue05a';
var cd = '\ue064';
var play = '\ue047';
var reload = '\ue030';
var plus = '\u2795';
var pause = '\ue049';
var cloud_download = '\ue044';
var star = '\u2605';
var article = '\ue053';
var first = '\ue04c';
var arrow_left = '\u2190';
var arrow_right = '\u2192';
var last = '\ue04d';
var aperture = '\ue026';

Binary file not shown.

Before

Width:  |  Height:  |  Size: 281 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 146 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 217 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 161 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 357 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 378 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 291 B