Merge pull request #91 from tsoding/83

(#83) Simply destroy and create again the MITSHM image on resize
pull/97/head
Alexey Kutepov 4 years ago committed by GitHub
commit 097fdf48be
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -79,19 +79,32 @@ proc newScreenshot*(display: PDisplay, window: TWindow): Screenshot =
AllPlanes,
ZPixmap)
proc destroy*(screenshot: Screenshot, display: PDisplay) =
when defined(mitshm):
discard XSync(display, 0)
discard XShmDetach(display, screenshot.shminfo)
discard XDestroyImage(screenshot.image)
discard syscall(SHMDT, screenshot.shminfo.shmaddr)
discard syscall(SHMCTL, screenshot.shminfo.shmid, IPC_RMID, 0)
deallocShared(screenshot.shminfo)
else:
discard XDestroyImage(screenshot.image)
# TODO(#92): there is too much X11 error logging when the tracked live update window is resized
proc refresh*(screenshot: var Screenshot, display: PDisplay, window: TWindow) =
var attributes: TXWindowAttributes
discard XGetWindowAttributes(display, window, addr attributes)
when defined(mitshm):
# TODO(#83): MITSHM live update does not support window resizing
discard XShmGetImage(
display,
window, screenshot.image,
0.cint, 0.cint,
AllPlanes)
if XShmGetImage(display,
window, screenshot.image,
0.cint, 0.cint,
AllPlanes) == 0 or
attributes.width != screenshot.image.width or
attributes.height != screenshot.image.height:
screenshot.destroy(display)
screenshot = newScreenshot(display, window)
else:
# TODO(#88): Aspect ratio of texture is not updated
let refreshedImage = XGetSubImage(
display, window,
0, 0,
@ -118,17 +131,6 @@ proc refresh*(screenshot: var Screenshot, display: PDisplay, window: TWindow) =
else:
screenshot.image = refreshedImage
proc destroy*(screenshot: Screenshot, display: PDisplay) =
when defined(mitshm):
discard XSync(display, 0)
discard XShmDetach(display, screenshot.shminfo)
discard XDestroyImage(screenshot.image)
discard syscall(SHMDT, screenshot.shminfo.shmaddr)
discard syscall(SHMCTL, screenshot.shminfo.shmid, IPC_RMID, 0)
deallocShared(screenshot.shminfo)
else:
discard XDestroyImage(screenshot.image)
proc saveToPPM*(image: PXImage, filePath: string) =
var f = open(filePath, fmWrite)
defer: f.close

Loading…
Cancel
Save