* On a more deep analysis i figured out that other than being
a bad pratice quitting the BLooper explicitly was cause of
more problems, such as the regression after my patches which
led to have a zombie media_addon_server after media services
restart. This should hopefully place a final stone on the
BMediaRoster::Quit() issue as with the previous commit
i've removed every attempt to do this in the system. For
any application developer listening, this means that quitting
the BMediaRoster is highly discouraged, don't do it.
TeamDebugger:
- When we're notified that the target team has called exec(), take all
necessary steps to prepare. These include saving settings for the old
team, clearing out breakpoints, resetting signal dispositions, and
removing the old team's image list. Also set a flag indicating an exec
is pending for later processing.
- On image load notification, if the pending flag is set, check if the
new image is the app image, and if so update the team's name to
the new image, load that respective team's settings, and set a
temporary breakpoint in its main() so the user has a chance to
perform any additional desired actions before starting execution
in the new executable.
- When asked to load settings, post a message and do so in the window's
message loop. This avoids a lock order reversal when asked to do so
later as a result of exec() changing the target image out.
Team:
- Add listener hook and event type for rename events. These occur on exec()
since at this point we're running a different executable.
TeamWindow:
- Factor out code for generating window title into a helper, and use from both
window initialization and newly implemented rename listener hook.
- SetBreakpointAndRun() now takes an additional argument indicating if this
invocation is for a fresh run of a team or not, as continuing the thread's
execution needs to be done differently in the two cases.
ClearImages():
- Removes all existing images from the team's image list and notifies callers.
To be used in case of an exec().
ClearSignalDispositionMappings():
- Remove any existing custom signal disposition mappings. This is intended to
be used in preparation for loading new ones from a team after exec() is
called.
Refactor BResources::WriteResource to return early in case of errors,
instead of checking permanently if (error == B_OK). Makes the code more
readable and removes some useless checks.
The aspect ratio of the preview was wrong for two reasons:
* The height of the preview was always assumed to be 150 while it actually
depends on the layout.
* The size was then only set using SetExplicitMinSize(), which is not
sufficient to actually change the size to the desired value.
Fixes #11644.
Signed-off-by: Augustin Cavalier <waddlesplash@gmail.com>
Even though C++ should increment the enum for us, since these IDs
are set and used by things outside of this file, we should hard-code
the numbers.
No functional change (or if there is, it means there's a compiler bug
somewhere.)
* 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.
* agg::renderer_region gets an extra feature which allows to
optionally shift the coordinates by a specified offset.
* This allows to shift coordinates at the lowest level, even below
the transformations done by BAffineTransform (which happen in the
painter, right before rasterization).
Needed for layers support: shifts the origin of the layer bitmaps
to their position in the view while keeping all transformations
(BView origin/scale transforms as well as BAffineTransforms)
intact. The offset for the layer bitmaps within their parent view
is determined by the bounding box and is then fixed, it must not
be altered while the layer's BPicture is played into the bitmap.
If this offset were added to the BView origin or as translation in
the BAffineTransform, it would be further transformed by the BView
scale or the other affine transform parameters. Thus, we need
another low-level offset mechanism which is even below
BAffineTransform's transformations.
* Allow shifting the offset of alpha masks without changing the size.
Ideally, we only need to reattach the buffer in the shifted
position, saving the work of reallocating and redrawing the mask
picture. Needed for layers support.
* Another constructor for AlphaMask allows creating a mask with no
picture, it will simply be a single uniform alpha value over the
whole mask.
* No need to even allocate a buffer in this case, we can just use
the feature of clipped_alpha_mask to define an opacity for outside
the mask, and set the buffer size to zero.
* New method DrawState::SetTransformEnabled allows to temporarily
disable all BAffineTransforms in the state stack (up to 'this').
Later, the same method can be used to reenable the transforms.
Needed for layers support: when drawing the finished layer bitmap
onto the view, the affine transforms must not be applied again --
they have already been applied while drawing the bitmap's contents.
* Add PictureBoundingBoxPlayer, a new player for BPictures. Instead
of drawing the picture, it determines an approximate bounding box
of its contained drawing operations.
* To increase performance, the resulting bounding box is an
approximation: it guarantees to always enclose all pixels of the
picture, however not necessarily tightly.
* PictureBoundingBoxPlayer::Play() gets a DrawState which is the
initial state used when playing the picture. The player does not
modify this state (it uses a copy internally), so the method is
idempotent.
* New method DrawState::Squash() uses the combined scale, origin and
transform as the state's own scale, origin, transform.
This can be used when making copies of DrawStates which have
previous states below them in the state stack. The top of stack
DrawState can be copied, squashed and then used just like the
original one with the whole stack below it (except of course
when trying to pop off any earlier state).
* app_server currently does not have any real unit tests, making
changes more difficult and riskier. A new directory unit_tests with
a test add-on is added in app_server's tetsts directory to hold
future unit tests.
* Add test for SimpleTransform class
* Move coordinate conversion into a new class SimpleTransform. It
supports scaling and translation which is sufficient for conversion
between screen, local and pen (drawing) coordinates.
* Because all the overloaded methods for converting
BPoint/BRect/BRegion/etc are now within the single SimpleTransform
class, the interfaces of Canvas, View, DrawState, etc. are slimmed
down. These classes have too many responsibilities, so some will be
factored out into separate classes, this being the first.
* Better reflects the purpose of the class: an interface for things
in which we can draw (e.g. a View)
* Accordingly rename OffscreenContext to OffscreenCanvas
* Add support for macports lib and headers dirs.
* Link libs change for Mac OS X for tool build.
Signed-off-by: Augustin Cavalier <waddlesplash@gmail.com>
VariablesView:
- Factor out setting up a variable edit request into a helper function.
Adjust table node invocation accordingly.
- Add Edit variable context menu item if appropriate.