Mir
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
mir_surface.h
Go to the documentation of this file.
1 /*
2  * Copyright © 2012 Canonical Ltd.
3  *
4  * This program is free software: you can redistribute it and/or modify it
5  * under the terms of the GNU Lesser General Public License version 3,
6  * as published by the Free Software Foundation.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU Lesser General Public License for more details.
12  *
13  * You should have received a copy of the GNU Lesser General Public License
14  * along with this program. If not, see <http://www.gnu.org/licenses/>.
15  *
16  * Authored by: Kevin DuBois <kevin.dubois@canonical.com>
17  */
18 #ifndef MIR_CLIENT_MIR_SURFACE_H_
19 #define MIR_CLIENT_MIR_SURFACE_H_
20 
21 #include "mir_protobuf.pb.h"
22 
25 #include "mir_toolkit/common.h"
28 #include "mir_wait_handle.h"
29 #include "mir_client_surface.h"
30 #include "client_platform.h"
31 
32 #include <memory>
33 #include <functional>
34 #include <mutex>
35 #include <unordered_set>
36 
37 namespace mir
38 {
39 namespace input
40 {
41 namespace receiver
42 {
43 class InputPlatform;
44 class InputReceiverThread;
45 }
46 }
47 namespace client
48 {
49 class ClientBuffer;
50 class PerfReport;
51 
52 struct MemoryRegion;
53 }
54 }
55 
57 {
58 public:
59  MirSurface(MirSurface const &) = delete;
60  MirSurface& operator=(MirSurface const &) = delete;
61 
62  MirSurface(
63  MirConnection *allocating_connection,
65  std::shared_ptr<mir::client::ClientBufferFactory> const& buffer_factory,
66  std::shared_ptr<mir::input::receiver::InputPlatform> const& input_platform,
67  MirSurfaceParameters const& params,
68  mir_surface_callback callback, void * context);
69 
70  ~MirSurface();
71 
73  mir_surface_callback callback,
74  void *context);
75 
77  char const * get_error_message();
78  int id() const;
79  MirWaitHandle* next_buffer(mir_surface_callback callback, void * context);
81 
84  std::shared_ptr<mir::client::ClientBuffer> get_current_buffer();
85  uint32_t get_current_buffer_id() const;
86  void get_cpu_region(MirGraphicsRegion& region);
87  EGLNativeWindowType generate_native_window();
88 
90 
91  // Non-blocking
92  int attrib(MirSurfaceAttrib a) const;
93 
95 
97 
98  void set_event_handler(MirEventDelegate const* delegate);
99  void handle_event(MirEvent const& e);
100 
101  /* mir::client::ClientSurface */
104 
105  static bool is_valid(MirSurface* query);
106 private:
107  mutable std::mutex mutex; // Protects all members of *this
108 
109  void on_configured();
110  void on_cursor_configured();
111  void process_incoming_buffer();
112  void populate(MirBufferPackage& buffer_package);
113  void created(mir_surface_callback callback, void * context);
114  void new_buffer(mir_surface_callback callback, void * context);
115  MirPixelFormat convert_ipc_pf_to_geometry(google::protobuf::int32 pf);
116  void release_cpu_region();
117 
119  mir::protobuf::Surface surface;
120  std::string error_message;
121  mir::protobuf::Void void_response;
122 
123  MirConnection* const connection;
124  MirWaitHandle create_wait_handle;
125  MirWaitHandle next_buffer_wait_handle;
126  MirWaitHandle configure_wait_handle;
127  MirWaitHandle configure_cursor_wait_handle;
128 
129  std::shared_ptr<mir::client::MemoryRegion> secured_region;
130  std::shared_ptr<mir::client::ClientBufferDepository> buffer_depository;
131  std::shared_ptr<mir::input::receiver::InputPlatform> const input_platform;
132 
133  std::shared_ptr<EGLNativeWindowType> accelerated_window;
134 
135  mir::protobuf::SurfaceSetting configure_result;
136 
137  // Cache of latest SurfaceSettings returned from the server
138  int attrib_cache[mir_surface_attribs];
140 
141  std::function<void(MirEvent const*)> handle_event_callback;
142  std::shared_ptr<mir::input::receiver::InputReceiverThread> input_thread;
143  std::shared_ptr<mir::client::PerfReport> perf_report;
144 };
145 
146 #endif /* MIR_CLIENT_PRIVATE_MIR_WAIT_HANDLE_H_ */
std::shared_ptr< mir::client::ClientBuffer > get_current_buffer()
Definition: mir_surface.cpp:288
Definition: mir_protobuf.pb.h:1453
MirWaitHandle * release_surface(mir_surface_callback callback, void *context)
Definition: mir_surface.cpp:268
All things Mir.
Definition: aging_buffer.h:24
Definition: mir_surface.h:56
Definition: mir_wait_handle.h:31
Definition: mir_protobuf.pb.h:3348
Definition: common.h:46
uint32_t get_current_buffer_id() const
Definition: mir_surface.cpp:295
int id() const
Definition: mir_surface.cpp:134
void handle_event(MirEvent const &e)
Definition: mir_surface.cpp:445
Definition: mir_native_buffer.h:30
MirWaitHandle * next_buffer(mir_surface_callback callback, void *context)
Definition: mir_surface.cpp:170
MirWaitHandle * configure(MirSurfaceAttrib a, int value)
Definition: mir_surface.cpp:359
void request_and_wait_for_configure(MirSurfaceAttrib a, int value)
Definition: mir_surface.cpp:487
static bool is_valid(MirSurface *query)
Definition: mir_surface.cpp:141
MirOrientation
Direction relative to the "natural" orientation of the display.
Definition: common.h:134
MirSurfaceParameters get_parameters() const
Definition: mir_surface.cpp:110
char const * get_error_message()
Definition: mir_surface.cpp:123
MirWaitHandle * get_create_wait_handle()
Definition: mir_surface.cpp:189
void(* mir_surface_callback)(MirSurface *surface, void *client_context)
Callback to be passed when calling:
Definition: client_types.h:75
MirEventDelegate may be used to specify (at surface creation time) callbacks for handling of events...
Definition: client_types.h:278
MirNativeBuffer * get_current_buffer_package()
Definition: mir_surface.cpp:280
Definition: mir_client_surface.h:31
Definition: mir_protobuf.pb.h:1834
mir_orientation_normal
Definition: display_configuration.cpp:33
Definition: mir_protobuf.pb.h:1921
MirSurfaceAttrib
Attributes of a surface that the client and server/shell may wish to get or set over the wire...
Definition: common.h:36
MirPixelFormat
The order of components in a format enum matches the order of the components as they would be written...
Definition: common.h:119
MirPlatformType platform_type()
Definition: mir_surface.cpp:474
MirOrientation get_orientation() const
Definition: mir_surface.cpp:492
Definition: cursor_configuration.h:26
MirSurface & operator=(MirSurface const &)=delete
MirWaitHandle * configure_cursor(MirCursorConfiguration const *cursor)
Definition: mir_surface.cpp:341
~MirSurface()
Definition: mir_surface.cpp:89
Definition: mir_connection.h:72
Retrieved information about a MirSurface.
Definition: client_types.h:178
Definition: event.h:227
void request_and_wait_for_next_buffer()
Definition: mir_surface.cpp:482
int attrib(MirSurfaceAttrib a) const
Definition: mir_surface.cpp:412
void set_event_handler(MirEventDelegate const *delegate)
Definition: mir_surface.cpp:419
EGLNativeWindowType generate_native_window()
Definition: mir_surface.cpp:334
MirPlatformType
The native buffer type for the system the client is connected on.
Definition: client_types.h:158
MirSurface(MirSurface const &)=delete
void get_cpu_region(MirGraphicsRegion &region)
Definition: mir_surface.cpp:151
MirSurfaceParameters is the structure of minimum required information that you must provide to Mir in...
Definition: client_types.h:135

Copyright © 2012,2013 Canonical Ltd.
Generated on Fri Oct 10 14:07:14 UTC 2014