Index: ui/file_manager/audio_player/elements/control_panel.css |
diff --git a/ui/file_manager/audio_player/elements/control_panel.css b/ui/file_manager/audio_player/elements/control_panel.css |
index 78624e42e4dca8a8a60f739ea2a8fe162ffe7acb..4e5b533de9ab34d7428c97fdf9e4a3d99636b9d0 100644 |
--- a/ui/file_manager/audio_player/elements/control_panel.css |
+++ b/ui/file_manager/audio_player/elements/control_panel.css |
@@ -8,17 +8,19 @@ |
background-color: white; |
display: flex; |
flex-direction: column; |
- height: 96px; |
+ height: 64px; |
justify-content: center; |
padding: 0; |
} |
-.controls .upper-controls, |
+.controls .upper-controls { |
+ height: 32px; |
+ width: 100% |
+} |
+ |
.controls .lower-controls { |
- box-sizing: border-box; |
- height: 48px; |
- padding: 8px; |
- width: 100%; |
+ height: 32px; |
+ width: 100% |
} |
.audio-controls { |
@@ -80,38 +82,171 @@ |
justify-content: center; |
} |
-.time-controls > .time-container { |
- color: rgb(51, 51, 51); |
+.custom-slider.progress { |
+ display: flex; |
+ flex: 1 1 auto; |
+ height: 100%; |
+ position: relative; |
+ z-index: 0; /* Make a layer which includes the thumb on slider. */ |
+} |
+ |
+.custom-slider.progress > input[type='range']::-webkit-slider-thumb { |
+ background-image: -webkit-image-set( |
+ url(../assets/100/player_timeline_handler.png) 1x, |
+ url(../assets/200/player_timeline_handler.png) 2x); |
+ width: 28px; |
+} |
+ |
+.custom-slider.progress > input[type='range']::-webkit-slider-thumb:hover { |
+ background-image: -webkit-image-set( |
+ url(../assets/100/player_timeline_handler.png) 1x, |
+ url(../assets/200/player_timeline_handler.png) 2x); |
+} |
+ |
+.custom-slider.progress > input[type='range']::-webkit-slider-thumb:active { |
+ background-image: -webkit-image-set( |
+ url(../assets/100/player_timeline_handler_pressed.png) 1x, |
+ url(../assets/200/player_timeline_handler_pressed.png) 2x); |
+} |
+ |
+.custom-slider.progress.disabled > input[type='range']::-webkit-slider-thumb { |
+ background-image: none; |
+} |
+ |
+.time-controls > .time { |
cursor: default; |
- flex: none; |
+ height: 100%; |
+ position: relative; |
+ width: 53px; |
+} |
+ |
+.time-controls > .time.disabled { |
+ opacity: 0; |
+} |
+ |
+.custom-slider > input[type='range'] { |
+ -webkit-appearance: none !important; /* Hide the default thumb icon. */ |
+ background: transparent; /* Hide the standard slider bar */ |
+ height: 100%; |
+ left: -2px; /* Required to align the input element with the parent. */ |
+ outline: none; |
+ position: absolute; |
+ top: -2px; |
+ width: 100%; |
+} |
+ |
+/* Custom thumb icon. */ |
+.custom-slider > input[type='range']::-webkit-slider-thumb { |
+ -webkit-appearance: none; |
+ background-position: center center; |
+ background-repeat: no-repeat; |
+ height: 24px; |
+ position: relative; |
+ z-index: 2; |
+} |
+ |
+/* Custom slider bar (we hide the standard one). */ |
+.custom-slider > .bar { |
+ background-image: -webkit-image-set( |
+ url(../assets/100/player_timeline_base_center.png) 1x, |
+ url(../assets/200/player_timeline_base_center.png) 2x); |
+ /* In order to match the horizontal position of the standard slider bar |
+ left and right must be equal to 1/2 of the thumb icon width. */ |
+ bottom: 15px; |
+ left: 14px; /* Exactly 1/2 of the thumb width */ |
+ pointer-events: none; /* Mouse events pass through to the standard input. */ |
+ position: absolute; |
+ right: 14px; |
+ top: 15px; |
+} |
+ |
+.custom-slider > .bar > .filled, |
+.custom-slider > .bar > .cap { |
+ bottom: 0; |
+ position: absolute; |
+ top: 0; |
+} |
+ |
+/* The filled portion of the slider bar to the left of the thumb. */ |
+.custom-slider > .bar > .filled { |
+ background-image: -webkit-image-set( |
+ url(../assets/100/player_timeline_played_center.png) 1x, |
+ url(../assets/200/player_timeline_played_center.png) 2x); |
+ border-left-style: none; |
+ border-right-style: none; |
+ left: 0; |
+ width: 0; /* The element style.width is manipulated from the code. */ |
+} |
+ |
+/* Rounded caps to the left and right of the slider bar. */ |
+.custom-slider > .bar > .cap { |
+ width: 1px; |
+} |
+ |
+/* Left cap is always filled, should be the same color as .filled. */ |
+.custom-slider > .bar > .cap.left { |
+ background-image: -webkit-image-set( |
+ url(../assets/100/player_timeline_played_left.png) 1x, |
+ url(../assets/200/player_timeline_played_left.png) 2x); |
+ right: 100%; |
+} |
+ |
+/* Right cap is always not filled. */ |
+.custom-slider > .bar > .cap.right { |
+ background-image: -webkit-image-set( |
+ url(../assets/100/player_timeline_base_right.png) 1x, |
+ url(../assets/200/player_timeline_base_right.png) 2x); |
+ left: 100%; |
+} |
+ |
+.media-button.disabled, |
+.custom-slider.disabled, |
+.custom-slider.readonly { |
+ pointer-events: none; |
+} |
+ |
+/* Progress seek marker (precise time shown on mouse hover. */ |
+ |
+/* Thin vertical line across the slider bar */ |
+.custom-slider > .bar > .seek-mark { |
+ background-color: #202020; |
+ bottom: -1px; |
+ left: 0; |
+ position: absolute; |
+ top: -1px; |
+ width: 0; |
+} |
+ |
+.custom-slider > .bar > .seek-mark.visible { |
+ width: 1px; |
+} |
+ |
+.custom-slider > .bar > .seek-mark.inverted { |
+ background-color: #808080; |
+} |
+ |
+/* Text label giving the precise time corresponding to the hover position. */ |
+.custom-slider > .bar > .seek-mark > .seek-label { |
+ align-items: center; |
+ background: #202020; |
+ border-top-left-radius: 2px; |
+ border-top-right-radius: 2px; |
+ bottom: 19px; |
+ color: white; |
+ display: flex; |
+ flex-direction: row; |
font-size: 12px; |
- padding: 8px; |
- position: relative; |
-} |
- |
-.time-container > .time { |
- position: absolute; |
- right: 8px; /* Should be same as time-container's right padding. */ |
- top: 8px; /* Should be same as time-container's top padding. */ |
-} |
- |
-.time-container > .time.disabled { |
+ height: 15px; |
+ justify-content: center; |
+ left: 0; |
opacity: 0; |
-} |
- |
-.time-container > .time-spacer { |
- opacity: 0; /* This class is intended to be used as invisible spacer. */ |
-} |
- |
-.time-controls > paper-slider { |
- --paper-slider-active-color: rgb(66, 133, 244); |
- --paper-slider-knob-color: rgb(64, 138, 241); |
- flex: auto; |
-} |
- |
-.media-button.disabled, |
-paper-slider.disabled { |
- pointer-events: none; |
+ overflow: hidden; |
+ position: absolute; |
+ transition: opacity 150ms ease; |
+} |
+ |
+.custom-slider > .bar > .seek-mark.visible > .seek-label { |
+ opacity: 1; |
} |
/* Media controls in order of appearance. */ |
@@ -228,14 +363,25 @@ |
} |
/* Invisible div used to compute the width required for the elapsed time. */ |
+.time-controls > .time > .duration, |
.time-controls > .time > .current { |
align-items: center; |
+ color: rgb(51, 51, 51); |
display: flex; |
flex-direction: row; |
+ font-size: 12px; |
height: 100%; |
justify-content: flex-end; |
position: absolute; |
top: -1px; |
+} |
+ |
+.time-controls > .time > .duration { |
+ left: 0; |
+} |
+ |
+.time-controls > .time > .current { |
+ right: 0; |
} |
/* Volume controls: sound button and volume slider */ |