From 54932fe994431bb74b2c4ae095a90e10c7a5c429 Mon Sep 17 00:00:00 2001 From: 0CodErr <0CodErr@kolibrios.org> Date: Wed, 7 Dec 2016 18:33:17 +0000 Subject: [PATCH] flag client relative for blit git-svn-id: svn://kolibrios.org@6790 a494cfbc-eb01-0410-851d-a64ba20cac60 --- kernel/trunk/const.inc | 2 ++ kernel/trunk/docs/sysfuncr.txt | 7 ++++--- kernel/trunk/docs/sysfuncs.txt | 5 +++-- kernel/trunk/video/blitter.inc | 13 ++++++++++++- 4 files changed, 21 insertions(+), 6 deletions(-) diff --git a/kernel/trunk/const.inc b/kernel/trunk/const.inc index 3ee2083fa2..827b320da2 100644 --- a/kernel/trunk/const.inc +++ b/kernel/trunk/const.inc @@ -362,6 +362,8 @@ SYSTEM_SHUTDOWN equ 2 SYSTEM_REBOOT equ 3 SYSTEM_RESTART equ 4 +BLIT_CLIENT_RELATIVE equ 0x20000000 + struct SYSCALL_STACK _eip dd ? _edi dd ? ; +4 diff --git a/kernel/trunk/docs/sysfuncr.txt b/kernel/trunk/docs/sysfuncr.txt index 948b74b262..0aae441373 100644 --- a/kernel/trunk/docs/sysfuncr.txt +++ b/kernel/trunk/docs/sysfuncr.txt @@ -4335,14 +4335,15 @@ Architecture Software Developer's Manual, Volume 3, Appendix B); * eax = 73 - номер функции * ebx = ROP и опциональные флаги - 31 6 5 4 3 0 - [ reserved ][T][B][ROP] + 31 30 29 28 6 5 4 3 0 + [reserved][CR][reserved][T][B][ROP] ROP - код растровых операций 0: копировать 1-15: Зарезервировано B - блит на фоновую поферхность T - блит с прозрачностью - + CR - относительно клиентской области окна + * ecx = указатель на параметры функции смещение цели и отсечение +0 signed dword: смещение по X окна, для целевого прямоугольника diff --git a/kernel/trunk/docs/sysfuncs.txt b/kernel/trunk/docs/sysfuncs.txt index 578d8fe769..43366d0a83 100644 --- a/kernel/trunk/docs/sysfuncs.txt +++ b/kernel/trunk/docs/sysfuncs.txt @@ -4285,13 +4285,14 @@ Parameters: * eax = 73 - function number * ebx = ROP and optional flags - 31 6 5 4 3 0 - [ reserved ][T][B][ROP] + 31 30 29 28 6 5 4 3 0 + [reserved][CR][reserved][T][B][ROP] ROP - raster operation code 0: Copy 1-15: reserved B - blit into the background surface T - transparent blit + CR - blit client relative * ecx = pointer to the function parameters destination offset and clipping diff --git a/kernel/trunk/video/blitter.inc b/kernel/trunk/video/blitter.inc index 8441353abb..8d8c4d2135 100644 --- a/kernel/trunk/video/blitter.inc +++ b/kernel/trunk/video/blitter.inc @@ -206,10 +206,13 @@ virtual at sizeof.BLITTER .position dd ? ; (x shl 16) + y ; ??? .extra_var1 dd ? +.flags dd ? .local_vars_size = $ end virtual sub esp, .local_vars_size - + + mov [esp+.flags], ebx + mov eax, [TASK_BASE] mov ebx, [eax-twdw + WDATA.box.width] mov edx, [eax-twdw + WDATA.box.height] @@ -262,6 +265,14 @@ end virtual mov ebp, [esp+BLITTER.dst_y] add ebx, [eax-twdw + WDATA.box.left] add ebp, [eax-twdw + WDATA.box.top] + + test [esp+.flags], BLIT_CLIENT_RELATIVE + jz .no_client_relative + + mov eax, [current_slot] + add ebx, [eax + APPDATA.wnd_clientbox.left] + add ebp, [eax + APPDATA.wnd_clientbox.top] +.no_client_relative: mov ecx, ebx add ecx, [esp+BLITTER.w]