2b97fe884d
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14794 a95241bf-73f2-0310-859d-f6bbb57e9c96
214 lines
5.1 KiB
C++
214 lines
5.1 KiB
C++
/*
|
|
* Copyright 2001-2005, 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>
|
|
*/
|
|
#ifndef DRAWING_ENGINE_H_
|
|
#define DRAWING_ENGINE_H_
|
|
|
|
|
|
#include <Accelerant.h>
|
|
#include <Font.h>
|
|
#include <Locker.h>
|
|
#include <Point.h>
|
|
|
|
class BPoint;
|
|
class BRect;
|
|
class BRegion;
|
|
|
|
class DrawState;
|
|
class HWInterface;
|
|
class Painter;
|
|
class RGBColor;
|
|
class ServerBitmap;
|
|
class ServerCursor;
|
|
class ServerFont;
|
|
|
|
typedef struct
|
|
{
|
|
BPoint pt1;
|
|
BPoint pt2;
|
|
rgb_color color;
|
|
|
|
} LineArrayData;
|
|
|
|
class DrawingEngine {
|
|
public:
|
|
DrawingEngine(HWInterface* interface = NULL);
|
|
virtual ~DrawingEngine();
|
|
|
|
// when implementing, be sure to call the inherited version
|
|
status_t Initialize();
|
|
void Shutdown();
|
|
|
|
// locking
|
|
bool Lock();
|
|
void Unlock();
|
|
|
|
bool WriteLock();
|
|
void WriteUnlock();
|
|
|
|
// for "changing" hardware
|
|
void Update();
|
|
|
|
void SetHWInterface(HWInterface* interface);
|
|
|
|
// for screen shots
|
|
bool DumpToFile( const char *path);
|
|
ServerBitmap* DumpToBitmap();
|
|
|
|
|
|
// clipping for all drawing functions, passing a NULL region
|
|
// will remove any clipping (drawing allowed everywhere)
|
|
void ConstrainClippingRegion(BRegion* region);
|
|
|
|
// drawing functions
|
|
void CopyRegion( /*const*/ BRegion* region,
|
|
int32 xOffset,
|
|
int32 yOffset);
|
|
|
|
void CopyRegionList( BList* list,
|
|
BList* pList,
|
|
int32 rCount,
|
|
BRegion* clipReg);
|
|
|
|
void InvertRect( BRect r);
|
|
|
|
void DrawBitmap( ServerBitmap *bitmap,
|
|
const BRect &source,
|
|
const BRect &dest,
|
|
const DrawState *d);
|
|
// drawing primitives
|
|
|
|
void DrawArc( BRect r,
|
|
const float &angle,
|
|
const float &span,
|
|
const DrawState *d,
|
|
bool filled);
|
|
|
|
void DrawBezier( BPoint *pts,
|
|
const DrawState *d,
|
|
bool filled);
|
|
|
|
void DrawEllipse( BRect r,
|
|
const DrawState *d,
|
|
bool filled);
|
|
|
|
void DrawPolygon( BPoint *ptlist,
|
|
int32 numpts,
|
|
BRect bounds,
|
|
const DrawState *d,
|
|
bool filled,
|
|
bool closed);
|
|
|
|
// this version used by Decorator
|
|
void StrokeRect( BRect r,
|
|
const RGBColor &color);
|
|
|
|
void FillRect( BRect r,
|
|
const RGBColor &color);
|
|
|
|
void StrokeRect( BRect r,
|
|
const DrawState *d);
|
|
|
|
void FillRect( BRect r,
|
|
const DrawState *d);
|
|
|
|
// for debugging purposes?
|
|
void StrokeRegion( BRegion &r,
|
|
const DrawState *d);
|
|
|
|
void FillRegion( BRegion &r,
|
|
const DrawState *d);
|
|
|
|
void DrawRoundRect( BRect r,
|
|
const float &xrad,
|
|
const float &yrad,
|
|
const DrawState *d,
|
|
bool filled);
|
|
|
|
void DrawShape( const BRect &bounds,
|
|
const int32 &opcount,
|
|
const uint32 *oplist,
|
|
const int32 &ptcount,
|
|
const BPoint *ptlist,
|
|
const DrawState *d,
|
|
bool filled);
|
|
|
|
void DrawTriangle( BPoint *pts,
|
|
const BRect &bounds,
|
|
const DrawState *d,
|
|
bool filled);
|
|
|
|
// this version used by Decorator
|
|
void StrokeLine( const BPoint &start,
|
|
const BPoint &end,
|
|
const RGBColor &color);
|
|
|
|
void StrokeLine( const BPoint &start,
|
|
const BPoint &end,
|
|
DrawState *d);
|
|
|
|
void StrokeLineArray(const int32 &numlines,
|
|
const LineArrayData *data,
|
|
const DrawState *d);
|
|
|
|
// this version used by Decorator
|
|
void StrokePoint( const BPoint &pt,
|
|
const RGBColor &color);
|
|
|
|
void StrokePoint( const BPoint &pt,
|
|
DrawState *d);
|
|
|
|
// -------- text related calls
|
|
|
|
// DrawState is NOT const because this call updates the pen position in the passed DrawState
|
|
BPoint DrawString( const char* string,
|
|
int32 length,
|
|
const BPoint& pt,
|
|
DrawState* d,
|
|
escapement_delta* delta = NULL);
|
|
|
|
/* void DrawString( const char *string,
|
|
const int32 &length,
|
|
const BPoint &pt,
|
|
const RGBColor &color,
|
|
escapement_delta *delta=NULL);*/
|
|
|
|
float StringWidth( const char* string,
|
|
int32 length,
|
|
const DrawState* d,
|
|
escapement_delta* delta = NULL);
|
|
|
|
float StringWidth( const char* string,
|
|
int32 length,
|
|
const ServerFont& font,
|
|
escapement_delta* delta = NULL);
|
|
|
|
float StringHeight( const char* string,
|
|
int32 length,
|
|
const DrawState* d);
|
|
|
|
private:
|
|
BRect _CopyRect( BRect r,
|
|
int32 xOffset,
|
|
int32 yOffset) const;
|
|
|
|
void _CopyRect( uint8* bits,
|
|
uint32 width,
|
|
uint32 height,
|
|
uint32 bpr,
|
|
int32 xOffset,
|
|
int32 yOffset) const;
|
|
|
|
Painter* fPainter;
|
|
HWInterface* fGraphicsCard;
|
|
uint32 fAvailableHWAccleration;
|
|
};
|
|
|
|
#endif // DRAWING_ENGINE_H_
|