168 lines
4.2 KiB
PHP
168 lines
4.2 KiB
PHP
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||
|
;; ;;
|
||
|
;; Copyright (C) KolibriOS team 2010-2015. All rights reserved. ;;
|
||
|
;; Distributed under terms of the GNU General Public License ;;
|
||
|
;; ;;
|
||
|
;; VNC client for KolibriOS ;;
|
||
|
;; ;;
|
||
|
;; Written by hidnplayr@kolibrios.org ;;
|
||
|
;; ;;
|
||
|
;; GNU GENERAL PUBLIC LICENSE ;;
|
||
|
;; Version 2, June 1991 ;;
|
||
|
;; ;;
|
||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||
|
|
||
|
|
||
|
encoding_cursor:
|
||
|
|
||
|
DEBUGF 1, "Set cursor: width=%u height=%u\n", [rectangle.width], [rectangle.height]
|
||
|
|
||
|
mov eax, [rectangle.width]
|
||
|
mul [rectangle.height]
|
||
|
mov ebx, eax
|
||
|
add ebx, 7
|
||
|
shr ebx, 3
|
||
|
mov ecx, BYTES_PER_PIXEL
|
||
|
mul ecx
|
||
|
lea ecx, [eax+ebx]
|
||
|
|
||
|
@@:
|
||
|
lea eax, [esi+ecx]
|
||
|
cmp [datapointer], eax
|
||
|
jae @f
|
||
|
call read_data.more
|
||
|
jmp @b
|
||
|
@@:
|
||
|
|
||
|
; TODO: chop larger cursor sizes to 32x32 ?
|
||
|
cmp [rectangle.width], 32
|
||
|
ja .fail
|
||
|
cmp [rectangle.height], 32
|
||
|
ja .fail
|
||
|
|
||
|
; Convert cursor image to 32*32 ARGB format
|
||
|
mov edi, cursor.image
|
||
|
mov edx, [rectangle.height]
|
||
|
test edx, edx
|
||
|
jz .zero_height
|
||
|
.lineloop:
|
||
|
mov ecx, [rectangle.width]
|
||
|
test ecx, ecx
|
||
|
jz .zero_width
|
||
|
.pixelloop:
|
||
|
call load_pixel
|
||
|
stosd
|
||
|
dec ecx
|
||
|
jnz .pixelloop
|
||
|
|
||
|
.zero_width:
|
||
|
mov ecx, 32
|
||
|
sub ecx, [rectangle.width]
|
||
|
jz @f
|
||
|
xor eax, eax
|
||
|
rep stosd
|
||
|
@@:
|
||
|
dec edx
|
||
|
jnz .lineloop
|
||
|
|
||
|
.zero_height:
|
||
|
mov ecx, 32
|
||
|
sub ecx, [rectangle.height]
|
||
|
jz @f
|
||
|
shl ecx, 5 ; mul 32
|
||
|
xor eax, eax
|
||
|
rep stosd
|
||
|
@@:
|
||
|
|
||
|
mov edi, cursor.image+3
|
||
|
mov edx, [rectangle.height]
|
||
|
test edx, edx
|
||
|
jz .finish
|
||
|
.zloop:
|
||
|
mov ecx, [rectangle.width]
|
||
|
test ecx, ecx
|
||
|
jz .finish
|
||
|
.aloop:
|
||
|
lodsb
|
||
|
|
||
|
mov bl, al
|
||
|
shl bl, 1
|
||
|
salc
|
||
|
mov byte[edi], al
|
||
|
add edi, 4
|
||
|
dec ecx
|
||
|
jz .n
|
||
|
|
||
|
shl bl, 1
|
||
|
salc
|
||
|
mov byte[edi], al
|
||
|
add edi, 4
|
||
|
dec ecx
|
||
|
jz .n
|
||
|
|
||
|
shl bl, 1
|
||
|
salc
|
||
|
mov byte[edi], al
|
||
|
add edi, 4
|
||
|
dec ecx
|
||
|
jz .n
|
||
|
|
||
|
shl bl, 1
|
||
|
salc
|
||
|
mov byte[edi], al
|
||
|
add edi, 4
|
||
|
dec ecx
|
||
|
jz .n
|
||
|
|
||
|
shl bl, 1
|
||
|
salc
|
||
|
mov byte[edi], al
|
||
|
add edi, 4
|
||
|
dec ecx
|
||
|
jz .n
|
||
|
|
||
|
shl bl, 1
|
||
|
salc
|
||
|
mov byte[edi], al
|
||
|
add edi, 4
|
||
|
dec ecx
|
||
|
jz .n
|
||
|
|
||
|
shl bl, 1
|
||
|
salc
|
||
|
mov byte[edi], al
|
||
|
add edi, 4
|
||
|
dec ecx
|
||
|
jz .n
|
||
|
|
||
|
shl bl, 1
|
||
|
salc
|
||
|
mov byte[edi], al
|
||
|
add edi, 4
|
||
|
dec ecx
|
||
|
jz .n
|
||
|
jmp .aloop
|
||
|
|
||
|
.n:
|
||
|
mov eax, 32
|
||
|
sub eax, [rectangle.width]
|
||
|
shl eax, 2
|
||
|
add edi, eax
|
||
|
dec edx
|
||
|
jnz .zloop
|
||
|
|
||
|
.finish:
|
||
|
mov eax, [rectangle.x]
|
||
|
mov [cursor.x], al
|
||
|
mov eax, [rectangle.y]
|
||
|
mov [cursor.y], al
|
||
|
or [work], WORK_CURSOR
|
||
|
|
||
|
DEBUGF 1, "Set cursor succeeded\n"
|
||
|
jmp next_rectangle
|
||
|
|
||
|
.fail:
|
||
|
add esi, ecx
|
||
|
DEBUGF 2, "Set cursor failed!\n"
|
||
|
jmp next_rectangle
|