History log of /haiku/src/servers/app/ServerPicture.cpp
Revision Date Author Comments
# 85b82f85 19-Jul-2022 Dale Cieslak <dcieslak@yahoo.com>

BFont: allow loading of user fonts from disk or memory

This patch adds an API call to BFont, called LoadFont, that
takes a string path to a font file. The user fonts are managed
via a new class called AppFontManager that inherits from the base
class FontManagerBase but adds the methods to add and remove user
fonts from disk or memory. There is also a new method called UnloadFont
to remove a user font, but on exit of an app all user fonts should be
automatically cleaned up.

Global/system fonts are managed by the GlobalFontManager, which is
a new class that also inherits from the base class FontManagerBase,
replacing the old "FontManager" class.

A maximum of 128 user fonts may be loaded, and memory fonts
may not exceed 20MB.

There's also an overloaded version of LoadFont that accepts
an area_id and loads the font from memory. A size and offset may
optionally be provided to allow for an area that contains more
than just a font.

Change-Id: I6add42bdf0c0cefc0e2e2a4984fd848c3e7269e5
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4790
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>
Reviewed-by: Adrien Destugues <pulkomandy@pulkomandy.tk>


# 779ab335 09-Dec-2020 X512 <danger_mail@list.ru>

use .IsSet() instead if .Get() != NULL

Change-Id: Ia2b7a719fd398e78cc3b11d4f7b02cb81179f65f
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3488
Reviewed-by: Jérôme Duval <jerome.duval@gmail.com>


# 60d30785 27-Aug-2020 X512 <danger_mail@list.ru>

app_server memory management fixes: use BReference

Use BReference for more automated reference counting in app_server,
fixing some use-after-free and other problems.

Extracted from https://review.haiku-os.org/c/haiku/+/2695

Change-Id: I141bb248229405896b29feff3338447f7257b0b4
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3175
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>


# 4399ec51 10-Jun-2020 X512 <danger_mail@list.ru>

BPicture: add fill rule support

Change-Id: I068e1c2e8659f7b90c6d7c7331a8bb25ae343fe9
Reviewed-on: https://review.haiku-os.org/c/haiku/+/2922
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>


# 90ab1a44 27-May-2020 X512 <danger_mail@list.ru>

BPicture: add gradient support

Fixes #9680.

Change-Id: I0013326559cc40ff26cf7b44794c0b32aea832ba
Reviewed-on: https://review.haiku-os.org/c/haiku/+/2829
Reviewed-by: Stephan Aßmus <superstippi@gmx.de>


# 2e499128 07-Jun-2020 X512 <danger_mail@list.ru>

app_server: fix transformations in BPicture

Fixes #16122, #16147.

Change-Id: Iee7aa8a2325d34a526578a58507ea3690459c8d7
Reviewed-on: https://review.haiku-os.org/c/haiku/+/2898
Reviewed-by: waddlesplash <waddlesplash@gmail.com>


# 2d69e313 09-Jun-2020 waddlesplash <waddlesplash@gmail.com>

Revert "app_server: fix transformations in BPicture"

This reverts commit b8e5671d5318e59ad4e36f047940521d18d1f5ed.

Reason for revert: Broke all builds.

Change-Id: Ie7c5b4a3c877894a1dc49a9de7a19f79e7eb2ab7
Reviewed-on: https://review.haiku-os.org/c/haiku/+/2897
Reviewed-by: waddlesplash <waddlesplash@gmail.com>


# b8e5671d 07-Jun-2020 X512 <danger_mail@list.ru>

app_server: fix transformations in BPicture

Fixes #16122, #16147.

Change-Id: I16a38919d25836546389aff6093415eda781668f
Reviewed-on: https://review.haiku-os.org/c/haiku/+/2889
Reviewed-by: Stephan Aßmus <superstippi@gmx.de>


# 69c8afc9 08-Jun-2020 X512 <danger_mail@list.ru>

ServerPicture: add missing header

Fixes build.

Change-Id: I4b38483f77fdce9f183db5b1f63c3b138ab5c748
Reviewed-on: https://review.haiku-os.org/c/haiku/+/2895
Reviewed-by: waddlesplash <waddlesplash@gmail.com>


# 9692db62 08-Jun-2020 X512 <danger_mail@list.ru>

app_server: use BStackOrHeapArray

Change-Id: Ieb335d51923bf28b0e4f830535f74dede42933a3
Reviewed-on: https://review.haiku-os.org/c/haiku/+/2893
Reviewed-by: waddlesplash <waddlesplash@gmail.com>


# 3ca2e85b 24-May-2019 Augustin Cavalier <waddlesplash@gmail.com>

Interface: Add casts to memcpy/memset invocations on BPoint & BRect.

Their copy constructors are exactly what GCC would generate,
but we can't remove them because doing so would make them
trivially copyable, and so they would be passed in registers
on x86_64, an ABI breakage.

So instead we have to add explicit casts to void* here.


# b3470a55 30-Aug-2018 JackBurton79 <stefano.ceccherini@gmail.com>

ServerPicture:SyncState(): sync with Canvas instead of View
When the canvas api was introduced, ServerPicture was changed to work with Canvas,but this was not updated.

Change-Id: I37c68111f4a60408768656260bfc73a27f1f65f4
Reviewed-on: https://review.haiku-os.org/c/501
Reviewed-by: Stephan Aßmus <superstippi@gmx.de>


# 954a0a0c 02-Jan-2019 Stephan Aßmus <superstippi@gmx.de>

Fix some cases of updating draw state while recording a BPicture

* Also implemented recording DrawString(string, length,
BPoint[] locations), which was previously not recorded at all.
* Also implemented playing back recently added drawing commands
in PicturePlayer.cpp. I don't quite understand what this is
actually used for, but it seemed it was forgotten. I just followed
the pattern already established in the code.
* The other important bit in this change is to update the pen
location when it is needed while recording a BPicture. Often
the BView will use PenLocation() in order to transmit drawing
commands to the app_server which use absolute coordinates only.
This isn't actually so nice, since it means the client has to
wait for the server to transmit the current pen location. If there
were dedicated link-commands for pen-relative drawing commands,
the client could just keep sending without waiting for the server.
In any case, the app_server needs to update the pen location in
the current DrawState and even the DrawingEngine even while
recording a picture, because some next command may need up-2-date
state information, such as the font state and the pen location.
* I have not yet tried to find /all/ instances where the DrawState
needs to be updated while recording. This change should repair
/all/ font state changes, all versions of drawing a string, and
all versions of StrokeLine().

Change-Id: Ia0f23e7b1cd058f70f76a5849acb2d02e0f0da09
Reviewed-on: https://review.haiku-os.org/c/817
Reviewed-by: Stephan Aßmus <superstippi@gmx.de>


# 66f19f72 11-Sep-2018 JackBurton79 <stefano.ceccherini@gmail.com>

Fix ClipToPicture() inside a BPicture
Mimic what is't done in clip_to_shape: call SetCanvasGeometry() and ResyncDrawState().

Change-Id: Ibbd77ec8cf90952d94ee35871736e145102a763e


# da51ebe0 10-Sep-2018 JackBurton79 <stefano.ceccherini@gmail.com>

BPicture: uncomment (and fix build) of the clip_to_picture method.
Does not seem to work, though.

Change-Id: I309d8de79a71ab8e08f4ac2f2566080b67b84800


# b08627f3 04-May-2018 Murai Takashi <tmurai01@gmail.com>

Fix catching polymorphic type by value

Replace catching polymorphic type std::bad_alloc 'by value'
with 'by reference'.
Pointed by gcc8


# e718dc91 12-Nov-2015 Julian Harnath <julian.harnath@rwth-aachen.de>

app_server: Clip alpha masks to canvas size

* Making the alpha masks independent of view size is a good thing,
however it turns out that I was too optimistic about the
consequences: webkit sometimes sets masks for the whole page, not
just the currently visible area. E.g. on Github diff views, it
was seen to set a clipping path which is about 1,000 x 10,000
pixels in size. Generating these huge masks eats up lots of memory
and time.

* We now clip the alpha masks to the current view size. This
introduces a dependency between mask and view again, however a
weaker one than it used to be before the mask rework. When the
view is enlarged, and the alpha mask was previously clipped during
rendering, we regenerate it at the new size. When the view is
shrunk however, we don't do anything and just keep the
now larger than necessary mask around (so we don't have to
regenerate again when the view is subsequently enlarged again --
except if it then becomes even larger than it used to be).
Changing the view origin is unaffected and still doesn't cause a
regenerate.


# 25dbf74b 10-Nov-2015 Julian Harnath <julian.harnath@rwth-aachen.de>

BView: add methods for affine translation/scaling/rotation

* BView::TranslateBy(), BView::ScaleBy() and BView::RotateBy()
allow to conveniently modify the current affine transformation.
This makes it unnecessary to first read the current transform,
modify it, and then set it again.
Uses the new Pre...() methods of BAffineTransform.

* Also, remove setting the transform "through" to the BView even
while recording a BPicture, as this now results in transforms
being applied more than once.


# 4bd6f322 09-Nov-2015 Julian Harnath <julian.harnath@rwth-aachen.de>

app_server/Interface Kit: add new clipping API

* Add new clipping API for rectangles (ClipToRect, ClipToInverseRect)
and shapes (ClipToShape, ClipToInverseShape)

* Works with affine transforms and automatically switches from fast
region-based clipping to alpha-mask based clipping as necessary.

* Always self-intersecting, i.e. no state push required to further
narrow down the clipping region. All of the 4 new methods can be
mixed in any order.


# 1cd452ea 22-Aug-2015 Julian Harnath <julian.harnath@rwth-aachen.de>

app_server: Drawing mode fixups

* TODO: squash commit before merge into master


# d727d074 31-Jul-2015 Julian Harnath <julian.harnath@rwth-aachen.de>

app_server: fix clearing user clipping from BPicture

* Clipping was set to an empty region instead of being cleared
when inside a BPicture


# 551438b9 25-Jul-2015 Julian Harnath <julian.harnath@rwth-aachen.de>

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.


# 65a54d28 21-Jul-2015 Julian Harnath <julian.harnath@rwth-aachen.de>

app_server: implement setting BAffineTransforms in BPicture

* Add a simple callback for the picture command


# 8511f6ac 08-Jul-2015 Julian Harnath <julian.harnath@rwth-aachen.de>

app_server: fix ServerPicture::SyncState pen size

* Should use the unscaled pen size here because we also write down
the current scale, and we don't want to scale the pen twice.


# 6f2a446e 06-Apr-2015 Julian Harnath <julian.harnath@rwth-aachen.de>

app_server: extract coordinate conversion 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.


# ab1bd2fd 04-Jan-2015 Julian Harnath <julian.harnath@rwth-aachen.de>

app_server: rename DrawingContext to Canvas

* 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


# ce27f961 05-Sep-2015 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Implement ClipToPicture inside a BPicture. Not working yet.
BView::ClipToPicture doesn't work anymore, when nested inside a BPicture,
This happened when its implementation was moved server-side.


# 4176076b 05-Sep-2015 Michael Lotz <mmlr@mlotz.ch>

app_server: Port ServerPicture to the new PicturePlayer API.

This allows for bounds checks on strings and bitmap data to avoid
crashing due to corrupted user data. It also avoids copying the data
where possible.


# 99d23e51 24-Feb-2014 Stephan Aßmus <superstippi@gmx.de>

app_server: Apply scale to round corner radius.


# ce2c5615 01-Feb-2014 Stephan Aßmus <superstippi@gmx.de>

ServerPicture: Set correct pen location after DrawString()


# 77bf4d8d 21-Jan-2014 Adrien Destugues <pulkomandy@pulkomandy.tk>

Style fixes.


# e1a30115 21-Jan-2014 Adrien Destugues <pulkomandy@pulkomandy.tk>

Introduce DrawingContext View superclass

In order to properly implement ClipToPicture in BView, we need to render
a Picture to a Bitmap. This is currently done client-side, but the
overhead for this (creating a BBitmap that accepts views, including a
window thread, adding a view to it, and rendering the picture to the
view, then sending the result to app_server) isn't acceptable. Moreover,
the bitmap drawn this way is clipped to the view size, and the clipping
won't work when the view is scaled or translated. So, we need to move
the Bitmap creation server-side.

However, app_server currently have no means of doing this. Factor out the
relevant parts of View: a DrawingState stack with PushState/PopState, a
DrawingEngine, and a ConvertToScreen transformation. Another implementation
of the DrawingContext will allow us to also draw a picture directly using
a Painter and low-level pixel buffer, in a format suitable for use as an
AGG alpha mask.


# f4f30311 24-Jul-2011 Clemens Zeidler <clemens.zeidler@googlemail.com>

Cleanup app server directory a bit by creating a font and a decorator sub folder.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42483 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 915a7b8c 19-Jan-2011 Oliver Tappe <zooey@hirschkaefer.de>

Make BObjectList<> publically available:
* cleaned up ObjectList.h
* switched several uses of new() to new(std::nothrow)
* moved ugly AsBList() hack into BObjectList<>::Private class and
adjusted all callers accordingly


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40252 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 756b64fd 16-Dec-2010 Ingo Weinhold <ingo_weinhold@gmx.de>

* Removed the obsolescent [B]Reference[able] API and replaced the remaining
uses. Fixes the gcc 2 acpi build.
* Renamed WeakReferenceable::{Add,Remove}Reference() to
{Acquire,Release}Reference() for consistency.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39871 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 4177bfe6 31-Aug-2010 Stephan Aßmus <superstippi@gmx.de>

* AppendPicture() and RemovePicture() are weird, since
the ServerPicture calls those itself from SetOwner().
Since there are asserts in ServerPicture about fOwner,
it was easiest to fix the code by using *only* SetOwner()
from within ServerApp to add or remove pictures.
* SetOwner() was broken, since it called a method which
potentially removed the last reference and then still
accessed memory of the now free'd ServerPicture instance.
The easiest fix is to just increase the reference count
temporarily.
* SetOwner() wrongly returned false when the new owner was NULL.
* NestPicture() should simply add it's own reference. There
are two places where it is called, and only one of them
added the extra reference. The other one only acquired the
implicit reference that the ServerApp owns, but pictures
that remove nested children remove a reference from them.
This could leave stale pointers around of course.
* Added more asserts about fOwner.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38484 a95241bf-73f2-0310-859d-f6bbb57e9c96


# ab7c7773 05-Aug-2010 Michael Pfeiffer <michael.w.pfeiffer@gmail.com>

* With blessing from Stefano applied my alternative patch
from ticket #6415: the drawing offset of a BPicture
becomes the new drawing origin.
* This should also close ticket #6008.
* Also the Preview printer does the clipping now correctly
outside the "printable rectangle".


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37939 a95241bf-73f2-0310-859d-f6bbb57e9c96


# a92ef26c 03-Aug-2010 Clemens Zeidler <clemens.zeidler@googlemail.com>

Fix coding style.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37886 a95241bf-73f2-0310-859d-f6bbb57e9c96


# bd06a41c 02-Aug-2010 Clemens Zeidler <clemens.zeidler@googlemail.com>

Cleanup of the some header includes.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37856 a95241bf-73f2-0310-859d-f6bbb57e9c96


# bb69cd65 02-Aug-2010 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Basically revert r37824 (minus restoring the origin), since it causes other
problems (#6415 for example).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37833 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 568bdbf7 30-Jul-2010 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Convert the BPoint to screen coordinates respecting the scale
(using ConvertToScreenForDrawing()) before drawing a BPicture, both directly
and inside another BPicture. Restore the drawing origin when drawing a nested
BPicture (like we already do when drawing it directly).
Fixes #6008.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37824 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 678ee16d 19-Mar-2010 Stephan Aßmus <superstippi@gmx.de>

Fixed double conversion from view to screen space I introduced with the previous
commit. PictureTest at least works again.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35910 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 76ab3f88 18-Mar-2010 Stephan Aßmus <superstippi@gmx.de>

Basically, this changeset implements BShape::ArcTo(). In more detail:
* Added BShape::ArcTo() and BShapeIterator::IterateArcTo(), using a previously
unused virtual slot. (Added the symbols for binary compatibility for GCC2
and GCC4.)
* Added operator=(), operator==() and operator!=() to BShape.
* Added BShape::BezierTo() version taking three points, which is sometimes
more convenient.
* Added the four new shape data ops OP_LARGE_ARC_TO_CW, OP_LARGE_ARC_TO_CCW,
OP_SMALL_ARC_TO_CW and OP_SMALL_ARC_TO_CCW. For a single arc, provided the
radius is large enough, there are four possibilities to draw the arc, these
are controlled by the two boolean flags to ArcTo() and mapped to the new
commands accordingly.
* Some style cleanup in Shape.cpp (sorry for mixing it up, but it gets
worse below...)
* Added ShapeTest to src/tests/servers/app.
* Changed the way BShapes are transformed from view to screen space in the
app_server. For arcs, it would be nontrivial to apply a proper transformation,
it's much easier to let AGG take care of it. This affects ServerPicture as
well.
* Wrapped iterating the BShape into try/catch blocks in ShapeIterator. But
I really don't understand the purpose of the class in the first place.
Maybe it can now be dropped, since coordinates don't have to be transformed
in place anymore.
* Refactored copy&paste shape iteration code in Painter. The transformation
to screen space happens there.
* Since RemoteDrawingEngine needed to be adopted anyway, I also updated
it for the new DrawString() with offsets version. But the client still needs
to be adapted.
* Style cleanup in Painter.h


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35905 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 87e7b978 15-Feb-2010 Axel Dörfler <axeld@pinc-software.de>

* Fixed race conditions in the server's bitmap/picture handling: the objects
are now removed from the maps as soon as the client deletes them. This also
makes the "client reference" mechanism superfluous I introduced earlier.
* ServerApp::SetCurrentCursor() must always call Desktop::SetCursor(), since it
is also called whenever the current application changes. This fixes the cursor
almost never changing.
* Renamed ServerPicture::Usurp()/StepDown() to PushPicture(), and PopPicture().
* Also, they now acquire a reference to the picture in question (ie. the picture
you get from PopPicture() also owns a reference you need to free).
* ServerApp::CreatePicture() may fail, too. This case is now handled in the code
that calls it.
* Previously, the ServerWindow tried to process up to 70 messages in one go.
That obviously caused bug #4709. Now, we have the additional requirement to
not hold the desktop lock for longer than 25 ms. I haven't tested it with
Kaleidoscope yet, though.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35472 a95241bf-73f2-0310-859d-f6bbb57e9c96


# afad65b2 19-Nov-2009 Axel Dörfler <axeld@pinc-software.de>

* Bitmaps and pictures now maintain their client reference independently;
clients can no longer release more references than they own.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34130 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 85a7877f 04-Nov-2009 Axel Dörfler <axeld@pinc-software.de>

* ServerApp's bitmap and picture handling was completely broken, as it ignored
concurrency as well as reference counting, causing occasional crashes and
memory corruption.
* ServerPicture now subclasses Referenceable, and will notify its owner when
it's going to be deleted. This might bring some regressions, although I
couldn't spot anything wrong yet.
* ServerBitmap will now also notify its owner when it's going to be deleted as
well.
* Switched from the former picture/bitmap lists to a std::map. This also solves
the issue of not checking whether or not the bitmap/picture actually belongs
to the ServerApp (before, all apps could access and delete all
pictures/bitmaps)
* Introduced a new fMapLocker that guards the new maps.
* ServerWindow now uses GetBitmap()/GetPicture(), and gives up its reference
after use.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33876 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 961399db 04-Nov-2009 Axel Dörfler <axeld@pinc-software.de>

* Coding style cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33871 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 3bd49667 03-Aug-2009 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Now also hide/show the cursor when BDirectWindow::SetFullScreen() is called.
in the handler, instead of checking if the window is an offscreen one,
check if fDirectWindowData is NULL, and do nothing if it's the case.
When setting a clip region in ServerPicture, also invalidate the clipping.
To do so, I added a public ServerWindoow::UpdateCurrentDrawingRegion()
which just calls the private function. Please review and see if it can
be done better. This fixes the problem with BPicture and the
ConstrainClippingRegion() op (see ticket #1389)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32087 a95241bf-73f2-0310-859d-f6bbb57e9c96


# e6a52fe4 22-Jul-2009 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Setting the font family/style in a BPicture works now. Added a comment
to ServerBitmap


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31691 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 4bb65f96 20-Jul-2009 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Fixed some coding style violations


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31657 a95241bf-73f2-0310-859d-f6bbb57e9c96


# bd09485c 19-Jul-2009 Stefano Ceccherini <stefano.ceccherini@gmail.com>

try to handle the SetFontFamily case in ServerPicture, although it doesn't work. Maybe I'm not doing it correctly

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31638 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 4fba3522 11-Apr-2009 Ingo Weinhold <ingo_weinhold@gmx.de>

* Removed src/kits/tracker/OpenHashTable.h. The shared version in
headers/private/shared is newer, though with small interface changes.
* Removed the unnecessary Debug.h include in
headers/private/shared/ObjectList.h.
* Adjusted sources using these headers, mostly by adding missing includes.
* Lots of automatic whitespace cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30123 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 632f1504 17-Sep-2008 Stefano Ceccherini <stefano.ceccherini@gmail.com>

assign a token to the ServerPicture before anything else. If something fails to initialize, we can still search the picture via token

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27593 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 246a9087 13-Sep-2008 Michael Lotz <mmlr@mlotz.ch>

* CID 1012: Fix leaking the OffsetFile in case it fails to initialize.
* Use std::nothrow (the rest of the file already used it).
* We also have to keep the source file around and properly dispose it, as
OffsetFile doesn't take ownership of it.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27486 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 52b87746 01-Sep-2008 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Apply the same logic of r24682 to the drawing of BPictures inside BPictures. Fixes part of bug #1389 (drawing pictures at an offset). Thanks to Karsten for his observations!

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27267 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 4e61552e 27-Aug-2008 Karsten Heimrich <host.haiku@gmx.de>

* first implementation of passing data via area to app_server
this makes printing of large images work, fixes task #1067



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27214 a95241bf-73f2-0310-859d-f6bbb57e9c96


# c63991d1 25-Aug-2008 Stefano Ceccherini <stefano.ceccherini@gmail.com>

fixed warnings

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27198 a95241bf-73f2-0310-859d-f6bbb57e9c96


# d02fd30b 25-Aug-2008 Stefano Ceccherini <stefano.ceccherini@gmail.com>

We were leaking memory every time a BPicture was drawn. Also check if the allocations succeeded. Style cleanup.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27197 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 162a7f5f 28-Jul-2008 Stephan Aßmus <superstippi@gmx.de>

* Implemented new BView drawing functions DrawBitmap[Async](
const BBitmap* bitmap, BRect bitmapRect, BRect viewRect, uint32 options).
Only option so far is B_FILTER_BITMAP_BILINEAR.
* BView::DrawBitmap[Async](const BBitmap* bitmap, BRect viewRect) was accessing
the bitmap pointer without checking it. Would therefore crash when passing
NULL, unlike the other methods.
* The BPicture code already reserved room for the BBitmap flags, but did not
store the actual flags and neiter use them for anything. Since the bitmap
data is stored anyways, the bitmap creation flags do not matter. So I reused
this for the new bitmap drawing options.
* Rewrote Bitmap.h and removed the B_BITMAP_SCALE_BILINEAR flag again.
* Tried to optimize Painter::_DrawBitmapBilinearCopy32() a little by giving
the compiler better hints. There seems to be a marginal, possibly imagined
speed increase < 0.05 ms. ;-)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26665 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 953d895e 07-Mar-2008 Axel Dörfler <axeld@pinc-software.de>

* Got rid of the "Layer" part of WindowLayer, ViewLayer, WorkspacesLayer
(now WorkspacesView), OffscreenWindowLayer.
* Renamed ServerScreen.cpp/h to Screen.cpp/h (the class was already called
Screen).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24303 a95241bf-73f2-0310-859d-f6bbb57e9c96


# ebdedf9b 16-Jan-2008 Stefano Ceccherini <stefano.ceccherini@gmail.com>

disallow importing/exporting big pictures, since the Link* api doesn't allow sending more than 64 kb through it. At least printing via ShowImage doesn't hang the app anymore

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23554 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 48882cec 08-Dec-2007 Stephan Aßmus <superstippi@gmx.de>

* lock pattern drawing to the true view origin, independend of the views
position on screen (fixes drawing glitches in patterns when the view
was moved on screen (for example because the parent window got moved))


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23089 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 945d8d11 10-Sep-2007 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Sync the drawing engine state in set_scale. The pen size, for example,
needs to be recalculated when the scale changes.
Also call ResyncDrawingState() in exit_state_change(). This fixes the
pen size test in FlattenTestPicture.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22215 a95241bf-73f2-0310-859d-f6bbb57e9c96


# b1af0a7a 10-Sep-2007 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Setting the font shear in a BPicture didn't work, because the value was
treated as uint32 in some places, when it's a float.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22214 a95241bf-73f2-0310-859d-f6bbb57e9c96


# af02a9a7 10-Sep-2007 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Use DrawState::PenSize() to set the drawing engine pen size, since it
returns the scaled value.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22213 a95241bf-73f2-0310-859d-f6bbb57e9c96


# f7e1df75 16-Aug-2007 Stephan Aßmus <superstippi@gmx.de>

* get rid of RGBColor usage where it is not needed, this simplified many things,
possibly making them a little faster too
* mess with decorator button size calculation to make the whole layout scale
more agreeable with the font size (no more fixed offsets/insets), but it
is work in progress
* DefaultDecorator no longer allocated the border color array, it is part of
the object now
* small memory footprint optimizations in ViewLayer, Decorator and WindowLayer


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22003 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 422fadc8 16-Aug-2007 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Moved the dummy table local to the PicturePlayer::Play() function since,
as Marcus pointed out, having it outside wasn't thread safe. Moved
PicturePlayer into the BPrivate namespace.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21982 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 46b4e489 16-Aug-2007 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Added some debug output to PicturePlayer. Since checking the table size for every op is very slow, now we do that only at the beginning, and use a custom op table if needed. The best case (which is the one used when drawing a picture with BView::DrawPicture()) is very fast since it only requires one check.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21972 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 3b1dcc1e 14-Aug-2007 Ithamar R. Adema <ithamar.adema@team-embedded.nl>

Fix GCC4 compilation issue.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21950 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 253d42a6 14-Aug-2007 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Implemented SetClipping op, but it's not working yet (looks like it's
never written into the data stream)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21947 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 796e4e45 13-Aug-2007 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Implement calling the exit_xxx hooks. Thanks to Marc Flerackers for the
help.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21943 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 9cc1cb3c 14-Aug-2007 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Disabled writing the font shear, since this results in missing font in
Chart's BPictureButton. Needs some investigation.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21942 a95241bf-73f2-0310-859d-f6bbb57e9c96


# feb557a6 14-Aug-2007 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Implemented WriteSetFontFamily() and WriteSetFontStyle(). Only the
server side functions are missing.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21941 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 2f99607b 14-Aug-2007 Stefano Ceccherini <stefano.ceccherini@gmail.com>

My last commit broke setting fonts in BPictures. Added a comment in
PicturePlayer to explain what we need to do. Don't write the
B_PIC_ENTER_STATE_CHANGE and B_PIC_ENTER_FONT_STATE ops until we fix the
problem (we don't care about them in our server side
implementation anyway). Font changes and state syncing work again.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21940 a95241bf-73f2-0310-859d-f6bbb57e9c96


# c00e6e3f 14-Aug-2007 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Implement more bpicture font methods, now PicturePlayer checks the size
of the function table, so if someone passes a smaller table, we avoid

calling invalid pointers.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21939 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 8e503a70 14-Aug-2007 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Also set the font properties for BPictures. Some of them, at least.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21938 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 37033892 14-Aug-2007 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Implemented SetPattern op. Reduced the buffer size to 4096 again.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21937 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 38daa5cd 13-Aug-2007 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Also upload/download subpictures


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21926 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 690c7474 13-Aug-2007 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Implemented BPicture's SetPenLocation() op, also nested
AppendToPicture() (but still doesn't work :( ). Moved some functions
around in PictureDataWriter.h.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21925 a95241bf-73f2-0310-859d-f6bbb57e9c96


# b1b69140 13-Aug-2007 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Don't delete the subpictures in the ServerPicture destructor. They are
kept in a list by ServerApp, and deleted by its destructor.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21924 a95241bf-73f2-0310-859d-f6bbb57e9c96


# edac8f06 13-Aug-2007 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Implemented drawing of pictures inside pictures. Thanks to Marc
Flerackers for clarifying some things.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21920 a95241bf-73f2-0310-859d-f6bbb57e9c96


# ac5fdd8a 13-Aug-2007 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Fixed drawing of arc and ellipse in a BPicture.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21919 a95241bf-73f2-0310-859d-f6bbb57e9c96


# ed5de868 13-Aug-2007 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Implemented the following BPicture ops: fill region, stroke/fill arc,
stroke/fill polygon, stroke/fill bezier. some work towards drawing of
nested pictures.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21918 a95241bf-73f2-0310-859d-f6bbb57e9c96


# bbc42477 08-Aug-2007 Stephan Aßmus <superstippi@gmx.de>

* convert shape coordinates to screen at the time of playing the picture
(fixes ticket #1367, stefano I thought you knew that I meant this in an
earlier mail)
* move_pen_by() looked wrong in ServerPicture, have not tested though
* make sure the pen location is adjusted after stroke_line() and draw_string()
in ServerPicture
* set_pen_location() does not need to update the Painter drawing state
* ServerWindow AS_LAYER_SET_PEN_SIZE needs to set the resulting pen size of
the drawing state stack, not the one set on the current state
* ServerWindow AS_LAYER_GET_PEN_SIZE needs to return the current state's
size, not the result of the stack
* small cleanups


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21855 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 38287e02 22-Jul-2007 Stephan Aßmus <superstippi@gmx.de>

* completed my changes to DrawState handling, the current DrawingState
of the active ViewLayer is now always mirrored in the Painter instance
of a ServerWindow, so that it doesn't need to be synced on every drawing
command, this was previously incomplete for font handling
* removed the DrawState parameter from all the DrawingEngine functions
* adjusted ServerWindow and ServerPicture accordingly
* made sure that string related functions used by non-drawing related
parts (ServerApp, Decorator) don't interfere with the current drawing
state
* moved AS_SYNC handling from _DispatchViewMessage to _DispatchMessage,
it is actually a window message and doesn't require fCurrentLayer to
be valid
* fixed bug #1300, fCurrentLayer was not updated when a ViewLayer was
deleted by client request which happened to be fCurrentLayer (I am now
handling it so that the parent becomes the current layer, could be
wrong)
* AGGTextRenderer is no longer using it's own scanline, which should save
a few bytes RAM, the Painter already had such an object
* StringWidth() in AGGTextRenderer is now taking the escapement_delta into
account
* Painter::StrokeLine() doesn't need to check the clipping as much, since
that is already done in DrawingEngine
* if a ServerWindow message is not handled because fCurrentLayer is NULL,
a reply is sent in case the messages needs it (client window could
freeze otherwise, waiting for the reply for ever)
* removed unused AS_SET_FONT and AS_SET_FONT_SIZE
* added automatic RGBColor -> rgb_color conversion to RGBColor.h
* minor cleanup for 80 char/line limit



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21685 a95241bf-73f2-0310-859d-f6bbb57e9c96


# ff32e515 03-May-2007 Stefano Ceccherini <stefano.ceccherini@gmail.com>

ServerPicture now uses a BPositionIO object as internal storage instead
of BMallocIO. Added an additional constructor to handle a file. This is
in preparation of implementing BView::SetDiskMode().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20996 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 19ebf74d 17-Apr-2007 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Call RemoveToken() in the destructor


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20736 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 0690e6bc 01-Mar-2007 Marcus Overhagen <marcusoverhagen@gmail.com>

added fast path to BPicture polygon drawing


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20296 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 0b0ecfab 01-Mar-2007 Marcus Overhagen <marcusoverhagen@gmail.com>

Added "const" to many parameters.
Removed most data allocations/copying from PicturePlayer, ServerPicture now has to do this when converting coordinates.
Added additional functions to ViewLayer to copy&convert multiple BPoint, BRect, BRegion to Screen coordinates, those should be further optimized.
Removed some function call overhead.
Note: some functions of PicturePlayer don't appear to be implented by PictureDataWriter,


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20292 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 533b9a69 01-Mar-2007 Marcus Overhagen <marcusoverhagen@gmail.com>

removed unnecessary use of const_cast


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20291 a95241bf-73f2-0310-859d-f6bbb57e9c96


# caae1184 01-Mar-2007 Stefano Ceccherini <stefano.ceccherini@gmail.com>

When creating a picture with data, the app_server was writing beyond the
allocated memory, without telling anyone. That was causing bad things to
happen. Flattening and unflattening BPictures now works, and
consequently, printing works too. Bug #1014 is fixed.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20285 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 0c48fc7c 28-Nov-2006 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Enable state synching for ServerPictures. Fixes bug 520


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19379 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 420fe80e 12-Nov-2006 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Moved picture data writing to its own class, thus simplifying code in
various places. Implemented SetLineMode op for BPicture, fixed shape
drawing (I accidentally broke it in the previous commit).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19264 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 2f9eca85 30-Oct-2006 Stefano Ceccherini <stefano.ceccherini@gmail.com>

moved Shape related defines to their own header


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19154 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 34633cab 30-Oct-2006 Stefano Ceccherini <stefano.ceccherini@gmail.com>

patch by Lucasz Zemczak which adds BShape drawing support to BPicture. Actually we should use a ShapeIterator subclass (like Lucasz did here) in Painter too instead of having duplicating code.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19153 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 0e683ed9 26-Oct-2006 Stefano Ceccherini <stefano.ceccherini@gmail.com>

ServerPicture was using the wrong StrokeRect call (the one which ignored
the pen size). Added scale handling. Removed duplicated AS_SETPENSIZE
handler in ServerWindow


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19130 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 467dbaa9 23-Oct-2006 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Fill/StrokeArc support for BPicture, courtesy of Lucasz Zemczak


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19103 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 0c40a637 23-Oct-2006 Stefano Ceccherini <stefano.ceccherini@gmail.com>

added part of a patch by Lukasz Zemczak which adds ellipse
filling/stroking support to BPictures.
Thank you!"


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19102 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 3ffcd64e 23-Oct-2006 Stefano Ceccherini <stefano.ceccherini@gmail.com>

updated headers


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19099 a95241bf-73f2-0310-859d-f6bbb57e9c96


# a7dc5469 24-May-2006 Stefano Ceccherini <stefano.ceccherini@gmail.com>

The drawstate is now synched when the recording of a BPicture starts. Some reordering of the function calls, implemented B_PIC_SET_BLENDING_MODE, some other cleanups

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17580 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 16ed1e1d 18-Mar-2006 Axel Dörfler <axeld@pinc-software.de>

* Removed headers/private/servers/app - everything is in src/servers/app now.
* Removed DisplaySupport.h, wasn't needed anymore.
* Removed private color set functions from InterfaceDefs.cpp - we might want
something similar, but definitely not like that.
* Minor cleanup, added some missing licenses.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16831 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 26f83259 08-Mar-2006 Stephan Aßmus <superstippi@gmx.de>

fix build

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16659 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 1afee826 11-Feb-2006 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Even more BPicture support. We should have the basic to draw every picture used in our tree (for example, Tracker's navigator's buttons)

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16350 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 3da4d36c 11-Feb-2006 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Added support for bitmaps in BPictures.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16348 a95241bf-73f2-0310-859d-f6bbb57e9c96


# f06f67c5 10-Feb-2006 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Implemented more BPicture related stuff. With this change, at least buttons can be drawn in pictures almost perfectly

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16344 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 38690d41 10-Feb-2006 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Renamed TPicture class to PicturePlayer

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16342 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 2c2773c4 10-Feb-2006 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Fixed a bug which prevented BPictures to be drawn. Small cleanup

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16341 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 92071609 18-Jan-2006 Stefano Ceccherini <stefano.ceccherini@gmail.com>

extended support for BPicture, still not working

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16006 a95241bf-73f2-0310-859d-f6bbb57e9c96


# af675e2c 18-Jan-2006 Stefano Ceccherini <stefano.ceccherini@gmail.com>

implemented some more stuff for bpicture support. In theory StrokeLine, Stroke/FillRect should work but in practice they don't.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16005 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 9e8d2dd2 17-Jan-2006 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Removed PicturePlayer, it only contains code duplicated from TPicture. Some cleanups for BPicture. This commit also completes previous commit for BMenu

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16002 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 9c0c899e 04-Jan-2006 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Added a copy constructor to ServerPicture. ServerPicture's constructors are private now, and can be called only from ServerApp (friend). Changed BList to a stl::stack which is better suited as a stack... Changed ServerApp::CreatePicture() to accept a picture to clone, instead of passing back a token which was never used anyway.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15840 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 850f6117 03-Jan-2006 Ingo Weinhold <ingo_weinhold@gmx.de>

Fixed GCC4 build.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15836 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 82b37bb2 03-Jan-2006 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Replace our current ServerPicture implementation with the one from Marc Flerackers. Currently it doesn't do anything as I commented out or removed most code, but it shows what we need to do

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15807 a95241bf-73f2-0310-859d-f6bbb57e9c96


# f375b21d 14-Nov-2005 Axel Dörfler <axeld@pinc-software.de>

Forgot to remove IPoint.h - it's no longer needed.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14926 a95241bf-73f2-0310-859d-f6bbb57e9c96


# be05d56c 14-Nov-2005 Axel Dörfler <axeld@pinc-software.de>

* the app_server now uses a global token space - this should later be changed to
have different token spaces depending on the scope of its objects.
* removed TokenHandler - we're now using BTokenSpace instead.
* removed unused IPoint.cpp - if we ever need it again, it can still easily be
resurrected from the dead.
* some cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14925 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 33bbe223 24-Mar-2005 Axel Dörfler <axeld@pinc-software.de>

Moved app_server files to app/.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@11972 a95241bf-73f2-0310-859d-f6bbb57e9c96


# ce27f9612e78bbb58c62bdc54c02bfc0e5172681 05-Sep-2015 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Implement ClipToPicture inside a BPicture. Not working yet.
BView::ClipToPicture doesn't work anymore, when nested inside a BPicture,
This happened when its implementation was moved server-side.


# 4176076be14df15ea765fb4e36b90c4c69c1e2db 05-Sep-2015 Michael Lotz <mmlr@mlotz.ch>

app_server: Port ServerPicture to the new PicturePlayer API.

This allows for bounds checks on strings and bitmap data to avoid
crashing due to corrupted user data. It also avoids copying the data
where possible.


# 99d23e5198ab0b70d47d384ade80bca3c3658a7a 24-Feb-2014 Stephan Aßmus <superstippi@gmx.de>

app_server: Apply scale to round corner radius.


# ce2c561521b6fd085e7c517ac3d59ccfbba2e1e9 01-Feb-2014 Stephan Aßmus <superstippi@gmx.de>

ServerPicture: Set correct pen location after DrawString()


# 77bf4d8d5156816e701b47476cf4c07bc7a4ebc2 21-Jan-2014 Adrien Destugues <pulkomandy@pulkomandy.tk>

Style fixes.


# e1a301151feebf3c335202071b5d3c38c40b2f9a 21-Jan-2014 Adrien Destugues <pulkomandy@pulkomandy.tk>

Introduce DrawingContext View superclass

In order to properly implement ClipToPicture in BView, we need to render
a Picture to a Bitmap. This is currently done client-side, but the
overhead for this (creating a BBitmap that accepts views, including a
window thread, adding a view to it, and rendering the picture to the
view, then sending the result to app_server) isn't acceptable. Moreover,
the bitmap drawn this way is clipped to the view size, and the clipping
won't work when the view is scaled or translated. So, we need to move
the Bitmap creation server-side.

However, app_server currently have no means of doing this. Factor out the
relevant parts of View: a DrawingState stack with PushState/PopState, a
DrawingEngine, and a ConvertToScreen transformation. Another implementation
of the DrawingContext will allow us to also draw a picture directly using
a Painter and low-level pixel buffer, in a format suitable for use as an
AGG alpha mask.


# f4f30311aab9b2768d3ef7e590f85598298edfe0 24-Jul-2011 Clemens Zeidler <clemens.zeidler@googlemail.com>

Cleanup app server directory a bit by creating a font and a decorator sub folder.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42483 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 915a7b8c247e1ed9182bd561df3e9856307e750c 19-Jan-2011 Oliver Tappe <zooey@hirschkaefer.de>

Make BObjectList<> publically available:
* cleaned up ObjectList.h
* switched several uses of new() to new(std::nothrow)
* moved ugly AsBList() hack into BObjectList<>::Private class and
adjusted all callers accordingly


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40252 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 756b64fd836dad5b63f41f0b01f8cedfec795f9d 16-Dec-2010 Ingo Weinhold <ingo_weinhold@gmx.de>

* Removed the obsolescent [B]Reference[able] API and replaced the remaining
uses. Fixes the gcc 2 acpi build.
* Renamed WeakReferenceable::{Add,Remove}Reference() to
{Acquire,Release}Reference() for consistency.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39871 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 4177bfe69fb9f3fddefcf3776fa13744c4b0cf31 31-Aug-2010 Stephan Aßmus <superstippi@gmx.de>

* AppendPicture() and RemovePicture() are weird, since
the ServerPicture calls those itself from SetOwner().
Since there are asserts in ServerPicture about fOwner,
it was easiest to fix the code by using *only* SetOwner()
from within ServerApp to add or remove pictures.
* SetOwner() was broken, since it called a method which
potentially removed the last reference and then still
accessed memory of the now free'd ServerPicture instance.
The easiest fix is to just increase the reference count
temporarily.
* SetOwner() wrongly returned false when the new owner was NULL.
* NestPicture() should simply add it's own reference. There
are two places where it is called, and only one of them
added the extra reference. The other one only acquired the
implicit reference that the ServerApp owns, but pictures
that remove nested children remove a reference from them.
This could leave stale pointers around of course.
* Added more asserts about fOwner.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38484 a95241bf-73f2-0310-859d-f6bbb57e9c96


# ab7c7773b24f850c48ad47966a2758f47152369a 05-Aug-2010 Michael Pfeiffer <michael.w.pfeiffer@gmail.com>

* With blessing from Stefano applied my alternative patch
from ticket #6415: the drawing offset of a BPicture
becomes the new drawing origin.
* This should also close ticket #6008.
* Also the Preview printer does the clipping now correctly
outside the "printable rectangle".


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37939 a95241bf-73f2-0310-859d-f6bbb57e9c96


# a92ef26cd77d57b8448c07a8fb96e6ec5f02af69 03-Aug-2010 Clemens Zeidler <clemens.zeidler@googlemail.com>

Fix coding style.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37886 a95241bf-73f2-0310-859d-f6bbb57e9c96


# bd06a41c3aadc5a6d4b2cd983660254a9479dd77 02-Aug-2010 Clemens Zeidler <clemens.zeidler@googlemail.com>

Cleanup of the some header includes.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37856 a95241bf-73f2-0310-859d-f6bbb57e9c96


# bb69cd654821314850cb4b3d505e3203f8207511 02-Aug-2010 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Basically revert r37824 (minus restoring the origin), since it causes other
problems (#6415 for example).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37833 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 568bdbf7192e5694fb683abcbae738c59c80dbb5 30-Jul-2010 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Convert the BPoint to screen coordinates respecting the scale
(using ConvertToScreenForDrawing()) before drawing a BPicture, both directly
and inside another BPicture. Restore the drawing origin when drawing a nested
BPicture (like we already do when drawing it directly).
Fixes #6008.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37824 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 678ee16d6a9cdaad33ef9c05849329c14e8e6426 19-Mar-2010 Stephan Aßmus <superstippi@gmx.de>

Fixed double conversion from view to screen space I introduced with the previous
commit. PictureTest at least works again.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35910 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 76ab3f88df26cbb595ca663798c7d84f9758c7c4 18-Mar-2010 Stephan Aßmus <superstippi@gmx.de>

Basically, this changeset implements BShape::ArcTo(). In more detail:
* Added BShape::ArcTo() and BShapeIterator::IterateArcTo(), using a previously
unused virtual slot. (Added the symbols for binary compatibility for GCC2
and GCC4.)
* Added operator=(), operator==() and operator!=() to BShape.
* Added BShape::BezierTo() version taking three points, which is sometimes
more convenient.
* Added the four new shape data ops OP_LARGE_ARC_TO_CW, OP_LARGE_ARC_TO_CCW,
OP_SMALL_ARC_TO_CW and OP_SMALL_ARC_TO_CCW. For a single arc, provided the
radius is large enough, there are four possibilities to draw the arc, these
are controlled by the two boolean flags to ArcTo() and mapped to the new
commands accordingly.
* Some style cleanup in Shape.cpp (sorry for mixing it up, but it gets
worse below...)
* Added ShapeTest to src/tests/servers/app.
* Changed the way BShapes are transformed from view to screen space in the
app_server. For arcs, it would be nontrivial to apply a proper transformation,
it's much easier to let AGG take care of it. This affects ServerPicture as
well.
* Wrapped iterating the BShape into try/catch blocks in ShapeIterator. But
I really don't understand the purpose of the class in the first place.
Maybe it can now be dropped, since coordinates don't have to be transformed
in place anymore.
* Refactored copy&paste shape iteration code in Painter. The transformation
to screen space happens there.
* Since RemoteDrawingEngine needed to be adopted anyway, I also updated
it for the new DrawString() with offsets version. But the client still needs
to be adapted.
* Style cleanup in Painter.h


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35905 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 87e7b978aacfb3de11892ccd71894acf675ab0b8 15-Feb-2010 Axel Dörfler <axeld@pinc-software.de>

* Fixed race conditions in the server's bitmap/picture handling: the objects
are now removed from the maps as soon as the client deletes them. This also
makes the "client reference" mechanism superfluous I introduced earlier.
* ServerApp::SetCurrentCursor() must always call Desktop::SetCursor(), since it
is also called whenever the current application changes. This fixes the cursor
almost never changing.
* Renamed ServerPicture::Usurp()/StepDown() to PushPicture(), and PopPicture().
* Also, they now acquire a reference to the picture in question (ie. the picture
you get from PopPicture() also owns a reference you need to free).
* ServerApp::CreatePicture() may fail, too. This case is now handled in the code
that calls it.
* Previously, the ServerWindow tried to process up to 70 messages in one go.
That obviously caused bug #4709. Now, we have the additional requirement to
not hold the desktop lock for longer than 25 ms. I haven't tested it with
Kaleidoscope yet, though.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35472 a95241bf-73f2-0310-859d-f6bbb57e9c96


# afad65b245eb0c70300cbef4929db0ff8ccbec00 19-Nov-2009 Axel Dörfler <axeld@pinc-software.de>

* Bitmaps and pictures now maintain their client reference independently;
clients can no longer release more references than they own.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34130 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 85a7877f80790d60e084ba8d7e6f1ae5f9a6fee1 04-Nov-2009 Axel Dörfler <axeld@pinc-software.de>

* ServerApp's bitmap and picture handling was completely broken, as it ignored
concurrency as well as reference counting, causing occasional crashes and
memory corruption.
* ServerPicture now subclasses Referenceable, and will notify its owner when
it's going to be deleted. This might bring some regressions, although I
couldn't spot anything wrong yet.
* ServerBitmap will now also notify its owner when it's going to be deleted as
well.
* Switched from the former picture/bitmap lists to a std::map. This also solves
the issue of not checking whether or not the bitmap/picture actually belongs
to the ServerApp (before, all apps could access and delete all
pictures/bitmaps)
* Introduced a new fMapLocker that guards the new maps.
* ServerWindow now uses GetBitmap()/GetPicture(), and gives up its reference
after use.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33876 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 961399db485fdd22fb8ea3f7e40cf70c54d2545c 04-Nov-2009 Axel Dörfler <axeld@pinc-software.de>

* Coding style cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33871 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 3bd49667008d037333b876c7b01325bf17f146f2 03-Aug-2009 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Now also hide/show the cursor when BDirectWindow::SetFullScreen() is called.
in the handler, instead of checking if the window is an offscreen one,
check if fDirectWindowData is NULL, and do nothing if it's the case.
When setting a clip region in ServerPicture, also invalidate the clipping.
To do so, I added a public ServerWindoow::UpdateCurrentDrawingRegion()
which just calls the private function. Please review and see if it can
be done better. This fixes the problem with BPicture and the
ConstrainClippingRegion() op (see ticket #1389)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32087 a95241bf-73f2-0310-859d-f6bbb57e9c96


# e6a52fe4b72bcfc86c9ff7f205ea6a76cf7c6c3b 22-Jul-2009 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Setting the font family/style in a BPicture works now. Added a comment
to ServerBitmap


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31691 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 4bb65f96fcf6a60fe16f2c3345ff5414f3aba4e8 20-Jul-2009 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Fixed some coding style violations


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31657 a95241bf-73f2-0310-859d-f6bbb57e9c96


# bd09485ce97081bb02a25994b00694c300cb4b41 19-Jul-2009 Stefano Ceccherini <stefano.ceccherini@gmail.com>

try to handle the SetFontFamily case in ServerPicture, although it doesn't work. Maybe I'm not doing it correctly

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31638 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 4fba3522e02906506b6c713ef5b57d72e9458fef 11-Apr-2009 Ingo Weinhold <ingo_weinhold@gmx.de>

* Removed src/kits/tracker/OpenHashTable.h. The shared version in
headers/private/shared is newer, though with small interface changes.
* Removed the unnecessary Debug.h include in
headers/private/shared/ObjectList.h.
* Adjusted sources using these headers, mostly by adding missing includes.
* Lots of automatic whitespace cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30123 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 632f1504a8083bca714ca231c311bb0be302b6b8 17-Sep-2008 Stefano Ceccherini <stefano.ceccherini@gmail.com>

assign a token to the ServerPicture before anything else. If something fails to initialize, we can still search the picture via token

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27593 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 246a908734f137e918d88a9f18a4bcb1f18ff8b4 13-Sep-2008 Michael Lotz <mmlr@mlotz.ch>

* CID 1012: Fix leaking the OffsetFile in case it fails to initialize.
* Use std::nothrow (the rest of the file already used it).
* We also have to keep the source file around and properly dispose it, as
OffsetFile doesn't take ownership of it.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27486 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 52b877461dfb47e091a98653e24be2145cf12117 01-Sep-2008 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Apply the same logic of r24682 to the drawing of BPictures inside BPictures. Fixes part of bug #1389 (drawing pictures at an offset). Thanks to Karsten for his observations!

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27267 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 4e61552ecdd4b5997b7c3e8b5cf9d7afd9e62079 27-Aug-2008 Karsten Heimrich <host.haiku@gmx.de>

* first implementation of passing data via area to app_server
this makes printing of large images work, fixes task #1067



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27214 a95241bf-73f2-0310-859d-f6bbb57e9c96


# c63991d1f5e7898c3048e63b419c1789c0a6ff2f 25-Aug-2008 Stefano Ceccherini <stefano.ceccherini@gmail.com>

fixed warnings

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27198 a95241bf-73f2-0310-859d-f6bbb57e9c96


# d02fd30b90806a9af3b5b4e09637ad5f8f81599c 25-Aug-2008 Stefano Ceccherini <stefano.ceccherini@gmail.com>

We were leaking memory every time a BPicture was drawn. Also check if the allocations succeeded. Style cleanup.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27197 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 162a7f5f8e924eda0b7d7b99167882591926ad6d 28-Jul-2008 Stephan Aßmus <superstippi@gmx.de>

* Implemented new BView drawing functions DrawBitmap[Async](
const BBitmap* bitmap, BRect bitmapRect, BRect viewRect, uint32 options).
Only option so far is B_FILTER_BITMAP_BILINEAR.
* BView::DrawBitmap[Async](const BBitmap* bitmap, BRect viewRect) was accessing
the bitmap pointer without checking it. Would therefore crash when passing
NULL, unlike the other methods.
* The BPicture code already reserved room for the BBitmap flags, but did not
store the actual flags and neiter use them for anything. Since the bitmap
data is stored anyways, the bitmap creation flags do not matter. So I reused
this for the new bitmap drawing options.
* Rewrote Bitmap.h and removed the B_BITMAP_SCALE_BILINEAR flag again.
* Tried to optimize Painter::_DrawBitmapBilinearCopy32() a little by giving
the compiler better hints. There seems to be a marginal, possibly imagined
speed increase < 0.05 ms. ;-)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26665 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 953d895e020ece5d50cfc2e76d9f370ceb5c45e7 07-Mar-2008 Axel Dörfler <axeld@pinc-software.de>

* Got rid of the "Layer" part of WindowLayer, ViewLayer, WorkspacesLayer
(now WorkspacesView), OffscreenWindowLayer.
* Renamed ServerScreen.cpp/h to Screen.cpp/h (the class was already called
Screen).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24303 a95241bf-73f2-0310-859d-f6bbb57e9c96


# ebdedf9bbf6903e787c78c96a23a73908f361cf0 16-Jan-2008 Stefano Ceccherini <stefano.ceccherini@gmail.com>

disallow importing/exporting big pictures, since the Link* api doesn't allow sending more than 64 kb through it. At least printing via ShowImage doesn't hang the app anymore

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23554 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 48882cec96de1f4391f1882cac61524466c462c0 08-Dec-2007 Stephan Aßmus <superstippi@gmx.de>

* lock pattern drawing to the true view origin, independend of the views
position on screen (fixes drawing glitches in patterns when the view
was moved on screen (for example because the parent window got moved))


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23089 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 945d8d11cd4a9275ad06f8c635526f8e0d48eed6 10-Sep-2007 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Sync the drawing engine state in set_scale. The pen size, for example,
needs to be recalculated when the scale changes.
Also call ResyncDrawingState() in exit_state_change(). This fixes the
pen size test in FlattenTestPicture.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22215 a95241bf-73f2-0310-859d-f6bbb57e9c96


# b1af0a7a247358c80de46e5400f572d2f00fca3a 10-Sep-2007 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Setting the font shear in a BPicture didn't work, because the value was
treated as uint32 in some places, when it's a float.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22214 a95241bf-73f2-0310-859d-f6bbb57e9c96


# af02a9a71c76168c0e93532aa6d2bb668710b443 10-Sep-2007 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Use DrawState::PenSize() to set the drawing engine pen size, since it
returns the scaled value.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22213 a95241bf-73f2-0310-859d-f6bbb57e9c96


# f7e1df75609966bdfdb4ed39edf26dd145d8221f 16-Aug-2007 Stephan Aßmus <superstippi@gmx.de>

* get rid of RGBColor usage where it is not needed, this simplified many things,
possibly making them a little faster too
* mess with decorator button size calculation to make the whole layout scale
more agreeable with the font size (no more fixed offsets/insets), but it
is work in progress
* DefaultDecorator no longer allocated the border color array, it is part of
the object now
* small memory footprint optimizations in ViewLayer, Decorator and WindowLayer


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22003 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 422fadc829581055c4776614f7cffce670e51ab6 16-Aug-2007 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Moved the dummy table local to the PicturePlayer::Play() function since,
as Marcus pointed out, having it outside wasn't thread safe. Moved
PicturePlayer into the BPrivate namespace.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21982 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 46b4e489982de2e3ddfab11c68c714f6c1be4598 16-Aug-2007 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Added some debug output to PicturePlayer. Since checking the table size for every op is very slow, now we do that only at the beginning, and use a custom op table if needed. The best case (which is the one used when drawing a picture with BView::DrawPicture()) is very fast since it only requires one check.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21972 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 3b1dcc1e091ebe5ce75c931337b77d253eb5d3f0 14-Aug-2007 Ithamar R. Adema <ithamar.adema@team-embedded.nl>

Fix GCC4 compilation issue.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21950 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 253d42a602bc2ed053cf9a5f400bb95070f91da5 14-Aug-2007 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Implemented SetClipping op, but it's not working yet (looks like it's
never written into the data stream)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21947 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 796e4e4552e247113ff540017eb41035f8c70d14 13-Aug-2007 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Implement calling the exit_xxx hooks. Thanks to Marc Flerackers for the
help.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21943 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 9cc1cb3caed2fc84e148c7463850d336803e6c63 14-Aug-2007 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Disabled writing the font shear, since this results in missing font in
Chart's BPictureButton. Needs some investigation.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21942 a95241bf-73f2-0310-859d-f6bbb57e9c96


# feb557a6d116eef4567aa523d68fc1e7feef378c 14-Aug-2007 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Implemented WriteSetFontFamily() and WriteSetFontStyle(). Only the
server side functions are missing.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21941 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 2f99607b779eddb4150a74aa25259a288d1b9c80 14-Aug-2007 Stefano Ceccherini <stefano.ceccherini@gmail.com>

My last commit broke setting fonts in BPictures. Added a comment in
PicturePlayer to explain what we need to do. Don't write the
B_PIC_ENTER_STATE_CHANGE and B_PIC_ENTER_FONT_STATE ops until we fix the
problem (we don't care about them in our server side
implementation anyway). Font changes and state syncing work again.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21940 a95241bf-73f2-0310-859d-f6bbb57e9c96


# c00e6e3f897ae0aae682a970906e2bed17b9e7af 14-Aug-2007 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Implement more bpicture font methods, now PicturePlayer checks the size
of the function table, so if someone passes a smaller table, we avoid

calling invalid pointers.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21939 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 8e503a70c8851c951b1d5738d2575c3e8f999a36 14-Aug-2007 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Also set the font properties for BPictures. Some of them, at least.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21938 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 37033892c523295d91f189d37ed65474dfac7046 14-Aug-2007 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Implemented SetPattern op. Reduced the buffer size to 4096 again.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21937 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 38daa5cd6e789ad5df2b719ad0843f3431f86854 13-Aug-2007 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Also upload/download subpictures


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21926 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 690c7474a4d9597b5deceeaa4b582f2b2a6baaaf 13-Aug-2007 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Implemented BPicture's SetPenLocation() op, also nested
AppendToPicture() (but still doesn't work :( ). Moved some functions
around in PictureDataWriter.h.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21925 a95241bf-73f2-0310-859d-f6bbb57e9c96


# b1b69140a15a1b73f5181efdbdf24c5ece24b3ef 13-Aug-2007 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Don't delete the subpictures in the ServerPicture destructor. They are
kept in a list by ServerApp, and deleted by its destructor.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21924 a95241bf-73f2-0310-859d-f6bbb57e9c96


# edac8f06a8052817ba9cf3b668fe13ea879a4e88 13-Aug-2007 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Implemented drawing of pictures inside pictures. Thanks to Marc
Flerackers for clarifying some things.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21920 a95241bf-73f2-0310-859d-f6bbb57e9c96


# ac5fdd8a6dba29e8028012a09d133e4048fac659 13-Aug-2007 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Fixed drawing of arc and ellipse in a BPicture.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21919 a95241bf-73f2-0310-859d-f6bbb57e9c96


# ed5de868df775fceddb5abedec7eab9bd5147d51 13-Aug-2007 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Implemented the following BPicture ops: fill region, stroke/fill arc,
stroke/fill polygon, stroke/fill bezier. some work towards drawing of
nested pictures.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21918 a95241bf-73f2-0310-859d-f6bbb57e9c96


# bbc424771b5ad20f0fa256c96b20248c6059c4c0 08-Aug-2007 Stephan Aßmus <superstippi@gmx.de>

* convert shape coordinates to screen at the time of playing the picture
(fixes ticket #1367, stefano I thought you knew that I meant this in an
earlier mail)
* move_pen_by() looked wrong in ServerPicture, have not tested though
* make sure the pen location is adjusted after stroke_line() and draw_string()
in ServerPicture
* set_pen_location() does not need to update the Painter drawing state
* ServerWindow AS_LAYER_SET_PEN_SIZE needs to set the resulting pen size of
the drawing state stack, not the one set on the current state
* ServerWindow AS_LAYER_GET_PEN_SIZE needs to return the current state's
size, not the result of the stack
* small cleanups


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21855 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 38287e02afe4c0b08ae1c2c3279bb8d3a2e07fc2 22-Jul-2007 Stephan Aßmus <superstippi@gmx.de>

* completed my changes to DrawState handling, the current DrawingState
of the active ViewLayer is now always mirrored in the Painter instance
of a ServerWindow, so that it doesn't need to be synced on every drawing
command, this was previously incomplete for font handling
* removed the DrawState parameter from all the DrawingEngine functions
* adjusted ServerWindow and ServerPicture accordingly
* made sure that string related functions used by non-drawing related
parts (ServerApp, Decorator) don't interfere with the current drawing
state
* moved AS_SYNC handling from _DispatchViewMessage to _DispatchMessage,
it is actually a window message and doesn't require fCurrentLayer to
be valid
* fixed bug #1300, fCurrentLayer was not updated when a ViewLayer was
deleted by client request which happened to be fCurrentLayer (I am now
handling it so that the parent becomes the current layer, could be
wrong)
* AGGTextRenderer is no longer using it's own scanline, which should save
a few bytes RAM, the Painter already had such an object
* StringWidth() in AGGTextRenderer is now taking the escapement_delta into
account
* Painter::StrokeLine() doesn't need to check the clipping as much, since
that is already done in DrawingEngine
* if a ServerWindow message is not handled because fCurrentLayer is NULL,
a reply is sent in case the messages needs it (client window could
freeze otherwise, waiting for the reply for ever)
* removed unused AS_SET_FONT and AS_SET_FONT_SIZE
* added automatic RGBColor -> rgb_color conversion to RGBColor.h
* minor cleanup for 80 char/line limit



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21685 a95241bf-73f2-0310-859d-f6bbb57e9c96


# ff32e5158c98c4dd9eab938af32667fff625786e 03-May-2007 Stefano Ceccherini <stefano.ceccherini@gmail.com>

ServerPicture now uses a BPositionIO object as internal storage instead
of BMallocIO. Added an additional constructor to handle a file. This is
in preparation of implementing BView::SetDiskMode().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20996 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 19ebf74dc65bab3b8079eb7eea90e033db18e160 17-Apr-2007 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Call RemoveToken() in the destructor


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20736 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 0690e6bc161c341368113534fc608c6654b6bdbb 01-Mar-2007 Marcus Overhagen <marcusoverhagen@gmail.com>

added fast path to BPicture polygon drawing


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20296 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 0b0ecfab9004dab03fc2cdc6b0d1bc01fd4336af 01-Mar-2007 Marcus Overhagen <marcusoverhagen@gmail.com>

Added "const" to many parameters.
Removed most data allocations/copying from PicturePlayer, ServerPicture now has to do this when converting coordinates.
Added additional functions to ViewLayer to copy&convert multiple BPoint, BRect, BRegion to Screen coordinates, those should be further optimized.
Removed some function call overhead.
Note: some functions of PicturePlayer don't appear to be implented by PictureDataWriter,


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20292 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 533b9a69a7645c63ac9b2e9760256ee314c24db8 01-Mar-2007 Marcus Overhagen <marcusoverhagen@gmail.com>

removed unnecessary use of const_cast


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20291 a95241bf-73f2-0310-859d-f6bbb57e9c96


# caae1184ab222773b6bbb3c1db08791c2354f396 01-Mar-2007 Stefano Ceccherini <stefano.ceccherini@gmail.com>

When creating a picture with data, the app_server was writing beyond the
allocated memory, without telling anyone. That was causing bad things to
happen. Flattening and unflattening BPictures now works, and
consequently, printing works too. Bug #1014 is fixed.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@20285 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 0c48fc7c746f8c243daaf673d08671f43bf0e3e1 28-Nov-2006 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Enable state synching for ServerPictures. Fixes bug 520


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19379 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 420fe80e5c3dc9765da5343c511071d63bcb81cb 12-Nov-2006 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Moved picture data writing to its own class, thus simplifying code in
various places. Implemented SetLineMode op for BPicture, fixed shape
drawing (I accidentally broke it in the previous commit).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19264 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 2f9eca855a65581e353ad28a0d71b4f48893ac01 30-Oct-2006 Stefano Ceccherini <stefano.ceccherini@gmail.com>

moved Shape related defines to their own header


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19154 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 34633cab94673896f8a528bcabf282bac5a4c30e 30-Oct-2006 Stefano Ceccherini <stefano.ceccherini@gmail.com>

patch by Lucasz Zemczak which adds BShape drawing support to BPicture. Actually we should use a ShapeIterator subclass (like Lucasz did here) in Painter too instead of having duplicating code.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19153 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 0e683ed9aac5bfaadb9e3040632a09f2870707bf 26-Oct-2006 Stefano Ceccherini <stefano.ceccherini@gmail.com>

ServerPicture was using the wrong StrokeRect call (the one which ignored
the pen size). Added scale handling. Removed duplicated AS_SETPENSIZE
handler in ServerWindow


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19130 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 467dbaa9e29c0da37d9eb55214e91d7cae89b446 23-Oct-2006 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Fill/StrokeArc support for BPicture, courtesy of Lucasz Zemczak


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19103 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 0c40a6370efd02d482c50ae7a73856697ad6dc18 23-Oct-2006 Stefano Ceccherini <stefano.ceccherini@gmail.com>

added part of a patch by Lukasz Zemczak which adds ellipse
filling/stroking support to BPictures.
Thank you!"


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19102 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 3ffcd64e5ce81ba5df01145f4311e41d509b5eb1 23-Oct-2006 Stefano Ceccherini <stefano.ceccherini@gmail.com>

updated headers


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19099 a95241bf-73f2-0310-859d-f6bbb57e9c96


# a7dc54697c78f4bd090163b58ce212b77c94b454 24-May-2006 Stefano Ceccherini <stefano.ceccherini@gmail.com>

The drawstate is now synched when the recording of a BPicture starts. Some reordering of the function calls, implemented B_PIC_SET_BLENDING_MODE, some other cleanups

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@17580 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 16ed1e1d15aac69c945890e5d5990bb41d9f4303 18-Mar-2006 Axel Dörfler <axeld@pinc-software.de>

* Removed headers/private/servers/app - everything is in src/servers/app now.
* Removed DisplaySupport.h, wasn't needed anymore.
* Removed private color set functions from InterfaceDefs.cpp - we might want
something similar, but definitely not like that.
* Minor cleanup, added some missing licenses.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16831 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 26f832593578632dfd045a53f29229f050326f15 08-Mar-2006 Stephan Aßmus <superstippi@gmx.de>

fix build

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16659 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 1afee8263105823e5a7e7b17005bbb2dfb21ee0a 11-Feb-2006 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Even more BPicture support. We should have the basic to draw every picture used in our tree (for example, Tracker's navigator's buttons)

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16350 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 3da4d36c6ae016faaed64bd5eb3dd53e132b1147 11-Feb-2006 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Added support for bitmaps in BPictures.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16348 a95241bf-73f2-0310-859d-f6bbb57e9c96


# f06f67c546cb7afd27d6f2c683a65bfe4bcbe3ba 10-Feb-2006 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Implemented more BPicture related stuff. With this change, at least buttons can be drawn in pictures almost perfectly

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16344 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 38690d41b05e51196052752fe791874e92e4db13 10-Feb-2006 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Renamed TPicture class to PicturePlayer

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16342 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 2c2773c4c367ced48cb5fac1a212a2365e918c43 10-Feb-2006 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Fixed a bug which prevented BPictures to be drawn. Small cleanup

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16341 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 92071609a1f8be1cb850991678d1244d6e880829 18-Jan-2006 Stefano Ceccherini <stefano.ceccherini@gmail.com>

extended support for BPicture, still not working

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16006 a95241bf-73f2-0310-859d-f6bbb57e9c96


# af675e2c03c8cf1bec7a9e085d06079025a76216 18-Jan-2006 Stefano Ceccherini <stefano.ceccherini@gmail.com>

implemented some more stuff for bpicture support. In theory StrokeLine, Stroke/FillRect should work but in practice they don't.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16005 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 9e8d2dd28b59ce0fa8b221c116dce41425abf4cf 17-Jan-2006 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Removed PicturePlayer, it only contains code duplicated from TPicture. Some cleanups for BPicture. This commit also completes previous commit for BMenu

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@16002 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 9c0c899e7d5d797fa8cceafe4016ad6c249425d6 04-Jan-2006 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Added a copy constructor to ServerPicture. ServerPicture's constructors are private now, and can be called only from ServerApp (friend). Changed BList to a stl::stack which is better suited as a stack... Changed ServerApp::CreatePicture() to accept a picture to clone, instead of passing back a token which was never used anyway.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15840 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 850f611735ce87b0501b29eecc6eb08ddd7152e6 03-Jan-2006 Ingo Weinhold <ingo_weinhold@gmx.de>

Fixed GCC4 build.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15836 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 82b37bb25788ca751a89d8938a85885b8b4b393d 03-Jan-2006 Stefano Ceccherini <stefano.ceccherini@gmail.com>

Replace our current ServerPicture implementation with the one from Marc Flerackers. Currently it doesn't do anything as I commented out or removed most code, but it shows what we need to do

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15807 a95241bf-73f2-0310-859d-f6bbb57e9c96


# f375b21da5c5a5c8226f5d3d8ee9627b3f061632 14-Nov-2005 Axel Dörfler <axeld@pinc-software.de>

Forgot to remove IPoint.h - it's no longer needed.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14926 a95241bf-73f2-0310-859d-f6bbb57e9c96


# be05d56c7eea834b5983ba3411d79fabd8b616b7 14-Nov-2005 Axel Dörfler <axeld@pinc-software.de>

* the app_server now uses a global token space - this should later be changed to
have different token spaces depending on the scope of its objects.
* removed TokenHandler - we're now using BTokenSpace instead.
* removed unused IPoint.cpp - if we ever need it again, it can still easily be
resurrected from the dead.
* some cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14925 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 33bbe223914093509b4bc56bea8a90c81af80a37 24-Mar-2005 Axel Dörfler <axeld@pinc-software.de>

Moved app_server files to app/.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@11972 a95241bf-73f2-0310-859d-f6bbb57e9c96