@@ -6,78 +6,6 @@ import WinSDK
6
6
@_implementationOnly
7
7
import OrderedCollections
8
8
9
- internal struct Win32Menu {
10
- internal let hMenu : MenuHandle
11
-
12
- private let items : [ Win32MenuElement ]
13
-
14
- internal init ( _ hMenu: MenuHandle , items: [ MenuElement ] ) {
15
- self . hMenu = hMenu
16
- self . items = items. map { Win32MenuElement ( $0) }
17
- for (index, child) in self . items. enumerated ( ) {
18
- InsertMenuItemW ( hMenu. value, UINT ( index) , true , & child. info)
19
- }
20
- }
21
- }
22
-
23
- internal class Win32MenuElement {
24
- private var title : [ WCHAR ]
25
- private let submenu : Win32Menu ?
26
- private let image : BitmapHandle ?
27
-
28
- internal var info : MENUITEMINFOW
29
-
30
- private init ( title: String , image: Image ? , submenu: Win32Menu ? , fType: Int32 ) {
31
- self . title = title. wide
32
- self . submenu = submenu
33
-
34
- let imageHandle : BitmapHandle ?
35
- if let bitmap = image? . bitmap {
36
- imageHandle = BitmapHandle ( from: bitmap)
37
- } else {
38
- imageHandle = nil
39
- }
40
- self . image = imageHandle
41
-
42
- self . info = self . title. withUnsafeMutableBufferPointer {
43
- MENUITEMINFOW ( cbSize: UINT ( MemoryLayout< MENUITEMINFOW> . size) ,
44
- fMask: UINT ( MIIM_FTYPE | MIIM_STATE | MIIM_ID | MIIM_STRING | MIIM_SUBMENU | MIIM_DATA | MIIM_BITMAP) ,
45
- fType: UINT ( fType) ,
46
- fState: UINT ( MFS_ENABLED) ,
47
- wID: UInt32 . random ( in: . min ... . max) ,
48
- hSubMenu: submenu? . hMenu. value,
49
- hbmpChecked: nil ,
50
- hbmpUnchecked: nil ,
51
- dwItemData: 0 ,
52
- dwTypeData: $0. baseAddress,
53
- cch: UINT ( title. count) ,
54
- hbmpItem: imageHandle? . value)
55
- }
56
- }
57
-
58
- internal convenience init ( _ element: MenuElement ) {
59
- if let menu = element as? Menu {
60
- self . init ( title: element. title,
61
- image: element. image,
62
- submenu: Win32Menu ( MenuHandle ( owning: CreatePopupMenu ( ) ) ,
63
- items: menu. children) ,
64
- fType: MFT_STRING)
65
- } else {
66
- self . init ( title: element. title, image: element. image, submenu: nil , fType: MFT_STRING)
67
- }
68
- }
69
- }
70
-
71
- extension Win32MenuElement {
72
- internal static var separator : Win32MenuElement {
73
- Win32MenuElement ( title: " " , image: nil , submenu: nil , fType: MFT_SEPARATOR)
74
- }
75
-
76
- internal var isSeparator : Bool {
77
- info. fType == MFT_SEPARATOR
78
- }
79
- }
80
-
81
9
internal final class _MenuBuilder : MenuSystem {
82
10
internal private( set) var hMenu : MenuHandle
83
11
internal private( set) weak var view : View ?
@@ -93,6 +21,10 @@ internal final class _MenuBuilder: MenuSystem {
93
21
self . view = view
94
22
self . menus = [ ]
95
23
}
24
+
25
+ override func setNeedsRebuild( ) {
26
+ // TODO(compnerd) create the actual menus
27
+ }
96
28
}
97
29
98
30
extension _MenuBuilder : MenuBuilder {
0 commit comments