ds_output: Add ds_output_set_custom_mode
[platform/core/uifw/libds-tizen.git] / include / libds / interfaces / output.h
1 #ifndef LIBDS_INTERFACES_OUTPUT_H
2 #define LIBDS_INTERFACES_OUTPUT_H
3
4 #include <stdint.h>
5 #include <wayland-server.h>
6 #include <libds/output.h>
7 #include <libds/backend.h>
8 #include <libds/buffer.h>
9
10 #ifdef __cplusplus
11 extern "C" {
12 #endif
13
14 struct ds_output;
15
16 enum ds_output_state_field
17 {
18     DS_OUTPUT_STATE_BUFFER = 1 << 0,
19     DS_OUTPUT_STATE_DAMAGE = 1 << 1,
20     DS_OUTPUT_STATE_MODE = 1 << 2,
21     DS_OUTPUT_STATE_ENABLED = 1 << 3,
22     DS_OUTPUT_STATE_SCALE = 1 << 4,
23     DS_OUTPUT_STATE_TRANSFORM = 1 << 5,
24 };
25
26 enum ds_output_state_mode_type
27 {
28     DS_OUTPUT_STATE_MODE_FIXED,
29     DS_OUTPUT_STATE_MODE_CUSTOM,
30 };
31
32 struct ds_output_interface
33 {
34     void (*destroy)(struct ds_output *output);
35     bool (*commit)(struct ds_output *output);
36 };
37
38 struct ds_output_state
39 {
40     enum ds_output_state_field committed;
41     struct ds_buffer *buffer;
42
43     enum ds_output_state_mode_type mode_type;
44     const struct ds_output_mode *mode;
45     struct {
46         int32_t width, height;
47         int32_t refresh; // mHz, may be zero
48     } custom_mode;
49
50     bool enabled;
51 };
52
53 struct ds_output
54 {
55     const struct ds_output_interface *iface;
56
57     struct ds_backend *backend;
58
59     struct wl_display *display;
60     struct wl_global *global;
61
62     struct ds_buffer *back_buffer, *front_buffer;
63     const struct ds_output_mode *current_mode;
64     int32_t width, height;
65     int32_t refresh; // mHz, may be zero
66     struct ds_output_state pending;
67
68     struct wl_list modes;
69
70     struct wl_listener display_destroy;
71
72     struct {
73         struct wl_signal destroy;
74         struct wl_signal frame;
75         struct wl_signal commit;
76     } events;
77
78     bool enabled;
79 };
80
81 void
82 ds_output_init(struct ds_output *output, struct ds_backend *backend,
83         const struct ds_output_interface *iface, struct wl_display *display);
84
85 #ifdef __cplusplus
86 }
87 #endif
88
89 #endif