forked from KolibriOS/kolibrios
Обновить programs/media/animage/trunk/menu_instruments.inc
animage use system buffer ClipBoard from Copy | Paste
This commit is contained in:
parent
415eaef8db
commit
c0324e5907
@ -347,12 +347,16 @@ no_signum_fill_r_y_copy:
|
|||||||
mov edx,[PointerToEditBufer]
|
mov edx,[PointerToEditBufer]
|
||||||
mov eax,[rectangular_shade_x]
|
mov eax,[rectangular_shade_x]
|
||||||
sub eax,[crossing_old_x]
|
sub eax,[crossing_old_x]
|
||||||
mov [edx],eax ;image.w
|
mov dword[edx+4],1 ;type image
|
||||||
|
mov [edx+8],eax ;image.w
|
||||||
mov eax,[rectangular_shade_y]
|
mov eax,[rectangular_shade_y]
|
||||||
sub eax,[crossing_old_y]
|
sub eax,[crossing_old_y]
|
||||||
mov [edx+4],eax ;image.h
|
mov [edx+12],eax ;image.h
|
||||||
mov dword[edx+8],24 ;bit in pixel
|
mov dword[edx+16],24 ;bit in pixel
|
||||||
add edx,12 ;copy image parametrs
|
xor eax,eax
|
||||||
|
mov dword[edx+20],eax ;palette
|
||||||
|
mov dword[edx+24],eax ;palette size
|
||||||
|
add edx,28 ;copy image parametrs
|
||||||
mov [y],edi
|
mov [y],edi
|
||||||
|
|
||||||
loop_fill_rectangle_y_copy:
|
loop_fill_rectangle_y_copy:
|
||||||
@ -385,8 +389,14 @@ loop_fill_rectangle_x_copy:
|
|||||||
cmp eax,[rectangular_shade_y]
|
cmp eax,[rectangular_shade_y]
|
||||||
jl loop_fill_rectangle_y_copy
|
jl loop_fill_rectangle_y_copy
|
||||||
|
|
||||||
;...todo use system buffer...
|
;use system buffer
|
||||||
;mcall SF_CLIPBOARD,SSF_WRITE_CB,,[PointerToEditBufer]
|
mov edx,[PointerToEditBufer]
|
||||||
|
mov ecx,[edx+8] ;image.w
|
||||||
|
imul ecx,[edx+12] ;image.h
|
||||||
|
lea ecx,[ecx+ecx*2]
|
||||||
|
add ecx,28
|
||||||
|
mov [edx],ecx ;buffer size
|
||||||
|
mcall SF_CLIPBOARD,SSF_WRITE_CB
|
||||||
|
|
||||||
call MovePictureToWorkScreen
|
call MovePictureToWorkScreen
|
||||||
mov [DrawSprite_flag],1
|
mov [DrawSprite_flag],1
|
||||||
@ -397,6 +407,10 @@ no_copy:
|
|||||||
cmp [number_menu],4
|
cmp [number_menu],4
|
||||||
jne no_paste
|
jne no_paste
|
||||||
|
|
||||||
|
call ReadCB_Img
|
||||||
|
or eax,eax
|
||||||
|
jz no_paste
|
||||||
|
|
||||||
mov eax,[crossing_old_x]
|
mov eax,[crossing_old_x]
|
||||||
mov ebx,[crossing_old_y]
|
mov ebx,[crossing_old_y]
|
||||||
|
|
||||||
@ -445,15 +459,15 @@ no_signum_fill_r_x_paste:
|
|||||||
|
|
||||||
no_signum_fill_r_y_paste:
|
no_signum_fill_r_y_paste:
|
||||||
mov edx,[PointerToEditBufer]
|
mov edx,[PointerToEditBufer]
|
||||||
cmp dword[edx+8],24
|
cmp dword[edx+16],24 ;bit in pixel
|
||||||
jne end_menu
|
jne end_menu
|
||||||
mov eax,[edx]
|
mov eax,[edx+8] ;image.w
|
||||||
add eax,[crossing_old_x]
|
add eax,[crossing_old_x]
|
||||||
mov [paste_img_w],eax
|
mov [paste_img_w],eax
|
||||||
mov eax,[edx+4]
|
mov eax,[edx+12] ;image.h
|
||||||
add eax,[crossing_old_y]
|
add eax,[crossing_old_y]
|
||||||
mov [paste_img_h],eax
|
mov [paste_img_h],eax
|
||||||
add edx,12 ;copy image parametrs
|
add edx,28 ;copy image parametrs
|
||||||
mov [y],edi
|
mov [y],edi
|
||||||
|
|
||||||
loop_fill_rectangle_y_paste:
|
loop_fill_rectangle_y_paste:
|
||||||
@ -479,6 +493,12 @@ loop_fill_rectangle_x_paste:
|
|||||||
mov [x],eax
|
mov [x],eax
|
||||||
cmp eax,[rectangular_shade_x]
|
cmp eax,[rectangular_shade_x]
|
||||||
jl loop_fill_rectangle_x_paste
|
jl loop_fill_rectangle_x_paste
|
||||||
|
|
||||||
|
sub eax,[paste_img_w]
|
||||||
|
jge no_paste_data_x
|
||||||
|
neg eax
|
||||||
|
lea eax,[eax+eax*2]
|
||||||
|
add edx,eax ;пропуск пикселей изображения которые не влазят в rectangle
|
||||||
no_paste_data_x:
|
no_paste_data_x:
|
||||||
|
|
||||||
mov eax,[y]
|
mov eax,[y]
|
||||||
@ -637,3 +657,48 @@ end_menu:
|
|||||||
and [number_menu],0
|
and [number_menu],0
|
||||||
jmp still
|
jmp still
|
||||||
;---------------------------------------------------------------------
|
;---------------------------------------------------------------------
|
||||||
|
;output:
|
||||||
|
; eax - 0 если изображение не прочитано, 1 если успешно прочитано
|
||||||
|
align 16
|
||||||
|
proc ReadCB_Img uses ebx ecx edi esi
|
||||||
|
mcall SF_CLIPBOARD,SSF_GET_SLOT_COUNT
|
||||||
|
cmp eax,1
|
||||||
|
jl .no_buf_r
|
||||||
|
|
||||||
|
mov esi,eax
|
||||||
|
.cycle: ;обратный цикл по слотам
|
||||||
|
dec esi ;номер текущего, проверяемого слота
|
||||||
|
mcall SF_CLIPBOARD,SSF_READ_CB,esi
|
||||||
|
cmp eax,1
|
||||||
|
je .no_buf_r
|
||||||
|
cmp eax,-1
|
||||||
|
je .no_buf_r
|
||||||
|
mov ecx,[eax]
|
||||||
|
cmp ecx,1 ;size
|
||||||
|
jl .no_buf_r
|
||||||
|
cmp dword[eax+4],1 ;image
|
||||||
|
je @f
|
||||||
|
cmp esi,1
|
||||||
|
jge .cycle ;если в буфере не изображение, а слотов в буфере несколько, пробуем перейти к верхнему слоту
|
||||||
|
jmp .no_buf_r
|
||||||
|
@@:
|
||||||
|
cmp dword[eax+16],24 ;bit in pixel
|
||||||
|
je @f
|
||||||
|
cmp esi,1
|
||||||
|
jge .cycle ;если в буфере не 24 битное изображение
|
||||||
|
jmp .no_buf_r
|
||||||
|
@@:
|
||||||
|
;копирование изображения из системного буфера во внутренний
|
||||||
|
mov edi,[PointerToEditBufer]
|
||||||
|
mov esi,eax
|
||||||
|
mov ecx,[eax]
|
||||||
|
shr ecx,2
|
||||||
|
rep movsd
|
||||||
|
xor eax,eax
|
||||||
|
inc eax
|
||||||
|
jmp .end_f
|
||||||
|
.no_buf_r:
|
||||||
|
xor eax,eax
|
||||||
|
.end_f:
|
||||||
|
ret
|
||||||
|
endp
|
Loading…
Reference in New Issue
Block a user