Messaging fixes - removed inappropriate BSession use and converted to PortMessage and PortLink as necessary.

Life sucks when you can't sleep. :(


git-svn-id: file:///srv/svn/repos/haiku/trunk/current@5601 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
DarkWyrm
2003-12-07 05:40:51 +00:00
parent 60c2633d9f
commit ab21b1ec0c
3 changed files with 336 additions and 327 deletions
+3 -3
View File
@@ -414,6 +414,7 @@ void ServerApp::_DispatchMessage(PortMessage *msg)
int32 token; int32 token;
port_id sendPort; port_id sendPort;
port_id looperPort; port_id looperPort;
port_id replyport;
char *title; char *title;
msg->Read<BRect>(&frame); msg->Read<BRect>(&frame);
@@ -425,17 +426,16 @@ void ServerApp::_DispatchMessage(PortMessage *msg)
msg->Read<port_id>(&sendPort); msg->Read<port_id>(&sendPort);
msg->Read<port_id>(&looperPort); msg->Read<port_id>(&looperPort);
msg->ReadString(&title); msg->ReadString(&title);
msg->Read<port_id>(&replyport);
STRACE(("ServerApp %s: Got 'New Window' message, trying to do smething...\n", STRACE(("ServerApp %s: Got 'New Window' message, trying to do smething...\n",
_signature.String())); _signature.String()));
// ServerWindow constructor will reply with port_id of a newly created port // ServerWindow constructor will reply with port_id of a newly created port
ServerWindow *newwin = new ServerWindow(frame, title, ServerWindow *newwin = new ServerWindow(frame, title,
look, feel, flags, this, sendPort, looperPort, wkspaces, token); look, feel, flags, this, sendPort, looperPort, replyport, wkspaces, token);
_winlist->AddItem(newwin); _winlist->AddItem(newwin);
//AddWindowToDesktop( newwin, workspace, ActiveScreen() );
STRACE(("ServerApp %s: New Window %s (%.1f,%.1f,%.1f,%.1f)\n", STRACE(("ServerApp %s: New Window %s (%.1f,%.1f,%.1f,%.1f)\n",
_signature.String(),title,frame.left,frame.top,frame.right,frame.bottom)); _signature.String(),title,frame.left,frame.top,frame.right,frame.bottom));
+172 -162
View File
@@ -120,7 +120,7 @@ write_to_buffer(int8 **_buffer, Type value)
*/ */
ServerWindow::ServerWindow(BRect rect, const char *string, uint32 wlook, ServerWindow::ServerWindow(BRect rect, const char *string, uint32 wlook,
uint32 wfeel, uint32 wflags, ServerApp *winapp, port_id winport, uint32 wfeel, uint32 wflags, ServerApp *winapp, port_id winport,
port_id looperPort, uint32 index, int32 handlerID) port_id looperPort, port_id replyport, uint32 index, int32 handlerID)
{ {
_title = new BString; _title = new BString;
if(string) if(string)
@@ -136,55 +136,63 @@ ServerWindow::ServerWindow(BRect rect, const char *string, uint32 wlook,
_token = win_token_handler.GetToken(); _token = win_token_handler.GetToken();
// HAVE messaging working.
// _sender is the port to which the app awaits messages from the server // _sender is the port to which the app awaits messages from the server
_sender = winport; _sender = winport;
// _receiver is the port to which the app sends messages for the server // _receiver is the port to which the app sends messages for the server
_receiver = create_port(30,_title->String()); _receiver = create_port(30,_title->String());
ses = new BSession( _receiver, _sender );
// Send a reply to our window - it is expecting _receiver port. // Send a reply to our window - it is expecting _receiver port.
ses->WriteData( &_receiver, sizeof(port_id) );
ses->Sync(); // Temporarily use winlink to save time and memory
_winlink=new PortLink(replyport);
_winlink->SetOpCode(AS_CREATE_WINDOW);
_winlink->Attach<port_id>(_receiver);
_winlink->Flush();
_winlink->SetPort(winport);
// WAIT for top_view data and create ServerWindow's top most Layer // Wait for top_view data and create ServerWindow's top most Layer
int32 vMsg;
int32 vToken; int32 vToken;
BRect vFrame; BRect vFrame;
uint32 vResizeMode; uint32 vResizeMode;
uint32 vFlags; uint32 vFlags;
char* vName = NULL; char* vName = NULL;
ses->ReadInt32( &vMsg ); PortMessage pmsg;
if (vMsg != AS_LAYER_CREATE_ROOT){ pmsg.ReadFromPort(_receiver);
if(pmsg.Code() != AS_LAYER_CREATE_ROOT)
debugger("SERVER ERROR: ServerWindow(xxx): NO top_view data received!\n"); debugger("SERVER ERROR: ServerWindow(xxx): NO top_view data received!\n");
}
ses->ReadInt32( &vToken );
ses->ReadRect( &vFrame );
ses->ReadUInt32( &vResizeMode );
ses->ReadUInt32( &vFlags );
vName = ses->ReadString();
top_layer = new Layer( vFrame, vName, vToken, vResizeMode, pmsg.Read<int32>(&vToken);
vFlags, this ); pmsg.Read<BRect>(&vFrame);
pmsg.Read<uint32>(&vResizeMode);
pmsg.Read<uint32>(&vFlags);
pmsg.ReadString(&vName);
top_layer= new Layer(vFrame, vName, vToken, vResizeMode, vFlags, this);
delete vName; delete vName;
cl = top_layer; cl = top_layer;
// CREATE a WindoBorder object for our ServerWindow. // Create a WindoBorder object for our ServerWindow.
_winborder = new WinBorder(_frame,_title->String(),wlook,wfeel,wflags,this); _winborder = new WinBorder(_frame,_title->String(),wlook,wfeel,wflags,this);
// SPAWN our message monitoring _monitorthread // Spawn our message-monitoring _monitorthread
_monitorthread = spawn_thread(MonitorWin, _title->String(), B_NORMAL_PRIORITY, this); _monitorthread = spawn_thread(MonitorWin, _title->String(), B_NORMAL_PRIORITY, this);
if(_monitorthread != B_NO_MORE_THREADS && _monitorthread != B_NO_MEMORY) if(_monitorthread != B_NO_MORE_THREADS && _monitorthread != B_NO_MEMORY)
resume_thread(_monitorthread); resume_thread(_monitorthread);
// ADD window to desktop structure. // Add window to desktop structure.
AddWindowToDesktop(this,index,ActiveScreen()); AddWindowToDesktop(this,index,ActiveScreen());
STRACE(("ServerWindow %s:\n",_title->String())); STRACE(("ServerWindow %s:\n",_title->String()));
STRACE(("\tFrame (%.1f,%.1f,%.1f,%.1f)\n",rect.left,rect.top,rect.right,rect.bottom)); STRACE(("\tFrame (%.1f,%.1f,%.1f,%.1f)\n",rect.left,rect.top,rect.right,rect.bottom));
STRACE(("\tPort: %ld\n",_receiver)); STRACE(("\tPort: %ld\n",_receiver));
@@ -207,8 +215,6 @@ STRACE(("ServerWindow %s:~ServerWindow()\n",_title->String()));
cl = NULL; cl = NULL;
if (top_layer) if (top_layer)
delete top_layer; delete top_layer;
delete ses;
ses = NULL;
} }
kill_thread(_monitorthread); kill_thread(_monitorthread);
} }
@@ -471,33 +477,36 @@ bool ServerWindow::IsLocked(void)
return _locker.IsLocked(); return _locker.IsLocked();
} }
void ServerWindow::DispatchMessage( int32 code ) void ServerWindow::DispatchMessage(PortMessage msg)
{ {
switch( code ) switch(msg.Code())
{ {
/********** BView Messages ***********/ //--------- BView Messages -----------------
case AS_SET_CURRENT_LAYER: case AS_SET_CURRENT_LAYER:
{ {
int32 token; int32 token;
ses->ReadInt32( &token ); msg.Read<int32>(&token);
Layer *current = FindLayer(top_layer, token); Layer *current = FindLayer(top_layer, token);
if (current) if (current)
cl = current; cl = current;
else // hope this NEVER happens! :-) else // hope this NEVER happens! :-)
printf("Server PANIC: window %s: cannot find Layer with ID %ld\n", _title->String(), token); debugger("Server PANIC: window cannot find Layer with ID\n");
STRACE(("ServerWindow %s: Message AS_SET_CURRENT_LAYER: Layer name: %s\n", _title->String(), cl->_name->String())); STRACE(("ServerWindow %s: Message AS_SET_CURRENT_LAYER: Layer name: %s\n", _title->String(), cl->_name->String()));
break; break;
} }
case AS_LAYER_CREATE: case AS_LAYER_CREATE:
{ {
/*
TODO: Figure out what Adi did here and convert to PortMessages
// Received when a view is attached to a window. This will require // Received when a view is attached to a window. This will require
// us to attach a layer in the tree in the same manner and invalidate // us to attach a layer in the tree in the same manner and invalidate
// the area in which the new layer resides assuming that it is // the area in which the new layer resides assuming that it is
// visible. // visible.
STRACE(("SW %s: AS_LAYER_CREATE...\n", _title->String())); STRACE(("ServerWindow %s: AS_LAYER_CREATE...\n", _title->String()));
Layer *oldCL = cl; Layer *oldCL = cl;
int32 token; int32 token;
@@ -508,13 +517,13 @@ void ServerWindow::DispatchMessage( int32 code )
int32 childCount; int32 childCount;
char* name; char* name;
ses->ReadInt32( &token ); msg.Read<int32>(&token);
name = ses->ReadString(); msg.ReadString(&name);
ses->ReadRect( &frame ); msg.Read<BRect>(&frame);
ses->ReadInt32( (int32*)&resizeMask ); msg.Read<int32>((int32*)&resizeMask);
ses->ReadInt32( (int32*)&flags ); msg.Read<int32>((int32*)&flags);
ses->ReadBool( &hidden ); msg.Read<bool>(&hidden);
ses->ReadInt32( &childCount ); msg.Read<int32>(&childCount);
// view's visible area is invalidated here // view's visible area is invalidated here
Layer *newLayer; Layer *newLayer;
@@ -526,10 +535,10 @@ void ServerWindow::DispatchMessage( int32 code )
cl = newLayer; cl = newLayer;
int32 msgCode; int32 msgCode;
ses->ReadInt32( &msgCode ); // this is AS_LAYER_SET_FONT_STATE msg.Read<int32>(&msgCode); // this is AS_LAYER_SET_FONT_STATE
DispatchMessage(msgCode); DispatchMessage(msgCode);
ses->ReadInt32( &msgCode ); // this is AS_LAYER_SET_STATE msg.Read<int32>(&msgCode); // this is AS_LAYER_SET_STATE
DispatchMessage(msgCode); DispatchMessage(msgCode);
// attach the view to the tree structure. // attach the view to the tree structure.
@@ -537,13 +546,14 @@ void ServerWindow::DispatchMessage( int32 code )
// attach its children. // attach its children.
for(int i = 0; i < childCount; i++){ for(int i = 0; i < childCount; i++){
ses->ReadInt32( &msgCode ); // this is AS_LAYER_CREATE msg.Read<int32>(&msgCode); // this is AS_LAYER_CREATE
DispatchMessage(msgCode); DispatchMessage(msgCode);
} }
cl = oldCL; cl = oldCL;
STRACE(("DONE: ServerWindow %s: Message AS_CREATE_LAYER: Parent: %s, Child: %s\n", _title->String(), cl->_name->String(), name)); STRACE(("DONE: ServerWindow %s: Message AS_CREATE_LAYER: Parent: %s, Child: %s\n", _title->String(), cl->_name->String(), name));
*/
break; break;
} }
case AS_LAYER_DELETE: case AS_LAYER_DELETE:
@@ -578,22 +588,22 @@ void ServerWindow::DispatchMessage( int32 code )
pattern patt; pattern patt;
int32 clippRegRects; int32 clippRegRects;
ses->ReadPoint( &(cl->_layerdata->penlocation) ); msg.Read<BPoint>(&(cl->_layerdata->penlocation));
ses->ReadFloat( &(cl->_layerdata->pensize) ); msg.Read<float>(&(cl->_layerdata->pensize));
ses->ReadData( &highColor, sizeof(rgb_color) ); msg.Read<rgb_color>(&highColor);
ses->ReadData( &lowColor, sizeof(rgb_color) ); msg.Read<rgb_color>(&lowColor);
ses->ReadData( &viewColor, sizeof(rgb_color) ); msg.Read<rgb_color>(&viewColor);
ses->ReadData( &patt, sizeof(pattern) ); msg.Read<pattern>(&patt);
ses->ReadInt8( (int8*)&(cl->_layerdata->draw_mode) ); msg.Read<int8>((int8*)&(cl->_layerdata->draw_mode));
ses->ReadPoint( &(cl->_layerdata->coordOrigin) ); msg.Read<BPoint>(&(cl->_layerdata->coordOrigin));
ses->ReadInt8( (int8*)&(cl->_layerdata->lineJoin) ); msg.Read<int8>((int8*)&(cl->_layerdata->lineJoin));
ses->ReadInt8( (int8*)&(cl->_layerdata->lineCap) ); msg.Read<int8>((int8*)&(cl->_layerdata->lineCap));
ses->ReadFloat( &(cl->_layerdata->miterLimit) ); msg.Read<float>(&(cl->_layerdata->miterLimit));
ses->ReadInt8( (int8*)&(cl->_layerdata->alphaSrcMode) ); msg.Read<int8>((int8*)&(cl->_layerdata->alphaSrcMode));
ses->ReadInt8( (int8*)&(cl->_layerdata->alphaFncMode) ); msg.Read<int8>((int8*)&(cl->_layerdata->alphaFncMode));
ses->ReadFloat( &(cl->_layerdata->scale) ); msg.Read<float>(&(cl->_layerdata->scale));
ses->ReadBool( &(cl->_layerdata->fontAliasing) ); msg.Read<bool>(&(cl->_layerdata->fontAliasing));
ses->ReadInt32( &clippRegRects ); msg.Read<int32>(&clippRegRects);
cl->_layerdata->patt.Set(*((uint64*)&patt)); cl->_layerdata->patt.Set(*((uint64*)&patt));
cl->_layerdata->highcolor.SetColor(highColor); cl->_layerdata->highcolor.SetColor(highColor);
@@ -609,7 +619,7 @@ void ServerWindow::DispatchMessage( int32 code )
BRect rect; BRect rect;
for(int32 i = 0; i < clippRegRects; i++){ for(int32 i = 0; i < clippRegRects; i++){
ses->ReadRect( &rect ); msg.Read<BRect>(&rect);
cl->_layerdata->clippReg->Include(rect); cl->_layerdata->clippReg->Include(rect);
} }
@@ -631,11 +641,11 @@ void ServerWindow::DispatchMessage( int32 code )
{ {
uint16 mask; uint16 mask;
ses->ReadInt16( (int16*)&mask ); msg.Read<uint16>(&mask);
if (mask & B_FONT_FAMILY_AND_STYLE){ if (mask & B_FONT_FAMILY_AND_STYLE){
uint32 fontID; uint32 fontID;
ses->ReadInt32( (int32*)&fontID ); msg.Read<int32>((int32*)&fontID);
// TODO: implement later. Currently there is no SetFamAndStyle(uint32) // TODO: implement later. Currently there is no SetFamAndStyle(uint32)
// in ServerFont class. DW, could you add one? // in ServerFont class. DW, could you add one?
//cl->_layerdata->font-> //cl->_layerdata->font->
@@ -643,43 +653,43 @@ void ServerWindow::DispatchMessage( int32 code )
if (mask & B_FONT_SIZE){ if (mask & B_FONT_SIZE){
float size; float size;
ses->ReadFloat( &size ); msg.Read<float>(&size);
cl->_layerdata->font.SetSize(size); cl->_layerdata->font.SetSize(size);
} }
if (mask & B_FONT_SHEAR){ if (mask & B_FONT_SHEAR){
float shear; float shear;
ses->ReadFloat( &shear ); msg.Read<float>(&shear);
cl->_layerdata->font.SetShear(shear); cl->_layerdata->font.SetShear(shear);
} }
if (mask & B_FONT_ROTATION){ if (mask & B_FONT_ROTATION){
float rotation; float rotation;
ses->ReadFloat( &rotation ); msg.Read<float>(&rotation);
cl->_layerdata->font.SetRotation(rotation); cl->_layerdata->font.SetRotation(rotation);
} }
if (mask & B_FONT_SPACING){ if (mask & B_FONT_SPACING){
uint8 spacing; uint8 spacing;
ses->ReadInt8( (int8*)&spacing ); // uint8 msg.Read<uint8>(&spacing); // uint8
cl->_layerdata->font.SetSpacing(spacing); cl->_layerdata->font.SetSpacing(spacing);
} }
if (mask & B_FONT_ENCODING){ if (mask & B_FONT_ENCODING){
uint8 encoding; uint8 encoding;
ses->ReadInt8( (int8*)&encoding ); // uint8 msg.Read<int8>((int8*)&encoding); // uint8
cl->_layerdata->font.SetEncoding(encoding); cl->_layerdata->font.SetEncoding(encoding);
} }
if (mask & B_FONT_FACE){ if (mask & B_FONT_FACE){
uint16 face; uint16 face;
ses->ReadInt16( (int16*)&face ); // uint16 msg.Read<uint16>(&face); // uint16
cl->_layerdata->font.SetFace(face); cl->_layerdata->font.SetFace(face);
} }
if (mask & B_FONT_FLAGS){ if (mask & B_FONT_FLAGS){
uint32 flags; uint32 flags;
ses->ReadInt32( (int32*)&flags ); // uint32 msg.Read<uint32>(&flags); // uint32
cl->_layerdata->font.SetFlags(flags); cl->_layerdata->font.SetFlags(flags);
} }
@@ -700,46 +710,46 @@ void ServerWindow::DispatchMessage( int32 code )
patt = ld->patt.GetInt64(); patt = ld->patt.GetInt64();
// TODO: DW implement such a method in ServerFont class! // TODO: DW implement such a method in ServerFont class!
ses->WriteUInt32( 0UL /*uint32 ld->font.GetFamAndStyle()*/ ); _winlink->Attach<uint32>(0UL /*uint32 ld->font.GetFamAndStyle()*/);
ses->WriteFloat( ld->font.Size() ); _winlink->Attach<float>(ld->font.Size());
ses->WriteFloat( ld->font.Shear() ); _winlink->Attach<float>(ld->font.Shear());
ses->WriteFloat( ld->font.Rotation() ); _winlink->Attach<float>(ld->font.Rotation());
ses->WriteUInt8( ld->font.Spacing() ); _winlink->Attach<uint8>(ld->font.Spacing());
ses->WriteUInt8( ld->font.Encoding() ); _winlink->Attach<uint8>(ld->font.Encoding());
ses->WriteUInt16( ld->font.Face() ); _winlink->Attach<uint16>(ld->font.Face());
ses->WriteUInt32( ld->font.Flags() ); _winlink->Attach<uint32>(ld->font.Flags());
ses->WritePoint( ld->penlocation ); _winlink->Attach<BPoint>(ld->penlocation);
ses->WriteFloat( ld->pensize ); _winlink->Attach<float>(ld->pensize);
ses->WriteData( &hc, sizeof(rgb_color)/* 4*8 */ ); _winlink->Attach<rgb_color>(hc);
ses->WriteData( &lc, sizeof(rgb_color)/* 4*8 */ ); _winlink->Attach<rgb_color>(lc);
ses->WriteData( &vc, sizeof(rgb_color)/* 4*8 */ ); _winlink->Attach<rgb_color>(vc);
ses->WriteData( &patt, sizeof(pattern)/* 8*8 */ ); // TODO: fix this to use the templatized version
ses->WritePoint( ld->coordOrigin ); _winlink->Attach(&patt,sizeof(pattern));
ses->WriteUInt8( (uint8)(ld->draw_mode) ); _winlink->Attach<BPoint>(ld->coordOrigin);
ses->WriteUInt8( (uint8)(ld->lineCap) ); _winlink->Attach<uint8>((uint8)(ld->draw_mode));
ses->WriteUInt8( (uint8)(ld->lineJoin) ); _winlink->Attach<uint8>((uint8)(ld->lineCap));
ses->WriteFloat( ld->miterLimit ); _winlink->Attach<uint8>((uint8)(ld->lineJoin));
ses->WriteUInt8( (uint8)(ld->alphaSrcMode) ); _winlink->Attach<float>(ld->miterLimit);
ses->WriteUInt8( (uint8)(ld->alphaFncMode) ); _winlink->Attach<uint8>((uint8)(ld->alphaSrcMode));
ses->WriteFloat( ld->scale ); _winlink->Attach<uint8>((uint8)(ld->alphaFncMode));
ses->WriteBool( ld->fontAliasing ); _winlink->Attach<float>(ld->scale);
_winlink->Attach<bool>(ld->fontAliasing);
int32 noOfRects = 0; int32 noOfRects = 0;
if (ld->clippReg) if (ld->clippReg)
noOfRects = ld->clippReg->CountRects(); noOfRects = ld->clippReg->CountRects();
ses->WriteInt32( noOfRects ); _winlink->Attach<int32>(noOfRects);
for(int i = 0; i < noOfRects; i++){ for(int i = 0; i < noOfRects; i++){
ses->WriteRect( ld->clippReg->RectAt(i) ); _winlink->Attach<BRect>(ld->clippReg->RectAt(i));
} }
ses->WriteFloat( cl->_frame.left ); _winlink->Attach<float>(cl->_frame.left);
ses->WriteFloat( cl->_frame.top ); _winlink->Attach<float>(cl->_frame.top);
ses->WriteRect( cl->_frame.OffsetToCopy( cl->_boundsLeftTop ) ); _winlink->Attach<BRect>(cl->_frame.OffsetToCopy(cl->_boundsLeftTop));
_winlink->Flush();
ses->Sync();
STRACE(("ServerWindow %s: Message AS_LAYER_GET_STATE: Layer: %s\n",_title->String(), cl->_name->String())); STRACE(("ServerWindow %s: Message AS_LAYER_GET_STATE: Layer: %s\n",_title->String(), cl->_name->String()));
break; break;
@@ -748,8 +758,8 @@ void ServerWindow::DispatchMessage( int32 code )
{ {
float x, y; float x, y;
ses->ReadFloat( &x ); msg.Read<float>(&x);
ses->ReadFloat( &y ); msg.Read<float>(&y);
cl->MoveBy(x, y); cl->MoveBy(x, y);
@@ -760,8 +770,8 @@ void ServerWindow::DispatchMessage( int32 code )
{ {
float newWidth, newHeight; float newWidth, newHeight;
ses->ReadFloat( &newWidth ); msg.Read<float>(&newWidth);
ses->ReadFloat( &newHeight ); msg.Read<float>(&newHeight);
/* TODO: check for minimum alowed. WinBorder should provide such /* TODO: check for minimum alowed. WinBorder should provide such
* a method, based on its decorator. * a method, based on its decorator.
*/ */
@@ -772,10 +782,10 @@ void ServerWindow::DispatchMessage( int32 code )
} }
case AS_LAYER_GET_COORD: case AS_LAYER_GET_COORD:
{ {
ses->WriteFloat( cl->_frame.left ); _winlink->Attach<float>(cl->_frame.left);
ses->WriteFloat( cl->_frame.top ); _winlink->Attach<float>(cl->_frame.top);
ses->WriteRect( cl->_frame.OffsetToCopy( cl->_boundsLeftTop ) ); _winlink->Attach<BRect>(cl->_frame.OffsetToCopy(cl->_boundsLeftTop));
ses->Sync(); _winlink->Flush();
STRACE(("ServerWindow %s: Message AS_LAYER_GET_COORD: Layer: %s\n",_title->String(), cl->_name->String())); STRACE(("ServerWindow %s: Message AS_LAYER_GET_COORD: Layer: %s\n",_title->String(), cl->_name->String()));
break; break;
@@ -784,8 +794,8 @@ void ServerWindow::DispatchMessage( int32 code )
{ {
float x, y; float x, y;
ses->ReadFloat( &x ); msg.Read<float>(&x);
ses->ReadFloat( &y ); msg.Read<float>(&y);
cl->_layerdata->coordOrigin.Set(x, y); cl->_layerdata->coordOrigin.Set(x, y);
@@ -794,15 +804,15 @@ void ServerWindow::DispatchMessage( int32 code )
} }
case AS_LAYER_GET_ORIGIN: case AS_LAYER_GET_ORIGIN:
{ {
ses->WritePoint( cl->_layerdata->coordOrigin ); _winlink->Attach<BPoint>(cl->_layerdata->coordOrigin);
ses->Sync(); _winlink->Flush();
STRACE(("ServerWindow %s: Message AS_LAYER_GET_ORIGIN: Layer: %s\n",_title->String(), cl->_name->String())); STRACE(("ServerWindow %s: Message AS_LAYER_GET_ORIGIN: Layer: %s\n",_title->String(), cl->_name->String()));
break; break;
} }
case AS_LAYER_RESIZE_MODE: case AS_LAYER_RESIZE_MODE:
{ {
ses->ReadUInt32( &(cl->_resize_mode) ); msg.Read<uint32>(&(cl->_resize_mode));
STRACE(("ServerWindow %s: Message AS_LAYER_RESIZE_MODE: Layer: %s\n",_title->String(), cl->_name->String())); STRACE(("ServerWindow %s: Message AS_LAYER_RESIZE_MODE: Layer: %s\n",_title->String(), cl->_name->String()));
break; break;
@@ -811,7 +821,7 @@ void ServerWindow::DispatchMessage( int32 code )
{ {
int32 token; int32 token;
ses->ReadInt32( &token ); msg.Read<int32>(&token);
cursormanager->SetCursor(token); cursormanager->SetCursor(token);
@@ -820,7 +830,7 @@ void ServerWindow::DispatchMessage( int32 code )
} }
case AS_LAYER_SET_FLAGS: case AS_LAYER_SET_FLAGS:
{ {
ses->ReadUInt32( &(cl->_flags) ); msg.Read<uint32>(&(cl->_flags));
STRACE(("ServerWindow %s: Message AS_LAYER_SET_FLAGS: Layer: %s\n",_title->String(), cl->_name->String())); STRACE(("ServerWindow %s: Message AS_LAYER_SET_FLAGS: Layer: %s\n",_title->String(), cl->_name->String()));
break; break;
@@ -847,9 +857,9 @@ void ServerWindow::DispatchMessage( int32 code )
* it was called. e.g.: different lineCap or lineJoin. Strange result * it was called. e.g.: different lineCap or lineJoin. Strange result
* would appear. * would appear.
*/ */
ses->ReadInt8( &lineCap ); msg.Read<int8>(&lineCap);
ses->ReadInt8( &lineJoin ); msg.Read<int8>(&lineJoin);
ses->ReadFloat( &(cl->_layerdata->miterLimit) ); msg.Read<float>(&(cl->_layerdata->miterLimit));
cl->_layerdata->lineCap = (cap_mode)lineCap; cl->_layerdata->lineCap = (cap_mode)lineCap;
cl->_layerdata->lineJoin = (join_mode)lineJoin; cl->_layerdata->lineJoin = (join_mode)lineJoin;
@@ -859,10 +869,10 @@ void ServerWindow::DispatchMessage( int32 code )
} }
case AS_LAYER_GET_LINE_MODE: case AS_LAYER_GET_LINE_MODE:
{ {
ses->WriteInt8( (int8)(cl->_layerdata->lineCap) ); _winlink->Attach<int8>((int8)(cl->_layerdata->lineCap));
ses->WriteInt8( (int8)(cl->_layerdata->lineJoin) ); _winlink->Attach<int8>((int8)(cl->_layerdata->lineJoin));
ses->WriteFloat( cl->_layerdata->miterLimit ); _winlink->Attach<float>(cl->_layerdata->miterLimit);
ses->Sync(); _winlink->Flush();
STRACE(("ServerWindow %s: Message AS_LAYER_GET_LINE_MODE: Layer: %s\n",_title->String(), cl->_name->String())); STRACE(("ServerWindow %s: Message AS_LAYER_GET_LINE_MODE: Layer: %s\n",_title->String(), cl->_name->String()));
break; break;
@@ -896,7 +906,7 @@ void ServerWindow::DispatchMessage( int32 code )
} }
case AS_LAYER_SET_SCALE: case AS_LAYER_SET_SCALE:
{ {
ses->ReadFloat( &(cl->_layerdata->scale) ); msg.Read<float>(&(cl->_layerdata->scale));
STRACE(("ServerWindow %s: Message AS_LAYER_SET_SCALE: Layer: %s\n",_title->String(), cl->_name->String())); STRACE(("ServerWindow %s: Message AS_LAYER_SET_SCALE: Layer: %s\n",_title->String(), cl->_name->String()));
break; break;
@@ -909,8 +919,8 @@ void ServerWindow::DispatchMessage( int32 code )
while((ld = ld->prevState)) while((ld = ld->prevState))
scale *= ld->scale; scale *= ld->scale;
ses->WriteFloat( scale ); _winlink->Attach<float>(scale);
ses->Sync(); _winlink->Flush();
STRACE(("ServerWindow %s: Message AS_LAYER_SET_SCALE: Layer: %s\n",_title->String(), cl->_name->String())); STRACE(("ServerWindow %s: Message AS_LAYER_SET_SCALE: Layer: %s\n",_title->String(), cl->_name->String()));
break; break;
@@ -919,8 +929,8 @@ void ServerWindow::DispatchMessage( int32 code )
{ {
float x, y; float x, y;
ses->ReadFloat( &x ); msg.Read<float>(&x);
ses->ReadFloat( &y ); msg.Read<float>(&y);
cl->_layerdata->penlocation.Set(x, y); cl->_layerdata->penlocation.Set(x, y);
@@ -929,23 +939,23 @@ void ServerWindow::DispatchMessage( int32 code )
} }
case AS_LAYER_GET_PEN_LOC: case AS_LAYER_GET_PEN_LOC:
{ {
ses->WritePoint( cl->_layerdata->penlocation ); _winlink->Attach<BPoint>(cl->_layerdata->penlocation);
ses->Sync(); _winlink->Flush();
STRACE(("ServerWindow %s: Message AS_LAYER_GET_PEN_LOC: Layer: %s\n",_title->String(), cl->_name->String())); STRACE(("ServerWindow %s: Message AS_LAYER_GET_PEN_LOC: Layer: %s\n",_title->String(), cl->_name->String()));
break; break;
} }
case AS_LAYER_SET_PEN_SIZE: case AS_LAYER_SET_PEN_SIZE:
{ {
ses->ReadFloat( &(cl->_layerdata->pensize) ); msg.Read<float>(&(cl->_layerdata->pensize));
STRACE(("ServerWindow %s: Message AS_LAYER_SET_PEN_SIZE: Layer: %s\n",_title->String(), cl->_name->String())); STRACE(("ServerWindow %s: Message AS_LAYER_SET_PEN_SIZE: Layer: %s\n",_title->String(), cl->_name->String()));
break; break;
} }
case AS_LAYER_GET_PEN_SIZE: case AS_LAYER_GET_PEN_SIZE:
{ {
ses->WriteFloat( cl->_layerdata->pensize ); _winlink->Attach<float>(cl->_layerdata->pensize);
ses->Sync(); _winlink->Flush();
STRACE(("ServerWindow %s: Message AS_LAYER_GET_PEN_SIZE: Layer: %s\n",_title->String(), cl->_name->String())); STRACE(("ServerWindow %s: Message AS_LAYER_GET_PEN_SIZE: Layer: %s\n",_title->String(), cl->_name->String()));
break; break;
@@ -954,7 +964,7 @@ void ServerWindow::DispatchMessage( int32 code )
{ {
rgb_color c; rgb_color c;
ses->ReadData( &c, sizeof(rgb_color) ); msg.Read<rgb_color>(&c);
cl->_layerdata->highcolor.SetColor(c); cl->_layerdata->highcolor.SetColor(c);
@@ -965,7 +975,7 @@ void ServerWindow::DispatchMessage( int32 code )
{ {
rgb_color c; rgb_color c;
ses->ReadData( &c, sizeof(rgb_color) ); msg.Read<rgb_color>(&c);
cl->_layerdata->lowcolor.SetColor(c); cl->_layerdata->lowcolor.SetColor(c);
@@ -976,7 +986,7 @@ void ServerWindow::DispatchMessage( int32 code )
{ {
rgb_color c; rgb_color c;
ses->ReadData( &c, sizeof(rgb_color) ); msg.Read<rgb_color>(&c);
cl->_layerdata->viewcolor.SetColor(c); cl->_layerdata->viewcolor.SetColor(c);
@@ -991,10 +1001,10 @@ void ServerWindow::DispatchMessage( int32 code )
lowColor = cl->_layerdata->lowcolor.GetColor32(); lowColor = cl->_layerdata->lowcolor.GetColor32();
viewColor = cl->_layerdata->viewcolor.GetColor32(); viewColor = cl->_layerdata->viewcolor.GetColor32();
ses->WriteData( &highColor, sizeof(rgb_color) ); _winlink->Attach<rgb_color>(highColor);
ses->WriteData( &lowColor, sizeof(rgb_color) ); _winlink->Attach<rgb_color>(lowColor);
ses->WriteData( &viewColor, sizeof(rgb_color) ); _winlink->Attach<rgb_color>(viewColor);
ses->Sync(); _winlink->Flush();
STRACE(("ServerWindow %s: Message AS_LAYER_GET_COLORS: Layer: %s\n",_title->String(), cl->_name->String())); STRACE(("ServerWindow %s: Message AS_LAYER_GET_COLORS: Layer: %s\n",_title->String(), cl->_name->String()));
break; break;
@@ -1003,8 +1013,8 @@ void ServerWindow::DispatchMessage( int32 code )
{ {
int8 srcAlpha, alphaFunc; int8 srcAlpha, alphaFunc;
ses->ReadInt8( &srcAlpha ); msg.Read<int8>(&srcAlpha);
ses->ReadInt8( &alphaFunc ); msg.Read<int8>(&alphaFunc);
cl->_layerdata->alphaSrcMode = (source_alpha)srcAlpha; cl->_layerdata->alphaSrcMode = (source_alpha)srcAlpha;
cl->_layerdata->alphaFncMode = (alpha_function)alphaFunc; cl->_layerdata->alphaFncMode = (alpha_function)alphaFunc;
@@ -1014,9 +1024,9 @@ void ServerWindow::DispatchMessage( int32 code )
} }
case AS_LAYER_GET_BLEND_MODE: case AS_LAYER_GET_BLEND_MODE:
{ {
ses->WriteInt8( (int8)(cl->_layerdata->alphaSrcMode) ); _winlink->Attach<int8>((int8)(cl->_layerdata->alphaSrcMode));
ses->WriteInt8( (int8)(cl->_layerdata->alphaFncMode) ); _winlink->Attach<int8>((int8)(cl->_layerdata->alphaFncMode));
ses->Sync(); _winlink->Flush();
STRACE(("ServerWindow %s: Message AS_LAYER_GET_BLEND_MODE: Layer: %s\n",_title->String(), cl->_name->String())); STRACE(("ServerWindow %s: Message AS_LAYER_GET_BLEND_MODE: Layer: %s\n",_title->String(), cl->_name->String()));
break; break;
@@ -1025,7 +1035,7 @@ void ServerWindow::DispatchMessage( int32 code )
{ {
int8 drawingMode; int8 drawingMode;
ses->ReadInt8( &drawingMode ); msg.Read<int8>(&drawingMode);
cl->_layerdata->draw_mode = (drawing_mode)drawingMode; cl->_layerdata->draw_mode = (drawing_mode)drawingMode;
@@ -1034,15 +1044,15 @@ void ServerWindow::DispatchMessage( int32 code )
} }
case AS_LAYER_GET_DRAW_MODE: case AS_LAYER_GET_DRAW_MODE:
{ {
ses->WriteInt8( (int8)(cl->_layerdata->draw_mode) ); _winlink->Attach<int8>((int8)(cl->_layerdata->draw_mode));
ses->Sync(); _winlink->Flush();
STRACE(("ServerWindow %s: Message AS_LAYER_GET_DRAW_MODE: Layer: %s\n",_title->String(), cl->_name->String())); STRACE(("ServerWindow %s: Message AS_LAYER_GET_DRAW_MODE: Layer: %s\n",_title->String(), cl->_name->String()));
break; break;
} }
case AS_LAYER_PRINT_ALIASING: case AS_LAYER_PRINT_ALIASING:
{ {
ses->ReadBool( &(cl->_layerdata->fontAliasing) ); msg.Read<bool>(&(cl->_layerdata->fontAliasing));
STRACE(("ServerWindow %s: Message AS_LAYER_PRINT_ALIASING: Layer: %s\n",_title->String(), cl->_name->String())); STRACE(("ServerWindow %s: Message AS_LAYER_PRINT_ALIASING: Layer: %s\n",_title->String(), cl->_name->String()));
break; break;
@@ -1053,8 +1063,8 @@ void ServerWindow::DispatchMessage( int32 code )
int32 pictureToken; int32 pictureToken;
BPoint where; BPoint where;
ses->ReadInt32( &pictureToken ); msg.Read<int32>(&pictureToken);
ses->ReadPoint( &where ); msg.Read<BPoint>(&where);
BRegion reg; BRegion reg;
@@ -1121,8 +1131,8 @@ void ServerWindow::DispatchMessage( int32 code )
int32 pictureToken; int32 pictureToken;
BPoint where; BPoint where;
ses->ReadInt32( &pictureToken ); msg.Read<int32>(&pictureToken);
ses->ReadPoint( &where ); msg.Read<BPoint>(&where);
ServerPicture *sp = NULL; ServerPicture *sp = NULL;
int32 i = 0; int32 i = 0;
@@ -1172,13 +1182,13 @@ void ServerWindow::DispatchMessage( int32 code )
reg.IntersectWith(ld->clippReg); reg.IntersectWith(ld->clippReg);
noOfRects = reg.CountRects(); noOfRects = reg.CountRects();
ses->WriteInt32( noOfRects ); _winlink->Attach<int32>(noOfRects);
for(int i = 0; i < noOfRects; i++){ for(int i = 0; i < noOfRects; i++){
ses->WriteRect( reg.RectAt(i) ); _winlink->Attach<BRect>(reg.RectAt(i));
} }
ses->Sync(); _winlink->Flush();
STRACE(("ServerWindow %s: Message AS_LAYER_GET_CLIP_REGION: Layer: %s\n",_title->String(), cl->_name->String())); STRACE(("ServerWindow %s: Message AS_LAYER_GET_CLIP_REGION: Layer: %s\n",_title->String(), cl->_name->String()));
break; break;
@@ -1194,10 +1204,10 @@ void ServerWindow::DispatchMessage( int32 code )
else else
cl->_layerdata->clippReg = new BRegion(); cl->_layerdata->clippReg = new BRegion();
ses->ReadInt32( &noOfRects ); msg.Read<int32>(&noOfRects);
for(int i = 0; i < noOfRects; i++){ for(int i = 0; i < noOfRects; i++){
ses->ReadRect( &r ); msg.Read<BRect>(&r);
cl->_layerdata->clippReg->Include(r); cl->_layerdata->clippReg->Include(r);
} }
@@ -1214,7 +1224,7 @@ void ServerWindow::DispatchMessage( int32 code )
// TODO: watch out for the coordinate system // TODO: watch out for the coordinate system
BRect invalRect; BRect invalRect;
ses->ReadRect( &invalRect ); msg.Read<BRect>(&invalRect);
cl->Invalidate(invalRect); cl->Invalidate(invalRect);
@@ -1230,10 +1240,10 @@ void ServerWindow::DispatchMessage( int32 code )
int32 noOfRects; int32 noOfRects;
BRect rect; BRect rect;
ses->ReadInt32( &noOfRects ); msg.Read<int32>(&noOfRects);
for(int i = 0; i < noOfRects; i++){ for(int i = 0; i < noOfRects; i++){
ses->ReadRect( &rect ); msg.Read<BRect>(&rect);
invalReg.Include(rect); invalReg.Include(rect);
} }
@@ -1392,7 +1402,7 @@ void ServerWindow::DispatchMessage( int32 code )
} }
default: default:
{ {
printf("ServerWindow %s received unexpected code - message offset %lx\n",_title->String(), code - SERVER_TRUE); printf("ServerWindow %s received unexpected code - message offset %lx\n",_title->String(), msg.Code() - SERVER_TRUE);
break; break;
} }
} }
@@ -1947,15 +1957,15 @@ void ServerWindow::DispatchGraphicsMessage(int32 msgsize, int8 *msgbuffer)
int32 ServerWindow::MonitorWin(void *data) int32 ServerWindow::MonitorWin(void *data)
{ {
ServerWindow *win = (ServerWindow *)data; ServerWindow *win = (ServerWindow *)data;
status_t rv; status_t stat;
int32 code; PortMessage msg;
for(;;) for(;;)
{ {
rv = win->ses->ReadInt32( &code ); stat = msg.ReadFromPort(win->_receiver);
if ( rv != B_BAD_PORT_ID ){ if (stat != B_BAD_PORT_ID){
switch( code ){ switch(msg.Code()){
case B_QUIT_REQUESTED:{ case B_QUIT_REQUESTED:{
STRACE(("ServerWindow %s received Quit request\n",win->Title())); STRACE(("ServerWindow %s received Quit request\n",win->Title()));
// Our BWindow sent us this message when it quit. // Our BWindow sent us this message when it quit.
@@ -1966,7 +1976,7 @@ int32 ServerWindow::MonitorWin(void *data)
break; break;
} }
default:{ default:{
win->DispatchMessage( code ); win->DispatchMessage(msg);
break; break;
} }
} }
@@ -1976,7 +1986,7 @@ int32 ServerWindow::MonitorWin(void *data)
return 1; return 1;
} }
if( code == B_QUIT_REQUESTED ) if(msg.Code() == B_QUIT_REQUESTED)
break; break;
} }
+2 -3
View File
@@ -67,7 +67,7 @@ public:
ServerWindow(BRect rect, const char *string, ServerWindow(BRect rect, const char *string,
uint32 wlook, uint32 wfeel, uint32 wflags, uint32 wlook, uint32 wfeel, uint32 wflags,
ServerApp *winapp, port_id winport, ServerApp *winapp, port_id winport,
port_id looperPort, uint32 index, port_id looperPort, port_id replyport, uint32 index,
int32 handlerID); int32 handlerID);
~ServerWindow(void); ~ServerWindow(void);
@@ -97,7 +97,7 @@ public:
void Unlock(void); void Unlock(void);
bool IsLocked(void); bool IsLocked(void);
void DispatchMessage( int32 code ); void DispatchMessage(PortMessage msg);
void DispatchGraphicsMessage(int32 msgsize, int8 *msgbuffer); void DispatchGraphicsMessage(int32 msgsize, int8 *msgbuffer);
static int32 MonitorWin(void *data); static int32 MonitorWin(void *data);
static void HandleMouseEvent(PortMessage *msg); static void HandleMouseEvent(PortMessage *msg);
@@ -141,7 +141,6 @@ protected:
uint32 _token; uint32 _token;
int32 _handlertoken; int32 _handlertoken;
BSession *ses;
port_id winLooperPort; port_id winLooperPort;
Layer *top_layer; Layer *top_layer;
Layer *cl; // short for currentLayer. We'll use it a lot, that's why it's short :-) Layer *cl; // short for currentLayer. We'll use it a lot, that's why it's short :-)