* Copyright 2001-2018, Haiku.
* Distributed under the terms of the MIT License.
*
* Authors:
* DarkWyrm <bpmagic@columbus.rr.com>
* Adi Oanca <adioanca@mymail.ro>
* Stephan AΓmus <superstippi@gmx.de>
* Axel DΓΆrfler, axeld@pinc-software.de
* Julian Harnath <julian.harnath@rwth-aachen.de>
* Joseph Groover <looncraz@looncraz.net>
*/
#ifndef _DRAW_STATE_H_
#define _DRAW_STATE_H_
#include <AutoDeleter.h>
#include <AffineTransform.h>
#include <GraphicsDefs.h>
#include <InterfaceDefs.h>
#include <Point.h>
#include <Referenceable.h>
#include <View.h>
#include "AppFontManager.h"
#include "ServerFont.h"
#include "PatternHandler.h"
#include "SimpleTransform.h"
class AlphaMask;
class BRegion;
class shape_data;
namespace BPrivate {
class LinkReceiver;
class LinkSender;
};
class DrawState {
public:
DrawState();
DrawState(const DrawState& other);
public:
virtual ~DrawState();
DrawState* PushState();
DrawState* PopState();
DrawState* PreviousState() const
{ return fPreviousState.Get(); }
uint16 ReadFontFromLink(BPrivate::LinkReceiver& link,
AppFontManager* fontManager = NULL);
void ReadFromLink(BPrivate::LinkReceiver& link);
void WriteToLink(BPrivate::LinkSender& link) const;
void SetOrigin(BPoint origin);
BPoint Origin() const
{ return fOrigin; }
BPoint CombinedOrigin() const
{ return fCombinedOrigin; }
void SetScale(float scale);
float Scale() const
{ return fScale; }
float CombinedScale() const
{ return fCombinedScale; }
void SetTransform(BAffineTransform transform);
BAffineTransform Transform() const
{ return fTransform; }
BAffineTransform CombinedTransform() const
{ return fCombinedTransform; }
void SetTransformEnabled(bool enabled);
DrawState* Squash() const;
void SetClippingRegion(const BRegion* region);
bool HasClipping() const;
bool HasAdditionalClipping() const;
bool GetCombinedClippingRegion(BRegion* region) const;
bool ClipToRect(BRect rect, bool inverse);
void ClipToShape(shape_data* shape, bool inverse);
void SetAlphaMask(AlphaMask* mask);
AlphaMask* GetAlphaMask() const;
void Transform(SimpleTransform& transform) const;
void InverseTransform(SimpleTransform& transform) const;
void SetHighColor(rgb_color color);
rgb_color HighColor() const
{ return fHighColor; }
void SetLowColor(rgb_color color);
rgb_color LowColor() const
{ return fLowColor; }
void SetHighUIColor(color_which which, float tint);
color_which HighUIColor(float* tint) const;
void SetLowUIColor(color_which which, float tint);
color_which LowUIColor(float* tint) const;
void SetPattern(const Pattern& pattern);
const Pattern& GetPattern() const
{ return fPattern; }
bool SetDrawingMode(drawing_mode mode);
drawing_mode GetDrawingMode() const
{ return fDrawingMode; }
bool SetBlendingMode(source_alpha srcMode,
alpha_function fncMode);
source_alpha AlphaSrcMode() const
{ return fAlphaSrcMode; }
alpha_function AlphaFncMode() const
{ return fAlphaFncMode; }
void SetDrawingModeLocked(bool locked);
void SetPenLocation(BPoint location);
BPoint PenLocation() const;
void SetPenSize(float size);
float PenSize() const;
float UnscaledPenSize() const;
void SetFont(const ServerFont& font,
uint32 flags = B_FONT_ALL);
const ServerFont& Font() const
{ return fFont; }
void SetForceFontAliasing(bool aliasing);
bool ForceFontAliasing() const
{ return fFontAliasing; }
void SetLineCapMode(cap_mode mode);
cap_mode LineCapMode() const
{ return fLineCapMode; }
void SetLineJoinMode(join_mode mode);
join_mode LineJoinMode() const
{ return fLineJoinMode; }
void SetMiterLimit(float limit);
float MiterLimit() const
{ return fMiterLimit; }
void SetFillRule(int32 fillRule);
int32 FillRule() const
{ return fFillRule; }
void PrintToStream() const;
void SetSubPixelPrecise(bool precise);
bool SubPixelPrecise() const
{ return fSubPixelPrecise; }
protected:
BPoint fOrigin;
BPoint fCombinedOrigin;
float fScale;
float fCombinedScale;
BAffineTransform fTransform;
BAffineTransform fCombinedTransform;
ObjectDeleter<BRegion>
fClippingRegion;
BReference<AlphaMask> fAlphaMask;
rgb_color fHighColor;
rgb_color fLowColor;
color_which fWhichHighColor;
color_which fWhichLowColor;
float fWhichHighColorTint;
float fWhichLowColorTint;
Pattern fPattern;
drawing_mode fDrawingMode;
source_alpha fAlphaSrcMode;
alpha_function fAlphaFncMode;
bool fDrawingModeLocked;
BPoint fPenLocation;
float fPenSize;
ServerFont fFont;
bool fFontAliasing;
bool fSubPixelPrecise;
cap_mode fLineCapMode;
join_mode fLineJoinMode;
float fMiterLimit;
int32 fFillRule;
float fUnscaledFontSize;
ObjectDeleter<DrawState>
fPreviousState;
};
#endif