haiku/headers/private/servers/app/DisplayDriver.h
Stephan Aßmus 359c905c57 offscreen bitmaps work, tested on Haiku as well, supports all colorspaces that BBitmap::ImportBits() supports. It uses a fallback for non-B_RGB(A)32 bitmaps. Added support for B_SUB_PIXEL_PRECISION view flags, though it is a bit hacky, since I had to add it to LayerData, even though it is not a true part of stack data. Added Layer::SetFlags() to enforce code path and update fLayerData. Cleaned up DisplayDriverPainter and DisplayDriver API (changed some const BRect& rect to simply BRect rect in order to be able to reuse it in the code), moved Painter.h, the test environment only draws the changed part of the frame buffer again - this causes a lot less CPU overhead, Painter special cases stroke width of 1.0 to use square caps, which is similar to R5 implementation and removes a lot of problems with non-straight line drawing, ServerWindow uses the DisplayDriver from it's WinBorder instead of the one from the Desktop (needed for offscreen windows, which have their own DisplayDriverPainter), it also checks for GetRootLayer() == NULL, because offscreen layers are not attached to a RootLayer, there was a fix for scrolling which worked at least in the test environment, it is now defunced, because Adi moved _CopyBits to Layer... I need to reenable it later, LayerData has no more fEscapementDelta, also fixed fFontAliasing (which was thought to overriding the font flags, and now works as such again), Desktop initialises the menu_info and scroll_bar_info stuff, which makes ScrollBars work actually... hope I didn't forget something.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13448 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-07-05 16:17:16 +00:00

228 lines
5.9 KiB
C++

//------------------------------------------------------------------------------
// Copyright (c) 2001-2005, Haiku, Inc. All rights reserved
// Distributed under the terms of the MIT license.
//
// File Name: DisplayDriver.h
// Authors: DarkWyrm <bpmagic@columbus.rr.com>
// Gabe Yoder <gyoder@stny.rr.com>
// Stephan Aßmus <superstippi@gmx.de>
//
// Description: Abstract class which handles all graphics output
// for the server
//
//------------------------------------------------------------------------------
#ifndef _DISPLAY_DRIVER_H_
#define _DISPLAY_DRIVER_H_
#include <Accelerant.h>
#include <Font.h>
#include <Locker.h>
#include <Point.h>
class BPoint;
class BRect;
class BRegion;
class DrawData;
class HWInterface;
class RGBColor;
class ServerBitmap;
class ServerCursor;
class ServerFont;
/*!
\brief Data structure for passing cursor information to hardware drivers.
*/
/*typedef struct
{
uchar *xormask, *andmask;
int32 width, height;
int32 hotx, hoty;
} cursor_data;*/
typedef struct
{
BPoint pt1;
BPoint pt2;
rgb_color color;
} LineArrayData;
class DisplayDriver {
public:
DisplayDriver();
virtual ~DisplayDriver();
// when implementing, be sure to call the inherited version
virtual status_t Initialize();
virtual void Shutdown();
// call this on mode changes!
virtual void Update() = 0;
virtual void SetHWInterface(HWInterface* interface) = 0;
// clipping for all drawing functions
virtual void ConstrainClippingRegion(BRegion* region) = 0;
// Graphics calls implemented in DisplayDriver
virtual void CopyRegion( /*const*/ BRegion* region,
int32 xOffset,
int32 yOffset) = 0;
virtual void CopyRegionList( BList* list,
BList* pList,
int32 rCount,
BRegion* clipReg) = 0;
virtual void InvertRect( BRect r) = 0;
virtual void DrawBitmap( ServerBitmap *bitmap,
const BRect &source,
const BRect &dest,
const DrawData *d) = 0;
virtual void FillArc( BRect r,
const float &angle,
const float &span,
const DrawData *d) = 0;
virtual void FillBezier( BPoint *pts,
const DrawData *d) = 0;
virtual void FillEllipse( BRect r,
const DrawData *d) = 0;
virtual void FillPolygon( BPoint *ptlist,
int32 numpts,
BRect bounds,
const DrawData *d) = 0;
virtual void FillRect( BRect r,
const RGBColor &color) = 0;
virtual void FillRect( BRect r,
const DrawData *d) = 0;
virtual void FillRegion( BRegion &r,
const DrawData *d) = 0;
virtual void FillRoundRect( BRect r,
const float &xrad,
const float &yrad,
const DrawData *d) = 0;
virtual void FillShape( const BRect &bounds,
const int32 &opcount,
const int32 *oplist,
const int32 &ptcount,
const BPoint *ptlist,
const DrawData *d) = 0;
virtual void FillTriangle( BPoint *pts,
BRect bounds,
const DrawData *d) = 0;
virtual void StrokeArc( BRect r,
const float &angle,
const float &span,
const DrawData *d) = 0;
virtual void StrokeBezier( BPoint *pts,
const DrawData *d) = 0;
virtual void StrokeEllipse( BRect r,
const DrawData *d) = 0;
// this version used by Decorator
virtual void StrokeLine( const BPoint &start,
const BPoint &end,
const RGBColor &color) = 0;
virtual void StrokeLine( const BPoint &start,
const BPoint &end,
DrawData *d) = 0;
virtual void StrokeLineArray(const int32 &numlines,
const LineArrayData *data,
const DrawData *d) = 0;
// this version used by Decorator
virtual void StrokePoint( const BPoint &pt,
const RGBColor &color) = 0;
virtual void StrokePoint( const BPoint &pt,
DrawData *d) = 0;
virtual void StrokePolygon( BPoint *ptlist,
int32 numpts,
BRect bounds,
const DrawData *d,
bool is_closed=true) = 0;
// this version used by Decorator
virtual void StrokeRect( BRect r,
const RGBColor &color) = 0;
virtual void StrokeRect( BRect r,
const DrawData *d) = 0;
virtual void StrokeRegion( BRegion &r,
const DrawData *d) = 0;
virtual void StrokeRoundRect(BRect r,
const float &xrad,
const float &yrad,
const DrawData *d) = 0;
virtual void StrokeShape( const BRect &bounds,
const int32 &opcount,
const int32 *oplist,
const int32 &ptcount,
const BPoint *ptlist,
const DrawData *d) = 0;
virtual void StrokeTriangle( BPoint *pts,
const BRect &bounds,
const DrawData *d) = 0;
// Font-related calls
// DrawData is NOT const because this call updates the pen position in the passed DrawData
virtual void DrawString( const char* string,
int32 length,
const BPoint& pt,
DrawData* d,
escapement_delta *delta = NULL) = 0;
/* virtual void DrawString( const char *string,
const int32 &length,
const BPoint &pt,
const RGBColor &color,
escapement_delta *delta = NULL) = 0;*/
virtual float StringWidth( const char* string,
int32 length,
const DrawData* d,
escapement_delta *delta = NULL) = 0;
virtual float StringWidth( const char* string,
int32 length,
const ServerFont& font,
escapement_delta *delta = NULL) = 0;
virtual float StringHeight( const char *string,
int32 length,
const DrawData *d) = 0;
virtual bool Lock() = 0;
virtual void Unlock() = 0;
virtual bool DumpToFile(const char *path) = 0;
virtual ServerBitmap* DumpToBitmap() = 0;
};
#endif