Bug 1352075 - Add Photon arrow-panel animation for Mac+Windows. r?dao, r=mossop
* Use new panel animation when opening arrow-panels (including bookmarks menu) to fade in and drop into position
* Linux/GTK is (still) excluded
* The same element has its opacity and transform properties animated as before, so it doesnt change fundamentally
* New animation is non-directional (i.e. LTR vs. RTL)
* Fine-tune open/close transitions via :epang
MozReview-Commit-ID: 8t5XXT8KmmD
--- a/browser/base/content/browser.css
+++ b/browser/base/content/browser.css
@@ -1049,27 +1049,83 @@ toolbarpaletteitem[place="palette"] > #d
-moz-appearance: none;
-moz-binding: url("chrome://browser/content/places/menu.xml#places-popup-arrow");
background: transparent;
border: none;
/* The popup inherits -moz-image-region from the button, must reset it */
-moz-image-region: auto;
}
+%ifdef MOZ_PHOTON_ANIMATIONS
%ifdef MOZ_WIDGET_COCOA
/* On Mac, use the properties "-moz-window-transform" and "-moz-window-opacity"
instead of "transform" and "opacity" for these animations.
The -moz-window* properties apply to the whole window including the window's
shadow, and they don't affect the window's "shape", so the system doesn't
have to recompute the shadow shape during the animation. This makes them a
lot faster. In fact, Gecko no longer triggers shadow shape recomputations
for repaints.
These properties are not implemented on other platforms. */
#BMB_bookmarksPopup {
+ -moz-window-opacity: 0;
+ -moz-window-transform: translateY(-70px);
+ transition-property: -moz-window-transform, -moz-window-opacity;
+ transition-duration: 0.18s, 0.18s;
+ transition-timing-function:
+ var(--animation-easing-function), ease-out;
+}
+
+#BMB_bookmarksPopup[side="bottom"] {
+ -moz-window-transform: translateY(70px);
+}
+
+#BMB_bookmarksPopup[animate="open"] {
+ -moz-window-opacity: 1.0;
+ transition-duration: 0.20s, 0.10s;
+ -moz-window-transform: none;
+ transition-timing-function:
+ var(--animation-easing-function), ease-in-out;
+}
+
+#BMB_bookmarksPopup[animate="cancel"] {
+ -moz-window-transform: none;
+}
+
+%elifndef MOZ_WIDGET_GTK
+
+#BMB_bookmarksPopup {
+ opacity: 0;
+ transform: translateY(-70px);
+ transition-property: transform, opacity;
+ transition-duration: 0.18s, 0.18s;
+ transition-timing-function:
+ var(--animation-easing-function), ease-out;
+}
+
+#BMB_bookmarksPopup[side="bottom"] {
+ transform: translateY(70px);
+}
+
+#BMB_bookmarksPopup[animate="open"] {
+ opacity: 1.0;
+ transition-duration: 0.20s, 0.10s;
+ transform: none;
+ transition-timing-function:
+ var(--animation-easing-function), ease-in-out;
+}
+
+#BMB_bookmarksPopup[animate="cancel"] {
+ transform: none;
+}
+%endif
+
+%else
+%ifdef MOZ_WIDGET_COCOA
+#BMB_bookmarksPopup {
-moz-window-transform: scale(.4);
-moz-window-opacity: 0;
transition-property: -moz-window-transform, -moz-window-opacity;
transition-duration: 0.15s;
transition-timing-function: ease-out;
}
#BMB_bookmarksPopup[animate="open"] {
@@ -1135,16 +1191,17 @@ toolbarpaletteitem[place="palette"] > #d
transform-origin: 20px bottom;
}
#BMB_bookmarksPopup[arrowposition="before_end"]:-moz-locale-dir(ltr),
#BMB_bookmarksPopup[arrowposition="before_start"]:-moz-locale-dir(rtl) {
transform-origin: calc(100% - 20px) bottom;
}
%endif
+%endif
/* Customize mode */
#navigator-toolbox,
#browser-bottombox,
#content-deck {
transition-property: margin-left, margin-right;
transition-duration: 200ms;
transition-timing-function: linear;
--- a/toolkit/content/xul.css
+++ b/toolkit/content/xul.css
@@ -436,27 +436,85 @@ tooltip {
white-space: pre-wrap;
margin-top: 21px;
}
panel[type="arrow"] {
-moz-binding: url("chrome://global/content/bindings/popup.xml#arrowpanel");
}
+%ifdef MOZ_PHOTON_ANIMATIONS
%ifdef MOZ_WIDGET_COCOA
/* On Mac, use the properties "-moz-window-transform" and "-moz-window-opacity"
instead of "transform" and "opacity" for these animations.
The -moz-window* properties apply to the whole window including the window's
shadow, and they don't affect the window's "shape", so the system doesn't
have to recompute the shadow shape during the animation. This makes them a
lot faster. In fact, Gecko no longer triggers shadow shape recomputations
for repaints.
These properties are not implemented on other platforms. */
panel[type="arrow"]:not([animate="false"]) {
+ -moz-window-opacity: 0;
+ -moz-window-transform: translateY(-70px);
+ transition-property: -moz-window-transform, -moz-window-opacity;
+ transition-duration: 0.18s, 0.18s;
+ transition-timing-function:
+ var(--animation-easing-function), ease-out;
+}
+
+panel[type="arrow"][side="bottom"]:not([animate="false"]) {
+ -moz-window-transform: translateY(70px);
+}
+
+panel[type="arrow"][animate="open"] {
+ -moz-window-opacity: 1.0;
+ transition-duration: 0.20s, 0.10s;
+ -moz-window-transform: none;
+ transition-timing-function:
+ var(--animation-easing-function), ease-in-out;
+}
+
+panel[type="arrow"][animate="cancel"] {
+ -moz-window-transform: none;
+}
+
+%elifndef MOZ_WIDGET_GTK
+
+panel[type="arrow"]:not([animate="false"]) {
+ opacity: 0;
+ transform: translateY(-70px);
+ transition-property: transform, opacity;
+ transition-duration: 0.18s, 0.18s;
+ transition-timing-function:
+ var(--animation-easing-function), ease-out;
+}
+
+panel[type="arrow"][side="bottom"]:not([animate="false"]) {
+ transform: translateY(70px);
+}
+
+panel[type="arrow"][animate="open"] {
+ opacity: 1.0;
+ transition-duration: 0.20s, 0.10s;
+ transform: none;
+ transition-timing-function:
+ var(--animation-easing-function), ease-in-out;
+}
+
+panel[type="arrow"][animate="cancel"] {
+ transform: none;
+}
+
+%endif
+
+%else
+
+%ifdef MOZ_WIDGET_COCOA
+panel[type="arrow"]:not([animate="false"]) {
-moz-window-transform: scale(.4);
-moz-window-opacity: 0;
transition-property: -moz-window-transform, -moz-window-opacity;
transition-duration: 0.15s;
transition-timing-function: ease-out;
}
panel[type="arrow"][animate="open"] {
@@ -563,16 +621,17 @@ panel[arrowposition="start_before"]:-moz
}
panel[arrowposition="end_after"]:-moz-locale-dir(ltr),
panel[arrowposition="start_after"]:-moz-locale-dir(rtl) {
transform-origin: left calc(100% - 20px);
}
%endif
+%endif
%ifdef XP_MACOSX
.statusbar-resizerpanel {
display: none;
}
%else
window[sizemode="maximized"] statusbarpanel.statusbar-resizerpanel {
visibility: collapse;