24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
26 * POSSIBILITY OF SUCH DAMAGE. |
26 * POSSIBILITY OF SUCH DAMAGE. |
27 */ |
27 */ |
28 |
28 |
|
29 #include "pch.h" |
|
30 |
29 #include "window.h" |
31 #include "window.h" |
30 |
32 |
31 #include <Windows.h> |
|
32 #undef GetCurrentTime |
|
33 #include <winrt/Windows.Foundation.Collections.h> |
|
34 #include <winrt/Windows.UI.Xaml.Interop.h> |
|
35 #include <winrt/Microsoft.UI.Xaml.Controls.h> |
|
36 #include <winrt/Microsoft.UI.Xaml.Controls.Primitives.h> |
|
37 #include <winrt/Microsoft.UI.Xaml.XamlTypeInfo.h> |
|
38 #include <winrt/Microsoft.UI.Xaml.Markup.h> |
|
39 #include <winrt/Microsoft.UI.Xaml.Media.h> |
|
40 |
|
41 #include "appmenu.h" |
33 #include "appmenu.h" |
|
34 #include "commandbar.h" |
42 #include "container.h" |
35 #include "container.h" |
43 #include "util.h" |
36 #include "util.h" |
44 |
37 |
45 #include "../common/context.h" |
38 #include "../common/context.h" |
46 |
39 |
47 #include <stdlib.h> |
40 #include <stdlib.h> |
48 |
41 |
49 #include <cx/mempool.h> |
42 #include <cx/mempool.h> |
|
43 |
|
44 #include "MainWindow.xaml.h" |
50 |
45 |
51 using namespace winrt; |
46 using namespace winrt; |
52 using namespace Microsoft::UI::Xaml; |
47 using namespace Microsoft::UI::Xaml; |
53 using namespace Microsoft::UI::Xaml::Controls; |
48 using namespace Microsoft::UI::Xaml::Controls; |
54 using namespace Microsoft::UI::Xaml::XamlTypeInfo; |
49 using namespace Microsoft::UI::Xaml::XamlTypeInfo; |
56 using namespace Windows::UI::Xaml::Interop; |
51 using namespace Windows::UI::Xaml::Interop; |
57 using namespace winrt::Windows::Foundation; |
52 using namespace winrt::Windows::Foundation; |
58 |
53 |
59 UiWindow::UiWindow(winrt::Microsoft::UI::Xaml::Window& win) : window(win) {} |
54 UiWindow::UiWindow(winrt::Microsoft::UI::Xaml::Window& win) : window(win) {} |
60 |
55 |
61 |
|
62 UiObject* ui_window(const char* title, void* window_data) { |
56 UiObject* ui_window(const char* title, void* window_data) { |
63 CxMempool* mp = cxBasicMempoolCreate(256); |
57 CxMempool* mp = cxBasicMempoolCreate(256); |
64 UiObject* obj = (UiObject*)cxCalloc(mp->allocator, 1, sizeof(UiObject)); |
58 UiObject* obj = (UiObject*)cxCalloc(mp->allocator, 1, sizeof(UiObject)); |
65 |
59 |
66 obj->ctx = uic_context(obj, mp); |
60 obj->ctx = uic_context(obj, mp); |
67 obj->window = window_data; |
61 obj->window = window_data; |
68 |
62 |
69 Window window = Window(); |
63 //Window window = Window(); |
|
64 Window window = make<winui::implementation::MainWindow>(); |
70 if (title) { |
65 if (title) { |
71 wchar_t *wtitle = str2wstr(title, nullptr); |
66 wchar_t *wtitle = str2wstr(title, nullptr); |
72 window.Title(wtitle); |
67 window.Title(wtitle); |
73 free(wtitle); |
68 free(wtitle); |
74 } |
69 } |
75 |
70 |
76 auto backdrop = winrt::Microsoft::UI::Xaml::Media::MicaBackdrop(); |
71 //auto backdrop = winrt::Microsoft::UI::Xaml::Media::MicaBackdrop(); |
77 backdrop.Kind(winrt::Microsoft::UI::Composition::SystemBackdrops::MicaKind::Base); // alternative: BaseAlt |
72 //backdrop.Kind(winrt::Microsoft::UI::Composition::SystemBackdrops::MicaKind::Base); // alternative: BaseAlt |
78 // TODO: https://learn.microsoft.com/en-us/windows/apps/windows-app-sdk/system-backdrop-controller#example-use-mica-in-a-windows-appsdkwinui-3-app |
73 // TODO: https://learn.microsoft.com/en-us/windows/apps/windows-app-sdk/system-backdrop-controller#example-use-mica-in-a-windows-appsdkwinui-3-app |
79 |
74 |
80 Grid grid = Grid(); |
75 Grid grid = Grid(); |
81 window.Content(grid); |
76 window.Content(grid); |
82 |
77 |
95 MenuBar mb = ui_create_menubar(obj); |
90 MenuBar mb = ui_create_menubar(obj); |
96 mb.VerticalAlignment(VerticalAlignment::Top); |
91 mb.VerticalAlignment(VerticalAlignment::Top); |
97 obj->container->Add(mb, false); |
92 obj->container->Add(mb, false); |
98 } |
93 } |
99 |
94 |
|
95 if (uic_toolbar_isenabled()) { |
|
96 // create/add toolbar |
|
97 CommandBar toolbar = ui_create_toolbar(); |
|
98 toolbar.VerticalAlignment(VerticalAlignment::Top); |
|
99 obj->container->Add(toolbar, false); |
|
100 } |
|
101 |
100 obj->window = window_data; |
102 obj->window = window_data; |
101 |
103 |
102 return obj; |
104 return obj; |
103 } |
105 } |