BeDecorator: make it compile, use tabs.
Crashes spectacularly like WinDecorator.
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -18,7 +18,7 @@
|
|||||||
|
|
||||||
|
|
||||||
class Desktop;
|
class Desktop;
|
||||||
|
class ServerBitmap;
|
||||||
|
|
||||||
class BeDecorAddOn : public DecorAddOn {
|
class BeDecorAddOn : public DecorAddOn {
|
||||||
public:
|
public:
|
||||||
@@ -26,19 +26,36 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual Decorator* _AllocateDecorator(DesktopSettings& settings,
|
virtual Decorator* _AllocateDecorator(DesktopSettings& settings,
|
||||||
BRect rect, window_look look, uint32 flags);
|
BRect rect);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class BeDecorator: public Decorator {
|
class BeDecorator: public Decorator {
|
||||||
public:
|
public:
|
||||||
BeDecorator(DesktopSettings& settings,
|
class Tab : public Decorator::Tab {
|
||||||
BRect frame, window_look look,
|
public:
|
||||||
uint32 flags);
|
Tab();
|
||||||
|
|
||||||
|
uint32 tabOffset;
|
||||||
|
float tabLocation;
|
||||||
|
float textOffset;
|
||||||
|
|
||||||
|
BString truncatedTitle;
|
||||||
|
int32 truncatedTitleLength;
|
||||||
|
|
||||||
|
bool buttonFocus : 1;
|
||||||
|
|
||||||
|
bool isHighlighted : 1;
|
||||||
|
ServerBitmap* closeBitmaps[4];
|
||||||
|
ServerBitmap* zoomBitmaps[4];
|
||||||
|
|
||||||
|
float minTabSize;
|
||||||
|
float maxTabSize;
|
||||||
|
};
|
||||||
|
|
||||||
|
BeDecorator(DesktopSettings& settings, BRect frame);
|
||||||
virtual ~BeDecorator();
|
virtual ~BeDecorator();
|
||||||
|
|
||||||
virtual float TabLocation() const
|
virtual float TabLocation(int32 tab) const;
|
||||||
{ return (float)fTabOffset; }
|
|
||||||
|
|
||||||
virtual bool GetSettings(BMessage* settings) const;
|
virtual bool GetSettings(BMessage* settings) const;
|
||||||
|
|
||||||
@@ -48,48 +65,107 @@ public:
|
|||||||
virtual void GetSizeLimits(int32* minWidth, int32* minHeight,
|
virtual void GetSizeLimits(int32* minWidth, int32* minHeight,
|
||||||
int32* maxWidth, int32* maxHeight) const;
|
int32* maxWidth, int32* maxHeight) const;
|
||||||
|
|
||||||
virtual Region RegionAt(BPoint where) const;
|
virtual Region RegionAt(BPoint where, int32& tab) const;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
enum Component {
|
||||||
|
COMPONENT_TAB,
|
||||||
|
|
||||||
|
COMPONENT_CLOSE_BUTTON,
|
||||||
|
COMPONENT_ZOOM_BUTTON,
|
||||||
|
|
||||||
|
COMPONENT_LEFT_BORDER,
|
||||||
|
COMPONENT_RIGHT_BORDER,
|
||||||
|
COMPONENT_TOP_BORDER,
|
||||||
|
COMPONENT_BOTTOM_BORDER,
|
||||||
|
|
||||||
|
COMPONENT_RESIZE_CORNER
|
||||||
|
};
|
||||||
|
|
||||||
|
enum {
|
||||||
|
COLOR_TAB_FRAME_LIGHT = 0,
|
||||||
|
COLOR_TAB_FRAME_DARK = 1,
|
||||||
|
COLOR_TAB = 2,
|
||||||
|
COLOR_TAB_LIGHT = 3,
|
||||||
|
COLOR_TAB_BEVEL = 4,
|
||||||
|
COLOR_TAB_SHADOW = 5,
|
||||||
|
COLOR_TAB_TEXT = 6
|
||||||
|
};
|
||||||
|
|
||||||
|
enum {
|
||||||
|
COLOR_BUTTON = 0,
|
||||||
|
COLOR_BUTTON_LIGHT = 1
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef rgb_color ComponentColors[7];
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void _DoLayout();
|
virtual void _DoLayout();
|
||||||
|
virtual void _DoTabLayout();
|
||||||
|
void _DistributeTabSize(float delta);
|
||||||
|
|
||||||
virtual void _DrawFrame(BRect r);
|
virtual Decorator::Tab* _AllocateNewTab();
|
||||||
virtual void _DrawTab(BRect r);
|
BeDecorator::Tab* _TabAt(int32 index) const;
|
||||||
|
|
||||||
virtual void _DrawClose(BRect r);
|
virtual void _DrawFrame(BRect rect);
|
||||||
virtual void _DrawTitle(BRect r);
|
virtual void _DrawTab(Decorator::Tab* tab, BRect rect);
|
||||||
virtual void _DrawZoom(BRect r);
|
virtual void _DrawTitle(Decorator::Tab* tab, BRect rect);
|
||||||
|
|
||||||
virtual void _SetTitle(const char* string,
|
virtual void _DrawClose(Decorator::Tab* tab, bool direct,
|
||||||
|
BRect rect);
|
||||||
|
virtual void _DrawZoom(Decorator::Tab* tab, bool direct,
|
||||||
|
BRect rect);
|
||||||
|
|
||||||
|
virtual void _SetTitle(Decorator::Tab* tab, const char* string,
|
||||||
BRegion* updateRegion = NULL);
|
BRegion* updateRegion = NULL);
|
||||||
|
|
||||||
virtual void _FontsChanged(DesktopSettings& settings,
|
virtual void _FontsChanged(DesktopSettings& settings,
|
||||||
BRegion* updateRegion);
|
BRegion* updateRegion);
|
||||||
virtual void _SetLook(DesktopSettings& settings,
|
virtual void _SetLook(Decorator::Tab* tab,
|
||||||
|
DesktopSettings& settings,
|
||||||
window_look look,
|
window_look look,
|
||||||
BRegion* updateRegion = NULL);
|
BRegion* updateRegion = NULL);
|
||||||
virtual void _SetFlags(uint32 flags,
|
virtual void _SetFlags(Decorator::Tab* tab, uint32 flags,
|
||||||
BRegion* updateRegion = NULL);
|
BRegion* updateRegion = NULL);
|
||||||
|
|
||||||
virtual void _SetFocus();
|
virtual void _SetFocus(Decorator::Tab* tab);
|
||||||
|
|
||||||
virtual void _MoveBy(BPoint offset);
|
virtual void _MoveBy(BPoint offset);
|
||||||
virtual void _ResizeBy(BPoint offset, BRegion* dirty);
|
virtual void _ResizeBy(BPoint offset, BRegion* dirty);
|
||||||
|
|
||||||
virtual bool _SetTabLocation(float location,
|
virtual bool _AddTab(DesktopSettings& settings,
|
||||||
|
int32 index = -1,
|
||||||
BRegion* updateRegion = NULL);
|
BRegion* updateRegion = NULL);
|
||||||
|
virtual bool _RemoveTab(int32 index,
|
||||||
|
BRegion* updateRegion = NULL);
|
||||||
|
virtual bool _MoveTab(int32 from, int32 to, bool isMoving,
|
||||||
|
BRegion* updateRegion = NULL);
|
||||||
|
|
||||||
|
virtual bool _SetTabLocation(Decorator::Tab* tab, float location,
|
||||||
|
bool isShifting, BRegion* updateRegion = NULL);
|
||||||
|
|
||||||
virtual bool _SetSettings(const BMessage& settings,
|
virtual bool _SetSettings(const BMessage& settings,
|
||||||
BRegion* updateRegion = NULL);
|
BRegion* updateRegion = NULL);
|
||||||
|
|
||||||
virtual void _GetFootprint(BRegion* region);
|
virtual void _GetFootprint(BRegion* region);
|
||||||
|
|
||||||
|
void _GetButtonSizeAndOffset(const BRect& tabRect,
|
||||||
|
float* offset, float* size,
|
||||||
|
float* inset) const;
|
||||||
|
|
||||||
|
virtual void DrawButtons(Decorator::Tab* tab,
|
||||||
|
const BRect& invalid);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void _UpdateFont(DesktopSettings& settings);
|
void _UpdateFont(DesktopSettings& settings);
|
||||||
void _DrawBlendedRect(BRect r, bool down);
|
void _DrawBlendedRect(BRect r, bool down);
|
||||||
void _GetButtonSizeAndOffset(const BRect& tabRect,
|
void _LayoutTabItems(Decorator::Tab* _tab, const BRect& tabRect);
|
||||||
float* offset, float*size) const;
|
void _InvalidateBitmaps();
|
||||||
void _LayoutTabItems(const BRect& tabRect);
|
|
||||||
|
inline float _DefaultTextOffset() const;
|
||||||
|
inline float _SingleTabOffsetAndSize(float& tabSize);
|
||||||
|
|
||||||
|
void _CalculateTabsRegion();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
RGBColor fButtonHighColor;
|
RGBColor fButtonHighColor;
|
||||||
@@ -108,6 +184,9 @@ private:
|
|||||||
|
|
||||||
int32 fBorderWidth;
|
int32 fBorderWidth;
|
||||||
|
|
||||||
|
BRegion fTabsRegion;
|
||||||
|
BRect fOldMovingTab;
|
||||||
|
|
||||||
uint32 fTabOffset;
|
uint32 fTabOffset;
|
||||||
float fTabLocation;
|
float fTabLocation;
|
||||||
float fTextOffset;
|
float fTextOffset;
|
||||||
|
|||||||
Reference in New Issue
Block a user