| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- #ifndef RUNNER_FLUTTER_WINDOW_H_
- #define RUNNER_FLUTTER_WINDOW_H_
- #include <flutter/dart_project.h>
- #include <flutter/flutter_view_controller.h>
- #include <flutter/method_channel.h>
- #include <flutter/standard_method_codec.h>
- #include <memory>
- #include "win32_window.h"
- #include "tray_icon.h"
- // A window that does nothing but host a Flutter view.
- class FlutterWindow : public Win32Window {
- public:
- // Creates a new FlutterWindow hosting a Flutter view running |project|.
- explicit FlutterWindow(const flutter::DartProject& project);
- virtual ~FlutterWindow();
- public:
- void SetMinimumSize(SIZE size);
-
- // App Events handler
- void onHideWindow();
- void onShowWindow();
- void onToggleWindow();
- void onActiveWindow();
- // Tray Events handler
- void onTrayIconLButtonDown();
- void onTrayIconLButtonUp();
- void onTrayIconRButtonDown();
- void onTrayIconRButtonUp();
- protected:
- // Win32Window:
- bool OnCreate() override;
- void OnDestroy() override;
- LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam,
- LPARAM const lparam) noexcept override;
- private:
- void createMenu(HMENU menu, flutter::EncodableMap args);
- std::optional<LRESULT> handleMessage(HWND window, UINT const message,
- WPARAM const wparam, LPARAM const lparam);
- void registerMethodChannel(flutter::FlutterEngine* engine);
- void handleAppMethodCall(
- const flutter::MethodCall<flutter::EncodableValue>& method_call,
- std::unique_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
- void handleTrayMethodCall(
- const flutter::MethodCall<flutter::EncodableValue>& method_call,
- std::unique_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
- void setSystemTray(
- const flutter::MethodCall<flutter::EncodableValue>& method_call,
- std::unique_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
- void resetSystemTray(
- const flutter::MethodCall<flutter::EncodableValue>& method_call,
- std::unique_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
- void setContextMenu(
- const flutter::MethodCall<flutter::EncodableValue>& method_call,
- std::unique_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
- void popUpContextMenu(
- const flutter::MethodCall<flutter::EncodableValue>& method_call,
- std::unique_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
- void extractFileIcon(
- const flutter::MethodCall<flutter::EncodableValue>& method_call,
- std::unique_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
- void getFileDescription(
- const flutter::MethodCall<flutter::EncodableValue>& method_call,
- std::unique_ptr<flutter::MethodResult<flutter::EncodableValue>> result);
- private:
- SIZE min_window_size_ = {0, 0};
- // The project to run.
- flutter::DartProject project_;
- // The Flutter instance hosted by this window.
- std::unique_ptr<flutter::FlutterViewController> flutter_controller_;
- // The system tray
- TrayIcon m_tray;
- HMENU m_menuHandle;
- };
- #endif // RUNNER_FLUTTER_WINDOW_H_
|