forked from KolibriOS/kolibrios
ae13c6042f
git-svn-id: svn://kolibrios.org@5750 a494cfbc-eb01-0410-851d-a64ba20cac60
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
|