2006-11-13 10:28:19 +03:00
|
|
|
/*
|
2007-10-16 00:13:55 +04:00
|
|
|
* Copyright 2006-2007, Haiku Inc.
|
|
|
|
* Distributed under the terms of the MIT License.
|
|
|
|
*
|
|
|
|
* Authors:
|
|
|
|
* Stefano Ceccherini (burton666@libero.it)
|
2006-11-13 10:28:19 +03:00
|
|
|
*/
|
2007-10-16 00:13:55 +04:00
|
|
|
#ifndef _PICTURE_DATA_WRITER_H
|
|
|
|
#define _PICTURE_DATA_WRITER_H
|
|
|
|
|
2006-11-12 23:00:36 +03:00
|
|
|
|
|
|
|
#include <InterfaceDefs.h>
|
|
|
|
#include <Font.h>
|
|
|
|
#include <OS.h>
|
|
|
|
|
|
|
|
#include <stack>
|
|
|
|
|
|
|
|
class BPositionIO;
|
2007-10-16 00:13:55 +04:00
|
|
|
class BRegion;
|
|
|
|
|
|
|
|
|
2006-11-12 23:00:36 +03:00
|
|
|
class PictureDataWriter {
|
|
|
|
public:
|
2007-05-03 20:34:31 +04:00
|
|
|
PictureDataWriter();
|
2006-11-12 23:00:36 +03:00
|
|
|
PictureDataWriter(BPositionIO *data);
|
|
|
|
|
2007-05-03 20:34:31 +04:00
|
|
|
status_t SetTo(BPositionIO *data);
|
|
|
|
|
2007-08-13 18:07:12 +04:00
|
|
|
status_t WriteSetHighColor(const rgb_color &color);
|
|
|
|
status_t WriteSetLowColor(const rgb_color &color);
|
2006-11-12 23:00:36 +03:00
|
|
|
status_t WriteSetOrigin(const BPoint &point);
|
|
|
|
status_t WriteSetDrawingMode(const drawing_mode &mode);
|
2007-08-13 18:07:12 +04:00
|
|
|
status_t WriteSetPenLocation(const BPoint &point);
|
2006-11-12 23:00:36 +03:00
|
|
|
status_t WriteSetPenSize(const float &penSize);
|
|
|
|
status_t WriteSetLineMode(const cap_mode &cap, const join_mode &join, const float &miterLimit);
|
|
|
|
status_t WriteSetScale(const float &scale);
|
2007-08-14 10:39:37 +04:00
|
|
|
status_t WriteSetPattern(const pattern &pat);
|
2007-08-14 19:21:15 +04:00
|
|
|
status_t WriteSetClipping(/*const */BRegion ®ion);
|
|
|
|
status_t WriteClearClipping();
|
2006-11-12 23:00:36 +03:00
|
|
|
|
2007-08-13 18:07:12 +04:00
|
|
|
status_t WritePushState();
|
|
|
|
status_t WritePopState();
|
|
|
|
|
2007-08-14 13:17:21 +04:00
|
|
|
status_t WriteSetFontFamily(const font_family family);
|
|
|
|
status_t WriteSetFontStyle(const font_style style);
|
2007-08-13 18:07:12 +04:00
|
|
|
status_t WriteSetFontSpacing(const int32 &spacing);
|
|
|
|
status_t WriteSetFontSize(const float &size);
|
|
|
|
status_t WriteSetFontRotation(const float &rotation);
|
|
|
|
status_t WriteSetFontEncoding(const int32 &encoding);
|
|
|
|
status_t WriteSetFontFlags(const int32 &flags);
|
2007-09-10 14:20:26 +04:00
|
|
|
status_t WriteSetFontShear(const float &shear);
|
2007-08-13 18:07:12 +04:00
|
|
|
status_t WriteSetFontFace(const int32 &face);
|
|
|
|
|
|
|
|
status_t WriteStrokeLine(const BPoint &start, const BPoint &end);
|
|
|
|
status_t WriteInvertRect(const BRect &rect);
|
2006-11-12 23:00:36 +03:00
|
|
|
status_t WriteDrawRect(const BRect &rect, const bool &fill);
|
|
|
|
status_t WriteDrawRoundRect(const BRect &rect, const BPoint &radius, const bool &fill);
|
|
|
|
status_t WriteDrawEllipse(const BRect &rect, const bool &fill);
|
|
|
|
status_t WriteDrawArc(const BPoint ¢er, const BPoint &radius,
|
|
|
|
const float &startTheta, const float &arcTheta, const bool &fill);
|
2007-08-13 11:20:43 +04:00
|
|
|
status_t WriteDrawPolygon(const int32 &numPoints, BPoint *points,
|
|
|
|
const bool &isClosed, const bool &fill);
|
|
|
|
status_t WriteDrawBezier(const BPoint points[4], const bool &fill);
|
2006-11-12 23:00:36 +03:00
|
|
|
status_t WriteDrawString(const BPoint &where, const char *string,
|
|
|
|
const int32 &length, const escapement_delta &delta);
|
|
|
|
status_t WriteDrawShape(const int32 &opCount, const void *opList,
|
|
|
|
const int32 &ptCount, const void *ptList, const bool &fill);
|
|
|
|
status_t WriteDrawBitmap(const BRect &srcRect, const BRect &dstRect, const int32 &width, const int32 &height,
|
|
|
|
const int32 &bytesPerRow, const int32 &colorSpace, const int32 &flags,
|
|
|
|
const void *data, const int32 &length);
|
2007-08-13 11:20:43 +04:00
|
|
|
|
|
|
|
status_t WriteDrawPicture(const BPoint &where, const int32 &token);
|
|
|
|
|
2006-11-28 17:52:51 +03:00
|
|
|
protected:
|
2007-05-12 12:46:56 +04:00
|
|
|
// throw a status_t on error
|
|
|
|
void BeginOp(const int16 &op);
|
|
|
|
void EndOp();
|
|
|
|
void WriteData(const void *data, size_t size);
|
|
|
|
template <typename T> void Write(const T &data) { WriteData(&data, sizeof(data)); }
|
2006-11-12 23:00:36 +03:00
|
|
|
|
2006-11-28 17:52:51 +03:00
|
|
|
private:
|
|
|
|
BPositionIO *fData;
|
|
|
|
std::stack<off_t> fStack;
|
2006-11-12 23:00:36 +03:00
|
|
|
};
|
|
|
|
|
2007-10-16 00:13:55 +04:00
|
|
|
#endif // _PICTURE_DATA_WRITER_H
|