Skip to content

Commit 100f4c8

Browse files
committed
make resizing feel good
1 parent 73e8897 commit 100f4c8

File tree

5 files changed

+59
-48
lines changed

5 files changed

+59
-48
lines changed

packages/selenium-ide/src/browser/components/PlaybackTabBar/index.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ const {
99
onPlaybackWindowOpened,
1010
},
1111
} = window.sideAPI
12-
console.log(onPlaybackWindowChanged, onPlaybackWindowClosed, onPlaybackWindowOpened)
1312

1413
const PlaybackTabBar: React.FC = () => {
1514
const [tabs, setTabs] = React.useState<TabShape[]>([])
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import AppWrapper from 'browser/components/AppWrapper'
2+
import ProjectPlaybackWindow from 'browser/components/PlaybackPanel'
3+
import renderWhenReady from 'browser/helpers/renderWhenReady'
4+
import React from 'react'
5+
6+
const PlaybackWindowLanding = () => (
7+
<AppWrapper>
8+
<ProjectPlaybackWindow />
9+
</AppWrapper>
10+
)
11+
12+
renderWhenReady(PlaybackWindowLanding)

packages/selenium-ide/src/browser/windows/ProjectEditor/renderer.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ import {
88
PanelGroup,
99
PanelResizeHandle,
1010
} from 'react-resizable-panels'
11-
import SIDELogger from '../../components/Logger'
12-
import PlaybackControls from '../../components/PlaybackControls'
13-
import ProjectPlaybackWindow from '../../components/PlaybackPanel'
14-
import ProjectEditor from '../../components/ProjectEditor'
11+
import SIDELogger from 'browser/components/Logger'
12+
import PlaybackControls from 'browser/components/PlaybackControls'
13+
import ProjectPlaybackWindow from 'browser/components/PlaybackPanel'
14+
import ProjectEditor from 'browser/components/ProjectEditor'
1515

1616
const usePanelGroup = (id: string) => {
1717
const [ready, setReady] = React.useState(false)

packages/selenium-ide/src/main/session/controllers/Playback/index.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -180,11 +180,6 @@ export default class PlaybackController extends BaseController {
180180
if (!window) {
181181
throw new Error('No windows found')
182182
}
183-
this.session.windows.focusPlaybackWindow(window.id)
184-
const handle = await this.session.windows.getPlaybackWindowHandleByID(
185-
window.id
186-
)
187-
await driver.switchTo().window(handle!)
188183
return
189184
} catch (windowDoesNotExist) {
190185
let success = false
@@ -221,7 +216,11 @@ export default class PlaybackController extends BaseController {
221216
currentCommand.command === 'open'
222217
? new URL(currentCommand.target as string, state.project.url).href
223218
: firstURL.href
224-
await playback.executor.doOpen(url)
219+
try {
220+
await playback.executor.doOpen(url)
221+
} catch (e) {
222+
console.warn('Open command failed:', e)
223+
}
225224
} finally {
226225
await this.session.windows.initPlaybackWindowSize(window!)
227226
}

packages/selenium-ide/src/main/session/controllers/Windows/index.ts

Lines changed: 38 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -265,59 +265,58 @@ export default class WindowsController extends BaseController {
265265
}
266266

267267
async initPlaybackWindowSize(window: Electron.BrowserWindow) {
268-
const {
269-
state: {
270-
editor: { overrideWindowSize },
271-
},
272-
} = await this.session.state.get()
273-
if (!overrideWindowSize.active) {
274-
window.webContents.setZoomFactor(1)
275-
return
276-
}
277-
const { width, height } =
278-
await this.session.resizablePanels.getPanelScreenPosition(
279-
'playback-panel'
280-
)
281-
const targetWidth = overrideWindowSize.width
282-
const targetHeight = overrideWindowSize.height
283-
if (targetWidth > width || targetHeight > height) {
284-
const xZoom = width / targetWidth
285-
const yZoom = height / targetHeight
286-
window.setSize(width, height)
287-
window.webContents.setZoomFactor(Math.max(0.1, Math.min(xZoom, yZoom)))
288-
} else {
289-
window.setSize(targetWidth, targetHeight)
290-
window.webContents.setZoomFactor(1)
291-
}
268+
const panel = await this.session.resizablePanels.getPanelScreenPosition(
269+
'playback-panel'
270+
)
271+
const { height, width, zoomFactor } = await this.calculateScaleAndZoom(
272+
panel.width,
273+
panel.height
274+
)
275+
window.setSize(width, height)
276+
window.webContents.setZoomFactor(zoomFactor)
292277
}
293278

294-
async resizePlaybackWindows(_targetWidth: number, _targetHeight: number) {
279+
async calculateScaleAndZoom(_targetWidth: number, _targetHeight: number) {
295280
const {
296281
state: {
297282
editor: { overrideWindowSize },
298283
},
299284
} = await this.session.state.get()
300285
const targetWidth = overrideWindowSize.active
301-
? overrideWindowSize.width
286+
? Math.max(overrideWindowSize.width, 150)
302287
: _targetWidth
303288
const targetHeight = overrideWindowSize.active
304-
? overrideWindowSize.height
289+
? Math.max(overrideWindowSize.height, 150)
305290
: _targetHeight
306291

307292
const { width, height } =
308293
await this.session.resizablePanels.getPanelScreenPosition(
309294
'playback-panel'
310295
)
296+
const xAspect = width / targetWidth
297+
const yAspect = height / targetHeight
298+
let resultWidth = targetWidth
299+
let resultHeight = targetHeight
300+
const zoomFactor = Math.min(xAspect, yAspect, 1)
301+
if (xAspect < 1 || yAspect < 1) {
302+
resultWidth = Math.round(targetWidth * zoomFactor)
303+
resultHeight = Math.round(targetHeight * zoomFactor)
304+
}
305+
return {
306+
width: resultWidth,
307+
height: resultHeight,
308+
zoomFactor,
309+
}
310+
}
311+
312+
async resizePlaybackWindows(_targetWidth: number, _targetHeight: number) {
313+
const { width, height, zoomFactor } = await this.calculateScaleAndZoom(
314+
_targetWidth,
315+
_targetHeight
316+
)
311317
this.playbackWindows.forEach((window) => {
312-
if (targetWidth > width || targetHeight > height) {
313-
const xZoom = width / targetWidth
314-
const yZoom = height / targetHeight
315-
window.setSize(width, height)
316-
window.webContents.setZoomFactor(Math.max(0.1, Math.min(xZoom, yZoom)))
317-
} else {
318-
window.setSize(targetWidth, targetHeight)
319-
window.webContents.setZoomFactor(1)
320-
}
318+
window.setSize(width, height)
319+
window.webContents.setZoomFactor(zoomFactor)
321320
})
322321
}
323322

@@ -380,7 +379,9 @@ export default class WindowsController extends BaseController {
380379
this.session.api.windows.onPlaybackWindowChanged.dispatchEvent(
381380
window.id,
382381
{
383-
title: window.webContents.getURL(),
382+
title: window.webContents
383+
.getURL()
384+
.replace(this.session.projects.project.url, ''),
384385
}
385386
)
386387
})

0 commit comments

Comments
 (0)