FreeRDP
Loading...
Searching...
No Matches
android_disp.c
1
20#include <freerdp/config.h>
21
22#include <winpr/assert.h>
23#include <winpr/wlog.h>
24
25#include <freerdp/channels/disp.h>
26#include <freerdp/client/disp.h>
27
28#include "android_disp.h"
29
30#define TAG CLIENT_TAG("android.disp")
31
32BOOL android_disp_init(androidContext* afc, DispClientContext* disp)
33{
34 WINPR_ASSERT(afc);
35 WINPR_ASSERT(disp);
36
37 afc->disp = disp;
38 disp->custom = afc;
39
40 WLog_DBG(TAG, "disp channel connected");
41 return TRUE;
42}
43
44BOOL android_disp_uninit(androidContext* afc, DispClientContext* disp)
45{
46 WINPR_ASSERT(afc);
47 WINPR_UNUSED(disp);
48
49 afc->disp = NULL;
50 WLog_DBG(TAG, "disp channel disconnected");
51 return TRUE;
52}
53
54BOOL android_disp_send_monitor_layout(androidContext* afc, UINT32 width, UINT32 height)
55{
56 WINPR_ASSERT(afc);
57
58 DispClientContext* disp = afc->disp;
59 if (!disp || !disp->SendMonitorLayout)
60 {
61 WLog_WARN(TAG, "disp channel not available");
62 return FALSE;
63 }
64
65 rdpSettings* settings = afc->common.context.settings;
66
67 DISPLAY_CONTROL_MONITOR_LAYOUT layout = WINPR_C_ARRAY_INIT;
68 layout.Flags = DISPLAY_CONTROL_MONITOR_PRIMARY;
69 layout.Top = layout.Left = 0;
70 layout.Width = width;
71 layout.Height = height;
72 layout.PhysicalWidth = 0;
73 layout.PhysicalHeight = 0;
74 layout.Orientation = freerdp_settings_get_uint16(settings, FreeRDP_DesktopOrientation);
75 layout.DesktopScaleFactor = freerdp_settings_get_uint32(settings, FreeRDP_DesktopScaleFactor);
76 layout.DeviceScaleFactor = freerdp_settings_get_uint32(settings, FreeRDP_DeviceScaleFactor);
77
78 UINT rc = disp->SendMonitorLayout(disp, 1, &layout);
79 if (rc != CHANNEL_RC_OK)
80 {
81 WLog_ERR(TAG, "SendMonitorLayout failed: %" PRIu32, rc);
82 return FALSE;
83 }
84
85 WLog_DBG(TAG, "SendMonitorLayout: %" PRIu32 "x%" PRIu32, width, height);
86 return TRUE;
87}
WINPR_ATTR_NODISCARD FREERDP_API UINT16 freerdp_settings_get_uint16(const rdpSettings *settings, FreeRDP_Settings_Keys_UInt16 id)
Returns a UINT16 settings value.
WINPR_ATTR_NODISCARD FREERDP_API UINT32 freerdp_settings_get_uint32(const rdpSettings *settings, FreeRDP_Settings_Keys_UInt32 id)
Returns a UINT32 settings value.