FreeRDP
Loading...
Searching...
No Matches
SDL2/sdl_freerdp.hpp
1
20#pragma once
21
22#include <memory>
23#include <thread>
24#include <map>
25#include <atomic>
26
27#include <freerdp/freerdp.h>
28#include <freerdp/client/rdpei.h>
29#include <freerdp/client/rail.h>
30#include <freerdp/client/cliprdr.h>
31#include <freerdp/client/rdpgfx.h>
32
33#include <SDL.h>
34#include <SDL_video.h>
35
36#include "sdl_types.hpp"
37#include "sdl_disp.hpp"
38#include "sdl_kbd.hpp"
39#include "sdl_utils.hpp"
40#include "sdl_window.hpp"
41#include "dialogs/sdl_connection_dialog.hpp"
42
43using SDLSurfacePtr = std::unique_ptr<SDL_Surface, decltype(&SDL_FreeSurface)>;
44using SDLPixelFormatPtr = std::unique_ptr<SDL_PixelFormat, decltype(&SDL_FreeFormat)>;
45
47{
48 public:
49 explicit SdlContext(rdpContext* context);
50 SdlContext(const SdlContext& other) = delete;
51 SdlContext(SdlContext&& other) = delete;
52 ~SdlContext() = default;
53
54 SdlContext& operator=(const SdlContext& other) = delete;
55 SdlContext& operator=(SdlContext&& other) = delete;
56
57 private:
58 rdpContext* _context;
59
60 public:
61 wLog* log;
62
63 /* SDL */
64 bool fullscreen = false;
65 bool resizeable = false;
66 bool grab_mouse = false;
67 bool grab_kbd = false;
68 bool grab_kbd_enabled = true;
69
70 std::map<Uint32, SdlWindow> windows;
71
72 CriticalSection critical;
73 std::thread thread;
74 WinPREvent initialize;
75 WinPREvent initialized;
76 WinPREvent update_complete;
77 WinPREvent windows_created;
78 int exit_code = -1;
79
80 sdlDispContext disp;
81 sdlInput input;
82
83 SDLSurfacePtr primary;
84 SDLPixelFormatPtr primary_format;
85
86 Uint32 sdl_pixel_format = 0;
87
88 std::unique_ptr<SDLConnectionDialog> connection_dialog;
89
90 std::atomic<bool> rdp_thread_running;
91
92 BOOL update_resizeable(BOOL enable);
93 BOOL update_fullscreen(BOOL enter);
94 BOOL update_minimize();
95
96 [[nodiscard]] rdpContext* context() const;
97 [[nodiscard]] rdpClientContext* common() const;
98};