root/src/servers/app/ServerPicture.h
/*
 * Copyright 2001-2019, Haiku.
 * Distributed under the terms of the MIT License.
 *
 * Authors:
 *              DarkWyrm <bpmagic@columbus.rr.com>
 *              Stefano Ceccherini <stefano.ceccherini@gmail.com>
 *              Julian Harnath <julian.harnath@rwth-aachen.de>
 *              Stephan Aßmus <superstippi@gmx.de>
 */
#ifndef SERVER_PICTURE_H
#define SERVER_PICTURE_H


#include <DataIO.h>

#include <AutoDeleter.h>
#include <ObjectList.h>
#include <PictureDataWriter.h>
#include <Referenceable.h>


class BFile;
class Canvas;
class ServerApp;
class ServerFont;
class View;

namespace BPrivate {
        class LinkReceiver;
        class PortLink;
}
class BList;


class ServerPicture : public BReferenceable, public PictureDataWriter {
public:
                                                                ServerPicture();
                                                                ServerPicture(const ServerPicture& other);
                                                                ServerPicture(const char* fileName,
                                                                        int32 offset);
        virtual                                         ~ServerPicture();

                        int32                           Token() { return fToken; }
                        bool                            SetOwner(ServerApp* owner);
                        ServerApp*                      Owner() const { return fOwner; }

                        bool                            ReleaseClientReference();

                        void                            EnterStateChange();
                        void                            ExitStateChange();

                        void                            SyncState(Canvas* canvas);
                        void                            WriteFontState(const ServerFont& font,
                                                                        uint16 mask);

                        void                            Play(Canvas* target);

                        void                            PushPicture(ServerPicture* picture);
                        ServerPicture*          PopPicture();

                        void                            AppendPicture(ServerPicture* picture);
                        int32                           NestPicture(ServerPicture* picture);

                        off_t                           DataLength() const;

                        status_t                        ImportData(BPrivate::LinkReceiver& link);
                        status_t                        ExportData(BPrivate::PortLink& link);

private:
        friend class PictureBoundingBoxPlayer;

                        typedef BObjectList<ServerPicture> PictureList;

                        int32                           fToken;
                        ObjectDeleter<BFile>
                                                                fFile;
                        ObjectDeleter<BPositionIO>
                                                                fData;
                        ObjectDeleter<PictureList>
                                                                fPictures;
                        BReference<ServerPicture>
                                                                fPushed;
                        ServerApp*                      fOwner;
};


#endif  // SERVER_PICTURE_H