Merge lp:~vthompson/music-app/sketching-the-future-001 into lp:music-app/remix
- sketching-the-future-001
- Merge into remix
Status: | Merged |
---|---|
Approved by: | Andrew Hayzen |
Approved revision: | 765 |
Merged at revision: | 789 |
Proposed branch: | lp:~vthompson/music-app/sketching-the-future-001 |
Merge into: | lp:music-app/remix |
Diff against target: |
687 lines (+339/-246) 4 files modified
MusicNowPlaying.qml (+329/-237) Style.qml (+4/-4) common/ListItemWithActions.qml (+2/-2) music-app.qml (+4/-3) |
To merge this branch: | bzr merge lp:~vthompson/music-app/sketching-the-future-001 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Andrew Hayzen | Approve | ||
Ubuntu Phone Apps Jenkins Bot | continuous-integration | Approve | |
Review via email:
|
Commit message
* Show full cover art in Now Playing
* Allow swipe left or right to navigate queue in Now Playing
Description of the change
Inputs from the community [1] along with the fact that the cover art provided by the thumbnailer service is mostly adequate enough to display full screen cover art, has given the team a desire to change how the Now Playing view displays cover art. This change displays full screen cover art.
[1] https:/
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Victor Thompson (vthompson) wrote : | # |
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote : | # |
PASSED: Continuous integration, rev:763
http://
Executed test runs:
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote : | # |
PASSED: Continuous integration, rev:763
http://
Executed test runs:
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
- 764. By Victor Thompson
-
merge of trunk
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Ubuntu Phone Apps Jenkins Bot (ubuntu-phone-apps-jenkins-bot) wrote : | # |
PASSED: Continuous integration, rev:764
http://
Executed test runs:
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Victor Thompson (vthompson) wrote : | # |
#unblocked design has approved this change
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Andrew Hayzen (ahayzen) wrote : | # |
Looks good so far, visually the only issue I have is that it is difficult to tell where you have to click on the progress bar, as it is black on black.
4 inline diff comments/questions.
- 765. By Victor Thompson
-
update per comments.
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Victor Thompson (vthompson) wrote : | # |
I've pushed changes with resolutions to the inline comments.
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Andrew Hayzen (ahayzen) wrote : | # |
Awesome really good to see the designs land :)
Preview Diff
1 | === modified file 'MusicNowPlaying.qml' |
2 | --- MusicNowPlaying.qml 2015-01-14 05:07:22 +0000 |
3 | +++ MusicNowPlaying.qml 2015-01-18 00:06:21 +0000 |
4 | @@ -191,32 +191,49 @@ |
5 | |
6 | Item { |
7 | id: fullview |
8 | - anchors.fill: parent |
9 | + anchors { |
10 | + top: parent.top |
11 | + topMargin: mainView.header.height |
12 | + } |
13 | + height: parent.height - mainView.header.height - units.gu(9.5) |
14 | visible: !isListView |
15 | + width: parent.width |
16 | |
17 | BlurredBackground { |
18 | id: blurredBackground |
19 | - anchors.top: parent.top |
20 | - anchors.topMargin: mainView.header.height |
21 | - height: units.gu(27) |
22 | + anchors { |
23 | + left: parent.left |
24 | + right: parent.right |
25 | + top: parent.top |
26 | + } |
27 | art: albumImage.firstSource |
28 | - |
29 | - CoverGrid { |
30 | - id: albumImage |
31 | + height: parent.height - units.gu(7) |
32 | + |
33 | + Item { |
34 | + id: albumImageContainer |
35 | anchors { |
36 | - centerIn: parent |
37 | - } |
38 | - covers: [{art: player.currentMetaArt, author: player.currentMetaArtist, album: player.currentMetaAlbum}] |
39 | - size: units.gu(18) |
40 | - } |
41 | - } |
42 | - |
43 | - /* Full toolbar */ |
44 | - Item { |
45 | - id: musicToolbarFullContainer |
46 | - anchors.top: blurredBackground.bottom |
47 | - anchors.topMargin: nowPlayingWideAspectTitle.lineCount === 1 ? units.gu(4) : units.gu(2) |
48 | - width: blurredBackground.width |
49 | + horizontalCenter: parent.horizontalCenter |
50 | + top: parent.top |
51 | + } |
52 | + height: parent.height |
53 | + width: parent.width |
54 | + |
55 | + CoverGrid { |
56 | + id: albumImage |
57 | + anchors.centerIn: parent |
58 | + covers: [{art: player.currentMetaArt, author: player.currentMetaArtist, album: player.currentMetaAlbum}] |
59 | + size: parent.width > parent.height ? parent.height : parent.width |
60 | + } |
61 | + } |
62 | + |
63 | + Rectangle { |
64 | + id: nowPlayingWideAspectLabelsBackground |
65 | + anchors.bottom: parent.bottom |
66 | + color: styleMusic.common.black |
67 | + height: nowPlayingWideAspectTitle.lineCount === 1 ? units.gu(10) : units.gu(13) |
68 | + opacity: 0.8 |
69 | + width: parent.width |
70 | + } |
71 | |
72 | /* Column for labels in wideAspect */ |
73 | Column { |
74 | @@ -227,6 +244,8 @@ |
75 | leftMargin: units.gu(2) |
76 | right: parent.right |
77 | rightMargin: units.gu(2) |
78 | + top: nowPlayingWideAspectLabelsBackground.top |
79 | + topMargin: nowPlayingWideAspectTitle.lineCount === 1 ? units.gu(2) : units.gu(1.5) |
80 | } |
81 | |
82 | /* Title of track */ |
83 | @@ -263,224 +282,137 @@ |
84 | } |
85 | } |
86 | |
87 | - /* Progress bar component */ |
88 | + /* Detect cover art swipe */ |
89 | MouseArea { |
90 | - id: musicToolbarFullProgressContainer |
91 | - anchors.left: parent.left |
92 | - anchors.leftMargin: units.gu(3) |
93 | + anchors.fill: parent |
94 | + property string direction: "None" |
95 | + property real lastX: -1 |
96 | + |
97 | + onPressed: lastX = mouse.x |
98 | + |
99 | + onReleased: { |
100 | + var diff = mouse.x - lastX |
101 | + if (Math.abs(diff) < units.gu(4)) { |
102 | + return; |
103 | + } else if (diff < 0) { |
104 | + player.previousSong() |
105 | + } else if (diff > 0) { |
106 | + player.nextSong() |
107 | + } |
108 | + } |
109 | + } |
110 | + } |
111 | + |
112 | + /* Background for progress bar component */ |
113 | + Rectangle { |
114 | + id: musicToolbarFullProgressBackground |
115 | + anchors { |
116 | + bottom: parent.bottom |
117 | + left: parent.left |
118 | + right: parent.right |
119 | + top: blurredBackground.bottom |
120 | + } |
121 | + color: styleMusic.common.black |
122 | + } |
123 | + |
124 | + /* Progress bar component */ |
125 | + Item { |
126 | + id: musicToolbarFullProgressContainer |
127 | + anchors.left: parent.left |
128 | + anchors.leftMargin: units.gu(3) |
129 | + anchors.right: parent.right |
130 | + anchors.rightMargin: units.gu(3) |
131 | + anchors.top: blurredBackground.bottom |
132 | + anchors.topMargin: units.gu(1) |
133 | + height: units.gu(3) |
134 | + width: parent.width |
135 | + |
136 | + /* Position label */ |
137 | + Label { |
138 | + id: musicToolbarFullPositionLabel |
139 | + anchors.top: progressSliderMusic.bottom |
140 | + anchors.topMargin: units.gu(-2) |
141 | + anchors.left: parent.left |
142 | + color: styleMusic.nowPlaying.labelSecondaryColor |
143 | + fontSize: "small" |
144 | + height: parent.height |
145 | + horizontalAlignment: Text.AlignHCenter |
146 | + text: durationToString(player.position) |
147 | + verticalAlignment: Text.AlignVCenter |
148 | + width: units.gu(3) |
149 | + } |
150 | + |
151 | + Slider { |
152 | + id: progressSliderMusic |
153 | + anchors.left: parent.left |
154 | anchors.right: parent.right |
155 | - anchors.rightMargin: units.gu(3) |
156 | - anchors.top: nowPlayingWideAspectLabels.bottom |
157 | - anchors.topMargin: nowPlayingWideAspectTitle.lineCount === 1 ? units.gu(3) : units.gu(1.5) |
158 | - height: units.gu(3) |
159 | - width: parent.width |
160 | - |
161 | - /* Position label */ |
162 | - Label { |
163 | - id: musicToolbarFullPositionLabel |
164 | - anchors.top: progressSliderMusic.bottom |
165 | - anchors.topMargin: units.gu(-2) |
166 | - anchors.left: parent.left |
167 | - color: styleMusic.nowPlaying.labelSecondaryColor |
168 | - fontSize: "small" |
169 | - height: parent.height |
170 | - horizontalAlignment: Text.AlignHCenter |
171 | - text: durationToString(player.position) |
172 | - verticalAlignment: Text.AlignVCenter |
173 | - width: units.gu(3) |
174 | - } |
175 | - |
176 | - Slider { |
177 | - id: progressSliderMusic |
178 | - anchors.left: parent.left |
179 | - anchors.right: parent.right |
180 | - maximumValue: player.duration // load value at startup |
181 | - objectName: "progressSliderShape" |
182 | - style: UbuntuBlueSliderStyle {} |
183 | - value: player.position // load value at startup |
184 | - |
185 | - function formatValue(v) { |
186 | - if (seeking) { // update position label while dragging |
187 | - musicToolbarFullPositionLabel.text = durationToString(v) |
188 | - } |
189 | - |
190 | - return durationToString(v) |
191 | - } |
192 | - |
193 | - property bool seeking: false |
194 | - property bool seeked: false |
195 | - |
196 | - onSeekingChanged: { |
197 | - if (seeking === false) { |
198 | + maximumValue: player.duration // load value at startup |
199 | + objectName: "progressSliderShape" |
200 | + style: UbuntuBlueSliderStyle {} |
201 | + value: player.position // load value at startup |
202 | + |
203 | + function formatValue(v) { |
204 | + if (seeking) { // update position label while dragging |
205 | + musicToolbarFullPositionLabel.text = durationToString(v) |
206 | + } |
207 | + |
208 | + return durationToString(v) |
209 | + } |
210 | + |
211 | + property bool seeking: false |
212 | + property bool seeked: false |
213 | + |
214 | + onSeekingChanged: { |
215 | + if (seeking === false) { |
216 | + musicToolbarFullPositionLabel.text = durationToString(player.position) |
217 | + } |
218 | + } |
219 | + |
220 | + onPressedChanged: { |
221 | + seeking = pressed |
222 | + |
223 | + if (!pressed) { |
224 | + seeked = true |
225 | + player.seek(value) |
226 | + |
227 | + musicToolbarFullPositionLabel.text = durationToString(value) |
228 | + } |
229 | + } |
230 | + |
231 | + Connections { |
232 | + target: player |
233 | + onPositionChanged: { |
234 | + // seeked is a workaround for bug 1310706 as the first position after a seek is sometimes invalid (0) |
235 | + if (progressSliderMusic.seeking === false && !progressSliderMusic.seeked) { |
236 | musicToolbarFullPositionLabel.text = durationToString(player.position) |
237 | - } |
238 | - } |
239 | - |
240 | - onPressedChanged: { |
241 | - seeking = pressed |
242 | - |
243 | - if (!pressed) { |
244 | - seeked = true |
245 | - player.seek(value) |
246 | - |
247 | - musicToolbarFullPositionLabel.text = durationToString(value) |
248 | - } |
249 | - } |
250 | - |
251 | - Connections { |
252 | - target: player |
253 | - onPositionChanged: { |
254 | - // seeked is a workaround for bug 1310706 as the first position after a seek is sometimes invalid (0) |
255 | - if (progressSliderMusic.seeking === false && !progressSliderMusic.seeked) { |
256 | - musicToolbarFullPositionLabel.text = durationToString(player.position) |
257 | - musicToolbarFullDurationLabel.text = durationToString(player.duration) |
258 | - |
259 | - progressSliderMusic.value = player.position |
260 | - progressSliderMusic.maximumValue = player.duration |
261 | - } |
262 | - |
263 | - progressSliderMusic.seeked = false; |
264 | - } |
265 | - onStopped: { |
266 | - musicToolbarFullPositionLabel.text = durationToString(0); |
267 | - musicToolbarFullDurationLabel.text = durationToString(0); |
268 | - } |
269 | - } |
270 | - } |
271 | - |
272 | - /* Duration label */ |
273 | - Label { |
274 | - id: musicToolbarFullDurationLabel |
275 | - anchors.top: progressSliderMusic.bottom |
276 | - anchors.topMargin: units.gu(-2) |
277 | - anchors.right: parent.right |
278 | - color: styleMusic.nowPlaying.labelSecondaryColor |
279 | - fontSize: "small" |
280 | - height: parent.height |
281 | - horizontalAlignment: Text.AlignHCenter |
282 | - text: durationToString(player.duration) |
283 | - verticalAlignment: Text.AlignVCenter |
284 | - width: units.gu(3) |
285 | - } |
286 | - } |
287 | - |
288 | - /* Repeat button */ |
289 | - MouseArea { |
290 | - id: nowPlayingRepeatButton |
291 | - anchors.right: nowPlayingPreviousButton.left |
292 | - anchors.rightMargin: units.gu(1) |
293 | - anchors.verticalCenter: nowPlayingPlayButton.verticalCenter |
294 | - height: units.gu(6) |
295 | - opacity: player.repeat && !emptyPage.noMusic ? 1 : .4 |
296 | - width: height |
297 | - onClicked: player.repeat = !player.repeat |
298 | - |
299 | - Icon { |
300 | - id: repeatIcon |
301 | - height: units.gu(3) |
302 | - width: height |
303 | - anchors.verticalCenter: parent.verticalCenter |
304 | - anchors.horizontalCenter: parent.horizontalCenter |
305 | - color: "white" |
306 | - name: "media-playlist-repeat" |
307 | - objectName: "repeatShape" |
308 | - opacity: player.repeat && !emptyPage.noMusic ? 1 : .4 |
309 | - } |
310 | - } |
311 | - |
312 | - /* Previous button */ |
313 | - MouseArea { |
314 | - id: nowPlayingPreviousButton |
315 | - anchors.right: nowPlayingPlayButton.left |
316 | - anchors.rightMargin: units.gu(1) |
317 | - anchors.verticalCenter: nowPlayingPlayButton.verticalCenter |
318 | - height: units.gu(6) |
319 | - opacity: trackQueue.model.count === 0 ? .4 : 1 |
320 | - width: height |
321 | - onClicked: player.previousSong() |
322 | - |
323 | - Icon { |
324 | - id: nowPlayingPreviousIndicator |
325 | - height: units.gu(3) |
326 | - width: height |
327 | - anchors.verticalCenter: parent.verticalCenter |
328 | - anchors.horizontalCenter: parent.horizontalCenter |
329 | - color: "white" |
330 | - name: "media-skip-backward" |
331 | - objectName: "previousShape" |
332 | - opacity: 1 |
333 | - } |
334 | - } |
335 | - |
336 | - /* Play/Pause button */ |
337 | - MouseArea { |
338 | - id: nowPlayingPlayButton |
339 | - anchors.horizontalCenter: parent.horizontalCenter |
340 | - anchors.top: musicToolbarFullProgressContainer.bottom |
341 | - anchors.topMargin: units.gu(2) |
342 | - height: units.gu(12) |
343 | - width: height |
344 | - onClicked: player.toggle() |
345 | - |
346 | - Icon { |
347 | - id: nowPlayingPlayIndicator |
348 | - height: units.gu(6) |
349 | - width: height |
350 | - anchors.verticalCenter: parent.verticalCenter |
351 | - anchors.horizontalCenter: parent.horizontalCenter |
352 | - opacity: emptyPage.noMusic ? .4 : 1 |
353 | - color: "white" |
354 | - name: player.playbackState === MediaPlayer.PlayingState ? "media-playback-pause" : "media-playback-start" |
355 | - objectName: "playShape" |
356 | - } |
357 | - } |
358 | - |
359 | - /* Next button */ |
360 | - MouseArea { |
361 | - id: nowPlayingNextButton |
362 | - anchors.left: nowPlayingPlayButton.right |
363 | - anchors.leftMargin: units.gu(1) |
364 | - anchors.verticalCenter: nowPlayingPlayButton.verticalCenter |
365 | - height: units.gu(6) |
366 | - opacity: trackQueue.model.count === 0 ? .4 : 1 |
367 | - width: height |
368 | - onClicked: player.nextSong() |
369 | - |
370 | - Icon { |
371 | - id: nowPlayingNextIndicator |
372 | - height: units.gu(3) |
373 | - width: height |
374 | - anchors.verticalCenter: parent.verticalCenter |
375 | - anchors.horizontalCenter: parent.horizontalCenter |
376 | - color: "white" |
377 | - name: "media-skip-forward" |
378 | - objectName: "forwardShape" |
379 | - opacity: 1 |
380 | - } |
381 | - } |
382 | - |
383 | - /* Shuffle button */ |
384 | - MouseArea { |
385 | - id: nowPlayingShuffleButton |
386 | - anchors.left: nowPlayingNextButton.right |
387 | - anchors.leftMargin: units.gu(1) |
388 | - anchors.verticalCenter: nowPlayingPlayButton.verticalCenter |
389 | - height: units.gu(6) |
390 | - opacity: player.shuffle && !emptyPage.noMusic ? 1 : .4 |
391 | - width: height |
392 | - onClicked: player.shuffle = !player.shuffle |
393 | - |
394 | - Icon { |
395 | - id: shuffleIcon |
396 | - height: units.gu(3) |
397 | - width: height |
398 | - anchors.verticalCenter: parent.verticalCenter |
399 | - anchors.horizontalCenter: parent.horizontalCenter |
400 | - color: "white" |
401 | - name: "media-playlist-shuffle" |
402 | - objectName: "shuffleShape" |
403 | - opacity: player.shuffle && !emptyPage.noMusic ? 1 : .4 |
404 | - } |
405 | + musicToolbarFullDurationLabel.text = durationToString(player.duration) |
406 | + |
407 | + progressSliderMusic.value = player.position |
408 | + progressSliderMusic.maximumValue = player.duration |
409 | + } |
410 | + |
411 | + progressSliderMusic.seeked = false; |
412 | + } |
413 | + onStopped: { |
414 | + musicToolbarFullPositionLabel.text = durationToString(0); |
415 | + musicToolbarFullDurationLabel.text = durationToString(0); |
416 | + } |
417 | + } |
418 | + } |
419 | + |
420 | + /* Duration label */ |
421 | + Label { |
422 | + id: musicToolbarFullDurationLabel |
423 | + anchors.top: progressSliderMusic.bottom |
424 | + anchors.topMargin: units.gu(-2) |
425 | + anchors.right: parent.right |
426 | + color: styleMusic.nowPlaying.labelSecondaryColor |
427 | + fontSize: "small" |
428 | + height: parent.height |
429 | + horizontalAlignment: Text.AlignHCenter |
430 | + text: durationToString(player.duration) |
431 | + verticalAlignment: Text.AlignVCenter |
432 | + width: units.gu(3) |
433 | } |
434 | } |
435 | } |
436 | @@ -569,7 +501,7 @@ |
437 | sourceComponent: ListView { |
438 | id: queueList |
439 | anchors { |
440 | - bottomMargin: units.gu(2) |
441 | + bottomMargin: musicToolbarFullContainer.height + units.gu(2) |
442 | fill: parent |
443 | topMargin: units.gu(2) |
444 | } |
445 | @@ -628,7 +560,7 @@ |
446 | id: queueDelegate |
447 | ListItemWithActions { |
448 | id: queueListItem |
449 | - color: player.currentIndex === index ? "#2c2c34" : mainView.backgroundColor |
450 | + color: player.currentIndex === index ? "#2c2c34" : styleMusic.mainView.backgroundColor |
451 | height: queueList.normalHeight |
452 | objectName: "nowPlayingListItem" + index |
453 | state: "" |
454 | @@ -718,4 +650,164 @@ |
455 | } |
456 | visible: isListView |
457 | } |
458 | + |
459 | + /* Full toolbar */ |
460 | + Rectangle { |
461 | + id: musicToolbarFullContainer |
462 | + anchors.bottom: parent.bottom |
463 | + color: styleMusic.common.black |
464 | + height: units.gu(10) |
465 | + width: parent.width |
466 | + |
467 | + /* Repeat button */ |
468 | + MouseArea { |
469 | + id: nowPlayingRepeatButton |
470 | + anchors.right: nowPlayingPreviousButton.left |
471 | + anchors.rightMargin: units.gu(1) |
472 | + anchors.verticalCenter: nowPlayingPlayButton.verticalCenter |
473 | + height: units.gu(6) |
474 | + opacity: player.repeat && !emptyPage.noMusic ? 1 : .4 |
475 | + width: height |
476 | + onClicked: player.repeat = !player.repeat |
477 | + |
478 | + Icon { |
479 | + id: repeatIcon |
480 | + height: units.gu(3) |
481 | + width: height |
482 | + anchors.verticalCenter: parent.verticalCenter |
483 | + anchors.horizontalCenter: parent.horizontalCenter |
484 | + color: "white" |
485 | + name: "media-playlist-repeat" |
486 | + objectName: "repeatShape" |
487 | + opacity: player.repeat && !emptyPage.noMusic ? 1 : .4 |
488 | + } |
489 | + } |
490 | + |
491 | + /* Previous button */ |
492 | + MouseArea { |
493 | + id: nowPlayingPreviousButton |
494 | + anchors.right: nowPlayingPlayButton.left |
495 | + anchors.rightMargin: units.gu(1) |
496 | + anchors.verticalCenter: nowPlayingPlayButton.verticalCenter |
497 | + height: units.gu(6) |
498 | + opacity: trackQueue.model.count === 0 ? .4 : 1 |
499 | + width: height |
500 | + onClicked: player.previousSong() |
501 | + |
502 | + Icon { |
503 | + id: nowPlayingPreviousIndicator |
504 | + height: units.gu(3) |
505 | + width: height |
506 | + anchors.verticalCenter: parent.verticalCenter |
507 | + anchors.horizontalCenter: parent.horizontalCenter |
508 | + color: "white" |
509 | + name: "media-skip-backward" |
510 | + objectName: "previousShape" |
511 | + opacity: 1 |
512 | + } |
513 | + } |
514 | + |
515 | + /* Play/Pause button */ |
516 | + MouseArea { |
517 | + id: nowPlayingPlayButton |
518 | + anchors.centerIn: parent |
519 | + height: units.gu(10) |
520 | + width: height |
521 | + onClicked: player.toggle() |
522 | + |
523 | + Icon { |
524 | + id: nowPlayingPlayIndicator |
525 | + height: units.gu(6) |
526 | + width: height |
527 | + anchors.verticalCenter: parent.verticalCenter |
528 | + anchors.horizontalCenter: parent.horizontalCenter |
529 | + opacity: emptyPage.noMusic ? .4 : 1 |
530 | + color: "white" |
531 | + name: player.playbackState === MediaPlayer.PlayingState ? "media-playback-pause" : "media-playback-start" |
532 | + objectName: "playShape" |
533 | + } |
534 | + } |
535 | + |
536 | + /* Next button */ |
537 | + MouseArea { |
538 | + id: nowPlayingNextButton |
539 | + anchors.left: nowPlayingPlayButton.right |
540 | + anchors.leftMargin: units.gu(1) |
541 | + anchors.verticalCenter: nowPlayingPlayButton.verticalCenter |
542 | + height: units.gu(6) |
543 | + opacity: trackQueue.model.count === 0 ? .4 : 1 |
544 | + width: height |
545 | + onClicked: player.nextSong() |
546 | + |
547 | + Icon { |
548 | + id: nowPlayingNextIndicator |
549 | + height: units.gu(3) |
550 | + width: height |
551 | + anchors.verticalCenter: parent.verticalCenter |
552 | + anchors.horizontalCenter: parent.horizontalCenter |
553 | + color: "white" |
554 | + name: "media-skip-forward" |
555 | + objectName: "forwardShape" |
556 | + opacity: 1 |
557 | + } |
558 | + } |
559 | + |
560 | + /* Shuffle button */ |
561 | + MouseArea { |
562 | + id: nowPlayingShuffleButton |
563 | + anchors.left: nowPlayingNextButton.right |
564 | + anchors.leftMargin: units.gu(1) |
565 | + anchors.verticalCenter: nowPlayingPlayButton.verticalCenter |
566 | + height: units.gu(6) |
567 | + opacity: player.shuffle && !emptyPage.noMusic ? 1 : .4 |
568 | + width: height |
569 | + onClicked: player.shuffle = !player.shuffle |
570 | + |
571 | + Icon { |
572 | + id: shuffleIcon |
573 | + height: units.gu(3) |
574 | + width: height |
575 | + anchors.verticalCenter: parent.verticalCenter |
576 | + anchors.horizontalCenter: parent.horizontalCenter |
577 | + color: "white" |
578 | + name: "media-playlist-shuffle" |
579 | + objectName: "shuffleShape" |
580 | + opacity: player.shuffle && !emptyPage.noMusic ? 1 : .4 |
581 | + } |
582 | + } |
583 | + |
584 | + /* Object which provides the progress bar when in the queue */ |
585 | + Rectangle { |
586 | + id: playerControlsProgressBar |
587 | + anchors { |
588 | + bottom: parent.bottom |
589 | + left: parent.left |
590 | + right: parent.right |
591 | + } |
592 | + color: styleMusic.common.black |
593 | + height: units.gu(0.25) |
594 | + visible: isListView |
595 | + |
596 | + Rectangle { |
597 | + id: playerControlsProgressBarHint |
598 | + anchors { |
599 | + left: parent.left |
600 | + bottom: parent.bottom |
601 | + } |
602 | + color: UbuntuColors.blue |
603 | + height: parent.height |
604 | + width: 0 |
605 | + |
606 | + Connections { |
607 | + target: player |
608 | + onPositionChanged: { |
609 | + playerControlsProgressBarHint.width = (player.position / player.duration) * playerControlsProgressBar.width |
610 | + } |
611 | + onStopped: { |
612 | + playerControlsProgressBarHint.width = 0; |
613 | + } |
614 | + } |
615 | + } |
616 | + } |
617 | + } |
618 | } |
619 | |
620 | === modified file 'Style.qml' |
621 | --- Style.qml 2015-01-16 22:51:25 +0000 |
622 | +++ Style.qml 2015-01-18 00:06:21 +0000 |
623 | @@ -1,5 +1,5 @@ |
624 | /* |
625 | - * Copyright (C) 2013, 2014 |
626 | + * Copyright (C) 2013, 2014, 2015 |
627 | * Andrew Hayzen <ahayzen@gmail.com> |
628 | * Daniel Holm <d.holmen@gmail.com> |
629 | * Victor Thompson <victor.thompson@gmail.com> |
630 | @@ -62,9 +62,9 @@ |
631 | } |
632 | |
633 | property QtObject mainView: QtObject{ |
634 | - property color backgroundColor: "#A55263"; |
635 | - property color footerColor: "#D75669"; |
636 | - property color headerColor: "#57365E"; |
637 | + property color backgroundColor: "#1e1e23" |
638 | + property color footerColor: backgroundColor |
639 | + property color headerColor: backgroundColor |
640 | } |
641 | |
642 | property QtObject nowPlaying: QtObject { |
643 | |
644 | === modified file 'common/ListItemWithActions.qml' |
645 | --- common/ListItemWithActions.qml 2015-01-09 18:28:14 +0000 |
646 | +++ common/ListItemWithActions.qml 2015-01-18 00:06:21 +0000 |
647 | @@ -1,5 +1,5 @@ |
648 | /* |
649 | - * Copyright (C) 2012-2014 Canonical, Ltd. |
650 | + * Copyright (C) 2012-2015 Canonical, Ltd. |
651 | * |
652 | * This program is free software; you can redistribute it and/or modify |
653 | * it under the terms of the GNU General Public License as published by |
654 | @@ -30,7 +30,7 @@ |
655 | property Action activeAction: null |
656 | property var activeItem: null |
657 | property bool triggerActionOnMouseRelease: false |
658 | - property color color: "#1e1e23" |
659 | + property color color: styleMusic.mainView.backgroundColor |
660 | property color selectedColor: "#3d3d45" // "#E6E6E6" // CUSTOM |
661 | property bool selected: false |
662 | property bool selectionMode: false |
663 | |
664 | === modified file 'music-app.qml' |
665 | --- music-app.qml 2015-01-16 22:51:25 +0000 |
666 | +++ music-app.qml 2015-01-18 00:06:21 +0000 |
667 | @@ -38,8 +38,8 @@ |
668 | id: mainView |
669 | useDeprecatedToolbar: false |
670 | |
671 | - backgroundColor: "#1e1e23" |
672 | - headerColor: "#1e1e23" |
673 | + backgroundColor: styleMusic.mainView.backgroundColor |
674 | + headerColor: styleMusic.mainView.headerColor |
675 | |
676 | // Startup settings |
677 | Settings { |
678 | @@ -886,7 +886,8 @@ |
679 | |
680 | MusicToolbar { |
681 | id: musicToolbar |
682 | - visible: mainPageStack.currentPage.title !== i18n.tr("Now playing") |
683 | + visible: mainPageStack.currentPage.title !== i18n.tr("Now playing") && |
684 | + mainPageStack.currentPage.title !== i18n.tr("Queue") |
685 | objectName: "musicToolbarObject" |
686 | z: 200 // put on top of everything else |
687 | } |
#blocked Design input