Skip to content

Commit 1544f22

Browse files
committed
Bug 1654684 - Add sheet-indicator and preview navigation to the print preview. r=mstriemer,fluent-reviewers,flod
Differential Revision: https://phabricator.services.mozilla.com/D96737 UltraBlame original commit: 5a0333ca8a19b1bd0ca0080e07fcccbfcef42db7
1 parent 4d38f2e commit 1544f22

File tree

16 files changed

+777
-14
lines changed

16 files changed

+777
-14
lines changed

browser/base/content/browser.css

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1422,6 +1422,19 @@ toolbarpaletteitem > toolbaritem {
14221422
font-size: large;
14231423
}
14241424

1425+
printpreview-pagination {
1426+
opacity: 0;
1427+
transition: opacity 100ms 500ms;
1428+
}
1429+
printpreview-pagination:focus-within,
1430+
.previewStack:hover > printpreview-pagination {
1431+
opacity: 1;
1432+
transition: opacity 100ms;
1433+
}
1434+
.previewStack[rendering=true] > printpreview-pagination {
1435+
opacity: 0;
1436+
}
1437+
14251438
@media (prefers-color-scheme: dark) {
14261439
.previewStack {
14271440
background-color: #2A2A2E;

toolkit/actors/PrintingChild.jsm

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,12 @@ ChromeUtils.defineModuleGetter(
2020
"resource://gre/modules/ReaderMode.jsm"
2121
);
2222

23+
ChromeUtils.defineModuleGetter(
24+
this,
25+
"DeferredTask",
26+
"resource://gre/modules/DeferredTask.jsm"
27+
);
28+
2329
let gPrintPreviewInitializingInfo = null;
2430

2531
let gPendingPreviewsMap = new Map();
@@ -87,6 +93,17 @@ class PrintingChild extends JSWindowActorChild {
8793
this.updatePageCount();
8894
break;
8995
}
96+
97+
case "scroll":
98+
if (!this._scrollTask) {
99+
this._scrollTask = new DeferredTask(
100+
() => this.updateCurrentPage(),
101+
16,
102+
16
103+
);
104+
}
105+
this._scrollTask.arm();
106+
break;
90107
}
91108
}
92109

@@ -420,6 +437,14 @@ class PrintingChild extends JSWindowActorChild {
420437
});
421438
}
422439

440+
updateCurrentPage() {
441+
let cv = this.docShell.contentViewer;
442+
cv.QueryInterface(Ci.nsIWebBrowserPrint);
443+
this.sendAsyncMessage("Printing:Preview:CurrentPage", {
444+
currentPage: cv.printPreviewCurrentPageNumber,
445+
});
446+
}
447+
423448
navigate(navType, pageNum) {
424449
let cv = this.docShell.contentViewer;
425450
cv.QueryInterface(Ci.nsIWebBrowserPrint);

toolkit/actors/PrintingParent.jsm

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,15 @@ class PrintingParent extends JSWindowActorParent {
3333
return undefined;
3434
}
3535

36-
let listener = PrintUtils._webProgressPP.value;
36+
let listener = PrintUtils._webProgressPP?.value;
3737
let data = message.data;
3838

3939
switch (message.name) {
40+
case "Printing:Preview:CurrentPage": {
41+
browser.setAttribute("current-page", message.data.currentPage);
42+
break;
43+
}
44+
4045
case "Printing:Preview:Entered": {
4146

4247

toolkit/components/printing/content/print.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -672,6 +672,7 @@ var PrintEventHandler = {
672672
detail: { sheetCount, totalPages: totalPageCount },
673673
})
674674
);
675+
this.previewBrowser.setAttribute("sheet-count", sheetCount);
675676

676677
this._hideRenderingIndicator();
677678

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
2+
3+
4+
5+
:host {
6+
7+
--blue-50: #0a84ff;
8+
--grey-90-a10: rgba(12, 12, 13, 0.1);
9+
--shadow-30: 0 4px 16px var(--grey-90-a10);
10+
--border-active-shadow: var(--blue-50);
11+
--border-active-color: ButtonShadow;
12+
}
13+
14+
:host {
15+
display: block;
16+
position: absolute;
17+
bottom: 24px;
18+
inset-inline-start: 50%;
19+
translate: -50%;
20+
}
21+
:host(:-moz-locale-dir(rtl)) {
22+
translate: 50%;
23+
}
24+
25+
.container {
26+
margin-inline: auto;
27+
align-items: center;
28+
display: flex;
29+
justify-content: center;
30+
box-shadow: var(--shadow-30);
31+
color: var(--toolbar-color);
32+
background-color: var(--toolbar-bgcolor);
33+
border-radius: 6px;
34+
border-style: none;
35+
}
36+
37+
.toolbarButton,
38+
.toolbarCenter {
39+
align-self: stretch;
40+
flex: 0 0 auto;
41+
padding: var(--toolbarbutton-outer-padding);
42+
border: none;
43+
border-inline-end: 1px solid ThreeDShadow;
44+
border-block: 1px solid ThreeDShadow;
45+
color: inherit;
46+
background-color: transparent;
47+
}
48+
.startItem {
49+
border-inline-start: 1px solid ThreeDShadow;
50+
border-start-start-radius: 6px;
51+
border-end-start-radius: 6px;
52+
}
53+
.endItem {
54+
border-start-end-radius: 6px;
55+
border-end-end-radius: 6px;
56+
}
57+
58+
.toolbarButton {
59+
min-width: calc(2 * var(--toolbarbutton-inner-padding) + 16px);
60+
min-height: calc(2 * var(--toolbarbutton-inner-padding) + 16px);
61+
}
62+
63+
.toolbarButton::after {
64+
content: "";
65+
display: inline-block;
66+
width: 16px;
67+
height: 16px;
68+
vertical-align: text-bottom;
69+
text-align: center;
70+
background-repeat: no-repeat;
71+
background-position: center center;
72+
background-size: 12px;
73+
-moz-context-properties: fill, fill-opacity;
74+
fill: var(--lwt-toolbarbutton-icon-fill, currentColor);
75+
fill-opacity: var(--toolbarbutton-icon-fill-opacity);
76+
}
77+
78+
.toolbarButton:hover {
79+
background-color: var(--toolbarbutton-hover-background);
80+
}
81+
.toolbarButton:hover:active {
82+
background-color: var(--toolbarbutton-active-background);
83+
}
84+
.toolbarButton::-moz-focus-inner {
85+
border: none;
86+
}
87+
.toolbarButton:focus {
88+
z-index: 1;
89+
}
90+
91+
.toolbarButton:-moz-focusring {
92+
outline: 2px solid var(--border-active-shadow);
93+
}
94+
.toolbarButton.startItem:-moz-focusring,
95+
.toolbarButton.endItem:-moz-locale-dir(rtl):-moz-focusring {
96+
-moz-outline-radius: 8px;
97+
-moz-outline-radius-topright: 0;
98+
-moz-outline-radius-bottomright: 0;
99+
}
100+
.toolbarButton.endItem:-moz-focusring,
101+
.toolbarButton.startItem:-moz-locale-dir(rtl):-moz-focusring {
102+
-moz-outline-radius: 8px;
103+
-moz-outline-radius-topleft: 0;
104+
-moz-outline-radius-bottomleft: 0;
105+
}
106+
107+
.toolbarCenter {
108+
flex-shrink: 0;
109+
110+
min-width: calc(8px + 3ch);
111+
padding: 0 32px;
112+
display: flex;
113+
align-items: center;
114+
justify-content: center;
115+
}
116+
117+
#navigateHome::after,
118+
#navigateEnd::after {
119+
background-image: url("chrome://global/skin/icons/chevron.svg");
120+
}
121+
122+
#navigatePrevious::after,
123+
#navigateNext::after {
124+
background-image: url("chrome://global/skin/icons/arrow-left.svg");
125+
}
126+
127+
#navigatePrevious:-moz-locale-dir(rtl)::after,
128+
#navigateEnd:-moz-locale-dir(rtl)::after,
129+
#navigateHome:-moz-locale-dir(ltr)::after,
130+
#navigateNext:-moz-locale-dir(ltr)::after {
131+
transform: scaleX(-1);
132+
}

0 commit comments

Comments
 (0)