summaryrefslogtreecommitdiff
path: root/Rx/v2/examples/win_text/rx_windows_user.h
diff options
context:
space:
mode:
Diffstat (limited to 'Rx/v2/examples/win_text/rx_windows_user.h')
-rw-r--r--Rx/v2/examples/win_text/rx_windows_user.h117
1 files changed, 0 insertions, 117 deletions
diff --git a/Rx/v2/examples/win_text/rx_windows_user.h b/Rx/v2/examples/win_text/rx_windows_user.h
deleted file mode 100644
index 708eaf6..0000000
--- a/Rx/v2/examples/win_text/rx_windows_user.h
+++ /dev/null
@@ -1,117 +0,0 @@
-#pragma once
-
-namespace rxcpp { namespace windows_user {
-
- struct rx_messages
- {
- struct Result
- {
- LRESULT lres = 0;
- bool handled = false;
- };
-
- struct Message
- {
- template<UINT WM>
- static auto is() { return [](Message m){ return m.message == WM; }; }
-
- HWND hWnd;
- UINT message;
- WPARAM wParam;
- LPARAM lParam;
- Result* result;
-
- void handled() { result->handled = true; }
- void lresult(LRESULT lres) {result->lres = lres; }
-
- template<class T>
- T wparam_cast(){
- return *reinterpret_cast<T*>(std::addressof(wParam));
- }
-
- template<class T>
- T lparam_cast(){
- return *reinterpret_cast<T*>(std::addressof(lParam));
- }
- };
-
- template<class WPARAM_t = WPARAM, class LPARAM_t = LPARAM>
- struct TypedMessage
- {
- static auto as() { return [](Message m){return TypedMessage{m}; }; }
-
- TypedMessage(Message m)
- : hWnd(m.hWnd)
- , message(m.message)
- , wParam(m.wparam_cast<WPARAM_t>())
- , lParam(m.lparam_cast<LPARAM_t>())
- , result(m.result)
- {}
-
- HWND hWnd;
- UINT message;
- WPARAM_t wParam;
- LPARAM_t lParam;
- Result* result;
-
- void handled() { result->handled = true; }
- void lresult(LRESULT lres) {result->lres = lres; }
- };
-
- subjects::subject<Message> subject;
- subscriber<Message> sub;
-
- ~rx_messages() {
- sub.on_completed();
- }
- rx_messages() : sub(subject.get_subscriber()) {}
-
- std::tuple<bool, LRESULT> message(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
- Result result;
- auto m = Message{hWnd, message, wParam, lParam, &result};
- try {
- sub.on_next(m);
- } catch(...) {
- sub.on_error(std::current_exception());
- }
- return std::make_tuple(result.handled, result.lres);
- }
-
- observable<Message> messages() {
- return subject.get_observable();
- }
-
- template<UINT WM>
- observable<Message> messages() {
- return messages().filter(Message::is<WM>());
- }
-
- template<UINT WM, class WPARAM_t, class LPARAM_t = LPARAM>
- observable<TypedMessage<WPARAM_t, LPARAM_t>> messages() {
- return messages<WM>().map(TypedMessage<WPARAM_t, LPARAM_t>::as());
- }
-
- };
-
- template<class Derived, UINT WM>
- struct enable_send_call
- {
- static LRESULT send_call(HWND w, std::function<LRESULT(Derived&)> f) {
- auto fp = reinterpret_cast<LPARAM>(std::addressof(f));
- return SendMessage(w, WM, 0, fp);
- }
-
- void OnSendCall() {
- auto derived = static_cast<Derived*>(this);
- derived->messages<WM, WPARAM, std::function<LRESULT(Derived&)>*>().
- subscribe([=](auto m) {
- m.handled(); // skip DefWindowProc
- m.lresult((*m.lParam)(*derived));
- });
- }
-
- enable_send_call() {
- OnSendCall();
- }
- };
-} }