Cleanup.
* removed old Convert{To|From}{Parent|Top} methods. They were replaced by Convert{To|From}{Parent|Screen}(type *data) * removed some unused methods from Layer class. * re-aranged Layer's class declaration - grouped methods * made all Layer's members private. * renamed a few private methods from method_name _MethodName git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14778 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
ec9b3f7ca1
commit
02414ebd4e
@ -39,23 +39,24 @@
|
||||
# define STRACE(x) ;
|
||||
#endif
|
||||
|
||||
//#define DEBUG_LAYER_REBUILD
|
||||
#ifdef DEBUG_LAYER_REBUILD
|
||||
# define RBTRACE(x) printf x
|
||||
#else
|
||||
# define RBTRACE(x) ;
|
||||
#endif
|
||||
|
||||
|
||||
Layer::Layer(BRect frame, const char* name, int32 token,
|
||||
uint32 resize, uint32 flags, DrawingEngine* driver)
|
||||
:
|
||||
fFrame(frame), // in parent coordinates
|
||||
fName(name),
|
||||
fFrame(frame),
|
||||
// fBoundsLeftTop(0.0, 0.0),
|
||||
|
||||
// Layer does not start out as a part of the tree
|
||||
fVisible2(),
|
||||
fFullVisible2(),
|
||||
fDirtyForRebuild(),
|
||||
|
||||
fDriver(driver),
|
||||
fRootLayer(NULL),
|
||||
fServerWin(NULL),
|
||||
fOwner(NULL),
|
||||
|
||||
fDrawState(new DrawState),
|
||||
|
||||
fParent(NULL),
|
||||
fPreviousSibling(NULL),
|
||||
fNextSibling(NULL),
|
||||
@ -64,31 +65,17 @@ Layer::Layer(BRect frame, const char* name, int32 token,
|
||||
|
||||
fCurrent(NULL),
|
||||
|
||||
// all regions (fVisible, fFullVisible, fFull) start empty
|
||||
fVisible2(),
|
||||
fFullVisible2(),
|
||||
fDirtyForRebuild(),
|
||||
fClipReg(&fVisible2),
|
||||
|
||||
fServerWin(NULL),
|
||||
fName(name),
|
||||
fViewToken(token),
|
||||
|
||||
fFlags(flags),
|
||||
fAdFlags(0),
|
||||
fResizeMode(resize),
|
||||
fEventMask(0UL),
|
||||
fEventOptions(0UL),
|
||||
|
||||
fHidden(false),
|
||||
fIsTopLayer(false),
|
||||
|
||||
fAdFlags(0),
|
||||
|
||||
fDriver(driver),
|
||||
fDrawState(new DrawState),
|
||||
|
||||
fRootLayer(NULL),
|
||||
|
||||
fViewColor(255, 255, 255, 255),
|
||||
|
||||
fBackgroundBitmap(NULL),
|
||||
fOverlayBitmap(NULL)
|
||||
{
|
||||
@ -254,7 +241,7 @@ Layer::RemoveChild(Layer *layer)
|
||||
|
||||
layer->fPreviousSibling = NULL;
|
||||
layer->fNextSibling = NULL;
|
||||
layer->clear_visible_regions();
|
||||
layer->_ClearVisibleRegions();
|
||||
|
||||
// 2) Iterate over all of the removed-layer's descendants and unset the
|
||||
// root layer, server window, and all redraw-related regions
|
||||
@ -740,107 +727,6 @@ Layer::Scale() const
|
||||
return CurrentState()->Scale();
|
||||
}
|
||||
|
||||
|
||||
//! Converts the passed point to parent coordinates
|
||||
BPoint
|
||||
Layer::ConvertToParent(BPoint pt)
|
||||
{
|
||||
ConvertToParent2(&pt);
|
||||
return pt;
|
||||
}
|
||||
|
||||
//! Converts the passed rectangle to parent coordinates
|
||||
BRect
|
||||
Layer::ConvertToParent(BRect rect)
|
||||
{
|
||||
ConvertToParent2(&rect);
|
||||
return rect;
|
||||
}
|
||||
|
||||
//! Converts the passed region to parent coordinates
|
||||
BRegion
|
||||
Layer::ConvertToParent(BRegion* reg)
|
||||
{
|
||||
BRegion newReg(*reg);
|
||||
ConvertToParent2(&newReg);
|
||||
return newReg;
|
||||
}
|
||||
|
||||
//! Converts the passed point from parent coordinates
|
||||
BPoint
|
||||
Layer::ConvertFromParent(BPoint pt)
|
||||
{
|
||||
ConvertFromParent2(&pt);
|
||||
return pt;
|
||||
}
|
||||
|
||||
//! Converts the passed rectangle from parent coordinates
|
||||
BRect
|
||||
Layer::ConvertFromParent(BRect rect)
|
||||
{
|
||||
ConvertFromParent2(&rect);
|
||||
return rect;
|
||||
}
|
||||
|
||||
//! Converts the passed region from parent coordinates
|
||||
BRegion
|
||||
Layer::ConvertFromParent(BRegion *reg)
|
||||
{
|
||||
BRegion newReg(*reg);
|
||||
ConvertFromParent2(&newReg);
|
||||
return newReg;
|
||||
}
|
||||
|
||||
// ConvertToTop
|
||||
BPoint
|
||||
Layer::ConvertToTop(BPoint pt)
|
||||
{
|
||||
ConvertToScreen2(&pt);
|
||||
return pt;
|
||||
}
|
||||
|
||||
//! Converts the passed rectangle to screen coordinates
|
||||
BRect
|
||||
Layer::ConvertToTop(BRect rect)
|
||||
{
|
||||
ConvertToScreen2(&rect);
|
||||
return rect;
|
||||
}
|
||||
|
||||
//! Converts the passed region to screen coordinates
|
||||
BRegion
|
||||
Layer::ConvertToTop(BRegion *reg)
|
||||
{
|
||||
BRegion newReg(*reg);
|
||||
ConvertToScreen2(&newReg);
|
||||
return newReg;
|
||||
}
|
||||
|
||||
// ConvertFromTop
|
||||
BPoint
|
||||
Layer::ConvertFromTop(BPoint pt)
|
||||
{
|
||||
ConvertFromScreen2(&pt);
|
||||
return pt;
|
||||
}
|
||||
|
||||
//! Converts the passed rectangle from screen coordinates
|
||||
BRect
|
||||
Layer::ConvertFromTop(BRect rect)
|
||||
{
|
||||
ConvertFromScreen2(&rect);
|
||||
return rect;
|
||||
}
|
||||
|
||||
//! Converts the passed region from screen coordinates
|
||||
BRegion
|
||||
Layer::ConvertFromTop(BRegion *reg)
|
||||
{
|
||||
BRegion newReg(*reg);
|
||||
ConvertFromScreen2(&newReg);
|
||||
return newReg;
|
||||
}
|
||||
|
||||
//! Recursively deletes all children of the calling layer
|
||||
void
|
||||
Layer::PruneTree(void)
|
||||
@ -865,105 +751,6 @@ Layer::PruneTree(void)
|
||||
// Man, this thing is short. Elegant, ain't it? :P
|
||||
}
|
||||
|
||||
//! Prints information about the layer's current state
|
||||
void
|
||||
Layer::PrintToStream()
|
||||
{
|
||||
printf("\n *** Layer %s:\n", Name());
|
||||
printf("\t Parent: %s", fParent ? fParent->Name() : "<no parent>");
|
||||
|
||||
printf("\t us: %s\t ls: %s\n",
|
||||
fPreviousSibling ? fPreviousSibling->Name() : "<none>",
|
||||
fNextSibling ? fNextSibling->Name() : "<none>");
|
||||
|
||||
printf("\t topChild: %s\t bottomChild: %s\n",
|
||||
fFirstChild ? fFirstChild->Name() : "<none>",
|
||||
fLastChild ? fLastChild->Name() : "<none>");
|
||||
|
||||
printf("Frame: (%f, %f, %f, %f)\n", fFrame.left, fFrame.top, fFrame.right, fFrame.bottom);
|
||||
printf("LocalOrigin: (%f, %f)\n", BoundsOrigin().x, BoundsOrigin().y);
|
||||
printf("Token: %ld\n", fViewToken);
|
||||
printf("Hidden - direct: %s ", fHidden?"true":"false");
|
||||
printf("Hidden - indirect: %s\n", IsHidden()?"true":"false");
|
||||
printf("ResizingMode: %lx ", fResizeMode);
|
||||
printf("Flags: %lx\n", fFlags);
|
||||
|
||||
if (fDrawState)
|
||||
fDrawState->PrintToStream();
|
||||
else
|
||||
printf(" NO DrawState valid pointer\n");
|
||||
}
|
||||
|
||||
//! Prints pointer info kept by the current layer
|
||||
void
|
||||
Layer::PrintNode()
|
||||
{
|
||||
printf("-----------\nLayer %s\n", Name());
|
||||
if (fParent)
|
||||
printf("Parent: %s (%p)\n", fParent->Name(), fParent);
|
||||
else
|
||||
printf("Parent: NULL\n");
|
||||
|
||||
if (fPreviousSibling)
|
||||
printf("Upper sibling: %s (%p)\n", fPreviousSibling->Name(), fPreviousSibling);
|
||||
else
|
||||
printf("Upper sibling: NULL\n");
|
||||
|
||||
if (fNextSibling)
|
||||
printf("Lower sibling: %s (%p)\n", fNextSibling->Name(), fNextSibling);
|
||||
else
|
||||
printf("Lower sibling: NULL\n");
|
||||
|
||||
if (fFirstChild)
|
||||
printf("Top child: %s (%p)\n", fFirstChild->Name(), fFirstChild);
|
||||
else
|
||||
printf("Top child: NULL\n");
|
||||
|
||||
if (fLastChild)
|
||||
printf("Bottom child: %s (%p)\n", fLastChild->Name(), fLastChild);
|
||||
else
|
||||
printf("Bottom child: NULL\n");
|
||||
}
|
||||
|
||||
//! Prints the tree hierarchy from the current layer down
|
||||
void
|
||||
Layer::PrintTree()
|
||||
{
|
||||
printf("\n Tree structure:\n");
|
||||
printf("\t%s\t%s\n", Name(), IsHidden()? "Hidden": "NOT hidden");
|
||||
for(Layer *lay = LastChild(); lay != NULL; lay = PreviousChild())
|
||||
printf("\t%s\t%s\n", lay->Name(), lay->IsHidden()? "Hidden": "NOT hidden");
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief Returns the layer's ServerWindow
|
||||
|
||||
If the layer's ServerWindow has not been assigned, it attempts to find
|
||||
the owning ServerWindow in the tree.
|
||||
*/
|
||||
ServerWindow*
|
||||
Layer::SearchForServerWindow()
|
||||
{
|
||||
if (!fServerWin)
|
||||
fServerWin=fParent->SearchForServerWindow();
|
||||
|
||||
return fServerWin;
|
||||
}
|
||||
|
||||
//! Sends an _UPDATE_ message to the client BWindow
|
||||
status_t
|
||||
Layer::SendUpdateMsg(BRegion& reg)
|
||||
{
|
||||
BMessage msg;
|
||||
msg.what = _UPDATE_;
|
||||
BRect rect(reg.Frame());
|
||||
ConvertFromScreen2(&rect);
|
||||
msg.AddRect("_rect", rect );
|
||||
msg.AddRect("debug_rect", reg.Frame());
|
||||
|
||||
return Owner()->Window()->SendMessageToClient(&msg);
|
||||
}
|
||||
|
||||
// AddToViewsWithInvalidCoords
|
||||
void
|
||||
Layer::AddToViewsWithInvalidCoords() const
|
||||
@ -1091,7 +878,7 @@ Layer::ScrolledByHook(float dx, float dy)
|
||||
|
||||
//! converts a point from local to parent's coordinate system
|
||||
void
|
||||
Layer::ConvertToParent2(BPoint* pt) const
|
||||
Layer::ConvertToParent(BPoint* pt) const
|
||||
{
|
||||
if (fParent) {
|
||||
BPoint origin = BoundsOrigin();
|
||||
@ -1104,7 +891,7 @@ Layer::ConvertToParent2(BPoint* pt) const
|
||||
|
||||
//! converts a rect from local to parent's coordinate system
|
||||
void
|
||||
Layer::ConvertToParent2(BRect* rect) const
|
||||
Layer::ConvertToParent(BRect* rect) const
|
||||
{
|
||||
if (fParent) {
|
||||
BPoint origin = BoundsOrigin();
|
||||
@ -1115,7 +902,7 @@ Layer::ConvertToParent2(BRect* rect) const
|
||||
|
||||
//! converts a region from local to parent's coordinate system
|
||||
void
|
||||
Layer::ConvertToParent2(BRegion* reg) const
|
||||
Layer::ConvertToParent(BRegion* reg) const
|
||||
{
|
||||
if (fParent) {
|
||||
BPoint origin = BoundsOrigin();
|
||||
@ -1126,7 +913,7 @@ Layer::ConvertToParent2(BRegion* reg) const
|
||||
|
||||
//! converts a point from parent's to local coordinate system
|
||||
void
|
||||
Layer::ConvertFromParent2(BPoint* pt) const
|
||||
Layer::ConvertFromParent(BPoint* pt) const
|
||||
{
|
||||
if (fParent) {
|
||||
BPoint origin = BoundsOrigin();
|
||||
@ -1139,7 +926,7 @@ Layer::ConvertFromParent2(BPoint* pt) const
|
||||
|
||||
//! converts a rect from parent's to local coordinate system
|
||||
void
|
||||
Layer::ConvertFromParent2(BRect* rect) const
|
||||
Layer::ConvertFromParent(BRect* rect) const
|
||||
{
|
||||
if (fParent) {
|
||||
BPoint origin = BoundsOrigin();
|
||||
@ -1150,7 +937,7 @@ Layer::ConvertFromParent2(BRect* rect) const
|
||||
|
||||
//! converts a region from parent's to local coordinate system
|
||||
void
|
||||
Layer::ConvertFromParent2(BRegion* reg) const
|
||||
Layer::ConvertFromParent(BRegion* reg) const
|
||||
{
|
||||
if (fParent) {
|
||||
BPoint origin = BoundsOrigin();
|
||||
@ -1161,61 +948,61 @@ Layer::ConvertFromParent2(BRegion* reg) const
|
||||
|
||||
//! converts a point from local to screen coordinate system
|
||||
void
|
||||
Layer::ConvertToScreen2(BPoint* pt) const
|
||||
Layer::ConvertToScreen(BPoint* pt) const
|
||||
{
|
||||
if (fParent) {
|
||||
ConvertToParent2(pt);
|
||||
fParent->ConvertToScreen2(pt);
|
||||
ConvertToParent(pt);
|
||||
fParent->ConvertToScreen(pt);
|
||||
}
|
||||
}
|
||||
|
||||
//! converts a rect from local to screen coordinate system
|
||||
void
|
||||
Layer::ConvertToScreen2(BRect* rect) const
|
||||
Layer::ConvertToScreen(BRect* rect) const
|
||||
{
|
||||
if (fParent) {
|
||||
ConvertToParent2(rect);
|
||||
fParent->ConvertToScreen2(rect);
|
||||
ConvertToParent(rect);
|
||||
fParent->ConvertToScreen(rect);
|
||||
}
|
||||
}
|
||||
|
||||
//! converts a region from local to screen coordinate system
|
||||
void
|
||||
Layer::ConvertToScreen2(BRegion* reg) const
|
||||
Layer::ConvertToScreen(BRegion* reg) const
|
||||
{
|
||||
if (fParent) {
|
||||
ConvertToParent2(reg);
|
||||
fParent->ConvertToScreen2(reg);
|
||||
ConvertToParent(reg);
|
||||
fParent->ConvertToScreen(reg);
|
||||
}
|
||||
}
|
||||
|
||||
//! converts a point from screen to local coordinate system
|
||||
void
|
||||
Layer::ConvertFromScreen2(BPoint* pt) const
|
||||
Layer::ConvertFromScreen(BPoint* pt) const
|
||||
{
|
||||
if (fParent) {
|
||||
ConvertFromParent2(pt);
|
||||
fParent->ConvertFromScreen2(pt);
|
||||
ConvertFromParent(pt);
|
||||
fParent->ConvertFromScreen(pt);
|
||||
}
|
||||
}
|
||||
|
||||
//! converts a rect from screen to local coordinate system
|
||||
void
|
||||
Layer::ConvertFromScreen2(BRect* rect) const
|
||||
Layer::ConvertFromScreen(BRect* rect) const
|
||||
{
|
||||
if (fParent) {
|
||||
ConvertFromParent2(rect);
|
||||
fParent->ConvertFromScreen2(rect);
|
||||
ConvertFromParent(rect);
|
||||
fParent->ConvertFromScreen(rect);
|
||||
}
|
||||
}
|
||||
|
||||
//! converts a region from screen to local coordinate system
|
||||
void
|
||||
Layer::ConvertFromScreen2(BRegion* reg) const
|
||||
Layer::ConvertFromScreen(BRegion* reg) const
|
||||
{
|
||||
if (fParent) {
|
||||
ConvertFromParent2(reg);
|
||||
fParent->ConvertFromScreen2(reg);
|
||||
ConvertFromParent(reg);
|
||||
fParent->ConvertFromScreen(reg);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1229,7 +1016,7 @@ Layer::do_Hide()
|
||||
// save fullVisible so we know what to invalidate
|
||||
BRegion invalid(fFullVisible2);
|
||||
|
||||
clear_visible_regions();
|
||||
_ClearVisibleRegions();
|
||||
|
||||
if (invalid.CountRects() > 0) {
|
||||
fParent->MarkForRebuild(invalid);
|
||||
@ -1262,7 +1049,7 @@ Layer::do_Show()
|
||||
}
|
||||
|
||||
inline void
|
||||
Layer::resize_layer_frame_by(float x, float y)
|
||||
Layer::_ResizeLayerFrameBy(float x, float y)
|
||||
{
|
||||
uint16 rm = fResizeMode & 0x0000FFFF;
|
||||
BRect newFrame = fFrame;
|
||||
@ -1334,14 +1121,14 @@ Layer::resize_layer_frame_by(float x, float y)
|
||||
ResizedByHook(dx, dy, true); // automatic
|
||||
|
||||
for (Layer *child = LastChild(); child != NULL; child = PreviousChild())
|
||||
child->resize_layer_frame_by(dx, dy);
|
||||
child->_ResizeLayerFrameBy(dx, dy);
|
||||
} else
|
||||
MovedByHook(dx, dy);
|
||||
}
|
||||
}
|
||||
|
||||
inline void
|
||||
Layer::rezize_layer_redraw_more(BRegion ®, float dx, float dy)
|
||||
Layer::_RezizeLayerRedrawMore(BRegion ®, float dx, float dy)
|
||||
{
|
||||
if (dx == 0 && dy == 0)
|
||||
return;
|
||||
@ -1367,13 +1154,13 @@ Layer::rezize_layer_redraw_more(BRegion ®, float dx, float dy)
|
||||
regZ.Include(oldBounds);
|
||||
regZ.Exclude(oldBounds&lay->Bounds());
|
||||
|
||||
lay->ConvertToScreen2(®Z);
|
||||
lay->ConvertToScreen(®Z);
|
||||
|
||||
// intersect that with this'(not lay's) fullVisible region
|
||||
regZ.IntersectWith(&fFullVisible2);
|
||||
reg.Include(®Z);
|
||||
|
||||
lay->rezize_layer_redraw_more(reg,
|
||||
lay->_RezizeLayerRedrawMore(reg,
|
||||
(rm & 0x0F0F) == (uint16)B_FOLLOW_LEFT_RIGHT? dx: 0,
|
||||
(rm & 0xF0F0) == (uint16)B_FOLLOW_TOP_BOTTOM? dy: 0);
|
||||
|
||||
@ -1392,7 +1179,7 @@ Layer::rezize_layer_redraw_more(BRegion ®, float dx, float dy)
|
||||
}
|
||||
|
||||
inline void
|
||||
Layer::resize_layer_full_update_on_resize(BRegion ®, float dx, float dy)
|
||||
Layer::_ResizeLayerFullUpdateOnResize(BRegion ®, float dx, float dy)
|
||||
{
|
||||
if (dx == 0 && dy == 0)
|
||||
return;
|
||||
@ -1404,7 +1191,7 @@ Layer::resize_layer_full_update_on_resize(BRegion ®, float dx, float dy)
|
||||
if (lay->fFlags & B_FULL_UPDATE_ON_RESIZE && lay->fVisible2.CountRects() > 0)
|
||||
reg.Include(&lay->fVisible2);
|
||||
|
||||
lay->resize_layer_full_update_on_resize(reg,
|
||||
lay->_ResizeLayerFullUpdateOnResize(reg,
|
||||
(rm & 0x0F0F) == (uint16)B_FOLLOW_LEFT_RIGHT? dx: 0,
|
||||
(rm & 0xF0F0) == (uint16)B_FOLLOW_TOP_BOTTOM? dy: 0);
|
||||
}
|
||||
@ -1418,7 +1205,7 @@ Layer::do_ResizeBy(float dx, float dy)
|
||||
|
||||
// resize children using their resize_mask.
|
||||
for (Layer *child = LastChild(); child != NULL; child = PreviousChild())
|
||||
child->resize_layer_frame_by(dx, dy);
|
||||
child->_ResizeLayerFrameBy(dx, dy);
|
||||
|
||||
// call hook function
|
||||
if (dx != 0.0f || dy != 0.0f)
|
||||
@ -1431,7 +1218,7 @@ Layer::do_ResizeBy(float dx, float dy)
|
||||
|
||||
// in case they moved, bottom, right and center aligned layers must be redrawn
|
||||
BRegion redrawMore;
|
||||
rezize_layer_redraw_more(redrawMore, dx, dy);
|
||||
_RezizeLayerRedrawMore(redrawMore, dx, dy);
|
||||
|
||||
// we'll invalidate the old area and the new, maxmial one.
|
||||
BRegion invalid;
|
||||
@ -1457,11 +1244,11 @@ Layer::do_ResizeBy(float dx, float dy)
|
||||
redrawReg.Include(&redrawMore);
|
||||
|
||||
// layers that had their frame modified must be entirely redrawn.
|
||||
rezize_layer_redraw_more(redrawReg, dx, dy);
|
||||
_RezizeLayerRedrawMore(redrawReg, dx, dy);
|
||||
|
||||
// include layer's visible region in case we want a full update on resize
|
||||
if (fFlags & B_FULL_UPDATE_ON_RESIZE && fVisible2.Frame().IsValid()) {
|
||||
resize_layer_full_update_on_resize(redrawReg, dx, dy);
|
||||
_ResizeLayerFullUpdateOnResize(redrawReg, dx, dy);
|
||||
|
||||
redrawReg.Include(&fVisible2);
|
||||
redrawReg.Include(&oldVisible);
|
||||
@ -1564,7 +1351,7 @@ Layer::GetWantedRegion(BRegion ®)
|
||||
{
|
||||
// 1) set to frame in screen coords
|
||||
BRect screenFrame(Bounds());
|
||||
ConvertToScreen2(&screenFrame);
|
||||
ConvertToScreen(&screenFrame);
|
||||
reg.Set(screenFrame);
|
||||
|
||||
// 2) intersect with screen region
|
||||
@ -1589,7 +1376,7 @@ Layer::GetWantedRegion(BRegion ®)
|
||||
}
|
||||
|
||||
void
|
||||
Layer::rebuild_visible_regions(const BRegion &invalid,
|
||||
Layer::_RebuildVisibleRegions( const BRegion &invalid,
|
||||
const BRegion &parentLocalVisible,
|
||||
const Layer *startFrom)
|
||||
{
|
||||
@ -1633,7 +1420,7 @@ Layer::rebuild_visible_regions(const BRegion &invalid,
|
||||
fullRebuild = true;
|
||||
|
||||
if (fullRebuild)
|
||||
lay->rebuild_visible_regions(invalid, common, lay->LastChild());
|
||||
lay->_RebuildVisibleRegions(invalid, common, lay->LastChild());
|
||||
|
||||
// to let children know much they can take from parent's visible region
|
||||
common.Exclude(&lay->fFullVisible2);
|
||||
@ -1670,7 +1457,7 @@ Layer::rebuild_visible_regions(const BRegion &invalid,
|
||||
_ReserveRegions(common);
|
||||
|
||||
for (Layer *lay = LastChild(); lay; lay = PreviousChild()) {
|
||||
lay->rebuild_visible_regions(invalid, common, lay->LastChild());
|
||||
lay->_RebuildVisibleRegions(invalid, common, lay->LastChild());
|
||||
|
||||
// to let children know much they can take from parent's visible region
|
||||
common.Exclude(&lay->fFullVisible2);
|
||||
@ -1687,7 +1474,7 @@ Layer::_ReserveRegions(BRegion ®)
|
||||
}
|
||||
|
||||
void
|
||||
Layer::clear_visible_regions()
|
||||
Layer::_ClearVisibleRegions()
|
||||
{
|
||||
// OPT: maybe we should uncomment these lines for performance
|
||||
//if (fFullVisible2.CountRects() <= 0)
|
||||
@ -1696,7 +1483,7 @@ Layer::clear_visible_regions()
|
||||
fVisible2.MakeEmpty();
|
||||
fFullVisible2.MakeEmpty();
|
||||
for (Layer *child = LastChild(); child; child = PreviousChild())
|
||||
child->clear_visible_regions();
|
||||
child->_ClearVisibleRegions();
|
||||
}
|
||||
|
||||
// mark a region dirty so that the next region rebuild for us
|
||||
@ -1721,9 +1508,9 @@ Layer::TriggerRebuild()
|
||||
|
||||
// localFullVisible.IntersectWith(&totalInvalidReg);
|
||||
|
||||
clear_visible_regions();
|
||||
_ClearVisibleRegions();
|
||||
|
||||
rebuild_visible_regions(totalInvalidReg, localFullVisible, LastChild());
|
||||
_RebuildVisibleRegions(totalInvalidReg, localFullVisible, LastChild());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -71,16 +71,17 @@ class Layer {
|
||||
uint32 flags, DrawingEngine* driver);
|
||||
virtual ~Layer();
|
||||
|
||||
// name
|
||||
virtual void SetName(const char* name);
|
||||
inline const char* Name() const
|
||||
{ return fName.String(); }
|
||||
|
||||
// children handling
|
||||
void AddChild(Layer* child, ServerWindow* serverWin);
|
||||
void RemoveChild(Layer* child);
|
||||
void RemoveSelf();
|
||||
bool HasChild(Layer* layer);
|
||||
|
||||
void SetRootLayer(RootLayer* rl)
|
||||
{ fRootLayer = rl; }
|
||||
RootLayer* GetRootLayer() const
|
||||
{ return fRootLayer; }
|
||||
|
||||
uint32 CountChildren() const;
|
||||
Layer* FindLayer(const int32 token);
|
||||
Layer* LayerAt(const BPoint &pt, bool recursive = true);
|
||||
@ -90,36 +91,59 @@ class Layer {
|
||||
virtual Layer* PreviousChild() const;
|
||||
virtual Layer* LastChild() const;
|
||||
|
||||
virtual void SetName(const char* name);
|
||||
inline const char* Name() const
|
||||
{ return fName.String(); }
|
||||
void SetAsTopLayer(bool option)
|
||||
{ fIsTopLayer = option; }
|
||||
inline bool IsTopLayer() const
|
||||
{ return fIsTopLayer; }
|
||||
|
||||
inline uint32 ResizeMode() const
|
||||
{ return fResizeMode; }
|
||||
|
||||
virtual void SetFlags(uint32 flags);
|
||||
inline uint32 Flags() const
|
||||
{ return fFlags; }
|
||||
|
||||
virtual void Draw(const BRect& r);
|
||||
|
||||
// visible state
|
||||
void Show(bool invalidate = true);
|
||||
void Hide(bool invalidate = true);
|
||||
bool IsHidden() const;
|
||||
bool IsVisuallyHidden() const;
|
||||
|
||||
// graphic state
|
||||
// graphic state and attributes
|
||||
void PushState();
|
||||
void PopState();
|
||||
DrawState* CurrentState() const { return fDrawState; }
|
||||
|
||||
void SetViewColor(const RGBColor& color);
|
||||
inline const RGBColor& ViewColor() const
|
||||
{ return fViewColor; }
|
||||
void SetBackgroundBitmap(const ServerBitmap* bitmap);
|
||||
inline const ServerBitmap* BackgroundBitmap() const
|
||||
{ return fBackgroundBitmap; }
|
||||
void SetOverlayBitmap(const ServerBitmap* bitmap);
|
||||
inline const ServerBitmap* OverlayBitmap() const
|
||||
{ return fOverlayBitmap; }
|
||||
|
||||
// coordinate system
|
||||
BRect Bounds() const;
|
||||
BRect Frame() const;
|
||||
|
||||
BPoint BoundsOrigin() const; // BoundsFrameDiff()?
|
||||
float Scale() const;
|
||||
|
||||
void ConvertToParent(BPoint* pt) const;
|
||||
void ConvertToParent(BRect* rect) const;
|
||||
void ConvertToParent(BRegion* reg) const;
|
||||
void ConvertFromParent(BPoint* pt) const;
|
||||
void ConvertFromParent(BRect* rect) const;
|
||||
void ConvertFromParent(BRegion* reg) const;
|
||||
|
||||
void ConvertToScreen(BPoint* pt) const;
|
||||
void ConvertToScreen(BRect* rect) const;
|
||||
void ConvertToScreen(BRegion* reg) const;
|
||||
void ConvertFromScreen(BPoint* pt) const;
|
||||
void ConvertFromScreen(BRect* rect) const;
|
||||
void ConvertFromScreen(BRegion* reg) const;
|
||||
|
||||
virtual void MoveBy(float x, float y);
|
||||
virtual void ResizeBy(float x, float y);
|
||||
virtual void ScrollBy(float x, float y);
|
||||
void CopyBits(BRect& src, BRect& dst,
|
||||
int32 xOffset, int32 yOffset);
|
||||
|
||||
// input handling
|
||||
virtual void MouseDown(const BMessage *msg);
|
||||
virtual void MouseUp(const BMessage *msg);
|
||||
virtual void MouseMoved(const BMessage *msg);
|
||||
@ -135,151 +159,103 @@ class Layer {
|
||||
virtual void WorkspacesChanged(uint32 oldWorkspaces, uint32 newWorkspaces);
|
||||
virtual void Activated(bool active);
|
||||
|
||||
BPoint BoundsOrigin() const; // BoundsFrameDiff()?
|
||||
float Scale() const;
|
||||
|
||||
BPoint ConvertToParent(BPoint pt);
|
||||
BRect ConvertToParent(BRect rect);
|
||||
BRegion ConvertToParent(BRegion* reg);
|
||||
|
||||
BPoint ConvertFromParent(BPoint pt);
|
||||
BRect ConvertFromParent(BRect rect);
|
||||
BRegion ConvertFromParent(BRegion* reg);
|
||||
|
||||
BPoint ConvertToTop(BPoint pt);
|
||||
BRect ConvertToTop(BRect rect);
|
||||
BRegion ConvertToTop(BRegion* reg);
|
||||
|
||||
BPoint ConvertFromTop(BPoint pt);
|
||||
BRect ConvertFromTop(BRect rect);
|
||||
BRegion ConvertFromTop(BRegion *reg);
|
||||
|
||||
|
||||
DrawingEngine* GetDrawingEngine() const
|
||||
{ return fDriver; }
|
||||
|
||||
ServerWindow* Window() const
|
||||
{ return fServerWin; }
|
||||
|
||||
ServerApp* App() const
|
||||
{ return fServerWin? fServerWin->App(): NULL; }
|
||||
|
||||
inline WinBorder* Owner() const
|
||||
{ return fOwner; }
|
||||
|
||||
virtual bool HasClient()
|
||||
{ return true; }
|
||||
|
||||
uint32 EventMask() const
|
||||
{ return fEventMask; }
|
||||
|
||||
uint32 EventOptions() const
|
||||
{ return fEventOptions; }
|
||||
|
||||
inline void QuietlySetEventMask(uint32 em)
|
||||
{ fEventMask = em; }
|
||||
|
||||
inline void QuietlySetEventOptions(uint32 eo)
|
||||
{ fEventOptions = eo; }
|
||||
|
||||
void PruneTree();
|
||||
|
||||
// debugging
|
||||
void PrintToStream();
|
||||
void PrintNode();
|
||||
void PrintTree();
|
||||
|
||||
// server "private" - should not be used
|
||||
void SetAsTopLayer(bool option)
|
||||
{ fIsTopLayer = option; }
|
||||
|
||||
inline bool IsTopLayer() const
|
||||
{ return fIsTopLayer; }
|
||||
|
||||
BRegion* ClippingRegion() const
|
||||
{ return fClipReg; }
|
||||
|
||||
// automatic background blanking by app_server
|
||||
void SetViewColor(const RGBColor& color);
|
||||
inline const RGBColor& ViewColor() const
|
||||
{ return fViewColor; }
|
||||
|
||||
void SetBackgroundBitmap(const ServerBitmap* bitmap);
|
||||
inline const ServerBitmap* BackgroundBitmap() const
|
||||
{ return fBackgroundBitmap; }
|
||||
|
||||
// overlay support
|
||||
// TODO: This can't be all, what about color key?
|
||||
void SetOverlayBitmap(const ServerBitmap* bitmap);
|
||||
inline const ServerBitmap* OverlayBitmap() const
|
||||
{ return fOverlayBitmap; }
|
||||
|
||||
void CopyBits(BRect& src, BRect& dst,
|
||||
int32 xOffset, int32 yOffset);
|
||||
|
||||
inline const BRegion& VisibleRegion() const { return fVisible2; }
|
||||
inline const BRegion& FullVisible() const { return fFullVisible2; }
|
||||
|
||||
void MarkForRebuild(const BRegion &dirty);
|
||||
void TriggerRebuild();
|
||||
void _GetAllRebuildDirty(BRegion *totalReg);
|
||||
void _AllRedraw(const BRegion &invalid);
|
||||
|
||||
|
||||
virtual void GetWantedRegion(BRegion& reg);
|
||||
|
||||
// action hooks
|
||||
virtual void MovedByHook(float dx, float dy);
|
||||
virtual void ResizedByHook(float dx, float dy, bool automatic);
|
||||
virtual void ScrolledByHook(float dx, float dy);
|
||||
|
||||
void ConvertToParent2(BPoint* pt) const;
|
||||
void ConvertToParent2(BRect* rect) const;
|
||||
void ConvertToParent2(BRegion* reg) const;
|
||||
void ConvertFromParent2(BPoint* pt) const;
|
||||
void ConvertFromParent2(BRect* rect) const;
|
||||
void ConvertFromParent2(BRegion* reg) const;
|
||||
// app_server objects getters
|
||||
ServerWindow* Window() const
|
||||
{ return fServerWin; }
|
||||
ServerApp* App() const
|
||||
{ return fServerWin? fServerWin->App(): NULL; }
|
||||
inline WinBorder* Owner() const
|
||||
{ return fOwner; }
|
||||
RootLayer* GetRootLayer() const
|
||||
{ return fRootLayer; }
|
||||
void SetRootLayer(RootLayer* rl)
|
||||
{ fRootLayer = rl; }
|
||||
DrawingEngine* GetDrawingEngine() const
|
||||
{ return fDriver; }
|
||||
|
||||
void ConvertToScreen2(BPoint* pt) const;
|
||||
void ConvertToScreen2(BRect* rect) const;
|
||||
void ConvertToScreen2(BRegion* reg) const;
|
||||
void ConvertFromScreen2(BPoint* pt) const;
|
||||
void ConvertFromScreen2(BRect* rect) const;
|
||||
void ConvertFromScreen2(BRegion* reg) const;
|
||||
bool IsVisuallyHidden() const;
|
||||
// flags
|
||||
uint32 EventMask() const
|
||||
{ return fEventMask; }
|
||||
uint32 EventOptions() const
|
||||
{ return fEventOptions; }
|
||||
inline void QuietlySetEventMask(uint32 em)
|
||||
{ fEventMask = em; }
|
||||
inline void QuietlySetEventOptions(uint32 eo)
|
||||
{ fEventOptions = eo; }
|
||||
inline uint32 ResizeMode() const
|
||||
{ return fResizeMode; }
|
||||
inline uint32 Flags() const
|
||||
{ return fFlags; }
|
||||
void SetFlags(uint32 flags);
|
||||
|
||||
// clipping stuff and redraw
|
||||
inline const BRegion& VisibleRegion() const { return fVisible2; }
|
||||
inline const BRegion& FullVisible() const { return fFullVisible2; }
|
||||
|
||||
virtual void GetWantedRegion(BRegion& reg);
|
||||
|
||||
void MarkForRebuild(const BRegion &dirty);
|
||||
void TriggerRebuild();
|
||||
void _GetAllRebuildDirty(BRegion *totalReg);
|
||||
|
||||
virtual void Draw(const BRect& r);
|
||||
void _AllRedraw(const BRegion &invalid);
|
||||
|
||||
// others
|
||||
void PruneTree();
|
||||
|
||||
private:
|
||||
friend class RootLayer;
|
||||
friend class WinBorder;
|
||||
friend class ServerWindow;
|
||||
|
||||
void do_Hide();
|
||||
void do_Show();
|
||||
void do_MoveBy(float dx, float dy);
|
||||
void do_ResizeBy(float dx, float dy);
|
||||
void do_ScrollBy(float dx, float dy);
|
||||
|
||||
void rebuild_visible_regions(const BRegion &invalid,
|
||||
const BRegion &parentLocalVisible,
|
||||
const Layer *startFrom);
|
||||
|
||||
virtual void _ReserveRegions(BRegion ®);
|
||||
|
||||
void clear_visible_regions();
|
||||
void resize_layer_frame_by(float x, float y);
|
||||
void rezize_layer_redraw_more(BRegion ®, float dx, float dy);
|
||||
void resize_layer_full_update_on_resize(BRegion ®, float dx, float dy);
|
||||
|
||||
void do_CopyBits(BRect& src, BRect& dst,
|
||||
int32 xOffset, int32 yOffset);
|
||||
|
||||
protected:
|
||||
friend class RootLayer;
|
||||
friend class WinBorder;
|
||||
friend class ServerWindow;
|
||||
// private clipping stuff
|
||||
virtual void _ReserveRegions(BRegion ®);
|
||||
void _RebuildVisibleRegions( const BRegion &invalid,
|
||||
const BRegion &parentLocalVisible,
|
||||
const Layer *startFrom);
|
||||
void _ClearVisibleRegions();
|
||||
void _ResizeLayerFrameBy(float x, float y);
|
||||
void _RezizeLayerRedrawMore(BRegion ®, float dx, float dy);
|
||||
void _ResizeLayerFullUpdateOnResize(BRegion ®, float dx, float dy);
|
||||
|
||||
// for updating client-side coordinates
|
||||
void AddToViewsWithInvalidCoords() const;
|
||||
void SendViewCoordUpdateMsg() const;
|
||||
|
||||
|
||||
BString fName;
|
||||
BRect fFrame;
|
||||
// TODO: should be removed or reused in a similar fashion
|
||||
// to hold the accumulated origins from the graphics state stack.
|
||||
// The same needs to be done for "scale". (Keeping an accumulated
|
||||
// value.)
|
||||
// BPoint fBoundsLeftTop;
|
||||
|
||||
BRegion fVisible2;
|
||||
BRegion fFullVisible2;
|
||||
BRegion fDirtyForRebuild;
|
||||
|
||||
DrawingEngine* fDriver;
|
||||
RootLayer* fRootLayer;
|
||||
ServerWindow* fServerWin;
|
||||
WinBorder* fOwner;
|
||||
|
||||
DrawState* fDrawState;
|
||||
|
||||
Layer* fParent;
|
||||
Layer* fPreviousSibling;
|
||||
Layer* fNextSibling;
|
||||
@ -288,37 +264,15 @@ class Layer {
|
||||
|
||||
mutable Layer* fCurrent;
|
||||
|
||||
private:
|
||||
BRegion fVisible2;
|
||||
BRegion fFullVisible2;
|
||||
BRegion fDirtyForRebuild;
|
||||
protected:
|
||||
|
||||
BRegion* fClipReg;
|
||||
|
||||
ServerWindow* fServerWin;
|
||||
BString fName;
|
||||
int32 fViewToken;
|
||||
uint32 fFlags;
|
||||
uint16 fAdFlags;
|
||||
uint32 fResizeMode;
|
||||
uint32 fEventMask;
|
||||
uint32 fEventOptions;
|
||||
|
||||
bool fHidden;
|
||||
bool fIsTopLayer;
|
||||
uint16 fAdFlags;
|
||||
|
||||
DrawingEngine* fDriver;
|
||||
DrawState* fDrawState;
|
||||
|
||||
RootLayer* fRootLayer;
|
||||
|
||||
private:
|
||||
ServerWindow* SearchForServerWindow();
|
||||
|
||||
status_t SendUpdateMsg(BRegion& reg);
|
||||
void AddToViewsWithInvalidCoords() const;
|
||||
void SendViewCoordUpdateMsg() const;
|
||||
|
||||
RGBColor fViewColor;
|
||||
|
||||
const ServerBitmap* fBackgroundBitmap;
|
||||
|
@ -29,9 +29,9 @@ OffscreenWinBorder::OffscreenWinBorder(ServerBitmap* bitmap,
|
||||
fBitmap(bitmap),
|
||||
fHWInterface(new BitmapHWInterface(fBitmap))
|
||||
{
|
||||
fDriver->SetHWInterface(fHWInterface);
|
||||
fDriver->Initialize();
|
||||
fDriver->Update();
|
||||
GetDrawingEngine()->SetHWInterface(fHWInterface);
|
||||
GetDrawingEngine()->Initialize();
|
||||
GetDrawingEngine()->Update();
|
||||
}
|
||||
|
||||
// destructor
|
||||
@ -39,8 +39,8 @@ OffscreenWinBorder::~OffscreenWinBorder()
|
||||
{
|
||||
fHWInterface->WriteLock();
|
||||
// Unlike normal Layers, we own the DrawingEngine instance
|
||||
fDriver->Shutdown();
|
||||
delete fDriver;
|
||||
GetDrawingEngine()->Shutdown();
|
||||
delete GetDrawingEngine();
|
||||
fHWInterface->Shutdown();
|
||||
fHWInterface->WriteUnlock();
|
||||
delete fHWInterface;
|
||||
|
@ -830,7 +830,7 @@ RootLayer::RevealNewWMState(Workspace::State &oldWMState)
|
||||
MarkForRebuild(layer->FullVisible());
|
||||
MarkForRedraw(layer->FullVisible());
|
||||
|
||||
layer->clear_visible_regions();
|
||||
layer->_ClearVisibleRegions();
|
||||
}
|
||||
else {
|
||||
oldStrippedList.AddItem(layer);
|
||||
|
@ -98,7 +98,6 @@ public:
|
||||
RGBColor BGColor(void) const;
|
||||
|
||||
inline int32 Buttons(void) { return fButtons; }
|
||||
virtual bool HasClient(void) { return false; }
|
||||
|
||||
void SetDragMessage(BMessage *msg);
|
||||
BMessage* DragMessage(void) const;
|
||||
|
@ -564,8 +564,8 @@ ServerWindow::_DispatchMessage(int32 code, BPrivate::LinkReceiver &link)
|
||||
link.Read<BRect>(&dst);
|
||||
|
||||
// TODO: Are origin and scale handled in this conversion?
|
||||
src = fCurrentLayer->ConvertToTop(src);
|
||||
dst = fCurrentLayer->ConvertToTop(dst);
|
||||
fCurrentLayer->ConvertToScreen(&src);
|
||||
fCurrentLayer->ConvertToScreen(&dst);
|
||||
|
||||
int32 xOffset = (int32)(dst.left - src.left);
|
||||
int32 yOffset = (int32)(dst.top - src.top);
|
||||
@ -1085,8 +1085,11 @@ if (myRootLayer)
|
||||
fLink.StartMessage(SERVER_TRUE);
|
||||
fLink.Attach<int32>(rectCount);
|
||||
|
||||
for (int32 i = 0; i < rectCount; i++)
|
||||
fLink.Attach<BRect>(fCurrentLayer->ConvertFromTop(fCurrentLayer->fVisible2.RectAt(i)));
|
||||
for (int32 i = 0; i < rectCount; i++) {
|
||||
BRect converted(fCurrentLayer->fVisible2.RectAt(i));
|
||||
fCurrentLayer->ConvertFromScreen(&converted);
|
||||
fLink.Attach<BRect>(converted);
|
||||
}
|
||||
|
||||
fLink.Flush();
|
||||
}
|
||||
@ -1099,14 +1102,15 @@ if (myRootLayer)
|
||||
|
||||
// TODO: Watch out for the coordinate system in AS_LAYER_SET_CLIP_REGION
|
||||
int32 noOfRects;
|
||||
BRect r;
|
||||
|
||||
link.Read<int32>(&noOfRects);
|
||||
|
||||
BRegion region;
|
||||
for (int i = 0; i < noOfRects; i++) {
|
||||
BRect r;
|
||||
link.Read<BRect>(&r);
|
||||
region.Include(fCurrentLayer->ConvertToTop(r));
|
||||
fCurrentLayer->ConvertToScreen(&r);
|
||||
region.Include(r);
|
||||
}
|
||||
// TODO: Turned off user clipping for now (will probably not harm anything but performance right now)
|
||||
// We need to integrate user clipping more, in Layer::PopState, the clipping needs to be
|
||||
@ -1128,8 +1132,10 @@ if (myRootLayer)
|
||||
link.Read<BRect>(&invalRect);
|
||||
|
||||
if (myRootLayer) {
|
||||
BRect converted(fCurrentLayer->ConvertToTop(invalRect.LeftTop()),
|
||||
fCurrentLayer->ConvertToTop(invalRect.RightBottom()));
|
||||
BRect converted(invalRect.LeftTop(), invalRect.RightBottom());
|
||||
|
||||
fCurrentLayer->ConvertToScreen(&converted);
|
||||
|
||||
BRegion invalidRegion(converted);
|
||||
invalidRegion.IntersectWith(&fCurrentLayer->VisibleRegion());
|
||||
myRootLayer->MarkForRedraw(invalidRegion);
|
||||
@ -1155,7 +1161,7 @@ if (myRootLayer)
|
||||
}
|
||||
|
||||
if (myRootLayer) {
|
||||
fCurrentLayer->ConvertToScreen2(&invalidReg);
|
||||
fCurrentLayer->ConvertToScreen(&invalidReg);
|
||||
|
||||
myRootLayer->MarkForRedraw(invalidReg);
|
||||
myRootLayer->TriggerRedraw();
|
||||
@ -1647,9 +1653,9 @@ ServerWindow::_DispatchGraphicsMessage(int32 code, BPrivate::LinkReceiver &link)
|
||||
|
||||
BPoint p1(x1,y1);
|
||||
BPoint p2(x2,y2);
|
||||
driver->StrokeLine(fCurrentLayer->ConvertToTop(p1),
|
||||
fCurrentLayer->ConvertToTop(p2),
|
||||
fCurrentLayer->CurrentState());
|
||||
fCurrentLayer->ConvertToScreen(&p1);
|
||||
fCurrentLayer->ConvertToScreen(&p2);
|
||||
driver->StrokeLine(p1, p2, fCurrentLayer->CurrentState());
|
||||
|
||||
// We update the pen here because many DrawingEngine calls which do not update the
|
||||
// pen position actually call StrokeLine
|
||||
@ -1667,7 +1673,8 @@ ServerWindow::_DispatchGraphicsMessage(int32 code, BPrivate::LinkReceiver &link)
|
||||
BRect rect;
|
||||
link.Read<BRect>(&rect);
|
||||
|
||||
driver->InvertRect(fCurrentLayer->ConvertToTop(rect));
|
||||
fCurrentLayer->ConvertToScreen(&rect);
|
||||
driver->InvertRect(rect);
|
||||
break;
|
||||
}
|
||||
case AS_STROKE_RECT:
|
||||
@ -1681,7 +1688,8 @@ ServerWindow::_DispatchGraphicsMessage(int32 code, BPrivate::LinkReceiver &link)
|
||||
link.Read<float>(&bottom);
|
||||
BRect rect(left,top,right,bottom);
|
||||
|
||||
driver->StrokeRect(fCurrentLayer->ConvertToTop(rect), fCurrentLayer->CurrentState());
|
||||
fCurrentLayer->ConvertToScreen(&rect);
|
||||
driver->StrokeRect(rect, fCurrentLayer->CurrentState());
|
||||
|
||||
break;
|
||||
}
|
||||
@ -1691,7 +1699,9 @@ ServerWindow::_DispatchGraphicsMessage(int32 code, BPrivate::LinkReceiver &link)
|
||||
|
||||
BRect rect;
|
||||
link.Read<BRect>(&rect);
|
||||
driver->FillRect(fCurrentLayer->ConvertToTop(rect), fCurrentLayer->CurrentState());
|
||||
|
||||
fCurrentLayer->ConvertToScreen(&rect);
|
||||
driver->FillRect(rect, fCurrentLayer->CurrentState());
|
||||
break;
|
||||
}
|
||||
case AS_LAYER_DRAW_BITMAP_SYNC_AT_POINT:
|
||||
@ -1708,7 +1718,7 @@ ServerWindow::_DispatchGraphicsMessage(int32 code, BPrivate::LinkReceiver &link)
|
||||
if (sbmp) {
|
||||
BRect src = sbmp->Bounds();
|
||||
BRect dst = src.OffsetToCopy(point);
|
||||
dst = fCurrentLayer->ConvertToTop(dst);
|
||||
fCurrentLayer->ConvertToScreen(&dst);
|
||||
|
||||
driver->DrawBitmap(sbmp, src, dst, fCurrentLayer->CurrentState());
|
||||
}
|
||||
@ -1729,7 +1739,7 @@ ServerWindow::_DispatchGraphicsMessage(int32 code, BPrivate::LinkReceiver &link)
|
||||
|
||||
ServerBitmap* sbmp = fServerApp->FindBitmap(bitmapToken);
|
||||
if (sbmp) {
|
||||
dstRect = fCurrentLayer->ConvertToTop(dstRect);
|
||||
fCurrentLayer->ConvertToScreen(&dstRect);
|
||||
|
||||
driver->DrawBitmap(sbmp, srcRect, dstRect, fCurrentLayer->CurrentState());
|
||||
}
|
||||
@ -1749,8 +1759,8 @@ ServerWindow::_DispatchGraphicsMessage(int32 code, BPrivate::LinkReceiver &link)
|
||||
link.Read<float>(&angle);
|
||||
link.Read<float>(&span);
|
||||
|
||||
driver->DrawArc(fCurrentLayer->ConvertToTop(r), angle, span,
|
||||
fCurrentLayer->CurrentState(), code == AS_FILL_ARC);
|
||||
fCurrentLayer->ConvertToScreen(&r);
|
||||
driver->DrawArc(r, angle, span, fCurrentLayer->CurrentState(), code == AS_FILL_ARC);
|
||||
|
||||
break;
|
||||
}
|
||||
@ -1762,7 +1772,7 @@ ServerWindow::_DispatchGraphicsMessage(int32 code, BPrivate::LinkReceiver &link)
|
||||
BPoint pts[4];
|
||||
for (int32 i = 0; i < 4; i++) {
|
||||
link.Read<BPoint>(&(pts[i]));
|
||||
pts[i] = fCurrentLayer->ConvertToTop(pts[i]);
|
||||
fCurrentLayer->ConvertToScreen(&pts[i]);
|
||||
}
|
||||
|
||||
driver->DrawBezier(pts, fCurrentLayer->CurrentState(), code == AS_FILL_BEZIER);
|
||||
@ -1777,8 +1787,8 @@ ServerWindow::_DispatchGraphicsMessage(int32 code, BPrivate::LinkReceiver &link)
|
||||
BRect rect;
|
||||
link.Read<BRect>(&rect);
|
||||
|
||||
driver->DrawEllipse(fCurrentLayer->ConvertToTop(rect),
|
||||
fCurrentLayer->CurrentState(), code == AS_FILL_ELLIPSE);
|
||||
fCurrentLayer->ConvertToScreen(&rect);
|
||||
driver->DrawEllipse(rect, fCurrentLayer->CurrentState(), code == AS_FILL_ELLIPSE);
|
||||
|
||||
break;
|
||||
}
|
||||
@ -1793,8 +1803,8 @@ ServerWindow::_DispatchGraphicsMessage(int32 code, BPrivate::LinkReceiver &link)
|
||||
link.Read<float>(&xrad);
|
||||
link.Read<float>(&yrad);
|
||||
|
||||
driver->DrawRoundRect(fCurrentLayer->ConvertToTop(rect), xrad, yrad,
|
||||
fCurrentLayer->CurrentState(), code == AS_FILL_ROUNDRECT);
|
||||
fCurrentLayer->ConvertToScreen(&rect);
|
||||
driver->DrawRoundRect(rect, xrad, yrad, fCurrentLayer->CurrentState(), code == AS_FILL_ROUNDRECT);
|
||||
|
||||
break;
|
||||
}
|
||||
@ -1808,13 +1818,13 @@ ServerWindow::_DispatchGraphicsMessage(int32 code, BPrivate::LinkReceiver &link)
|
||||
|
||||
for (int32 i = 0; i < 3; i++) {
|
||||
link.Read<BPoint>(&(pts[i]));
|
||||
pts[i] = fCurrentLayer->ConvertToTop(pts[i]);
|
||||
fCurrentLayer->ConvertToScreen(&pts[i]);
|
||||
}
|
||||
|
||||
link.Read<BRect>(&rect);
|
||||
|
||||
driver->DrawTriangle(pts, fCurrentLayer->ConvertToTop(rect),
|
||||
fCurrentLayer->CurrentState(), code == AS_FILL_TRIANGLE);
|
||||
fCurrentLayer->ConvertToScreen(&rect);
|
||||
driver->DrawTriangle(pts, rect, fCurrentLayer->CurrentState(), code == AS_FILL_TRIANGLE);
|
||||
|
||||
break;
|
||||
}
|
||||
@ -1838,7 +1848,7 @@ ServerWindow::_DispatchGraphicsMessage(int32 code, BPrivate::LinkReceiver &link)
|
||||
link.Read(pointlist, sizeof(BPoint)*pointcount);
|
||||
|
||||
for (int32 i = 0; i < pointcount; i++)
|
||||
pointlist[i] = fCurrentLayer->ConvertToTop(pointlist[i]);
|
||||
fCurrentLayer->ConvertToScreen(&pointlist[i]);
|
||||
|
||||
driver->DrawPolygon(pointlist, pointcount, polyframe,
|
||||
fCurrentLayer->CurrentState(), code == AS_FILL_POLYGON,
|
||||
@ -1867,7 +1877,7 @@ ServerWindow::_DispatchGraphicsMessage(int32 code, BPrivate::LinkReceiver &link)
|
||||
link.Read(ptlist, ptcount * sizeof(BPoint));
|
||||
|
||||
for (int32 i = 0; i < ptcount; i++)
|
||||
ptlist[i] = fCurrentLayer->ConvertToTop(ptlist[i]);
|
||||
fCurrentLayer->ConvertToScreen(&ptlist[i]);
|
||||
|
||||
driver->DrawShape(shaperect, opcount, oplist, ptcount, ptlist,
|
||||
fCurrentLayer->CurrentState(), code == AS_FILL_SHAPE);
|
||||
@ -1894,8 +1904,10 @@ ServerWindow::_DispatchGraphicsMessage(int32 code, BPrivate::LinkReceiver &link)
|
||||
// least it works for now. :)
|
||||
BRegion region;
|
||||
for (int32 i = 0; i < count; i++) {
|
||||
region.Include(fCurrentLayer->ConvertToTop(rects[i]));
|
||||
region.Include(rects[i]);
|
||||
}
|
||||
|
||||
fCurrentLayer->ConvertToScreen(®ion);
|
||||
driver->FillRegion(region, fCurrentLayer->CurrentState());
|
||||
|
||||
delete[] rects;
|
||||
@ -1927,8 +1939,8 @@ ServerWindow::_DispatchGraphicsMessage(int32 code, BPrivate::LinkReceiver &link)
|
||||
link.Read<float>(&(index->pt2.y));
|
||||
link.Read<rgb_color>(&(index->color));
|
||||
|
||||
index->pt1 = fCurrentLayer->ConvertToTop(index->pt1);
|
||||
index->pt2 = fCurrentLayer->ConvertToTop(index->pt2);
|
||||
fCurrentLayer->ConvertToScreen(&index->pt1);
|
||||
fCurrentLayer->ConvertToScreen(&index->pt2);
|
||||
}
|
||||
driver->StrokeLineArray(linecount,linedata,fCurrentLayer->CurrentState());
|
||||
}
|
||||
@ -1947,9 +1959,8 @@ ServerWindow::_DispatchGraphicsMessage(int32 code, BPrivate::LinkReceiver &link)
|
||||
link.Read<escapement_delta>(&delta);
|
||||
link.ReadString(&string);
|
||||
|
||||
driver->DrawString(string, length,
|
||||
fCurrentLayer->ConvertToTop(location),
|
||||
fCurrentLayer->CurrentState(), &delta);
|
||||
fCurrentLayer->ConvertToScreen(&location);
|
||||
driver->DrawString(string, length, location, fCurrentLayer->CurrentState(), &delta);
|
||||
|
||||
free(string);
|
||||
break;
|
||||
@ -2141,7 +2152,7 @@ ServerWindow::HandleDirectConnection(int bufferState, int driverState)
|
||||
BRegion exclude = const_cast<BRegion &>(border->VisibleRegion());
|
||||
clipRegion.Exclude(&exclude);
|
||||
|
||||
border->ConvertToTop(&clipRegion);
|
||||
border->ConvertToScreen(&clipRegion);
|
||||
fDirectWindowData->direct_info->clip_list_count = min_c(clipRegion.CountRects(), kMaxClipRectsCount);
|
||||
fDirectWindowData->direct_info->clip_bounds = clipRegion.FrameInt();
|
||||
|
||||
|
@ -761,13 +761,13 @@ WinBorder::GetWantedRegion(BRegion ®)
|
||||
if (fRebuildDecRegion)
|
||||
set_decorator_region(Bounds());
|
||||
|
||||
BRect screenFrame(Bounds());
|
||||
ConvertToScreen2(&screenFrame);
|
||||
BRect screenFrame(Bounds());
|
||||
ConvertToScreen(&screenFrame);
|
||||
reg.Set(screenFrame);
|
||||
|
||||
reg.Include(&fDecRegion);
|
||||
|
||||
BRegion screenReg(GetRootLayer()->Bounds());
|
||||
BRegion screenReg(GetRootLayer()->Bounds());
|
||||
|
||||
reg.IntersectWith(&screenReg);
|
||||
}
|
||||
@ -792,7 +792,7 @@ if (cnt != 1)
|
||||
msg.what = _UPDATE_;
|
||||
|
||||
BRect rect(fInUpdateRegion.Frame());
|
||||
ConvertFromScreen2(&rect);
|
||||
ConvertFromScreen(&rect);
|
||||
msg.AddRect("_rect", rect );
|
||||
msg.AddRect("debug_rect", fInUpdateRegion.Frame());
|
||||
|
||||
|
@ -98,7 +98,6 @@ class WinBorder : public Layer {
|
||||
void UpdateFont();
|
||||
void UpdateScreen();
|
||||
|
||||
virtual bool HasClient() { return false; }
|
||||
inline Decorator* GetDecorator() const { return fDecorator; }
|
||||
|
||||
inline int32 Look() const { return fLook; }
|
||||
|
@ -52,8 +52,8 @@ WorkspacesLayer::_WorkspaceAt(int32 i)
|
||||
int32 columns, rows;
|
||||
_GetGrid(columns, rows);
|
||||
|
||||
int32 width = fFrame.IntegerWidth() / columns;
|
||||
int32 height = fFrame.IntegerHeight() / rows;
|
||||
int32 width = Frame().IntegerWidth() / columns;
|
||||
int32 height = Frame().IntegerHeight() / rows;
|
||||
|
||||
int32 column = i % columns;
|
||||
int32 row = i / columns;
|
||||
@ -62,11 +62,13 @@ WorkspacesLayer::_WorkspaceAt(int32 i)
|
||||
|
||||
// make sure there is no gap anywhere
|
||||
if (column == columns - 1)
|
||||
rect.right = fFrame.right;
|
||||
rect.right = Frame().right;
|
||||
if (row == rows - 1)
|
||||
rect.bottom = fFrame.bottom;
|
||||
rect.bottom = Frame().bottom;
|
||||
|
||||
rect.OffsetBy(ConvertToTop(BPoint(0, 0)));
|
||||
BPoint pt(0,0);
|
||||
ConvertToScreen(&pt);
|
||||
rect.OffsetBy(pt);
|
||||
return rect;
|
||||
}
|
||||
|
||||
@ -124,12 +126,12 @@ WorkspacesLayer::_DrawWindow(const BRect& workspaceFrame,
|
||||
backgroundRegion.Exclude(tabFrame);
|
||||
backgroundRegion.Exclude(frame);
|
||||
|
||||
fDriver->StrokeLine(tabFrame.LeftTop(), tabFrame.RightBottom(), yellow);
|
||||
GetDrawingEngine()->StrokeLine(tabFrame.LeftTop(), tabFrame.RightBottom(), yellow);
|
||||
|
||||
fDriver->StrokeRect(frame, gray);
|
||||
GetDrawingEngine()->StrokeRect(frame, gray);
|
||||
|
||||
frame.InsetBy(1, 1);
|
||||
fDriver->FillRect(frame, white);
|
||||
GetDrawingEngine()->FillRect(frame, white);
|
||||
}
|
||||
|
||||
|
||||
@ -143,7 +145,7 @@ WorkspacesLayer::_DrawWorkspace(int32 index)
|
||||
if (active) {
|
||||
// draw active frame
|
||||
RGBColor black(0, 0, 0);
|
||||
fDriver->StrokeRect(rect, black);
|
||||
GetDrawingEngine()->StrokeRect(rect, black);
|
||||
}
|
||||
|
||||
// draw background
|
||||
@ -181,19 +183,19 @@ WorkspacesLayer::_DrawWorkspace(int32 index)
|
||||
|
||||
BRegion workspaceRegion(rect);
|
||||
backgroundRegion.IntersectWith(&workspaceRegion);
|
||||
fDriver->ConstrainClippingRegion(&backgroundRegion);
|
||||
GetDrawingEngine()->ConstrainClippingRegion(&backgroundRegion);
|
||||
|
||||
for (int32 i = count; i-- > 0;) {
|
||||
_DrawWindow(rect, screenFrame, windows[i], backgroundRegion, active);
|
||||
}
|
||||
}
|
||||
|
||||
fDriver->ConstrainClippingRegion(&backgroundRegion);
|
||||
fDriver->FillRect(rect, color);
|
||||
GetDrawingEngine()->ConstrainClippingRegion(&backgroundRegion);
|
||||
GetDrawingEngine()->FillRect(rect, color);
|
||||
|
||||
// TODO: ConstrainClippingRegion() should accept a const parameter !!
|
||||
BRegion cRegion(VisibleRegion());
|
||||
fDriver->ConstrainClippingRegion(&cRegion);
|
||||
GetDrawingEngine()->ConstrainClippingRegion(&cRegion);
|
||||
}
|
||||
|
||||
|
||||
@ -215,26 +217,28 @@ WorkspacesLayer::Draw(const BRect& updateRect)
|
||||
// draw grid
|
||||
// horizontal lines
|
||||
|
||||
BRect frame = fFrame;
|
||||
frame.OffsetBy(ConvertToTop(BPoint(0, 0)));
|
||||
BRect frame = Frame();
|
||||
BPoint pt(0,0);
|
||||
ConvertToScreen(&pt);
|
||||
frame.OffsetBy(pt);
|
||||
|
||||
fDriver->StrokeLine(BPoint(frame.left, frame.top),
|
||||
GetDrawingEngine()->StrokeLine(BPoint(frame.left, frame.top),
|
||||
BPoint(frame.right, frame.top), ViewColor());
|
||||
|
||||
for (int32 row = 0; row < rows; row++) {
|
||||
BRect rect = _WorkspaceAt(row * columns);
|
||||
fDriver->StrokeLine(BPoint(frame.left, rect.bottom),
|
||||
GetDrawingEngine()->StrokeLine(BPoint(frame.left, rect.bottom),
|
||||
BPoint(frame.right, rect.bottom), ViewColor());
|
||||
}
|
||||
|
||||
// vertical lines
|
||||
|
||||
fDriver->StrokeLine(BPoint(frame.left, frame.top),
|
||||
GetDrawingEngine()->StrokeLine(BPoint(frame.left, frame.top),
|
||||
BPoint(frame.left, frame.bottom), ViewColor());
|
||||
|
||||
for (int32 column = 0; column < columns; column++) {
|
||||
BRect rect = _WorkspaceAt(column);
|
||||
fDriver->StrokeLine(BPoint(rect.right, frame.top),
|
||||
GetDrawingEngine()->StrokeLine(BPoint(rect.right, frame.top),
|
||||
BPoint(rect.right, frame.bottom), ViewColor());
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user