mirror of
https://github.com/responsively-org/responsively-app
synced 2024-11-10 23:04:20 +00:00
bug(desktop-app): fix zoom going negative
fixes issue were zoom went negative when zoomed out using scrolling in main window. Closes: #481
This commit is contained in:
parent
2ddf2a0dde
commit
ea652c6547
6 changed files with 58 additions and 8 deletions
|
@ -18,6 +18,7 @@ import {
|
||||||
} from '../constants/pubsubEvents';
|
} from '../constants/pubsubEvents';
|
||||||
import {getBounds, getDefaultDevToolsWindowSize} from '../reducers/browser';
|
import {getBounds, getDefaultDevToolsWindowSize} from '../reducers/browser';
|
||||||
import {DEVTOOLS_MODES} from '../constants/previewerLayouts';
|
import {DEVTOOLS_MODES} from '../constants/previewerLayouts';
|
||||||
|
import {normalizeZoomLevel} from '../utils/browserUtils';
|
||||||
|
|
||||||
export const NEW_ADDRESS = 'NEW_ADDRESS';
|
export const NEW_ADDRESS = 'NEW_ADDRESS';
|
||||||
export const NEW_PAGE_META_FIELD = 'NEW_PAGE_META_FIELD';
|
export const NEW_PAGE_META_FIELD = 'NEW_PAGE_META_FIELD';
|
||||||
|
@ -225,12 +226,13 @@ export function onZoomChange(newLevel) {
|
||||||
const {
|
const {
|
||||||
browser: {zoomLevel},
|
browser: {zoomLevel},
|
||||||
} = getState();
|
} = getState();
|
||||||
|
const normalizedZoomLevel = normalizeZoomLevel(newLevel);
|
||||||
|
|
||||||
if (newLevel === zoomLevel) {
|
if (normalizedZoomLevel === zoomLevel) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
dispatch(newZoomLevel(newLevel));
|
dispatch(newZoomLevel(normalizedZoomLevel));
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,7 @@ import styles from './styles.module.css';
|
||||||
import useCommonStyles from '../useCommonStyles';
|
import useCommonStyles from '../useCommonStyles';
|
||||||
import './otherStyles.css';
|
import './otherStyles.css';
|
||||||
import {Tooltip} from '@material-ui/core';
|
import {Tooltip} from '@material-ui/core';
|
||||||
|
import {MIN_ZOOM_LEVEL, MAX_ZOOM_LEVEL} from '../../constants';
|
||||||
|
|
||||||
function BrowserZoom(props) {
|
function BrowserZoom(props) {
|
||||||
const [showExpanded, setShowExpanded] = useState(false);
|
const [showExpanded, setShowExpanded] = useState(false);
|
||||||
|
@ -51,7 +52,7 @@ function BrowserZoom(props) {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const value = Math.round(props.browser.zoomLevel * 100);
|
const zoomLevel = props.browser.zoomLevel;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
|
@ -69,7 +70,11 @@ function BrowserZoom(props) {
|
||||||
})}
|
})}
|
||||||
>
|
>
|
||||||
<ToggleButtonGroup value={[]} onChange={_zoomChange}>
|
<ToggleButtonGroup value={[]} onChange={_zoomChange}>
|
||||||
<ToggleButton value="zoomOut" disabled={value === 20} disableRipple>
|
<ToggleButton
|
||||||
|
value="zoomOut"
|
||||||
|
disabled={zoomLevel === MIN_ZOOM_LEVEL}
|
||||||
|
disableRipple
|
||||||
|
>
|
||||||
–
|
–
|
||||||
</ToggleButton>
|
</ToggleButton>
|
||||||
<Typography
|
<Typography
|
||||||
|
@ -79,9 +84,13 @@ function BrowserZoom(props) {
|
||||||
'MuiToggleButton-root'
|
'MuiToggleButton-root'
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
{value}%
|
{Math.round(props.browser.zoomLevel * 100)}%
|
||||||
</Typography>
|
</Typography>
|
||||||
<ToggleButton value="zoomIn" disabled={value === 200} disableRipple>
|
<ToggleButton
|
||||||
|
value="zoomIn"
|
||||||
|
disabled={zoomLevel === MAX_ZOOM_LEVEL}
|
||||||
|
disableRipple
|
||||||
|
>
|
||||||
+
|
+
|
||||||
</ToggleButton>
|
</ToggleButton>
|
||||||
</ToggleButtonGroup>
|
</ToggleButtonGroup>
|
||||||
|
|
16
desktop-app/app/constants/index.js
Normal file
16
desktop-app/app/constants/index.js
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
// @flow
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default zoom level for the application.
|
||||||
|
*/
|
||||||
|
export const DEFAULT_ZOOM_LEVEL = 0.6;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Minimum zoom threshold for the application.
|
||||||
|
*/
|
||||||
|
export const MIN_ZOOM_LEVEL = 0.2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Maximum zoom threshold for the application.
|
||||||
|
*/
|
||||||
|
export const MAX_ZOOM_LEVEL = 2.0;
|
|
@ -28,6 +28,7 @@ import {toggleBookmarkUrl} from '../actions/bookmarks';
|
||||||
import pubsub from 'pubsub.js';
|
import pubsub from 'pubsub.js';
|
||||||
import {PROXY_AUTH_ERROR} from '../constants/pubsubEvents';
|
import {PROXY_AUTH_ERROR} from '../constants/pubsubEvents';
|
||||||
import useCreateTheme from '../components/useCreateTheme';
|
import useCreateTheme from '../components/useCreateTheme';
|
||||||
|
import {DEFAULT_ZOOM_LEVEL} from '../constants';
|
||||||
|
|
||||||
function App() {
|
function App() {
|
||||||
const theme = useCreateTheme();
|
const theme = useCreateTheme();
|
||||||
|
@ -90,7 +91,7 @@ export default class Root extends Component {
|
||||||
registerShortcut(
|
registerShortcut(
|
||||||
{id: 'ZoomReset', title: 'Zoom Reset', accelerators: ['mod+0']},
|
{id: 'ZoomReset', title: 'Zoom Reset', accelerators: ['mod+0']},
|
||||||
() => {
|
() => {
|
||||||
store.dispatch(onZoomChange(0.6));
|
store.dispatch(onZoomChange(DEFAULT_ZOOM_LEVEL));
|
||||||
},
|
},
|
||||||
true
|
true
|
||||||
);
|
);
|
||||||
|
|
|
@ -52,6 +52,8 @@ import {
|
||||||
saveLastOpenedAddress,
|
saveLastOpenedAddress,
|
||||||
} from '../utils/navigatorUtils';
|
} from '../utils/navigatorUtils';
|
||||||
import {updateExistingUrl} from '../services/searchUrlSuggestions';
|
import {updateExistingUrl} from '../services/searchUrlSuggestions';
|
||||||
|
import {normalizeZoomLevel} from '../utils/browserUtils';
|
||||||
|
import {DEFAULT_ZOOM_LEVEL} from '../constants';
|
||||||
|
|
||||||
export const FILTER_FIELDS = {
|
export const FILTER_FIELDS = {
|
||||||
OS: 'OS',
|
OS: 'OS',
|
||||||
|
@ -295,7 +297,8 @@ export default function browser(
|
||||||
? getLastOpenedAddress()
|
? getLastOpenedAddress()
|
||||||
: getHomepage(),
|
: getHomepage(),
|
||||||
currentPageMeta: {},
|
currentPageMeta: {},
|
||||||
zoomLevel: _getUserPreferences().zoomLevel || 0.6,
|
zoomLevel:
|
||||||
|
normalizeZoomLevel(_getUserPreferences().zoomLevel) || DEFAULT_ZOOM_LEVEL,
|
||||||
theme: _getUserPreferences().theme,
|
theme: _getUserPreferences().theme,
|
||||||
previousZoomLevel: null,
|
previousZoomLevel: null,
|
||||||
scrollPosition: {x: 0, y: 0},
|
scrollPosition: {x: 0, y: 0},
|
||||||
|
|
19
desktop-app/app/utils/browserUtils.js
Normal file
19
desktop-app/app/utils/browserUtils.js
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
// @flow
|
||||||
|
|
||||||
|
import {MAX_ZOOM_LEVEL, MIN_ZOOM_LEVEL} from '../constants';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ensures that the given zoom level stays between MIN_ZOOM_LEVEL and MAX_ZOOM_LEVEL and returns it.
|
||||||
|
* @param zoomLevel The zoom level to be normalized.
|
||||||
|
*/
|
||||||
|
export function normalizeZoomLevel(zoomLevel: number): number {
|
||||||
|
if (zoomLevel < MIN_ZOOM_LEVEL) {
|
||||||
|
return MIN_ZOOM_LEVEL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (zoomLevel > MAX_ZOOM_LEVEL) {
|
||||||
|
return MAX_ZOOM_LEVEL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return zoomLevel;
|
||||||
|
}
|
Loading…
Reference in a new issue