1/*
2 * Copyright 2005-2009, Haiku.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 * Axel Dörfler, axeld@pinc-software.de
7 */
8#ifndef VIRTUAL_SCREEN_H
9#define VIRTUAL_SCREEN_H
10
11
12#include "ScreenConfigurations.h"
13#include "ScreenManager.h"
14
15#include <Message.h>
16
17
18class Desktop;
19class DrawingEngine;
20class HWInterface;
21
22
23class VirtualScreen {
24public:
25 VirtualScreen();
26 ~VirtualScreen();
27
28 ::DrawingEngine* DrawingEngine() const
29 { return fDrawingEngine; }
30
31 // TODO: can we have a multiplexing HWInterface as well?
32 // If not, this would need to be hidden, and only made
33 // available for the Screen class
34 ::HWInterface* HWInterface() const
35 { return fHWInterface; }
36
37 status_t SetConfiguration(Desktop& desktop,
38 ScreenConfigurations& configurations,
39 uint32* _changedScreens = NULL);
40
41 status_t AddScreen(Screen* screen,
42 ScreenConfigurations& configurations);
43 status_t RemoveScreen(Screen* screen);
44
45 void UpdateFrame();
46 BRect Frame() const;
47
48 // TODO: we need to play with a real multi-screen configuration to
49 // figure out the specifics here
50 void SetScreenFrame(int32 index, BRect frame);
51
52 Screen* ScreenAt(int32 index) const;
53 Screen* ScreenByID(int32 id) const;
54 BRect ScreenFrameAt(int32 index) const;
55 int32 CountScreens() const;
56
57private:
58 status_t _GetMode(Screen* screen,
59 ScreenConfigurations& configurations,
60 display_mode& mode) const;
61 void _Reset();
62
63 struct screen_item {
64 Screen* screen;
65 BRect frame;
66 // TODO: do we want to have a different color per screen as well?
67 };
68
69 BRect fFrame;
70 BObjectList<screen_item> fScreenList;
71 ::DrawingEngine* fDrawingEngine;
72 ::HWInterface* fHWInterface;
73};
74
75#endif /* VIRTUAL_SCREEN_H */