* Copyright 2001-2018, Haiku, Inc.
* Distributed under the terms of the MIT License.
*
* Authors:
* DarkWyrm <bpmagic@columbus.rr.com>
* Gabe Yoder <gyoder@stny.rr.com>
* Stephan Aßmus <superstippi@gmx.de>
* Julian Harnath <julian.harnath@rwth-aachen.de>
*/
#ifndef DRAWING_ENGINE_H_
#define DRAWING_ENGINE_H_
#include <AutoDeleter.h>
#include <Accelerant.h>
#include <Font.h>
#include <Locker.h>
#include <Point.h>
#include <Gradient.h>
#include <ServerProtocolStructs.h>
#include "HWInterface.h"
class BPoint;
class BRect;
class BRegion;
class DrawState;
class Painter;
class ServerBitmap;
class ServerCursor;
class ServerFont;
class DrawingEngine : public HWInterfaceListener {
public:
DrawingEngine(HWInterface* interface = NULL);
virtual ~DrawingEngine();
virtual void FrameBufferChanged();
void SetHWInterface(HWInterface* interface);
virtual void SetCopyToFrontEnabled(bool enable);
bool CopyToFrontEnabled() const
{ return fCopyToFront; }
virtual void CopyToFront( BRegion& region);
bool LockParallelAccess();
#if DEBUG
virtual bool IsParallelAccessLocked() const;
#endif
void UnlockParallelAccess();
bool LockExclusiveAccess();
virtual bool IsExclusiveAccessLocked() const;
void UnlockExclusiveAccess();
ServerBitmap* DumpToBitmap();
virtual status_t ReadBitmap(ServerBitmap *bitmap, bool drawCursor,
BRect bounds);
virtual void ConstrainClippingRegion(const BRegion* region);
virtual void SetDrawState(const DrawState* state,
int32 xOffset = 0, int32 yOffset = 0);
virtual void SetHighColor(const rgb_color& color);
virtual void SetLowColor(const rgb_color& color);
virtual void SetPenSize(float size);
virtual void SetStrokeMode(cap_mode lineCap, join_mode joinMode,
float miterLimit);
virtual void SetFillRule(int32 fillRule);
virtual void SetPattern(const struct pattern& pattern);
virtual void SetDrawingMode(drawing_mode mode);
virtual void SetDrawingMode(drawing_mode mode,
drawing_mode& oldMode);
virtual void SetBlendingMode(source_alpha srcAlpha,
alpha_function alphaFunc);
virtual void SetFont(const ServerFont& font);
virtual void SetFont(const DrawState* state);
virtual void SetTransform(const BAffineTransform& transform,
int32 xOffset, int32 yOffset);
virtual void CopyRegion( BRegion* region,
int32 xOffset, int32 yOffset);
virtual void InvertRect(BRect r);
virtual void DrawBitmap(ServerBitmap* bitmap,
const BRect& bitmapRect, const BRect& viewRect,
uint32 options = 0);
virtual void DrawArc(BRect r, const float& angle,
const float& span, bool filled);
virtual void DrawArc(BRect r, const float& angle,
const float& span, bool filled, const BGradient& gradient);
virtual void DrawBezier(BPoint* pts, bool filled);
virtual void DrawBezier(BPoint* pts, bool filled, const BGradient& gradient);
virtual void DrawEllipse(BRect r, bool filled);
virtual void DrawEllipse(BRect r, bool filled, const BGradient& gradient);
virtual void DrawPolygon(BPoint* ptlist, int32 numpts,
BRect bounds, bool filled, bool closed);
virtual void DrawPolygon(BPoint* ptlist, int32 numpts,
BRect bounds, bool filled, bool closed,
const BGradient& gradient);
virtual void StrokePoint(const BPoint& point,
const rgb_color& color);
virtual void StrokeRect(BRect rect, const rgb_color &color);
virtual void FillRect(BRect rect, const rgb_color &color);
virtual void FillRegion(BRegion& region, const rgb_color& color);
virtual void StrokeRect(BRect rect);
virtual void StrokeRect(BRect rect, const BGradient& gradient);
virtual void FillRect(BRect rect);
virtual void FillRect(BRect rect, const BGradient& gradient);
virtual void FillRegion(BRegion& region);
virtual void FillRegion(BRegion& region,
const BGradient& gradient);
virtual void DrawRoundRect(BRect rect, float xrad,
float yrad, bool filled);
virtual void DrawRoundRect(BRect rect, float xrad,
float yrad, bool filled, const BGradient& gradient);
virtual void DrawShape(const BRect& bounds,
int32 opcount, const uint32* oplist,
int32 ptcount, const BPoint* ptlist,
bool filled, const BPoint& viewToScreenOffset,
float viewScale);
virtual void DrawShape(const BRect& bounds,
int32 opcount, const uint32* oplist,
int32 ptcount, const BPoint* ptlist,
bool filled, const BGradient& gradient,
const BPoint& viewToScreenOffset,
float viewScale);
virtual void DrawTriangle(BPoint* points, const BRect& bounds,
bool filled);
virtual void DrawTriangle(BPoint* points, const BRect& bounds,
bool filled, const BGradient& gradient);
virtual void StrokeLine(const BPoint& start,
const BPoint& end, const rgb_color& color);
virtual void StrokeLine(const BPoint& start,
const BPoint& end);
virtual void StrokeLine(const BPoint& start,
const BPoint& end, const BGradient& gradient);
virtual void StrokeLineArray(int32 numlines,
const ViewLineArrayInfo* data);
virtual BPoint DrawString(const char* string, int32 length,
const BPoint& pt,
escapement_delta* delta = NULL);
virtual BPoint DrawString(const char* string, int32 length,
const BPoint* offsets);
float StringWidth(const char* string, int32 length,
escapement_delta* delta = NULL);
float StringWidth(const char* string,
int32 length, const ServerFont& font,
escapement_delta* delta = NULL);
BPoint DrawStringDry(const char* string, int32 length,
const BPoint& pt,
escapement_delta* delta = NULL);
BPoint DrawStringDry(const char* string, int32 length,
const BPoint* offsets);
virtual BRect CopyRect(BRect rect, int32 xOffset,
int32 yOffset) const;
void SetRendererOffset(int32 offsetX, int32 offsetY);
private:
friend class DrawTransaction;
void _CopyRect(uint8* bits,
uint32 width, uint32 height, uint32 bytesPerRow,
int32 xOffset, int32 yOffset) const;
ObjectDeleter<Painter>
fPainter;
HWInterface* fGraphicsCard;
bool fCopyToFront;
};
#endif