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