From 153d03aa0b4c1586dd04f07a6d08debf1e4316d4 Mon Sep 17 00:00:00 2001 From: Adi Oanca Date: Thu, 25 Sep 2003 17:25:38 +0000 Subject: [PATCH] 4 new message handlers git-svn-id: file:///srv/svn/repos/haiku/trunk/current@4824 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/servers/app/server/ServerWindow.cpp | 101 ++++++++++++++++++++++-- 1 file changed, 96 insertions(+), 5 deletions(-) diff --git a/src/servers/app/server/ServerWindow.cpp b/src/servers/app/server/ServerWindow.cpp index 0164f23ddd..330e1b8e4f 100644 --- a/src/servers/app/server/ServerWindow.cpp +++ b/src/servers/app/server/ServerWindow.cpp @@ -45,6 +45,7 @@ #include "Utils.h" #include "DisplayDriver.h" #include "ServerPicture.h" +#include "CursorManager.h" //#define DEBUG_SERVERWINDOW //#define DEBUG_SERVERWINDOW_MOUSE @@ -730,6 +731,44 @@ void ServerWindow::DispatchMessage( int32 code ) STRACE(("ServerWindow %s: Message AS_LAYER_GET_COORD: Layer: %s\n",_title->String(), cl->_name->String())); break; } + case AS_LAYER_SET_ORIGIN: + { + float x, y; + + ses->ReadFloat( &x ); + ses->ReadFloat( &y ); + + cl->_layerdata->coordOrigin.Set(x, y); + + STRACE(("ServerWindow %s: Message AS_LAYER_SET_ORIGIN: Layer: %s\n",_title->String(), cl->_name->String())); + break; + } + case AS_LAYER_GET_ORIGIN: + { + ses->WritePoint( cl->_layerdata->coordOrigin ); + ses->Sync(); + + STRACE(("ServerWindow %s: Message AS_LAYER_GET_ORIGIN: Layer: %s\n",_title->String(), cl->_name->String())); + break; + } + case AS_LAYER_RESIZE_MODE: + { + ses->ReadUInt32( &(cl->_resize_mode) ); + + STRACE(("ServerWindow %s: Message AS_LAYER_RESIZE_MODE: Layer: %s\n",_title->String(), cl->_name->String())); + break; + } + case AS_LAYER_CURSOR: + { + int32 token; + + ses->ReadInt32( &token ); + + cursormanager->SetCursor( token ); + + STRACE(("ServerWindow %s: Message AS_LAYER_CURSOR: Layer: %s\n",_title->String(), cl->_name->String())); + break; + } case AS_LAYER_SET_FLAGS: { ses->ReadUInt32( &(cl->_flags) ); @@ -957,6 +996,7 @@ void ServerWindow::DispatchMessage( int32 code ) } case AS_LAYER_CLIP_TO_PICTURE: { +// TODO: watch out for the coordinate system int32 pictureToken; BPoint where; @@ -982,13 +1022,18 @@ void ServerWindow::DispatchMessage( int32 code ) cl->_layerdata->clippInverse = false; -// TODO: redraw. + /* TODO: modify when you have a function that returns the clipping + * region composed by: the visible region & local clipping + * region(across states) & the picture clipping region. + */ + cl->RequestDraw( cl->_layerdata->clippReg->Frame() ); STRACE(("ServerWindow %s: Message AS_LAYER_CLIP_TO_PICTURE: Layer: %s\n",_title->String(), cl->_name->String())); break; } case AS_LAYER_CLIP_TO_INVERSE_PICTURE: { +// TODO: watch out for the coordinate system int32 pictureToken; BPoint where; @@ -1014,17 +1059,22 @@ void ServerWindow::DispatchMessage( int32 code ) cl->_layerdata->clippInverse = true; -// TODO: redraw. + /* TODO: modify when you have a function that returns the clipping + * region composed by: the visible region & local clipping + * region(across states) & the picture clipping region. + */ + cl->RequestDraw( cl->_layerdata->clippReg->Frame() ); STRACE(("ServerWindow %s: Message AS_LAYER_CLIP_TO_INVERSE_PICTURE: Layer: %s\n",_title->String(), cl->_name->String())); break; } case AS_LAYER_GET_CLIP_REGION: { +// TODO: watch out for the coordinate system BRegion reg; LayerData *ld; int32 noOfRects; - // TODO: I think locking is necesary + ld = cl->_layerdata; reg = cl->ConvertFromParent( cl->_visible ); @@ -1049,9 +1099,10 @@ void ServerWindow::DispatchMessage( int32 code ) } case AS_LAYER_SET_CLIP_REGION: { +// TODO: watch out for the coordinate system int32 noOfRects; BRect r; - // TODO: I think locking is necesary + if( cl->_layerdata->clippReg ) cl->_layerdata->clippReg->MakeEmpty(); else @@ -1064,11 +1115,51 @@ void ServerWindow::DispatchMessage( int32 code ) cl->_layerdata->clippReg->Include( r ); } -// TODO: redraw. + /* TODO: modify when you have a function that returns the clipping + * region composed by: the visible region & local clipping + * region(across states) & the picture clipping region. + */ + cl->RequestDraw( cl->_layerdata->clippReg->Frame() ); STRACE(("ServerWindow %s: Message AS_LAYER_SET_CLIP_REGION: Layer: %s\n",_title->String(), cl->_name->String())); break; } + + case AS_LAYER_INVAL_RECT: + { +// TODO: watch out for the coordinate system + BRect invalRect; + + ses->ReadRect( &invalRect ); + + cl->Invalidate( invalRect ); + + cl->RequestDraw( invalRect ); + + STRACE(("ServerWindow %s: Message AS_LAYER_INVAL_RECT: Layer: %s\n",_title->String(), cl->_name->String())); + break; + } + case AS_LAYER_INVAL_REGION: + { +// TODO: watch out for the coordinate system + BRegion invalReg; + int32 noOfRects; + BRect rect; + + ses->ReadInt32( &noOfRects ); + + for( int i = 0; i < noOfRects; i++ ){ + ses->ReadRect( &rect ); + invalReg.Include( rect ); + } + + cl->Invalidate( invalReg ); + + cl->RequestDraw( invalReg.Frame() ); + + STRACE(("ServerWindow %s: Message AS_LAYER_INVAL_RECT: Layer: %s\n",_title->String(), cl->_name->String())); + break; + } /********** END: BView Messages ***********/