Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 20 additions & 18 deletions src/screenshot.nim
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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
Expand Down