551438b9be
* 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. |
||
---|---|---|
.. | ||
add-ons | ||
app | ||
arch | ||
be_apps | ||
bluetooth | ||
device | ||
drivers | ||
game | ||
interface | ||
kernel | ||
locale | ||
media | ||
midi | ||
midi2 | ||
net | ||
package | ||
storage | ||
support | ||
translation | ||
AppKit.h | ||
Be.h | ||
BeBuild.h | ||
DeviceKit.h | ||
GameKit.h | ||
InterfaceKit.h | ||
KernelKit.h | ||
LocaleKit.h | ||
MailKit.h | ||
MediaKit.h | ||
MidiKit.h | ||
NetKit.h | ||
NetworkKit.h | ||
StorageKit.h | ||
SupportKit.h | ||
TranslationKit.h |