Commit a9fc6c03 authored by dstockwell's avatar dstockwell Committed by Commit Bot

pdf: Implement UX spec for icon states

* Adjusts size/location of icons and focus/hover/active states.
* Makes viewer-toolbar-dropdown use a single paper-button to avoid overlapping focus/ripple.
* Removes focus when a dropdown is cancelled by pointer events.

Spec: go/pdf-icon-states-spec
Impl: go/pdf-icon-states-impl

Bug: 902646
Change-Id: If3bee9f86c8fa9f50537c8ff3cc4e3a9011172eb
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1508014
Commit-Queue: dstockwell <dstockwell@chromium.org>
Commit-Queue: dsinclair <dsinclair@chromium.org>
Reviewed-by: default avatardsinclair <dsinclair@chromium.org>
Auto-Submit: dstockwell <dstockwell@chromium.org>
Cr-Commit-Position: refs/heads/master@{#638574}
parent 842ff460
...@@ -50,11 +50,20 @@ ...@@ -50,11 +50,20 @@
} }
paper-icon-button { paper-icon-button {
margin-inline-end: 12px; height: 36px;
margin: 6px;
padding: 8px;
width: 36px;
}
paper-icon-button:hover {
background: rgba(255, 255, 255, 0.08);
border-radius: 50%;
} }
viewer-toolbar-dropdown { paper-icon-button:focus {
margin-inline-end: 4px; --paper-icon-button-ink-color:white;
--paper-ripple-opacity: 0.24;
} }
paper-progress { paper-progress {
...@@ -100,33 +109,45 @@ ...@@ -100,33 +109,45 @@
--dropdown-width: 346px; --dropdown-width: 346px;
} }
#eraser:not([selected]),
#pen:not([selected]),
#highlighter:not([selected]) {
--pen-tip-fill: currentcolor !important;
--pen-tip-border: currentcolor !important;
}
#pen, #pen,
#highlighter { #highlighter {
--dropdown-open-background: rgb(50, 54, 57); --dropdown-open-background: rgb(50, 54, 57);
} }
#eraser[selected] { #eraser {
background-color: rgb(50, 54, 57); opacity: 0.38;
border-radius: 4px; }
#eraser[selected],
#eraser:focus,
#eraser:hover {
opacity: 1;
} }
#annotation-separator { #annotation-separator {
background: rgb(151, 152, 152); background: white;
height: 30px; height: 30px;
margin-inline-end: 12px; margin-inline-end: 12px;
margin-inline-start: 12px;
opacity: 0.38;
width: 1px; width: 1px;
} }
:host([annotation-mode]) #annotate { :host([annotation-mode]) #annotate {
background-color: rgb(25, 27, 29); background-color: rgba(255, 255, 255, 0.24);
border-radius: 4px; border-radius: 50%;
}
#bookmarks {
margin-inline-start: 8px;
}
#pen {
margin-inline-end: 10px;
}
#highlighter {
margin-inline-end: 6px;
} }
.invisible { .invisible {
...@@ -200,6 +221,7 @@ ...@@ -200,6 +221,7 @@
</paper-icon-button> </paper-icon-button>
<viewer-toolbar-dropdown id="bookmarks" <viewer-toolbar-dropdown id="bookmarks"
selected
metrics-id="bookmarks" metrics-id="bookmarks"
hidden$="[[!bookmarks.length]]" hidden$="[[!bookmarks.length]]"
open-icon="pdf:bookmark" open-icon="pdf:bookmark"
......
<link rel="import" href="chrome://resources/html/polymer.html"> <link rel="import" href="chrome://resources/html/polymer.html">
<link rel="import" href="chrome://resources/polymer/v1_0/paper-icon-button/paper-icon-button.html"> <link rel="import" href="chrome://resources/polymer/v1_0/paper-button/paper-button.html">
<link rel="import" href="chrome://resources/cr_elements/icons.html"> <link rel="import" href="chrome://resources/cr_elements/icons.html">
<link rel="import" href="chrome://resources/cr_elements/shared_vars_css.html"> <link rel="import" href="chrome://resources/cr_elements/shared_vars_css.html">
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
<template> <template>
<style> <style>
:host { :host {
display: inline-block;
position: relative; position: relative;
text-align: start; text-align: start;
--dropdown-width: 260px; --dropdown-width: 260px;
...@@ -43,20 +44,37 @@ ...@@ -43,20 +44,37 @@
padding: 6px 0 4px 0; padding: 6px 0 4px 0;
} }
#icon { #button {
border-radius: 4px;
cursor: pointer; cursor: pointer;
display: inline-block; display: inline-block;
height: 32px;
margin: 0;
min-width: 48px;
opacity: 0.38;
padding-bottom: 6px;
padding-inline-end: 2px;
padding-inline-start: 6px;
padding-top: 6px;
width: 48px;
} }
:host([dropdown-open]) #icon, #button:focus {
:host([selected]) #icon { background-color: rgba(255, 255, 255, 0.24);
background-color: var(--dropdown-open-background, rgb(25, 27, 29)); opacity: 1;
border-radius: 4px;
} }
#arrow { #button:hover {
margin-inline-start: -8px; background-color: rgba(255, 255, 255, 0.08);
padding-inline-end: 4px; opacity: 1;
}
:host([selected]) #button {
opacity: 1;
}
:host([dropdown-open]) #button {
background-color: rgba(255, 255, 255, 0.24);
} }
h1 { h1 {
...@@ -67,12 +85,11 @@ ...@@ -67,12 +85,11 @@
padding: 14px 28px; padding: 14px 28px;
} }
</style> </style>
<div on-click="toggleDropdown" id="icon"> <paper-button on-click="toggleDropdown" id="button"
<paper-icon-button id="main-icon" icon="[[dropdownIcon]]"
aria-label$="{{header}}" title$="{{header}}"> aria-label$="{{header}}" title$="{{header}}">
</paper-icon-button> <iron-icon icon="[[dropdownIcon]]"></iron-icon>
<iron-icon icon="cr:arrow-drop-down" id="arrow"></iron-icon> <iron-icon icon="cr:arrow-drop-down"></iron-icon>
</div> </paper-button>
<div id="container"> <div id="container">
<div id="dropdown" style="display: none"> <div id="dropdown" style="display: none">
......
...@@ -101,6 +101,7 @@ Polymer({ ...@@ -101,6 +101,7 @@ Polymer({
} }
if (this.dropdownOpen) { if (this.dropdownOpen) {
this.toggleDropdown(); this.toggleDropdown();
this.blur();
} }
// Clean up the handler. The dropdown may already be closed. // Clean up the handler. The dropdown may already be closed.
window.removeEventListener('pointerdown', listener); window.removeEventListener('pointerdown', listener);
......
...@@ -67,7 +67,7 @@ var tests = [ ...@@ -67,7 +67,7 @@ var tests = [
// Clicking on the plugin should close the bookmarks menu. // Clicking on the plugin should close the bookmarks menu.
chrome.test.assertFalse(dropdown.dropdownOpen); chrome.test.assertFalse(dropdown.dropdownOpen);
MockInteractions.tap(dropdown.$.icon); MockInteractions.tap(dropdown.$.button);
chrome.test.assertTrue(dropdown.dropdownOpen); chrome.test.assertTrue(dropdown.dropdownOpen);
// Generate pointer event manually, as MockInteractions doesn't include // Generate pointer event manually, as MockInteractions doesn't include
// this. // this.
...@@ -75,7 +75,7 @@ var tests = [ ...@@ -75,7 +75,7 @@ var tests = [
chrome.test.assertFalse(dropdown.dropdownOpen, chrome.test.assertFalse(dropdown.dropdownOpen,
"Clicking plugin closes dropdown"); "Clicking plugin closes dropdown");
MockInteractions.tap(dropdown.$.icon); MockInteractions.tap(dropdown.$.button);
chrome.test.assertTrue(dropdown.dropdownOpen); chrome.test.assertTrue(dropdown.dropdownOpen);
MockInteractions.pressAndReleaseKeyOn(document, ESC_KEY); MockInteractions.pressAndReleaseKeyOn(document, ESC_KEY);
chrome.test.assertFalse(dropdown.dropdownOpen, chrome.test.assertFalse(dropdown.dropdownOpen,
......
...@@ -97,12 +97,12 @@ var tests = [ ...@@ -97,12 +97,12 @@ var tests = [
chrome.test.assertFalse(dropdown.dropdownOpen); chrome.test.assertFalse(dropdown.dropdownOpen);
chrome.test.assertEq('closedIcon', dropdown.dropdownIcon); chrome.test.assertEq('closedIcon', dropdown.dropdownIcon);
MockInteractions.tap(dropdown.$.icon); MockInteractions.tap(dropdown.$.button);
chrome.test.assertTrue(dropdown.dropdownOpen); chrome.test.assertTrue(dropdown.dropdownOpen);
chrome.test.assertEq('openIcon', dropdown.dropdownIcon); chrome.test.assertEq('openIcon', dropdown.dropdownIcon);
MockInteractions.tap(dropdown.$.icon); MockInteractions.tap(dropdown.$.button);
chrome.test.assertFalse(dropdown.dropdownOpen); chrome.test.assertFalse(dropdown.dropdownOpen);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment