.TH "wayland::server::viewport_t" 3 "Wed May 3 2023" "Version 1.0.0" "Wayland++" \" -*- nroff -*- .ad l .nh .SH NAME wayland::server::viewport_t \- crop and scale interface to a wl_surface .SH SYNOPSIS .br .PP .PP \fC#include \fP .PP Inherits wayland::server::resource_t\&. .SS "Public Member Functions" .in +1c .ti -1c .RI "std::function< void()> & \fBon_destroy\fP ()" .br .RI "remove scaling and cropping from the surface " .ti -1c .RI "std::function< void(double, double, double, double)> & \fBon_set_source\fP ()" .br .RI "set the source rectangle for cropping " .ti -1c .RI "std::function< void(int32_t, int32_t)> & \fBon_set_destination\fP ()" .br .RI "set the surface size for scaling " .ti -1c .RI "void \fBpost_bad_value\fP (std::string const &msg)" .br .RI "Post error: negative or zero values in width or height\&. " .ti -1c .RI "void \fBpost_bad_size\fP (std::string const &msg)" .br .RI "Post error: destination size is not integer\&. " .ti -1c .RI "void \fBpost_out_of_buffer\fP (std::string const &msg)" .br .RI "Post error: source rectangle extends outside of the content area\&. " .ti -1c .RI "void \fBpost_no_surface\fP (std::string const &msg)" .br .RI "Post error: the wl_surface was destroyed\&. " .ti -1c .RI "bool \fBproxy_has_object\fP () const" .br .RI "Check whether this wrapper actually wraps an object\&. " .ti -1c .RI "void \fBpost_no_memory\fP () const" .br .ti -1c .RI "uint32_t \fBget_id\fP () const" .br .ti -1c .RI "client_t \fBget_client\fP () const" .br .ti -1c .RI "unsigned int \fBget_version\fP () const" .br .ti -1c .RI "std::string \fBget_class\fP ()" .br .in -1c .SH "Detailed Description" .PP crop and scale interface to a wl_surface An additional interface to a wl_surface object, which allows the client to specify the cropping and scaling of the surface contents\&. .PP This interface works with two concepts: the source rectangle (src_x, src_y, src_width, src_height), and the destination size (dst_width, dst_height)\&. The contents of the source rectangle are scaled to the destination size, and content outside the source rectangle is ignored\&. This state is double-buffered, and is applied on the next wl_surface\&.commit\&. .PP The two parts of crop and scale state are independent: the source rectangle, and the destination size\&. Initially both are unset, that is, no scaling is applied\&. The whole of the current wl_buffer is used as the source, and the surface size is as defined in wl_surface\&.attach\&. .PP If the destination size is set, it causes the surface size to become dst_width, dst_height\&. The source (rectangle) is scaled to exactly this size\&. This overrides whatever the attached wl_buffer size is, unless the wl_buffer is NULL\&. If the wl_buffer is NULL, the surface has no content and therefore no size\&. Otherwise, the size is always at least 1x1 in surface local coordinates\&. .PP If the source rectangle is set, it defines what area of the wl_buffer is taken as the source\&. If the source rectangle is set and the destination size is not set, then src_width and src_height must be integers, and the surface size becomes the source rectangle size\&. This results in cropping without scaling\&. If src_width or src_height are not integers and destination size is not set, the bad_size protocol error is raised when the surface state is applied\&. .PP The coordinate transformations from buffer pixel coordinates up to the surface-local coordinates happen in the following order: .IP "1." 4 buffer_transform (wl_surface\&.set_buffer_transform) .IP "2." 4 buffer_scale (wl_surface\&.set_buffer_scale) .IP "3." 4 crop and scale (wp_viewport\&.set*) This means, that the source rectangle coordinates of crop and scale are given in the coordinates after the buffer transform and scale, i\&.e\&. in the coordinates that would be the surface-local coordinates if the crop and scale was not applied\&. .PP .PP If src_x or src_y are negative, the bad_value protocol error is raised\&. Otherwise, if the source rectangle is partially or completely outside of the non-NULL wl_buffer, then the out_of_buffer protocol error is raised when the surface state is applied\&. A NULL wl_buffer does not raise the out_of_buffer error\&. .PP The x, y arguments of wl_surface\&.attach are applied as normal to the surface\&. They indicate how many pixels to remove from the surface size from the left and the top\&. In other words, they are still in the surface-local coordinate system, just like dst_width and dst_height are\&. .PP If the wl_surface associated with the wp_viewport is destroyed, all wp_viewport requests except 'destroy' raise the protocol error no_surface\&. .PP If the wp_viewport object is destroyed, the crop and scale state is removed from the wl_surface\&. The change will be applied on the next wl_surface\&.commit\&. .PP Definition at line \fB492\fP of file \fBwayland\-server\-protocol\-extra\&.hpp\fP\&. .SH "Member Function Documentation" .PP .SS "std::string wayland::server::resource_t::get_class ()\fC [inherited]\fP" Retrieve the interface name (class) of a resource object\&. .PP \fBReturns\fP .RS 4 Interface name of the resource object\&. .RE .PP .SS "client_t wayland::server::resource_t::get_client () const\fC [inherited]\fP" Get the associated client .PP \fBReturns\fP .RS 4 the client that owns the resource\&. .RE .PP .SS "uint32_t wayland::server::resource_t::get_id () const\fC [inherited]\fP" Get the internal ID of the resource .PP \fBReturns\fP .RS 4 the internal ID of the resource .RE .PP .SS "unsigned int wayland::server::resource_t::get_version () const\fC [inherited]\fP" Get interface version .PP \fBReturns\fP .RS 4 Interface version this resource has been constructed with\&. .RE .PP .SS "std::function< void()> & viewport_t::on_destroy ()" .PP remove scaling and cropping from the surface The associated wl_surface's crop and scale state is removed\&. The change is applied on the next wl_surface\&.commit\&. .PP Definition at line \fB848\fP of file \fBwayland\-server\-protocol\-extra\&.cpp\fP\&. .SS "std::function< void(int32_t, int32_t)> & viewport_t::on_set_destination ()" .PP set the surface size for scaling .PP \fBParameters\fP .RS 4 \fIwidth\fP surface width .br \fIheight\fP surface height .RE .PP Set the destination size of the associated wl_surface\&. See wp_viewport for the description, and relation to the wl_buffer size\&. .PP If width is -1 and height is -1, the destination size is unset instead\&. Any other pair of values for width and height that contains zero or negative values raises the bad_value protocol error\&. .PP The crop and scale state is double-buffered state, and will be applied on the next wl_surface\&.commit\&. .PP Definition at line \fB860\fP of file \fBwayland\-server\-protocol\-extra\&.cpp\fP\&. .SS "std::function< void(double, double, double, double)> & viewport_t::on_set_source ()" .PP set the source rectangle for cropping .PP \fBParameters\fP .RS 4 \fIx\fP source rectangle x .br \fIy\fP source rectangle y .br \fIwidth\fP source rectangle width .br \fIheight\fP source rectangle height .RE .PP Set the source rectangle of the associated wl_surface\&. See wp_viewport for the description, and relation to the wl_buffer size\&. .PP If all of x, y, width and height are -1\&.0, the source rectangle is unset instead\&. Any other set of values where width or height are zero or negative, or x or y are negative, raise the bad_value protocol error\&. .PP The crop and scale state is double-buffered state, and will be applied on the next wl_surface\&.commit\&. .PP Definition at line \fB854\fP of file \fBwayland\-server\-protocol\-extra\&.cpp\fP\&. .SS "void viewport_t::post_bad_size (std::string const & msg)" .PP Post error: destination size is not integer\&. .PP Definition at line \fB871\fP of file \fBwayland\-server\-protocol\-extra\&.cpp\fP\&. .SS "void viewport_t::post_bad_value (std::string const & msg)" .PP Post error: negative or zero values in width or height\&. .PP Definition at line \fB866\fP of file \fBwayland\-server\-protocol\-extra\&.cpp\fP\&. .SS "void wayland::server::resource_t::post_no_memory () const\fC [inherited]\fP" Post 'not enough memory' error to the client .PP If the compositor has not enough memory to fulfill a certail request of the client, this function can be called to notify the client of this circumstance\&. .SS "void viewport_t::post_no_surface (std::string const & msg)" .PP Post error: the wl_surface was destroyed\&. .PP Definition at line \fB881\fP of file \fBwayland\-server\-protocol\-extra\&.cpp\fP\&. .SS "void viewport_t::post_out_of_buffer (std::string const & msg)" .PP Post error: source rectangle extends outside of the content area\&. .PP Definition at line \fB876\fP of file \fBwayland\-server\-protocol\-extra\&.cpp\fP\&. .SS "bool wayland::server::resource_t::proxy_has_object () const\fC [inherited]\fP" .PP Check whether this wrapper actually wraps an object\&. .PP \fBReturns\fP .RS 4 true if there is an underlying object, false if this wrapper is empty .RE .PP .SH "Author" .PP Generated automatically by Doxygen for Wayland++ from the source code\&.