summaryrefslogtreecommitdiff
path: root/src/ScreenPlacement.hh
diff options
context:
space:
mode:
Diffstat (limited to 'src/ScreenPlacement.hh')
-rw-r--r--src/ScreenPlacement.hh77
1 files changed, 77 insertions, 0 deletions
diff --git a/src/ScreenPlacement.hh b/src/ScreenPlacement.hh
new file mode 100644
index 0000000..93e6a82
--- /dev/null
+++ b/src/ScreenPlacement.hh
@@ -0,0 +1,77 @@
1// ScreenPlacement.hh
2// Copyright (c) 2006 Fluxbox Team (fluxgen at fluxbox dot org)
3//
4// Permission is hereby granted, free of charge, to any person obtaining a
5// copy of this software and associated documentation files (the "Software"),
6// to deal in the Software without restriction, including without limitation
7// the rights to use, copy, modify, merge, publish, distribute, sublicense,
8// and/or sell copies of the Software, and to permit persons to whom the
9// Software is furnished to do so, subject to the following conditions:
10//
11// The above copyright notice and this permission notice shall be included in
12// all copies or substantial portions of the Software.
13//
14// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20// DEALINGS IN THE SOFTWARE.
21
22// $Id$
23
24#ifndef SCREENPLACEMENT_HH
25#define SCREENPLACEMENT_HH
26
27#include "PlacementStrategy.hh"
28#include "FbTk/Resource.hh"
29
30class BScreen;
31
32/**
33 * Main class for strategy handling
34 * This is a bridge between screen and
35 * the real placement strategy (rowcol, undermouse etc)
36 * The placeWindow function in this class is guaranteed to succeed.
37 * It holds a pointer to the real placement strategy which is
38 * called upon placeWindow, it also holds the placement resources
39 */
40class ScreenPlacement: public PlacementStrategy {
41public:
42 enum PlacementPolicy {
43 ROWSMARTPLACEMENT,
44 COLSMARTPLACEMENT,
45 CASCADEPLACEMENT,
46 UNDERMOUSEPLACEMENT
47 };
48
49 enum RowDirection {
50 LEFTRIGHT, ///< from left to right
51 RIGHTLEFT ///< from right to left
52 };
53 enum ColumnDirection {
54 TOPBOTTOM, ///< from top to bottom
55 BOTTOMTOP ///< from bottom to top
56 };
57
58 explicit ScreenPlacement(BScreen &screen);
59 /// placeWindow is guaranteed to succeed, ignore return value
60 /// @return true
61 bool placeWindow(const std::vector<FluxboxWindow *> &windowlist,
62 const FluxboxWindow &window,
63 int &place_x, int &place_y);
64
65 RowDirection rowDirection() const { return *m_row_direction; }
66 ColumnDirection colDirection() const { return *m_col_direction; }
67
68private:
69 FbTk::Resource<RowDirection> m_row_direction; ///< row direction resource
70 FbTk::Resource<ColumnDirection> m_col_direction; ///< column direction resource
71 FbTk::Resource<PlacementPolicy> m_placement_policy; ///< placement policy resource
72 PlacementPolicy m_old_policy; ///< holds old policy, used to determine if resources has changed
73 std::auto_ptr<PlacementStrategy> m_strategy; ///< main strategy
74 std::auto_ptr<PlacementStrategy> m_fallback_strategy; ///< a fallback strategy if the main strategy fails
75};
76
77#endif // SCREENPLACEMENT_HH