Commit d042fdcf authored by Kuo Jen Wei's avatar Kuo Jen Wei Committed by Commit Bot

CCA: Fix UI under RTL language

This CL fix the UI looks of CCA under RTL language in following aspect:
1. Use flex-start on setting menu.
2. Mirror the directional icon.
3. Substitute padding/margin-left/right with start/end.
4. Have extra rtl rule flipping css left/right attribute.

Bug: 1133093
Test: Manually on LTR/RTL languages.

Change-Id: I684ac98903be3338e15aea28005e92aa57d4b5de
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2437318Reviewed-by: default avatarShik Chen <shik@chromium.org>
Commit-Queue: Inker Kuo <inker@chromium.org>
Cr-Commit-Position: refs/heads/master@{#813650}
parent 2bef48ee
...@@ -696,21 +696,28 @@ body.view-settings #view-settings { ...@@ -696,21 +696,28 @@ body.view-settings #view-settings {
transition: opacity 0ms; transition: opacity 0ms;
} }
body.view-settings .left-stripe, html[dir=ltr] body.view-settings .left-stripe,
body.view-grid-settings .left-stripe, html[dir=rtl] body.view-settings .right-stripe,
body.view-grid-settings #view-settings, body.view-grid-settings #view-settings,
body.view-timer-settings .left-stripe, html[dir=ltr] body.view-grid-settings .left-stripe,
html[dir=rtl] body.view-grid-settings .right-stripe,
body.view-timer-settings #view-settings, body.view-timer-settings #view-settings,
body.view-resolution-settings .left-stripe, html[dir=ltr] body.view-timer-settings .left-stripe,
html[dir=rtl] body.view-timer-settings .right-stripe,
body.view-resolution-settings #view-settings, body.view-resolution-settings #view-settings,
body.view-photo-resolution-settings .left-stripe, html[dir=ltr] body.view-resolution-settings .left-stripe,
html[dir=rtl] body.view-resolution-settings .right-stripe,
body.view-photo-resolution-settings #view-settings, body.view-photo-resolution-settings #view-settings,
body.view-photo-resolution-settings #view-resolution-settings, body.view-photo-resolution-settings #view-resolution-settings,
body.view-video-resolution-settings .left-stripe, html[dir=ltr] body.view-photo-resolution-settings .left-stripe,
html[dir=rtl] body.view-photo-resolution-settings .right-stripe,
body.view-video-resolution-settings #view-settings, body.view-video-resolution-settings #view-settings,
body.view-video-resolution-settings #view-resolution-settings, body.view-video-resolution-settings #view-resolution-settings,
body.view-expert-settings .left-stripe, html[dir=ltr] body.view-video-resolution-settings .left-stripe,
body.view-expert-settings #view-settings { html[dir=rtl] body.view-video-resolution-settings .right-stripe,
body.view-expert-settings #view-settings,
html[dir=ltr] body.view-expert-settings .left-stripe,
html[dir=rtl] body.view-expert-settings .right-stripe {
opacity: 0; opacity: 0;
} }
...@@ -737,15 +744,6 @@ body.max-wnd #view-camera { ...@@ -737,15 +744,6 @@ body.max-wnd #view-camera {
--bottom-line: 56px; --bottom-line: 56px;
} }
body.w-letterbox.w-letterbox-s #view-camera {
justify-content: flex-end;
}
body.w-letterbox.w-letterbox-m #view-camera,
body.w-letterbox.w-letterbox-l #view-camera {
justify-content: flex-start;
}
body.w-letterbox.w-letterbox-xl #view-camera { body.w-letterbox.w-letterbox-xl #view-camera {
justify-content: center; justify-content: center;
} }
...@@ -766,8 +764,14 @@ body:not(.w-letterbox).preview-vertical-dock #view-camera { ...@@ -766,8 +764,14 @@ body:not(.w-letterbox).preview-vertical-dock #view-camera {
position: relative; position: relative;
} }
body.w-letterbox.w-letterbox-s #preview-wrapper {
margin-left: auto; /* csschecker-disable-line left-right */
margin-right: 0; /* csschecker-disable-line left-right */
}
body.w-letterbox.w-letterbox-l #preview-wrapper { body.w-letterbox.w-letterbox-l #preview-wrapper {
left: 72px; margin-left: 72px; /* csschecker-disable-line left-right */
margin-right: auto; /* csschecker-disable-line left-right */
} }
body:not(.w-letterbox).preview-vertical-dock #preview-wrapper { body:not(.w-letterbox).preview-vertical-dock #preview-wrapper {
...@@ -829,6 +833,7 @@ body.mirror:not(.streaming) #preview-video { ...@@ -829,6 +833,7 @@ body.mirror:not(.streaming) #preview-video {
font-size: 14px; font-size: 14px;
left: 60px; left: 60px;
position: absolute; position: absolute;
text-align: left; /* csschecker-disable-line left-right */
top: 10px; top: 10px;
} }
...@@ -933,8 +938,8 @@ body.view-grid-settings._4x4 #preview-grid-horizontal::before { ...@@ -933,8 +938,8 @@ body.view-grid-settings._4x4 #preview-grid-horizontal::before {
} }
#preview-grid-vertical { #preview-grid-vertical {
border-left: 1px solid white; border-inline-end: 1px solid white;
border-right: 1px solid white; border-inline-start: 1px solid white;
bottom: 0; bottom: 0;
left: 50%; left: 50%;
position: absolute; position: absolute;
...@@ -944,7 +949,7 @@ body.view-grid-settings._4x4 #preview-grid-horizontal::before { ...@@ -944,7 +949,7 @@ body.view-grid-settings._4x4 #preview-grid-horizontal::before {
} }
body._4x4 #preview-grid-vertical::before { body._4x4 #preview-grid-vertical::before {
border-right: 1px solid white; border-right: 1px solid white; /* csschecker-disable-line left-right */
bottom: 0; bottom: 0;
content: ''; content: '';
left: 0; left: 0;
...@@ -1028,7 +1033,7 @@ body:not(.recording-ui-paused) #record-time [i18n-content=record_video_paused_ms ...@@ -1028,7 +1033,7 @@ body:not(.recording-ui-paused) #record-time [i18n-content=record_video_paused_ms
} }
#record-time #record-time-msg { #record-time #record-time-msg {
margin-left: 8px; margin-inline-start: 8px;
} }
@media print { @media print {
...@@ -1150,7 +1155,7 @@ body:not(.recording-ui-paused) #record-time [i18n-content=record_video_paused_ms ...@@ -1150,7 +1155,7 @@ body:not(.recording-ui-paused) #record-time [i18n-content=record_video_paused_ms
background-image: url(/images/camera_intro_banner_icon.svg); background-image: url(/images/camera_intro_banner_icon.svg);
display: inline-block; display: inline-block;
height: 20px; height: 20px;
margin-right: 10px; margin-inline-end: 10px;
vertical-align: middle; vertical-align: middle;
width: 20px; width: 20px;
} }
...@@ -1175,12 +1180,16 @@ body:not(.recording-ui-paused) #record-time [i18n-content=record_video_paused_ms ...@@ -1175,12 +1180,16 @@ body:not(.recording-ui-paused) #record-time [i18n-content=record_video_paused_ms
width: 20px; width: 20px;
} }
html[dir=rtl] #banner-close {
left: 15px;
right: auto;
}
.menu { .menu {
background: rgba(0, 0, 0, 0.75); background: rgba(0, 0, 0, 0.75);
display: flex; display: flex;
flex-direction: column; flex-direction: column;
height: 100vh; height: 100vh;
left: 0;
min-width: 360px; min-width: 360px;
opacity: 0.9; opacity: 0.9;
overflow-y: scroll; overflow-y: scroll;
...@@ -1200,7 +1209,7 @@ body:not(.recording-ui-paused) #record-time [i18n-content=record_video_paused_ms ...@@ -1200,7 +1209,7 @@ body:not(.recording-ui-paused) #record-time [i18n-content=record_video_paused_ms
font-size: 13px; font-size: 13px;
height: 64px; height: 64px;
justify-content: flex-start; justify-content: flex-start;
text-align: left; text-align: initial;
} }
button.menu-item:hover, button.menu-item:hover,
...@@ -1252,23 +1261,23 @@ label.menu-item.animate::before { ...@@ -1252,23 +1261,23 @@ label.menu-item.animate::before {
} }
.menu-item { .menu-item {
padding-left: 32px; padding-inline-start: 32px;
} }
.menu-header { .menu-header {
color: white; color: white;
font-size: 20px; font-size: 20px;
height: 72px; height: 72px;
padding-left: 16px; padding-inline-start: 16px;
} }
.menu-item.resol-item { .menu-item.resol-item {
padding-left: 64px; padding-inline-start: 64px;
} }
.menu-item .icon.end { .menu-item .icon.end {
margin-left: auto; margin-inline-end: 16px;
margin-right: 16px; margin-inline-start: auto;
} }
.menu-item .description { .menu-item .description {
...@@ -1333,6 +1342,10 @@ body.tab-navigation button.menu-item:focus::after { ...@@ -1333,6 +1342,10 @@ body.tab-navigation button.menu-item:focus::after {
background-image: url(/images/settings_button_back.svg); background-image: url(/images/settings_button_back.svg);
} }
html[dir=rtl] .menu-header .icon {
transform: scale(-1, 1);
}
.menu-header .icon:hover { .menu-header .icon:hover {
background-color: var(--hover-color); background-color: var(--hover-color);
} }
...@@ -1373,6 +1386,10 @@ body.no-resolution-settings #settings-resolution { ...@@ -1373,6 +1386,10 @@ body.no-resolution-settings #settings-resolution {
background-image: url(/images/settings_button_expand.svg); background-image: url(/images/settings_button_expand.svg);
} }
html[dir=rtl] .icon.end {
transform: scale(-1, 1);
}
#view-warning, #view-warning,
.dialog { .dialog {
align-items: center; align-items: center;
......
...@@ -140,6 +140,11 @@ class ChromeAppBrowserProxy { ...@@ -140,6 +140,11 @@ class ChromeAppBrowserProxy {
return chrome.runtime.getManifest().version; return chrome.runtime.getManifest().version;
} }
/** @override */
getTextDirection() {
return this.getI18nMessage('@@bidi_dir');
}
/** @override */ /** @override */
addOnMessageExternalListener(listener) { addOnMessageExternalListener(listener) {
chrome.runtime.onMessageExternal.addListener(listener); chrome.runtime.onMessageExternal.addListener(listener);
......
...@@ -93,6 +93,13 @@ export class BrowserProxy { ...@@ -93,6 +93,13 @@ export class BrowserProxy {
*/ */
getAppVersion() {} getAppVersion() {}
/**
* @return {string} Returns 'ltr'/'rtl' for left-to-right/right-to-left system
* UI language.
* @abstract
*/
getTextDirection() {}
/** /**
* @param {function(*, !MessageSender, function(string)): (boolean|undefined)} * @param {function(*, !MessageSender, function(string)): (boolean|undefined)}
* listener * listener
......
...@@ -136,6 +136,11 @@ class WebUIBrowserProxy { ...@@ -136,6 +136,11 @@ class WebUIBrowserProxy {
return 'SWA'; return 'SWA';
} }
/** @override */
getTextDirection() {
return window.loadTimeData.getString('textdirection');
}
/** @override */ /** @override */
addOnMessageExternalListener(listener) { addOnMessageExternalListener(listener) {
throw new NotImplementedError(); throw new NotImplementedError();
......
...@@ -189,6 +189,7 @@ export class App { ...@@ -189,6 +189,7 @@ export class App {
* @return {!Promise} * @return {!Promise}
*/ */
async start() { async start() {
document.documentElement.dir = browserProxy.getTextDirection();
await this.cameraView_.initialize(); await this.cameraView_.initialize();
try { try {
......
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