root/src/add-ons/decorators/BeDecorator/BeDecorator.h
/*
 * Copyright 2001-2013 Haiku, Inc. All rights reserved.
 * Distributed under the terms of the MIT License.
 *
 * Authors:
 *              Stephan Aßmus, superstippi@gmx.de
 *              DarkWyrm, bpmagic@columbus.rr.com
 *              John Scipione, jscipione@gmail.com
 *              Clemens Zeidler, haiku@clemens-zeidler.de
 */
#ifndef BE_DECORATOR_H
#define BE_DECORATOR_H


#include "DecorManager.h"
#include "SATDecorator.h"


class Desktop;
class ServerBitmap;


class BeDecorAddOn : public DecorAddOn {
public:
                                                                BeDecorAddOn(image_id id, const char* name);

protected:
        virtual Decorator*                      _AllocateDecorator(DesktopSettings& settings,
                                                                        BRect rect, Desktop* desktop);
};


class BeDecorator: public SATDecorator {
public:
                                                                BeDecorator(DesktopSettings& settings,
                                                                        BRect frame, Desktop* desktop);
        virtual                                         ~BeDecorator();

        virtual void                            GetComponentColors(Component component,
                                                                        uint8 highlight, ComponentColors _colors,
                                                                        Decorator::Tab* tab = NULL);

protected:
        virtual void                            _DrawFrame(BRect rect);

        virtual void                            _DrawTab(Decorator::Tab* tab, BRect rect);
        virtual void                            _DrawTitle(Decorator::Tab* tab, BRect rect);
        virtual void                            _DrawClose(Decorator::Tab* tab, bool direct,
                                                                        BRect rect);
        virtual void                            _DrawZoom(Decorator::Tab* tab, bool direct,
                                                                        BRect rect);
        virtual void                            _DrawMinimize(Decorator::Tab* tab, bool direct,
                                                                        BRect rect);

        virtual void                            _GetButtonSizeAndOffset(const BRect& tabRect,
                                                                        float* offset, float* size,
                                                                        float* inset) const;

private:
                        void                            _DrawBevelRect(DrawingEngine* engine,
                                                                        const BRect rect, bool down,
                                                                        rgb_color light, rgb_color shadow);
                        void                            _DrawBlendedRect(DrawingEngine* engine,
                                                                        const BRect rect, bool down,
                                                                        rgb_color colorA, rgb_color colorB,
                                                                        rgb_color colorC, rgb_color colorD);
                        void                            _DrawButtonBitmap(ServerBitmap* bitmap,
                                                                        bool direct, BRect rect);
                        ServerBitmap*           _GetBitmapForButton(Decorator::Tab* tab,
                                                                        Component item, bool down, int32 width,
                                                                        int32 height);
                        ServerBitmap*           _CreateTemporaryBitmap(BRect bounds) const;
                        void                            _GetComponentColors(Component component,
                                                                        ComponentColors _colors,
                                                                        Decorator::Tab* tab = NULL);

private:
                        status_t                        fCStatus;

                        ServerBitmap*           fCloseBitmap;
                        ServerBitmap*           fBigZoomBitmap;
                        ServerBitmap*           fSmallZoomBitmap;
                        ServerBitmap*           fGlintBitmap;
};


#endif  // BE_DECORATOR_H