1 // ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
2 //
3 // Copyright (c) 2004, Haiku
4 //
5 // This software is part of the Haiku distribution and is covered
6 // by the Haiku license.
7 //
8 //
9 // File: MethodMenuItem.cpp
10 // Authors: Jérôme Duval,
11 //
12 // Description: Input Server
13 // Created: October 19, 2004
14 //
15 // ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
16
17 #include <string.h>
18 #include "MethodMenuItem.h"
19
MethodMenuItem(int32 cookie,const char * name,const uchar * icon,BMenu * subMenu,BMessenger & messenger)20 MethodMenuItem::MethodMenuItem(int32 cookie, const char* name, const uchar* icon, BMenu* subMenu, BMessenger& messenger)
21 : BMenuItem(subMenu),
22 fIcon(BRect(0, 0, MENUITEM_ICON_SIZE - 1, MENUITEM_ICON_SIZE - 1), B_CMAP8),
23 fCookie(cookie)
24 {
25 SetLabel(name);
26 fIcon.SetBits(icon, MENUITEM_ICON_SIZE * MENUITEM_ICON_SIZE, 0, B_CMAP8);
27 fMessenger = messenger;
28 }
29
30
MethodMenuItem(int32 cookie,const char * name,const uchar * icon)31 MethodMenuItem::MethodMenuItem(int32 cookie, const char* name, const uchar* icon)
32 : BMenuItem(name, NULL),
33 fIcon(BRect(0, 0, MENUITEM_ICON_SIZE - 1, MENUITEM_ICON_SIZE - 1), B_CMAP8),
34 fCookie(cookie)
35 {
36 fIcon.SetBits(icon, MENUITEM_ICON_SIZE * MENUITEM_ICON_SIZE, 0, B_CMAP8);
37 }
38
39
~MethodMenuItem()40 MethodMenuItem::~MethodMenuItem()
41 {
42 }
43
44
45 void
SetName(const char * name)46 MethodMenuItem::SetName(const char *name)
47 {
48 SetLabel(name);
49 }
50
51 void
SetIcon(const uchar * icon)52 MethodMenuItem::SetIcon(const uchar *icon)
53 {
54 fIcon.SetBits(icon, MENUITEM_ICON_SIZE * MENUITEM_ICON_SIZE, 0, B_CMAP8);
55 }
56
57
58 void
GetContentSize(float * width,float * height)59 MethodMenuItem::GetContentSize(float *width, float *height)
60 {
61 *width = be_plain_font->StringWidth(Label()) + MENUITEM_ICON_SIZE + 3;
62
63 font_height fheight;
64 be_plain_font->GetHeight(&fheight);
65
66 *height = fheight.ascent + fheight.descent + fheight.leading - 2;
67 if (*height < MENUITEM_ICON_SIZE)
68 *height = MENUITEM_ICON_SIZE;
69 }
70
71
72 void
DrawContent()73 MethodMenuItem::DrawContent()
74 {
75 BMenu *menu = Menu();
76 BPoint contLoc = ContentLocation();
77
78 menu->SetDrawingMode(B_OP_OVER);
79 menu->MovePenTo(contLoc);
80 menu->DrawBitmapAsync(&fIcon);
81 menu->SetDrawingMode(B_OP_COPY);
82 menu->MovePenBy(MENUITEM_ICON_SIZE + 3, 2);
83 BMenuItem::DrawContent();
84 }
85
86