2003-03-19 01:00:38 +03:00
|
|
|
#ifndef _PICTUREPROTOCOL_H
|
|
|
|
#define _PICTUREPROTOCOL_H
|
|
|
|
|
|
|
|
enum {
|
2014-02-05 01:46:55 +04:00
|
|
|
B_PIC_MOVE_PEN_BY = 0x0010,
|
2003-03-19 01:00:38 +03:00
|
|
|
|
2014-02-05 01:46:55 +04:00
|
|
|
B_PIC_STROKE_LINE = 0x0100,
|
|
|
|
B_PIC_STROKE_RECT = 0x0101,
|
|
|
|
B_PIC_FILL_RECT = 0x0102,
|
2003-03-19 01:00:38 +03:00
|
|
|
B_PIC_STROKE_ROUND_RECT = 0x0103,
|
|
|
|
B_PIC_FILL_ROUND_RECT = 0x0104,
|
2014-02-05 01:46:55 +04:00
|
|
|
B_PIC_STROKE_BEZIER = 0x0105,
|
|
|
|
B_PIC_FILL_BEZIER = 0x0106,
|
2003-03-19 01:00:38 +03:00
|
|
|
B_PIC_STROKE_POLYGON = 0x010B,
|
2014-02-05 01:46:55 +04:00
|
|
|
B_PIC_FILL_POLYGON = 0x010C,
|
|
|
|
B_PIC_STROKE_SHAPE = 0x010D,
|
|
|
|
B_PIC_FILL_SHAPE = 0x010E,
|
|
|
|
B_PIC_DRAW_STRING = 0x010F,
|
|
|
|
B_PIC_DRAW_PIXELS = 0x0110,
|
|
|
|
B_PIC_DRAW_PICTURE = 0x0112,
|
|
|
|
B_PIC_STROKE_ARC = 0x0113,
|
|
|
|
B_PIC_FILL_ARC = 0x0114,
|
2003-03-19 01:00:38 +03:00
|
|
|
B_PIC_STROKE_ELLIPSE = 0x0115,
|
2014-02-05 01:46:55 +04:00
|
|
|
B_PIC_FILL_ELLIPSE = 0x0116,
|
2006-04-29 00:22:28 +04:00
|
|
|
|
2003-03-19 01:00:38 +03:00
|
|
|
B_PIC_ENTER_STATE_CHANGE = 0x0200,
|
|
|
|
B_PIC_SET_CLIPPING_RECTS = 0x0201,
|
|
|
|
B_PIC_CLIP_TO_PICTURE = 0x0202,
|
2014-02-05 01:46:55 +04:00
|
|
|
B_PIC_PUSH_STATE = 0x0203,
|
|
|
|
B_PIC_POP_STATE = 0x0204,
|
2003-03-19 01:00:38 +03:00
|
|
|
B_PIC_CLEAR_CLIPPING_RECTS = 0x0205,
|
2015-11-09 21:57:13 +03:00
|
|
|
B_PIC_CLIP_TO_RECT = 0x0206,
|
|
|
|
B_PIC_CLIP_TO_SHAPE = 0x0207,
|
2006-04-29 00:22:28 +04:00
|
|
|
|
2014-02-05 01:46:55 +04:00
|
|
|
B_PIC_SET_ORIGIN = 0x0300,
|
2003-03-19 01:00:38 +03:00
|
|
|
B_PIC_SET_PEN_LOCATION = 0x0301,
|
|
|
|
B_PIC_SET_DRAWING_MODE = 0x0302,
|
2014-02-05 01:46:55 +04:00
|
|
|
B_PIC_SET_LINE_MODE = 0x0303,
|
|
|
|
B_PIC_SET_PEN_SIZE = 0x0304,
|
|
|
|
B_PIC_SET_SCALE = 0x0305,
|
2003-03-19 01:00:38 +03:00
|
|
|
B_PIC_SET_FORE_COLOR = 0x0306,
|
|
|
|
B_PIC_SET_BACK_COLOR = 0x0307,
|
|
|
|
B_PIC_SET_STIPLE_PATTERN = 0x0308,
|
|
|
|
B_PIC_ENTER_FONT_STATE = 0x0309,
|
|
|
|
B_PIC_SET_BLENDING_MODE = 0x030A,
|
|
|
|
B_PIC_SET_FONT_FAMILY = 0x0380,
|
|
|
|
B_PIC_SET_FONT_STYLE = 0x0381,
|
|
|
|
B_PIC_SET_FONT_SPACING = 0x0382,
|
|
|
|
B_PIC_SET_FONT_ENCODING = 0x0383,
|
|
|
|
B_PIC_SET_FONT_FLAGS = 0x0384,
|
2014-02-05 01:46:55 +04:00
|
|
|
B_PIC_SET_FONT_SIZE = 0x0385,
|
2003-03-19 01:00:38 +03:00
|
|
|
B_PIC_SET_FONT_ROTATE = 0x0386,
|
|
|
|
B_PIC_SET_FONT_SHEAR = 0x0387,
|
2014-02-05 01:46:55 +04:00
|
|
|
B_PIC_SET_FONT_BPP = 0x0388,
|
|
|
|
B_PIC_SET_FONT_FACE = 0x0389,
|
|
|
|
B_PIC_SET_TRANSFORM = 0x0390,
|
app_server: add new BView layers API
* Add new methods
BView::BeginLayer(uint8 opacity)
BView::EndLayer()
* All drawing between begin and end of a layer is redirected onto an
intermediate bitmap. When ending the layer, this bitmap is
composited onto the view with the opacity given when the layer was
started.
* Layers can be nested arbitrarily and will be blended onto each
other in order. There can also be any arbitrary interleaving of
layer begin/end and drawing operations.
* Internally, drawing commands are redirected into a BPicture between
BeginLayer and EndLayer (but client code need not know or care
about this). Client code can also start/end other BPictures while
inside a layer.
* Uses the PictureBoundingBoxPlayer to determine the size of the
layer bitmap before allocating and drawing into it, so it does not
allocate more memory than necessary and -- more importantly -- it
will not alpha-composite more pixels than necessary.
* Drawing mode is always set to B_OP_ALPHA, blend mode to
(B_PIXEL_ALPHA, B_ALPHA_COMPOSITE) while inside layers. This is
necessary for (a) correct compositing output and (b) for
redirection of drawing into the intermediate bitmap, which uses the
renderer_region offset (in B_OP_COPY, the Painter does not use the
AGG renderer methods, it directly accesses the pixel data. This
would access out-of-bounds without the offset, so B_OP_COPY cannot
be allowed.)
To ensure these modes aren't changed, BView::SetDrawingMode()
and BView::SetBlendingMode() are ignored while inside a layer.
* The main motivation behind this new API is WebKit, which internally
expects such a layers functionality to be present. A performant and
reusable implementation of this functionality can only be done
server-side in app_server.
2015-07-25 16:44:23 +03:00
|
|
|
B_PIC_BLEND_LAYER = 0x0391
|
2003-03-19 01:00:38 +03:00
|
|
|
};
|
|
|
|
|
2007-08-16 13:14:03 +04:00
|
|
|
|
app_server: add new BView layers API
* Add new methods
BView::BeginLayer(uint8 opacity)
BView::EndLayer()
* All drawing between begin and end of a layer is redirected onto an
intermediate bitmap. When ending the layer, this bitmap is
composited onto the view with the opacity given when the layer was
started.
* Layers can be nested arbitrarily and will be blended onto each
other in order. There can also be any arbitrary interleaving of
layer begin/end and drawing operations.
* Internally, drawing commands are redirected into a BPicture between
BeginLayer and EndLayer (but client code need not know or care
about this). Client code can also start/end other BPictures while
inside a layer.
* Uses the PictureBoundingBoxPlayer to determine the size of the
layer bitmap before allocating and drawing into it, so it does not
allocate more memory than necessary and -- more importantly -- it
will not alpha-composite more pixels than necessary.
* Drawing mode is always set to B_OP_ALPHA, blend mode to
(B_PIXEL_ALPHA, B_ALPHA_COMPOSITE) while inside layers. This is
necessary for (a) correct compositing output and (b) for
redirection of drawing into the intermediate bitmap, which uses the
renderer_region offset (in B_OP_COPY, the Painter does not use the
AGG renderer methods, it directly accesses the pixel data. This
would access out-of-bounds without the offset, so B_OP_COPY cannot
be allowed.)
To ensure these modes aren't changed, BView::SetDrawingMode()
and BView::SetBlendingMode() are ignored while inside a layer.
* The main motivation behind this new API is WebKit, which internally
expects such a layers functionality to be present. A performant and
reusable implementation of this functionality can only be done
server-side in app_server.
2015-07-25 16:44:23 +03:00
|
|
|
const static uint32 kOpsTableSize = 50;
|
2007-08-16 13:14:03 +04:00
|
|
|
|
|
|
|
|
2003-03-19 01:00:38 +03:00
|
|
|
#endif
|
|
|
|
|