#ifndef CURSOR_MANAGER_H
#define CURSOR_MANAGER_H
#include <List.h>
#include <Locker.h>
#include <TokenSpace.h>
#include "CursorSet.h"
using BPrivate::BTokenSpace;
class ServerCursor;
class CursorManager : public BLocker {
public:
CursorManager();
~CursorManager();
void InitializeCursors(float scale);
void ReleaseCursors();
ServerCursor* CreateCursor(team_id clientTeam,
const uint8* cursorData);
ServerCursor* CreateCursor(team_id clientTeam,
BRect r, color_space format, int32 flags,
BPoint hotspot, int32 bytesPerRow = -1);
int32 AddCursor(ServerCursor* cursor,
int32 token = -1);
void DeleteCursors(team_id team);
void RemoveCursor(ServerCursor* cursor);
void SetCursorSet(const char* path);
ServerCursor* GetCursor(BCursorID which);
ServerCursor* FindCursor(int32 token);
private:
BBitmap _RenderVectorCursor(uint32 size, const uint8* vector,
uint32 vectorSize, float shadowStrength);
void _InitCursor(ServerCursor*& cursorMember, BCursorID id,
const uint8* vector, uint32 vectorSize,
const BPoint& hotSpot, float scale);
void _LoadCursor(ServerCursor*& cursorMember,
const CursorSet& set, BCursorID id);
ServerCursor* _FindCursor(team_id cientTeam,
const uint8* cursorData);
void _RemoveCursor(ServerCursor* cursor);
private:
BList fCursorList;
BTokenSpace fTokenSpace;
ServerCursor* fCursorSystemDefault;
ServerCursor* fCursorContextMenu;
ServerCursor* fCursorCopy;
ServerCursor* fCursorCreateLink;
ServerCursor* fCursorCrossHair;
ServerCursor* fCursorFollowLink;
ServerCursor* fCursorGrab;
ServerCursor* fCursorGrabbing;
ServerCursor* fCursorHelp;
ServerCursor* fCursorIBeam;
ServerCursor* fCursorIBeamHorizontal;
ServerCursor* fCursorMove;
ServerCursor* fCursorNoCursor;
ServerCursor* fCursorNotAllowed;
ServerCursor* fCursorProgress;
ServerCursor* fCursorResizeEast;
ServerCursor* fCursorResizeEastWest;
ServerCursor* fCursorResizeNorth;
ServerCursor* fCursorResizeNorthEast;
ServerCursor* fCursorResizeNorthEastSouthWest;
ServerCursor* fCursorResizeNorthSouth;
ServerCursor* fCursorResizeNorthWest;
ServerCursor* fCursorResizeNorthWestSouthEast;
ServerCursor* fCursorResizeSouth;
ServerCursor* fCursorResizeSouthEast;
ServerCursor* fCursorResizeSouthWest;
ServerCursor* fCursorResizeWest;
ServerCursor* fCursorZoomIn;
ServerCursor* fCursorZoomOut;
};
#endif