xref: /haiku/src/kits/interface/MenuPrivate.cpp (revision 3be9edf8da228afd9fec0390f408c964766122aa)
1 /*
2  * Copyright 2001-2009, Haiku, Inc.
3  * Distributed under the terms of the MIT License.
4  *
5  * Authors:
6  *		Stefano Ceccherini (stefano.ceccherini@gmail.com)
7  */
8 
9 #include <MenuPrivate.h>
10 
11 #include <Bitmap.h>
12 #include <Menu.h>
13 
14 const unsigned char kCtrlBits[] = {
15 	0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x14,
16 	0x1d,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x17,0x14,
17 	0x1d,0x1a,0x13,0x04,0x04,0x13,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x17,0x14,
18 	0x1d,0x1a,0x04,0x1a,0x1a,0x04,0x1a,0x04,0x04,0x04,0x1a,0x04,0x1a,0x1a,0x1a,0x17,0x14,
19 	0x1d,0x1a,0x04,0x1a,0x1a,0x1a,0x1a,0x1a,0x04,0x1a,0x1a,0x04,0x1a,0x1a,0x1a,0x17,0x14,
20 	0x1d,0x1a,0x04,0x1a,0x1a,0x1a,0x1a,0x1a,0x04,0x1a,0x1a,0x04,0x1a,0x1a,0x1a,0x17,0x14,
21 	0x1d,0x1a,0x04,0x1a,0x1a,0x04,0x1a,0x1a,0x04,0x1a,0x1a,0x04,0x1a,0x1a,0x1a,0x17,0x14,
22 	0x1d,0x1a,0x13,0x04,0x04,0x13,0x1a,0x1a,0x04,0x1a,0x1a,0x04,0x04,0x04,0x1a,0x17,0x14,
23 	0x1d,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x17,0x14,
24 	0x1d,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x14,
25 	0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14
26 };
27 
28 
29 const unsigned char kAltBits[] = {
30 	0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x14,
31 	0x1d,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x17,0x14,
32 	0x1d,0x1a,0x1a,0x13,0x04,0x04,0x13,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x17,0x14,
33 	0x1d,0x1a,0x1a,0x04,0x1a,0x1a,0x04,0x1a,0x04,0x1a,0x1a,0x04,0x04,0x04,0x1a,0x17,0x14,
34 	0x1d,0x1a,0x1a,0x04,0x1a,0x1a,0x04,0x1a,0x04,0x1a,0x1a,0x1a,0x04,0x1a,0x1a,0x17,0x14,
35 	0x1d,0x1a,0x1a,0x04,0x04,0x04,0x04,0x1a,0x04,0x1a,0x1a,0x1a,0x04,0x1a,0x1a,0x17,0x14,
36 	0x1d,0x1a,0x1a,0x04,0x1a,0x1a,0x04,0x1a,0x04,0x1a,0x1a,0x1a,0x04,0x1a,0x1a,0x17,0x14,
37 	0x1d,0x1a,0x1a,0x04,0x1a,0x1a,0x04,0x1a,0x04,0x04,0x04,0x1a,0x04,0x1a,0x1a,0x17,0x14,
38 	0x1d,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x17,0x14,
39 	0x1d,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x14,
40 	0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14
41 };
42 
43 
44 const unsigned char kOptBits[] = {
45 	0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x14,
46 	0x1d,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x17,0x14,
47 	0x1d,0x1a,0x1a,0x13,0x04,0x04,0x13,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x17,0x14,
48 	0x1d,0x1a,0x1a,0x04,0x1a,0x1a,0x04,0x1a,0x04,0x04,0x1a,0x04,0x04,0x04,0x1a,0x17,0x14,
49 	0x1d,0x1a,0x1a,0x04,0x1a,0x1a,0x04,0x1a,0x04,0x1a,0x04,0x1a,0x04,0x1a,0x1a,0x17,0x14,
50 	0x1d,0x1a,0x1a,0x04,0x1a,0x1a,0x04,0x1a,0x04,0x04,0x1a,0x1a,0x04,0x1a,0x1a,0x17,0x14,
51 	0x1d,0x1a,0x1a,0x04,0x1a,0x1a,0x04,0x1a,0x04,0x1a,0x1a,0x1a,0x04,0x1a,0x1a,0x17,0x14,
52 	0x1d,0x1a,0x1a,0x13,0x04,0x04,0x13,0x1a,0x04,0x1a,0x1a,0x1a,0x04,0x1a,0x1a,0x17,0x14,
53 	0x1d,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x17,0x14,
54 	0x1d,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x14,
55 	0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14
56 };
57 
58 
59 const unsigned char kShiftBits[] = {
60 	0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x1d,0x14,
61 	0x1d,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x17,0x14,
62 	0x1d,0x1a,0x1a,0x17,0x04,0x04,0x17,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x17,0x14,
63 	0x1d,0x1a,0x1a,0x04,0x17,0x17,0x04,0x1a,0x04,0x1a,0x04,0x1a,0x04,0x04,0x04,0x1a,0x04,0x04,0x04,0x1a,0x17,0x14,
64 	0x1d,0x1a,0x1a,0x17,0x04,0x04,0x17,0x1a,0x04,0x1a,0x04,0x1a,0x04,0x1a,0x1a,0x1a,0x1a,0x04,0x1a,0x1a,0x17,0x14,
65 	0x1d,0x1a,0x1a,0x1a,0x1a,0x1a,0x04,0x1a,0x04,0x04,0x04,0x1a,0x04,0x04,0x1a,0x1a,0x1a,0x04,0x1a,0x1a,0x17,0x14,
66 	0x1d,0x1a,0x1a,0x04,0x17,0x17,0x04,0x1a,0x04,0x1a,0x04,0x1a,0x04,0x1a,0x1a,0x1a,0x1a,0x04,0x1a,0x1a,0x17,0x14,
67 	0x1d,0x1a,0x1a,0x17,0x04,0x04,0x17,0x1a,0x04,0x1a,0x04,0x1a,0x04,0x1a,0x1a,0x1a,0x1a,0x04,0x1a,0x1a,0x17,0x14,
68 	0x1d,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x17,0x14,
69 	0x1d,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x14,
70 	0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14,0x14
71 };
72 
73 namespace BPrivate {
74 
75 
76 BBitmap* MenuPrivate::sMenuItemAlt;
77 BBitmap* MenuPrivate::sMenuItemControl;
78 BBitmap* MenuPrivate::sMenuItemOption;
79 BBitmap* MenuPrivate::sMenuItemShift;
80 
81 
82 MenuPrivate::MenuPrivate(BMenu *menu)
83 	:
84 	fMenu(menu)
85 {
86 }
87 
88 
89 menu_layout
90 MenuPrivate::Layout() const
91 {
92 	return fMenu->Layout();
93 }
94 
95 
96 void
97 MenuPrivate::ItemMarked(BMenuItem *item)
98 {
99 	fMenu->_ItemMarked(item);
100 }
101 
102 
103 void
104 MenuPrivate::CacheFontInfo()
105 {
106 	fMenu->_CacheFontInfo();
107 }
108 
109 
110 float
111 MenuPrivate::FontHeight() const
112 {
113 	return fMenu->fFontHeight;
114 }
115 
116 
117 float
118 MenuPrivate::Ascent() const
119 {
120 	return fMenu->fAscent;
121 }
122 
123 
124 BRect
125 MenuPrivate::Padding() const
126 {
127 	return fMenu->fPad;
128 }
129 
130 
131 void
132 MenuPrivate::GetItemMargins(float *left, float *top,
133 					float *right, float *bottom) const
134 {
135 	fMenu->GetItemMargins(left, top, right, bottom);
136 }
137 
138 
139 /* static */
140 bool
141 MenuPrivate::IsAltCommandKey()
142 {
143 	return BMenu::sAltAsCommandKey;
144 }
145 
146 
147 int
148 MenuPrivate::State(BMenuItem **item) const
149 {
150 	return fMenu->_State(item);
151 }
152 
153 
154 void
155 MenuPrivate::Install(BWindow *window)
156 {
157 	fMenu->_Install(window);
158 }
159 
160 
161 void
162 MenuPrivate::Uninstall()
163 {
164 	fMenu->_Uninstall();
165 }
166 
167 
168 void
169 MenuPrivate::SetSuper(BMenu *menu)
170 {
171 	fMenu->fSuper = menu;
172 }
173 
174 
175 void
176 MenuPrivate::SetSuperItem(BMenuItem *item)
177 {
178 	fMenu->fSuperitem = item;
179 }
180 
181 
182 void
183 MenuPrivate::InvokeItem(BMenuItem *item, bool now)
184 {
185 	fMenu->_InvokeItem(item, now);
186 }
187 
188 
189 void
190 MenuPrivate::QuitTracking(bool thisMenuOnly)
191 {
192 	fMenu->_QuitTracking(thisMenuOnly);
193 }
194 
195 
196 /* static */
197 status_t
198 MenuPrivate::CreateBitmaps()
199 {
200 	BRect smallRect(0, 0, 16, 10);
201 	BRect largeRect(0, 0, 21, 10);
202 	try {
203 		sMenuItemAlt = new BBitmap(smallRect, B_CMAP8);
204 		sMenuItemControl = new BBitmap(smallRect, B_CMAP8);
205 		sMenuItemOption = new BBitmap(smallRect, B_CMAP8);
206 		sMenuItemShift = new BBitmap(largeRect, B_CMAP8);
207 	} catch (...) {
208 		return B_NO_MEMORY;
209 	}
210 
211 	sMenuItemAlt->ImportBits(kAltBits, sizeof(kAltBits),
212 		17, 0, B_CMAP8);
213 	sMenuItemControl->ImportBits(kCtrlBits, sizeof(kCtrlBits),
214 		17, 0, B_CMAP8);
215 	sMenuItemOption->ImportBits(kOptBits, sizeof(kOptBits),
216 		17, 0, B_CMAP8);
217 	sMenuItemShift->ImportBits(kShiftBits, sizeof(kShiftBits),
218 		22, 0, B_CMAP8);
219 
220 	return B_OK;
221 }
222 
223 
224 /* static */
225 void
226 MenuPrivate::DeleteBitmaps()
227 {
228 	delete sMenuItemAlt;
229 	delete sMenuItemControl;
230 	delete sMenuItemOption;
231 	delete sMenuItemShift;
232 }
233 
234 
235 /* static */
236 const BBitmap *
237 MenuPrivate::MenuItemCommand()
238 {
239 	if (BMenu::sAltAsCommandKey)
240 		return sMenuItemAlt;
241 
242 	return sMenuItemControl;
243 }
244 
245 
246 /* static */
247 const BBitmap *
248 MenuPrivate::MenuItemControl()
249 {
250 	if (BMenu::sAltAsCommandKey)
251 		return sMenuItemControl;
252 
253 	return sMenuItemAlt;
254 }
255 
256 
257 /* static */
258 const BBitmap *
259 MenuPrivate::MenuItemOption()
260 {
261 	return sMenuItemOption;
262 }
263 
264 
265 /* static */
266 const BBitmap *
267 MenuPrivate::MenuItemShift()
268 {
269 	return sMenuItemShift;
270 }
271 
272 
273 }	// namespace BPrivate
274