Oups. Layer::MoveBy/ResizeBy() escaped me. :-) The actions they used to perform are now executed only by RootLayer's thread.

git-svn-id: file:///srv/svn/repos/haiku/trunk/current@10972 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Adi Oanca
2005-01-22 23:25:41 +00:00
parent 7bcf57c75b
commit 63f09583e3
5 changed files with 59 additions and 7 deletions
+26 -5
View File
@@ -40,7 +40,8 @@
#include "RootLayer.h" #include "RootLayer.h"
#include "DisplayDriver.h" #include "DisplayDriver.h"
#include "LayerData.h" #include "LayerData.h"
#include <stdio.h> #include "PortLink.h"
#include "ServerProtocol.h"
//#define DEBUG_LAYER //#define DEBUG_LAYER
#ifdef DEBUG_LAYER #ifdef DEBUG_LAYER
@@ -1159,6 +1160,18 @@ void Layer::MoveBy(float x, float y)
return; return;
} }
BPortLink msg(-1, -1);
msg.StartMessage(AS_ROOTLAYER_LAYER_MOVE);
msg.Attach<Layer*>(this);
msg.Attach<float>(x);
msg.Attach<float>(y);
GetRootLayer()->EnqueueMessage(msg);
STRACE(("Layer(%s)::MoveBy() END\n", GetName()));
}
void Layer::move_layer(float x, float y)
{
fFrameAction = B_LAYER_ACTION_MOVE; fFrameAction = B_LAYER_ACTION_MOVE;
BPoint pt(x,y); BPoint pt(x,y);
@@ -1171,8 +1184,6 @@ void Layer::MoveBy(float x, float y)
EmptyGlobals(); EmptyGlobals();
fFrameAction = B_LAYER_ACTION_NONE; fFrameAction = B_LAYER_ACTION_NONE;
STRACE(("Layer(%s)::MoveBy() END\n", GetName()));
} }
void Layer::EmptyGlobals() void Layer::EmptyGlobals()
@@ -1265,6 +1276,18 @@ void Layer::ResizeBy(float x, float y)
return; return;
} }
BPortLink msg(-1, -1);
msg.StartMessage(AS_ROOTLAYER_LAYER_RESIZE);
msg.Attach<Layer*>(this);
msg.Attach<float>(x);
msg.Attach<float>(y);
GetRootLayer()->EnqueueMessage(msg);
STRACE(("Layer(%s)::ResizeBy() END\n", GetName()));
}
void Layer::resize_layer(float x, float y)
{
fFrameAction = B_LAYER_ACTION_RESIZE; fFrameAction = B_LAYER_ACTION_RESIZE;
BPoint pt(x,y); BPoint pt(x,y);
@@ -1280,8 +1303,6 @@ void Layer::ResizeBy(float x, float y)
EmptyGlobals(); EmptyGlobals();
fFrameAction = B_LAYER_ACTION_NONE; fFrameAction = B_LAYER_ACTION_NONE;
STRACE(("Layer(%s)::ResizeBy() END\n", GetName()));
} }
//! Prints information about the layer's current state //! Prints information about the layer's current state
+3
View File
@@ -158,6 +158,9 @@ protected:
friend class ServerWindow; friend class ServerWindow;
friend class Workspace; friend class Workspace;
void move_layer(float x, float y);
void resize_layer(float x, float y);
BRect fFrame; BRect fFrame;
BPoint fBoundsLeftTop; BPoint fBoundsLeftTop;
Layer *fParent; Layer *fParent;
+26
View File
@@ -211,6 +211,26 @@ int32 RootLayer::WorkingThread(void *data)
oneRootLayer->redraw_layer(layer, redrawRegion); oneRootLayer->redraw_layer(layer, redrawRegion);
break; break;
} }
case AS_ROOTLAYER_LAYER_MOVE:
{
Layer *layer = NULL;
float x, y;
messageQueue.Read<Layer*>(&layer);
messageQueue.Read<float>(&x);
messageQueue.Read<float>(&y);
layer->move_layer(x, y);
break;
}
case AS_ROOTLAYER_LAYER_RESIZE:
{
Layer *layer = NULL;
float x, y;
messageQueue.Read<Layer*>(&layer);
messageQueue.Read<float>(&x);
messageQueue.Read<float>(&y);
layer->resize_layer(x, y);
break;
}
default: default:
STRACE(("RootLayer(%s)::WorkingThread received unexpected code %lx\n",oneRootLayer->GetName(), oneRootLayer->code)); STRACE(("RootLayer(%s)::WorkingThread received unexpected code %lx\n",oneRootLayer->GetName(), oneRootLayer->code));
break; break;
@@ -244,6 +264,12 @@ void RootLayer::invalidate_layer(Layer *layer, const BRegion &region)
layer->FullInvalidate(region); layer->FullInvalidate(region);
} }
status_t RootLayer::EnqueueMessage(BPortLink &message)
{
message.SetSendPort(fListenPort);
message.Flush();
}
void RootLayer::GoRedraw(const Layer *layer, const BRegion &region) void RootLayer::GoRedraw(const Layer *layer, const BRegion &region)
{ {
BPortLink msg(fListenPort, -1); BPortLink msg(fListenPort, -1);
+2
View File
@@ -42,6 +42,7 @@ class Screen;
class WinBorder; class WinBorder;
class Desktop; class Desktop;
class DisplayDriver; class DisplayDriver;
class BPortLink;
/*! /*!
\class RootLayer RootLayer.h \class RootLayer RootLayer.h
@@ -115,6 +116,7 @@ public:
void Unlock() { fAllRegionsLock.Unlock(); } void Unlock() { fAllRegionsLock.Unlock(); }
bool IsLocked() { return fAllRegionsLock.IsLocked(); } bool IsLocked() { return fAllRegionsLock.IsLocked(); }
void RunThread(); void RunThread();
status_t EnqueueMessage(BPortLink &message);
void GoInvalidate(const Layer *layer, const BRegion &region); void GoInvalidate(const Layer *layer, const BRegion &region);
void GoRedraw(const Layer *layer, const BRegion &region); void GoRedraw(const Layer *layer, const BRegion &region);
+2 -2
View File
@@ -411,7 +411,7 @@ void WinBorder::MoveBy(float x, float y)
if(fDecorator) if(fDecorator)
fDecorator->MoveBy(x,y); fDecorator->MoveBy(x,y);
Layer::MoveBy(x,y); move_layer(x,y);
} }
//! Resizes the winborder with redraw //! Resizes the winborder with redraw
@@ -423,7 +423,7 @@ void WinBorder::ResizeBy(float x, float y)
if(fDecorator) if(fDecorator)
fDecorator->ResizeBy(x,y); fDecorator->ResizeBy(x,y);
Layer::ResizeBy(x,y); resize_layer(x,y);
} }
//! Returns true if hidden //! Returns true if hidden