From a6036edea102a91fc322640e8719b9fd45c1d3d2 Mon Sep 17 00:00:00 2001 From: Adrien Destugues Date: Mon, 19 Jul 2010 12:12:18 +0000 Subject: [PATCH] * Update the MacDecorator to be more in-line with the new API. It still doesn't draw anything, however. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37589 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../decorators/MacDecorator/MacDecorator.cpp | 289 +++++++++--------- .../decorators/MacDecorator/MacDecorator.h | 44 ++- 2 files changed, 160 insertions(+), 173 deletions(-) diff --git a/src/add-ons/decorators/MacDecorator/MacDecorator.cpp b/src/add-ons/decorators/MacDecorator/MacDecorator.cpp index 5e5c5e3abf..7b0e6f72a0 100644 --- a/src/add-ons/decorators/MacDecorator/MacDecorator.cpp +++ b/src/add-ons/decorators/MacDecorator/MacDecorator.cpp @@ -33,6 +33,8 @@ MacDecorator::MacDecorator(DesktopSettings& settings, BRect rect, : Decorator(settings, rect, look, flags) { + _UpdateFont(settings); + frame_highcol = (rgb_color){ 255, 255, 255, 255 }; frame_midcol = (rgb_color){ 216, 216, 216, 255 }; frame_lowcol = (rgb_color){ 110, 110, 110, 255 }; @@ -58,131 +60,7 @@ MacDecorator::~MacDecorator() } -void -MacDecorator::_SetTitle(const char* string, BRegion* updateRegion) -{ - // TODO: we could be much smarter about the update region - - BRect rect = TabRect(); - - if (updateRegion == NULL) - return; - - // Decorator::SetTitle may change the TabRect, so we merge the new one - BRect updatedRect = TabRect(); - if (rect.left > updatedRect.left) - rect.left = updatedRect.left; - if (rect.right < updatedRect.right) - rect.right = updatedRect.right; - - rect.bottom++; - // the border will look differently when the title is adjacent - - updateRegion->Include(rect); -} - - -void -MacDecorator::FontsChanged(DesktopSettings& settings, BRegion* updateRegion) -{ - // get previous extent - if (updateRegion != NULL) { - BRegion extent; - GetFootprint(&extent); - updateRegion->Include(&extent); - } - - // TODO : does this do anything usefull ? - // _UpdateFont(settings); - // _InvalidateBitmaps(); - _DoLayout(); - - if (updateRegion != NULL) { - BRegion extent; - GetFootprint(&extent); - updateRegion->Include(&extent); - } -} - - -void -MacDecorator::SetLook(DesktopSettings& settings, window_look look, - BRegion* updateRegion) -{ - // TODO: we could be much smarter about the update region - - // get previous extent - if (updateRegion != NULL) { - BRegion extent; - GetFootprint(&extent); - updateRegion->Include(&extent); - } - - fLook = look; - - // _UpdateFont(settings); - // _InvalidateBitmaps(); - _DoLayout(); - - if (updateRegion != NULL) { - BRegion extent; - GetFootprint(&extent); - updateRegion->Include(&extent); - } -} - - -void -MacDecorator::SetFlags(uint32 flags, BRegion* updateRegion) -{ - // TODO: we could be much smarter about the update region - - // get previous extent - if (updateRegion != NULL) { - BRegion extent; - GetFootprint(&extent); - updateRegion->Include(&extent); - } - - Decorator::SetFlags(flags, updateRegion); - _DoLayout(); - - if (updateRegion != NULL) { - BRegion extent; - GetFootprint(&extent); - updateRegion->Include(&extent); - } -} - - -void -MacDecorator::MoveBy(BPoint offset) -{ - Decorator::MoveBy(offset); -} - - -void -MacDecorator::_ResizeBy(BPoint offset, BRegion* dirty) -{ - // Move all internal rectangles the appropriate amount - fFrame.right += offset.x; - fFrame.bottom += offset.y; - - fTabRect.right += offset.x; - fBorderRect.right += offset.x; - fBorderRect.bottom += offset.y; - // fZoomRect.OffsetBy(offset.x,0); - // fMinimizeRect.OffsetBy(offset.x,0); - if (dirty) { - dirty->Include(fTabRect); - dirty->Include(fBorderRect); - } - - - // TODO probably some other layouting stuff here - _DoLayout(); -} +// TODO : Add GetSettings void @@ -191,7 +69,10 @@ MacDecorator::Draw(BRect update) STRACE(("MacDecorator: Draw(%.1f,%.1f,%.1f,%.1f)\n", update.left, update.top, update.right, update.bottom)); + // We need to draw a few things: the tab, the borders, + // and the buttons fDrawingEngine->SetDrawState(&fDrawState); + _DrawFrame(update); _DrawTab(update); } @@ -208,29 +89,7 @@ MacDecorator::Draw() } -void -MacDecorator::GetFootprint(BRegion* region) -{ - // This function calculates the decorator's footprint in coordinates - // relative to the view. This is most often used to set a Window - // object's visible region. - if (!region) - return; - - region->MakeEmpty(); - - // No border : we don't draw anything. - if (fLook == B_NO_BORDER_WINDOW_LOOK) - return; - - - region->Set(fBorderRect); - region->Exclude(fFrame); - - if (fLook == B_BORDERED_WINDOW_LOOK) - return; - region->Include(fTabRect); -} +// TODO : add GetSizeLimits click_type @@ -304,6 +163,7 @@ MacDecorator::_DoLayout() } fBorderRect=fFrame; + // calculate our tab rect if (hasTab) { fBorderRect.InsetBy(-kDefaultBorderWidth, -kDefaultBorderWidth); fBorderRect.top +=3; @@ -753,6 +613,82 @@ MacDecorator::_DrawMinimize(BRect r) } +void +MacDecorator::_SetTitle(const char* string, BRegion* updateRegion) +{ + // TODO: we could be much smarter about the update region + + BRect rect = TabRect(); + + _DoLayout(); + + if (updateRegion == NULL) + return; + + rect = rect | TabRect(); + + rect.bottom++; + // the border will look differently when the title is adjacent + + updateRegion->Include(rect); +} + + +void +MacDecorator::_FontsChanged(DesktopSettings& settings, + BRegion* updateRegion) +{ + // get previous extent + if (updateRegion != NULL) + updateRegion->Include(&GetFootprint()); + + _UpdateFont(settings); + _DoLayout(); + + if (updateRegion != NULL) + updateRegion->Include(&GetFootprint()); +} + + +void +MacDecorator::_SetLook(DesktopSettings& settings, window_look look, + BRegion* updateRegion) +{ + // TODO: we could be much smarter about the update region + + // get previous extent + if (updateRegion != NULL) + updateRegion->Include(&GetFootprint()); + + fLook = look; + + _UpdateFont(settings); + _DoLayout(); + + if (updateRegion != NULL) + updateRegion->Include(&GetFootprint()); +} + + +void +MacDecorator::_SetFlags(uint32 flags, BRegion* updateRegion) +{ + // TODO: we could be much smarter about the update region + + // get previous extent + if (updateRegion != NULL) + updateRegion->Include(&GetFootprint()); + + _DoLayout(); + + if (updateRegion != NULL) + updateRegion->Include(&GetFootprint()); +} + + +// TODO : _SetFocus + + void MacDecorator::_SetColors() { @@ -760,6 +696,63 @@ MacDecorator::_SetColors() } +void +MacDecorator::_MoveBy(BPoint offset) +{ + // TODO ? +} + + +void +MacDecorator::_ResizeBy(BPoint offset, BRegion* dirty) +{ + // Move all internal rectangles the appropriate amount + fFrame.right += offset.x; + fFrame.bottom += offset.y; + + fTabRect.right += offset.x; + fBorderRect.right += offset.x; + fBorderRect.bottom += offset.y; + // fZoomRect.OffsetBy(offset.x,0); + // fMinimizeRect.OffsetBy(offset.x,0); + if (dirty) { + dirty->Include(fTabRect); + dirty->Include(fBorderRect); + } + + + // TODO probably some other layouting stuff here + _DoLayout(); +} + + +// TODO : _SetSettings + + +void +MacDecorator::_GetFootprint(BRegion* region) +{ + // This function calculates the decorator's footprint in coordinates + // relative to the view. This is most often used to set a Window + // object's visible region. + if (!region) + return; + + region->MakeEmpty(); + + if (fLook == B_NO_BORDER_WINDOW_LOOK) + return; + + + region->Set(fBorderRect); + region->Exclude(fFrame); + + if (fLook == B_BORDERED_WINDOW_LOOK) + return; + region->Include(fTabRect); +} + + void MacDecorator::_UpdateFont(DesktopSettings& settings) { diff --git a/src/add-ons/decorators/MacDecorator/MacDecorator.h b/src/add-ons/decorators/MacDecorator/MacDecorator.h index 5d0797b52b..7f9642ada8 100644 --- a/src/add-ons/decorators/MacDecorator/MacDecorator.h +++ b/src/add-ons/decorators/MacDecorator/MacDecorator.h @@ -17,34 +17,12 @@ public: MacDecorator(DesktopSettings& settings, BRect frame, window_look look, uint32 flags); - ~MacDecorator(); + virtual ~MacDecorator(); - void _SetTitle(const char* string, - BRegion* updateRegion = NULL); - void FontsChanged(DesktopSettings& settings, - BRegion* updateRegion); - void SetLook(DesktopSettings& settings, window_look look, - BRegion* updateRegion = NULL); - void SetFlags(uint32 flags, - BRegion* updateRegion = NULL); - - void MoveBy(BPoint offset); - void _ResizeBy(BPoint offset, BRegion* dirty); - - // SetTabLocation - // TabLocation - // - // SetSettings - // GetSettings - void Draw(BRect updateRect); void Draw(); - //GetSizeLimits - - void GetFootprint(BRegion *region); - - click_type Clicked(BPoint pt, int32 buttons, + click_type Clicked(BPoint pt, int32 buttons, int32 modifiers); protected: @@ -58,8 +36,24 @@ protected: void _DrawZoom(BRect r); void _DrawMinimize(BRect r); - // void _SetFocus(); + void _SetTitle(const char* string, + BRegion* updateRegion = NULL); + + void _FontsChanged(DesktopSettings& settings, + BRegion* updateRegion); + void _SetLook(DesktopSettings& settings, + window_look look, + BRegion* updateRegion = NULL); + void _SetFlags(uint32 flags, + BRegion* updateRegion = NULL); + void _SetColors(); + + void _MoveBy(BPoint offset); + void _ResizeBy(BPoint offset, BRegion* dirty); + + void _GetFootprint(BRegion *region); + private: void _UpdateFont(DesktopSettings& settings); void _DrawBlendedRect(DrawingEngine* engine,