mirror of
https://github.com/toeverything/AFFiNE.git
synced 2025-01-05 15:43:11 +03:00
fix: move traffic lights based on zoom level (#6201)
<div class='graphite__hidden'> <div>🎥 Video uploaded on Graphite:</div> <a href="https://app.graphite.dev/media/video/T2klNLEk0wxLh4NRDzhk/f75d1f6f-18f4-4dff-8174-67223f5f9807.mp4"> <img src="https://app.graphite.dev/api/v1/graphite/video/thumbnail/T2klNLEk0wxLh4NRDzhk/f75d1f6f-18f4-4dff-8174-67223f5f9807.mp4"> </a> </div> <video src="https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/T2klNLEk0wxLh4NRDzhk/f75d1f6f-18f4-4dff-8174-67223f5f9807.mp4">Kapture 2024-03-19 at 18.05.20.mp4</video>
This commit is contained in:
parent
e1cfa1071e
commit
8b2b2646bc
@ -4,6 +4,7 @@ import './edgeless-template';
|
|||||||
import { apis, events } from '@affine/electron-api';
|
import { apis, events } from '@affine/electron-api';
|
||||||
import { setupGlobal } from '@affine/env/global';
|
import { setupGlobal } from '@affine/env/global';
|
||||||
import * as Sentry from '@sentry/react';
|
import * as Sentry from '@sentry/react';
|
||||||
|
import { debounce } from 'lodash-es';
|
||||||
import { useEffect } from 'react';
|
import { useEffect } from 'react';
|
||||||
import {
|
import {
|
||||||
createRoutesFromChildren,
|
createRoutesFromChildren,
|
||||||
@ -61,6 +62,11 @@ export function setup() {
|
|||||||
};
|
};
|
||||||
apis?.ui.isMaximized().then(handleMaximized).catch(console.error);
|
apis?.ui.isMaximized().then(handleMaximized).catch(console.error);
|
||||||
events?.ui.onMaximized(handleMaximized);
|
events?.ui.onMaximized(handleMaximized);
|
||||||
|
|
||||||
|
const handleResize = debounce(() => {
|
||||||
|
apis?.ui.handleWindowResize().catch(console.error);
|
||||||
|
}, 50);
|
||||||
|
window.addEventListener('resize', handleResize);
|
||||||
}
|
}
|
||||||
|
|
||||||
performanceSetupLogger.info('done');
|
performanceSetupLogger.info('done');
|
||||||
|
@ -53,7 +53,6 @@ async function createWindow(additionalArguments: string[]) {
|
|||||||
: isWindows()
|
: isWindows()
|
||||||
? 'hidden'
|
? 'hidden'
|
||||||
: 'default',
|
: 'default',
|
||||||
trafficLightPosition: { x: 20, y: 16 },
|
|
||||||
x: mainWindowState.x,
|
x: mainWindowState.x,
|
||||||
y: mainWindowState.y,
|
y: mainWindowState.y,
|
||||||
width: mainWindowState.width,
|
width: mainWindowState.width,
|
||||||
@ -100,6 +99,8 @@ async function createWindow(additionalArguments: string[]) {
|
|||||||
if (browserWindow.isMaximized() || browserWindow.isFullScreen()) {
|
if (browserWindow.isMaximized() || browserWindow.isFullScreen()) {
|
||||||
uiSubjects.onMaximized.next(true);
|
uiSubjects.onMaximized.next(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
handleWebContentsResize().catch(logger.error);
|
||||||
});
|
});
|
||||||
|
|
||||||
browserWindow.on('close', e => {
|
browserWindow.on('close', e => {
|
||||||
@ -135,18 +136,15 @@ async function createWindow(additionalArguments: string[]) {
|
|||||||
|
|
||||||
browserWindow.on('maximize', () => {
|
browserWindow.on('maximize', () => {
|
||||||
uiSubjects.onMaximized.next(true);
|
uiSubjects.onMaximized.next(true);
|
||||||
browserWindow.setBackgroundMaterial('none');
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// full-screen == maximized in UI on windows
|
// full-screen == maximized in UI on windows
|
||||||
browserWindow.on('enter-full-screen', () => {
|
browserWindow.on('enter-full-screen', () => {
|
||||||
uiSubjects.onMaximized.next(true);
|
uiSubjects.onMaximized.next(true);
|
||||||
browserWindow.setBackgroundMaterial('none');
|
|
||||||
});
|
});
|
||||||
|
|
||||||
browserWindow.on('unmaximize', () => {
|
browserWindow.on('unmaximize', () => {
|
||||||
uiSubjects.onMaximized.next(false);
|
uiSubjects.onMaximized.next(false);
|
||||||
browserWindow.setBackgroundMaterial('none');
|
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -274,3 +272,14 @@ export async function getCookie(url?: string, name?: string) {
|
|||||||
});
|
});
|
||||||
return cookies;
|
return cookies;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// there is no proper way to listen to webContents resize event
|
||||||
|
// we will rely on window.resize event in renderer instead
|
||||||
|
export async function handleWebContentsResize() {
|
||||||
|
// right now when window is resized, we will relocate the traffic light positions
|
||||||
|
if (isMacOS()) {
|
||||||
|
const window = await getMainWindow();
|
||||||
|
const factor = window?.webContents.getZoomFactor() || 1;
|
||||||
|
window?.setWindowButtonPosition({ x: 20 * factor, y: 24 * factor - 6 });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -4,7 +4,11 @@ import { getLinkPreview } from 'link-preview-js';
|
|||||||
import { isMacOS } from '../../shared/utils';
|
import { isMacOS } from '../../shared/utils';
|
||||||
import { persistentConfig } from '../config-storage/persist';
|
import { persistentConfig } from '../config-storage/persist';
|
||||||
import { logger } from '../logger';
|
import { logger } from '../logger';
|
||||||
import { getMainWindow, initAndShowMainWindow } from '../main-window';
|
import {
|
||||||
|
getMainWindow,
|
||||||
|
handleWebContentsResize,
|
||||||
|
initAndShowMainWindow,
|
||||||
|
} from '../main-window';
|
||||||
import { getOnboardingWindow } from '../onboarding';
|
import { getOnboardingWindow } from '../onboarding';
|
||||||
import type { NamespaceHandlers } from '../type';
|
import type { NamespaceHandlers } from '../type';
|
||||||
import { launchStage } from '../windows-manager/stage';
|
import { launchStage } from '../windows-manager/stage';
|
||||||
@ -44,6 +48,9 @@ export const uiHandlers = {
|
|||||||
window.maximize();
|
window.maximize();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
handleWindowResize: async () => {
|
||||||
|
await handleWebContentsResize();
|
||||||
|
},
|
||||||
handleCloseApp: async () => {
|
handleCloseApp: async () => {
|
||||||
app.quit();
|
app.quit();
|
||||||
},
|
},
|
||||||
|
Loading…
Reference in New Issue
Block a user