mirror of
https://github.com/Ylianst/MeshAgent
synced 2025-12-16 08:13:30 +00:00
Fix viewport viewing logic
This commit is contained in:
@@ -54,6 +54,8 @@ CGDirectDisplayID SCREEN_NUM = 0;
|
||||
int SH_HANDLE = 0;
|
||||
int SCREEN_WIDTH = 0;
|
||||
int SCREEN_HEIGHT = 0;
|
||||
int SCREEN_SCALE = 1;
|
||||
int SCREEN_SCALE_SET = 0;
|
||||
int SCREEN_DEPTH = 0;
|
||||
int TILE_WIDTH = 0;
|
||||
int TILE_HEIGHT = 0;
|
||||
@@ -126,9 +128,16 @@ int kvm_init()
|
||||
int old_height_count = TILE_HEIGHT_COUNT;
|
||||
|
||||
SCREEN_NUM = CGMainDisplayID();
|
||||
SCREEN_HEIGHT = CGDisplayPixelsHigh(SCREEN_NUM);
|
||||
SCREEN_WIDTH = CGDisplayPixelsWide(SCREEN_NUM);
|
||||
|
||||
if (SCREEN_WIDTH > 0)
|
||||
{
|
||||
CGDisplayModeRef mode = CGDisplayCopyDisplayMode(SCREEN_NUM);
|
||||
SCREEN_SCALE = (int) CGDisplayModeGetPixelWidth(mode) / SCREEN_WIDTH;
|
||||
CGDisplayModeRelease(mode);
|
||||
}
|
||||
|
||||
SCREEN_HEIGHT = CGDisplayPixelsHigh(SCREEN_NUM) * SCREEN_SCALE;
|
||||
SCREEN_WIDTH = CGDisplayPixelsWide(SCREEN_NUM) * SCREEN_SCALE;
|
||||
// Some magic numbers.
|
||||
TILE_WIDTH = 32;
|
||||
TILE_HEIGHT = 32;
|
||||
@@ -178,8 +187,9 @@ int kvm_server_inputdata(char* block, int blocklen)
|
||||
if (KVM_AGENT_FD != -1) { break; }
|
||||
if (size == 10 || size == 12)
|
||||
{
|
||||
x = ((int)ntohs(((unsigned short*)(block))[3]));
|
||||
y = ((int)ntohs(((unsigned short*)(block))[4]));
|
||||
x = ((int)ntohs(((unsigned short*)(block))[3])) / SCREEN_SCALE;
|
||||
y = ((int)ntohs(((unsigned short*)(block))[4])) / SCREEN_SCALE;
|
||||
|
||||
if (size == 12) w = ((short)ntohs(((short*)(block))[5]));
|
||||
|
||||
//printf("x:%d, y:%d, b:%d, w:%d\n", x, y, block[5], w);
|
||||
@@ -487,10 +497,22 @@ void* kvm_server_mainloop(void* param)
|
||||
screen_num = CGMainDisplayID();
|
||||
|
||||
if (screen_num == 0) { g_shutdown = 1; senddebug(-2); break; }
|
||||
screen_height = CGDisplayPixelsHigh(screen_num);
|
||||
screen_width = CGDisplayPixelsWide(screen_num);
|
||||
|
||||
if ((SCREEN_HEIGHT != screen_height || SCREEN_WIDTH != screen_width || SCREEN_NUM != screen_num))
|
||||
if (SCREEN_SCALE_SET == 0)
|
||||
{
|
||||
CGDisplayModeRef mode = CGDisplayCopyDisplayMode(screen_num);
|
||||
if (SCREEN_WIDTH > 0 && SCREEN_SCALE < (int) CGDisplayModeGetPixelWidth(mode) / SCREEN_WIDTH)
|
||||
{
|
||||
SCREEN_SCALE = (int) CGDisplayModeGetPixelWidth(mode) / SCREEN_WIDTH;
|
||||
SCREEN_SCALE_SET = 1;
|
||||
}
|
||||
CGDisplayModeRelease(mode);
|
||||
}
|
||||
|
||||
screen_height = CGDisplayPixelsHigh(screen_num) * SCREEN_SCALE;
|
||||
screen_width = CGDisplayPixelsWide(screen_num) * SCREEN_SCALE;
|
||||
|
||||
if ((SCREEN_HEIGHT != screen_height || (SCREEN_WIDTH != screen_width) || SCREEN_NUM != screen_num))
|
||||
{
|
||||
kvm_init();
|
||||
continue;
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
extern CGDirectDisplayID SCREEN_NUM;
|
||||
extern int SCREEN_WIDTH;
|
||||
extern int SCREEN_HEIGHT;
|
||||
extern int SCREEN_SCALE;
|
||||
extern int SCREEN_DEPTH;
|
||||
extern int TILE_WIDTH;
|
||||
extern int TILE_HEIGHT;
|
||||
@@ -442,7 +443,7 @@ int getScreenBuffer(unsigned char **desktop, long long *desktopsize, CGImageRef
|
||||
*output++ = (*tmpPtr1 & 0x0FF);
|
||||
tmpPtr1++;
|
||||
}
|
||||
if (width_padding_size != 0) {
|
||||
if (width_padding_size > 0) {
|
||||
for (i = 0; i < width_padding_size; i++) {
|
||||
*output++ = 0;
|
||||
}
|
||||
@@ -478,7 +479,7 @@ int getScreenBuffer(unsigned char **desktop, long long *desktopsize, CGImageRef
|
||||
|
||||
height_padding_size = adjust_screen_size(SCREEN_HEIGHT) - height;
|
||||
|
||||
if (height_padding_size != 0) {
|
||||
if (height_padding_size > 0) {
|
||||
for (row = 0; row < height_padding_size; row++) {
|
||||
for (col = 0; col < (width * 3) + width_padding_size; col++) {
|
||||
*output++ = 0;
|
||||
|
||||
Reference in New Issue
Block a user