| 1 | // This file contains generated code. Do not edit directly. |
| 2 | // To regenerate this, run 'make'. |
| 3 | |
| 4 | //! Bindings to the `Render` X11 extension. |
| 5 | |
| 6 | #![allow (clippy::too_many_arguments)] |
| 7 | |
| 8 | #[allow (unused_imports)] |
| 9 | use std::borrow::Cow; |
| 10 | #[allow (unused_imports)] |
| 11 | use std::convert::TryInto; |
| 12 | #[allow (unused_imports)] |
| 13 | use crate::utils::RawFdContainer; |
| 14 | #[allow (unused_imports)] |
| 15 | use crate::x11_utils::{Request, RequestHeader, Serialize, TryParse, TryParseFd}; |
| 16 | use std::io::IoSlice; |
| 17 | use crate::connection::RequestConnection; |
| 18 | #[allow (unused_imports)] |
| 19 | use crate::connection::Connection as X11Connection; |
| 20 | #[allow (unused_imports)] |
| 21 | use crate::cookie::{Cookie, CookieWithFds, VoidCookie}; |
| 22 | use crate::errors::ConnectionError; |
| 23 | #[allow (unused_imports)] |
| 24 | use crate::errors::ReplyOrIdError; |
| 25 | #[allow (unused_imports)] |
| 26 | use super::xproto; |
| 27 | |
| 28 | pub use x11rb_protocol::protocol::render::*; |
| 29 | |
| 30 | /// Get the major opcode of this extension |
| 31 | fn major_opcode<Conn: RequestConnection + ?Sized>(conn: &Conn) -> Result<u8, ConnectionError> { |
| 32 | let info: Option = conn.extension_information(X11_EXTENSION_NAME)?; |
| 33 | let info: ExtensionInformation = info.ok_or(err:ConnectionError::UnsupportedExtension)?; |
| 34 | Ok(info.major_opcode) |
| 35 | } |
| 36 | |
| 37 | pub fn query_version<Conn>(conn: &Conn, client_major_version: u32, client_minor_version: u32) -> Result<Cookie<'_, Conn, QueryVersionReply>, ConnectionError> |
| 38 | where |
| 39 | Conn: RequestConnection + ?Sized, |
| 40 | { |
| 41 | let request0: QueryVersionRequest = QueryVersionRequest { |
| 42 | client_major_version, |
| 43 | client_minor_version, |
| 44 | }; |
| 45 | let (bytes: [Cow<'static, [u8]>; 1], fds: Vec) = request0.serialize(major_opcode(conn)?); |
| 46 | let slices: [IoSlice<'_>; 1] = [IoSlice::new(&bytes[0])]; |
| 47 | assert_eq!(slices.len(), bytes.len()); |
| 48 | conn.send_request_with_reply(&slices, fds) |
| 49 | } |
| 50 | |
| 51 | pub fn query_pict_formats<Conn>(conn: &Conn) -> Result<Cookie<'_, Conn, QueryPictFormatsReply>, ConnectionError> |
| 52 | where |
| 53 | Conn: RequestConnection + ?Sized, |
| 54 | { |
| 55 | let request0: QueryPictFormatsRequest = QueryPictFormatsRequest; |
| 56 | let (bytes: [Cow<'static, [u8]>; 1], fds: Vec) = request0.serialize(major_opcode(conn)?); |
| 57 | let slices: [IoSlice<'_>; 1] = [IoSlice::new(&bytes[0])]; |
| 58 | assert_eq!(slices.len(), bytes.len()); |
| 59 | conn.send_request_with_reply(&slices, fds) |
| 60 | } |
| 61 | |
| 62 | pub fn query_pict_index_values<Conn>(conn: &Conn, format: Pictformat) -> Result<Cookie<'_, Conn, QueryPictIndexValuesReply>, ConnectionError> |
| 63 | where |
| 64 | Conn: RequestConnection + ?Sized, |
| 65 | { |
| 66 | let request0: QueryPictIndexValuesRequest = QueryPictIndexValuesRequest { |
| 67 | format, |
| 68 | }; |
| 69 | let (bytes: [Cow<'static, [u8]>; 1], fds: Vec) = request0.serialize(major_opcode(conn)?); |
| 70 | let slices: [IoSlice<'_>; 1] = [IoSlice::new(&bytes[0])]; |
| 71 | assert_eq!(slices.len(), bytes.len()); |
| 72 | conn.send_request_with_reply(&slices, fds) |
| 73 | } |
| 74 | |
| 75 | pub fn create_picture<'c, 'input, Conn>(conn: &'c Conn, pid: Picture, drawable: xproto::Drawable, format: Pictformat, value_list: &'input CreatePictureAux) -> Result<VoidCookie<'c, Conn>, ConnectionError> |
| 76 | where |
| 77 | Conn: RequestConnection + ?Sized, |
| 78 | { |
| 79 | let request0: CreatePictureRequest<'_> = CreatePictureRequest { |
| 80 | pid, |
| 81 | drawable, |
| 82 | format, |
| 83 | value_list: Cow::Borrowed(value_list), |
| 84 | }; |
| 85 | let (bytes: [Cow<'_, [u8]>; 3], fds: Vec) = request0.serialize(major_opcode(conn)?); |
| 86 | let slices: [IoSlice<'_>; 3] = [IoSlice::new(&bytes[0]), IoSlice::new(&bytes[1]), IoSlice::new(&bytes[2])]; |
| 87 | assert_eq!(slices.len(), bytes.len()); |
| 88 | conn.send_request_without_reply(&slices, fds) |
| 89 | } |
| 90 | |
| 91 | pub fn change_picture<'c, 'input, Conn>(conn: &'c Conn, picture: Picture, value_list: &'input ChangePictureAux) -> Result<VoidCookie<'c, Conn>, ConnectionError> |
| 92 | where |
| 93 | Conn: RequestConnection + ?Sized, |
| 94 | { |
| 95 | let request0: ChangePictureRequest<'_> = ChangePictureRequest { |
| 96 | picture, |
| 97 | value_list: Cow::Borrowed(value_list), |
| 98 | }; |
| 99 | let (bytes: [Cow<'_, [u8]>; 3], fds: Vec) = request0.serialize(major_opcode(conn)?); |
| 100 | let slices: [IoSlice<'_>; 3] = [IoSlice::new(&bytes[0]), IoSlice::new(&bytes[1]), IoSlice::new(&bytes[2])]; |
| 101 | assert_eq!(slices.len(), bytes.len()); |
| 102 | conn.send_request_without_reply(&slices, fds) |
| 103 | } |
| 104 | |
| 105 | pub fn set_picture_clip_rectangles<'c, 'input, Conn>(conn: &'c Conn, picture: Picture, clip_x_origin: i16, clip_y_origin: i16, rectangles: &'input [xproto::Rectangle]) -> Result<VoidCookie<'c, Conn>, ConnectionError> |
| 106 | where |
| 107 | Conn: RequestConnection + ?Sized, |
| 108 | { |
| 109 | let request0: SetPictureClipRectanglesRequest<'_> = SetPictureClipRectanglesRequest { |
| 110 | picture, |
| 111 | clip_x_origin, |
| 112 | clip_y_origin, |
| 113 | rectangles: Cow::Borrowed(rectangles), |
| 114 | }; |
| 115 | let (bytes: [Cow<'_, [u8]>; 3], fds: Vec) = request0.serialize(major_opcode(conn)?); |
| 116 | let slices: [IoSlice<'_>; 3] = [IoSlice::new(&bytes[0]), IoSlice::new(&bytes[1]), IoSlice::new(&bytes[2])]; |
| 117 | assert_eq!(slices.len(), bytes.len()); |
| 118 | conn.send_request_without_reply(&slices, fds) |
| 119 | } |
| 120 | |
| 121 | pub fn free_picture<Conn>(conn: &Conn, picture: Picture) -> Result<VoidCookie<'_, Conn>, ConnectionError> |
| 122 | where |
| 123 | Conn: RequestConnection + ?Sized, |
| 124 | { |
| 125 | let request0: FreePictureRequest = FreePictureRequest { |
| 126 | picture, |
| 127 | }; |
| 128 | let (bytes: [Cow<'static, [u8]>; 1], fds: Vec) = request0.serialize(major_opcode(conn)?); |
| 129 | let slices: [IoSlice<'_>; 1] = [IoSlice::new(&bytes[0])]; |
| 130 | assert_eq!(slices.len(), bytes.len()); |
| 131 | conn.send_request_without_reply(&slices, fds) |
| 132 | } |
| 133 | |
| 134 | pub fn composite<Conn, A>(conn: &Conn, op: PictOp, src: Picture, mask: A, dst: Picture, src_x: i16, src_y: i16, mask_x: i16, mask_y: i16, dst_x: i16, dst_y: i16, width: u16, height: u16) -> Result<VoidCookie<'_, Conn>, ConnectionError> |
| 135 | where |
| 136 | Conn: RequestConnection + ?Sized, |
| 137 | A: Into<Picture>, |
| 138 | { |
| 139 | let mask: Picture = mask.into(); |
| 140 | let request0: CompositeRequest = CompositeRequest { |
| 141 | op, |
| 142 | src, |
| 143 | mask, |
| 144 | dst, |
| 145 | src_x, |
| 146 | src_y, |
| 147 | mask_x, |
| 148 | mask_y, |
| 149 | dst_x, |
| 150 | dst_y, |
| 151 | width, |
| 152 | height, |
| 153 | }; |
| 154 | let (bytes: [Cow<'static, [u8]>; 1], fds: Vec) = request0.serialize(major_opcode(conn)?); |
| 155 | let slices: [IoSlice<'_>; 1] = [IoSlice::new(&bytes[0])]; |
| 156 | assert_eq!(slices.len(), bytes.len()); |
| 157 | conn.send_request_without_reply(&slices, fds) |
| 158 | } |
| 159 | |
| 160 | pub fn trapezoids<'c, 'input, Conn>(conn: &'c Conn, op: PictOp, src: Picture, dst: Picture, mask_format: Pictformat, src_x: i16, src_y: i16, traps: &'input [Trapezoid]) -> Result<VoidCookie<'c, Conn>, ConnectionError> |
| 161 | where |
| 162 | Conn: RequestConnection + ?Sized, |
| 163 | { |
| 164 | let request0: TrapezoidsRequest<'_> = TrapezoidsRequest { |
| 165 | op, |
| 166 | src, |
| 167 | dst, |
| 168 | mask_format, |
| 169 | src_x, |
| 170 | src_y, |
| 171 | traps: Cow::Borrowed(traps), |
| 172 | }; |
| 173 | let (bytes: [Cow<'_, [u8]>; 3], fds: Vec) = request0.serialize(major_opcode(conn)?); |
| 174 | let slices: [IoSlice<'_>; 3] = [IoSlice::new(&bytes[0]), IoSlice::new(&bytes[1]), IoSlice::new(&bytes[2])]; |
| 175 | assert_eq!(slices.len(), bytes.len()); |
| 176 | conn.send_request_without_reply(&slices, fds) |
| 177 | } |
| 178 | |
| 179 | pub fn triangles<'c, 'input, Conn>(conn: &'c Conn, op: PictOp, src: Picture, dst: Picture, mask_format: Pictformat, src_x: i16, src_y: i16, triangles: &'input [Triangle]) -> Result<VoidCookie<'c, Conn>, ConnectionError> |
| 180 | where |
| 181 | Conn: RequestConnection + ?Sized, |
| 182 | { |
| 183 | let request0: TrianglesRequest<'_> = TrianglesRequest { |
| 184 | op, |
| 185 | src, |
| 186 | dst, |
| 187 | mask_format, |
| 188 | src_x, |
| 189 | src_y, |
| 190 | triangles: Cow::Borrowed(triangles), |
| 191 | }; |
| 192 | let (bytes: [Cow<'_, [u8]>; 3], fds: Vec) = request0.serialize(major_opcode(conn)?); |
| 193 | let slices: [IoSlice<'_>; 3] = [IoSlice::new(&bytes[0]), IoSlice::new(&bytes[1]), IoSlice::new(&bytes[2])]; |
| 194 | assert_eq!(slices.len(), bytes.len()); |
| 195 | conn.send_request_without_reply(&slices, fds) |
| 196 | } |
| 197 | |
| 198 | pub fn tri_strip<'c, 'input, Conn>(conn: &'c Conn, op: PictOp, src: Picture, dst: Picture, mask_format: Pictformat, src_x: i16, src_y: i16, points: &'input [Pointfix]) -> Result<VoidCookie<'c, Conn>, ConnectionError> |
| 199 | where |
| 200 | Conn: RequestConnection + ?Sized, |
| 201 | { |
| 202 | let request0: TriStripRequest<'_> = TriStripRequest { |
| 203 | op, |
| 204 | src, |
| 205 | dst, |
| 206 | mask_format, |
| 207 | src_x, |
| 208 | src_y, |
| 209 | points: Cow::Borrowed(points), |
| 210 | }; |
| 211 | let (bytes: [Cow<'_, [u8]>; 3], fds: Vec) = request0.serialize(major_opcode(conn)?); |
| 212 | let slices: [IoSlice<'_>; 3] = [IoSlice::new(&bytes[0]), IoSlice::new(&bytes[1]), IoSlice::new(&bytes[2])]; |
| 213 | assert_eq!(slices.len(), bytes.len()); |
| 214 | conn.send_request_without_reply(&slices, fds) |
| 215 | } |
| 216 | |
| 217 | pub fn tri_fan<'c, 'input, Conn>(conn: &'c Conn, op: PictOp, src: Picture, dst: Picture, mask_format: Pictformat, src_x: i16, src_y: i16, points: &'input [Pointfix]) -> Result<VoidCookie<'c, Conn>, ConnectionError> |
| 218 | where |
| 219 | Conn: RequestConnection + ?Sized, |
| 220 | { |
| 221 | let request0: TriFanRequest<'_> = TriFanRequest { |
| 222 | op, |
| 223 | src, |
| 224 | dst, |
| 225 | mask_format, |
| 226 | src_x, |
| 227 | src_y, |
| 228 | points: Cow::Borrowed(points), |
| 229 | }; |
| 230 | let (bytes: [Cow<'_, [u8]>; 3], fds: Vec) = request0.serialize(major_opcode(conn)?); |
| 231 | let slices: [IoSlice<'_>; 3] = [IoSlice::new(&bytes[0]), IoSlice::new(&bytes[1]), IoSlice::new(&bytes[2])]; |
| 232 | assert_eq!(slices.len(), bytes.len()); |
| 233 | conn.send_request_without_reply(&slices, fds) |
| 234 | } |
| 235 | |
| 236 | pub fn create_glyph_set<Conn>(conn: &Conn, gsid: Glyphset, format: Pictformat) -> Result<VoidCookie<'_, Conn>, ConnectionError> |
| 237 | where |
| 238 | Conn: RequestConnection + ?Sized, |
| 239 | { |
| 240 | let request0: CreateGlyphSetRequest = CreateGlyphSetRequest { |
| 241 | gsid, |
| 242 | format, |
| 243 | }; |
| 244 | let (bytes: [Cow<'static, [u8]>; 1], fds: Vec) = request0.serialize(major_opcode(conn)?); |
| 245 | let slices: [IoSlice<'_>; 1] = [IoSlice::new(&bytes[0])]; |
| 246 | assert_eq!(slices.len(), bytes.len()); |
| 247 | conn.send_request_without_reply(&slices, fds) |
| 248 | } |
| 249 | |
| 250 | pub fn reference_glyph_set<Conn>(conn: &Conn, gsid: Glyphset, existing: Glyphset) -> Result<VoidCookie<'_, Conn>, ConnectionError> |
| 251 | where |
| 252 | Conn: RequestConnection + ?Sized, |
| 253 | { |
| 254 | let request0: ReferenceGlyphSetRequest = ReferenceGlyphSetRequest { |
| 255 | gsid, |
| 256 | existing, |
| 257 | }; |
| 258 | let (bytes: [Cow<'static, [u8]>; 1], fds: Vec) = request0.serialize(major_opcode(conn)?); |
| 259 | let slices: [IoSlice<'_>; 1] = [IoSlice::new(&bytes[0])]; |
| 260 | assert_eq!(slices.len(), bytes.len()); |
| 261 | conn.send_request_without_reply(&slices, fds) |
| 262 | } |
| 263 | |
| 264 | pub fn free_glyph_set<Conn>(conn: &Conn, glyphset: Glyphset) -> Result<VoidCookie<'_, Conn>, ConnectionError> |
| 265 | where |
| 266 | Conn: RequestConnection + ?Sized, |
| 267 | { |
| 268 | let request0: FreeGlyphSetRequest = FreeGlyphSetRequest { |
| 269 | glyphset, |
| 270 | }; |
| 271 | let (bytes: [Cow<'static, [u8]>; 1], fds: Vec) = request0.serialize(major_opcode(conn)?); |
| 272 | let slices: [IoSlice<'_>; 1] = [IoSlice::new(&bytes[0])]; |
| 273 | assert_eq!(slices.len(), bytes.len()); |
| 274 | conn.send_request_without_reply(&slices, fds) |
| 275 | } |
| 276 | |
| 277 | pub fn add_glyphs<'c, 'input, Conn>(conn: &'c Conn, glyphset: Glyphset, glyphids: &'input [u32], glyphs: &'input [Glyphinfo], data: &'input [u8]) -> Result<VoidCookie<'c, Conn>, ConnectionError> |
| 278 | where |
| 279 | Conn: RequestConnection + ?Sized, |
| 280 | { |
| 281 | let request0: AddGlyphsRequest<'_> = AddGlyphsRequest { |
| 282 | glyphset, |
| 283 | glyphids: Cow::Borrowed(glyphids), |
| 284 | glyphs: Cow::Borrowed(glyphs), |
| 285 | data: Cow::Borrowed(data), |
| 286 | }; |
| 287 | let (bytes: [Cow<'_, [u8]>; 5], fds: Vec) = request0.serialize(major_opcode(conn)?); |
| 288 | let slices: [IoSlice<'_>; 5] = [IoSlice::new(&bytes[0]), IoSlice::new(&bytes[1]), IoSlice::new(&bytes[2]), IoSlice::new(&bytes[3]), IoSlice::new(&bytes[4])]; |
| 289 | assert_eq!(slices.len(), bytes.len()); |
| 290 | conn.send_request_without_reply(&slices, fds) |
| 291 | } |
| 292 | |
| 293 | pub fn free_glyphs<'c, 'input, Conn>(conn: &'c Conn, glyphset: Glyphset, glyphs: &'input [Glyph]) -> Result<VoidCookie<'c, Conn>, ConnectionError> |
| 294 | where |
| 295 | Conn: RequestConnection + ?Sized, |
| 296 | { |
| 297 | let request0: FreeGlyphsRequest<'_> = FreeGlyphsRequest { |
| 298 | glyphset, |
| 299 | glyphs: Cow::Borrowed(glyphs), |
| 300 | }; |
| 301 | let (bytes: [Cow<'_, [u8]>; 3], fds: Vec) = request0.serialize(major_opcode(conn)?); |
| 302 | let slices: [IoSlice<'_>; 3] = [IoSlice::new(&bytes[0]), IoSlice::new(&bytes[1]), IoSlice::new(&bytes[2])]; |
| 303 | assert_eq!(slices.len(), bytes.len()); |
| 304 | conn.send_request_without_reply(&slices, fds) |
| 305 | } |
| 306 | |
| 307 | pub fn composite_glyphs8<'c, 'input, Conn>(conn: &'c Conn, op: PictOp, src: Picture, dst: Picture, mask_format: Pictformat, glyphset: Glyphset, src_x: i16, src_y: i16, glyphcmds: &'input [u8]) -> Result<VoidCookie<'c, Conn>, ConnectionError> |
| 308 | where |
| 309 | Conn: RequestConnection + ?Sized, |
| 310 | { |
| 311 | let request0: CompositeGlyphs8Request<'_> = CompositeGlyphs8Request { |
| 312 | op, |
| 313 | src, |
| 314 | dst, |
| 315 | mask_format, |
| 316 | glyphset, |
| 317 | src_x, |
| 318 | src_y, |
| 319 | glyphcmds: Cow::Borrowed(glyphcmds), |
| 320 | }; |
| 321 | let (bytes: [Cow<'_, [u8]>; 3], fds: Vec) = request0.serialize(major_opcode(conn)?); |
| 322 | let slices: [IoSlice<'_>; 3] = [IoSlice::new(&bytes[0]), IoSlice::new(&bytes[1]), IoSlice::new(&bytes[2])]; |
| 323 | assert_eq!(slices.len(), bytes.len()); |
| 324 | conn.send_request_without_reply(&slices, fds) |
| 325 | } |
| 326 | |
| 327 | pub fn composite_glyphs16<'c, 'input, Conn>(conn: &'c Conn, op: PictOp, src: Picture, dst: Picture, mask_format: Pictformat, glyphset: Glyphset, src_x: i16, src_y: i16, glyphcmds: &'input [u8]) -> Result<VoidCookie<'c, Conn>, ConnectionError> |
| 328 | where |
| 329 | Conn: RequestConnection + ?Sized, |
| 330 | { |
| 331 | let request0: CompositeGlyphs16Request<'_> = CompositeGlyphs16Request { |
| 332 | op, |
| 333 | src, |
| 334 | dst, |
| 335 | mask_format, |
| 336 | glyphset, |
| 337 | src_x, |
| 338 | src_y, |
| 339 | glyphcmds: Cow::Borrowed(glyphcmds), |
| 340 | }; |
| 341 | let (bytes: [Cow<'_, [u8]>; 3], fds: Vec) = request0.serialize(major_opcode(conn)?); |
| 342 | let slices: [IoSlice<'_>; 3] = [IoSlice::new(&bytes[0]), IoSlice::new(&bytes[1]), IoSlice::new(&bytes[2])]; |
| 343 | assert_eq!(slices.len(), bytes.len()); |
| 344 | conn.send_request_without_reply(&slices, fds) |
| 345 | } |
| 346 | |
| 347 | pub fn composite_glyphs32<'c, 'input, Conn>(conn: &'c Conn, op: PictOp, src: Picture, dst: Picture, mask_format: Pictformat, glyphset: Glyphset, src_x: i16, src_y: i16, glyphcmds: &'input [u8]) -> Result<VoidCookie<'c, Conn>, ConnectionError> |
| 348 | where |
| 349 | Conn: RequestConnection + ?Sized, |
| 350 | { |
| 351 | let request0: CompositeGlyphs32Request<'_> = CompositeGlyphs32Request { |
| 352 | op, |
| 353 | src, |
| 354 | dst, |
| 355 | mask_format, |
| 356 | glyphset, |
| 357 | src_x, |
| 358 | src_y, |
| 359 | glyphcmds: Cow::Borrowed(glyphcmds), |
| 360 | }; |
| 361 | let (bytes: [Cow<'_, [u8]>; 3], fds: Vec) = request0.serialize(major_opcode(conn)?); |
| 362 | let slices: [IoSlice<'_>; 3] = [IoSlice::new(&bytes[0]), IoSlice::new(&bytes[1]), IoSlice::new(&bytes[2])]; |
| 363 | assert_eq!(slices.len(), bytes.len()); |
| 364 | conn.send_request_without_reply(&slices, fds) |
| 365 | } |
| 366 | |
| 367 | pub fn fill_rectangles<'c, 'input, Conn>(conn: &'c Conn, op: PictOp, dst: Picture, color: Color, rects: &'input [xproto::Rectangle]) -> Result<VoidCookie<'c, Conn>, ConnectionError> |
| 368 | where |
| 369 | Conn: RequestConnection + ?Sized, |
| 370 | { |
| 371 | let request0: FillRectanglesRequest<'_> = FillRectanglesRequest { |
| 372 | op, |
| 373 | dst, |
| 374 | color, |
| 375 | rects: Cow::Borrowed(rects), |
| 376 | }; |
| 377 | let (bytes: [Cow<'_, [u8]>; 3], fds: Vec) = request0.serialize(major_opcode(conn)?); |
| 378 | let slices: [IoSlice<'_>; 3] = [IoSlice::new(&bytes[0]), IoSlice::new(&bytes[1]), IoSlice::new(&bytes[2])]; |
| 379 | assert_eq!(slices.len(), bytes.len()); |
| 380 | conn.send_request_without_reply(&slices, fds) |
| 381 | } |
| 382 | |
| 383 | pub fn create_cursor<Conn>(conn: &Conn, cid: xproto::Cursor, source: Picture, x: u16, y: u16) -> Result<VoidCookie<'_, Conn>, ConnectionError> |
| 384 | where |
| 385 | Conn: RequestConnection + ?Sized, |
| 386 | { |
| 387 | let request0: CreateCursorRequest = CreateCursorRequest { |
| 388 | cid, |
| 389 | source, |
| 390 | x, |
| 391 | y, |
| 392 | }; |
| 393 | let (bytes: [Cow<'static, [u8]>; 1], fds: Vec) = request0.serialize(major_opcode(conn)?); |
| 394 | let slices: [IoSlice<'_>; 1] = [IoSlice::new(&bytes[0])]; |
| 395 | assert_eq!(slices.len(), bytes.len()); |
| 396 | conn.send_request_without_reply(&slices, fds) |
| 397 | } |
| 398 | |
| 399 | pub fn set_picture_transform<Conn>(conn: &Conn, picture: Picture, transform: Transform) -> Result<VoidCookie<'_, Conn>, ConnectionError> |
| 400 | where |
| 401 | Conn: RequestConnection + ?Sized, |
| 402 | { |
| 403 | let request0: SetPictureTransformRequest = SetPictureTransformRequest { |
| 404 | picture, |
| 405 | transform, |
| 406 | }; |
| 407 | let (bytes: [Cow<'static, [u8]>; 1], fds: Vec) = request0.serialize(major_opcode(conn)?); |
| 408 | let slices: [IoSlice<'_>; 1] = [IoSlice::new(&bytes[0])]; |
| 409 | assert_eq!(slices.len(), bytes.len()); |
| 410 | conn.send_request_without_reply(&slices, fds) |
| 411 | } |
| 412 | |
| 413 | pub fn query_filters<Conn>(conn: &Conn, drawable: xproto::Drawable) -> Result<Cookie<'_, Conn, QueryFiltersReply>, ConnectionError> |
| 414 | where |
| 415 | Conn: RequestConnection + ?Sized, |
| 416 | { |
| 417 | let request0: QueryFiltersRequest = QueryFiltersRequest { |
| 418 | drawable, |
| 419 | }; |
| 420 | let (bytes: [Cow<'static, [u8]>; 1], fds: Vec) = request0.serialize(major_opcode(conn)?); |
| 421 | let slices: [IoSlice<'_>; 1] = [IoSlice::new(&bytes[0])]; |
| 422 | assert_eq!(slices.len(), bytes.len()); |
| 423 | conn.send_request_with_reply(&slices, fds) |
| 424 | } |
| 425 | |
| 426 | pub fn set_picture_filter<'c, 'input, Conn>(conn: &'c Conn, picture: Picture, filter: &'input [u8], values: &'input [Fixed]) -> Result<VoidCookie<'c, Conn>, ConnectionError> |
| 427 | where |
| 428 | Conn: RequestConnection + ?Sized, |
| 429 | { |
| 430 | let request0: SetPictureFilterRequest<'_> = SetPictureFilterRequest { |
| 431 | picture, |
| 432 | filter: Cow::Borrowed(filter), |
| 433 | values: Cow::Borrowed(values), |
| 434 | }; |
| 435 | let (bytes: [Cow<'_, [u8]>; 5], fds: Vec) = request0.serialize(major_opcode(conn)?); |
| 436 | let slices: [IoSlice<'_>; 5] = [IoSlice::new(&bytes[0]), IoSlice::new(&bytes[1]), IoSlice::new(&bytes[2]), IoSlice::new(&bytes[3]), IoSlice::new(&bytes[4])]; |
| 437 | assert_eq!(slices.len(), bytes.len()); |
| 438 | conn.send_request_without_reply(&slices, fds) |
| 439 | } |
| 440 | |
| 441 | pub fn create_anim_cursor<'c, 'input, Conn>(conn: &'c Conn, cid: xproto::Cursor, cursors: &'input [Animcursorelt]) -> Result<VoidCookie<'c, Conn>, ConnectionError> |
| 442 | where |
| 443 | Conn: RequestConnection + ?Sized, |
| 444 | { |
| 445 | let request0: CreateAnimCursorRequest<'_> = CreateAnimCursorRequest { |
| 446 | cid, |
| 447 | cursors: Cow::Borrowed(cursors), |
| 448 | }; |
| 449 | let (bytes: [Cow<'_, [u8]>; 3], fds: Vec) = request0.serialize(major_opcode(conn)?); |
| 450 | let slices: [IoSlice<'_>; 3] = [IoSlice::new(&bytes[0]), IoSlice::new(&bytes[1]), IoSlice::new(&bytes[2])]; |
| 451 | assert_eq!(slices.len(), bytes.len()); |
| 452 | conn.send_request_without_reply(&slices, fds) |
| 453 | } |
| 454 | |
| 455 | pub fn add_traps<'c, 'input, Conn>(conn: &'c Conn, picture: Picture, x_off: i16, y_off: i16, traps: &'input [Trap]) -> Result<VoidCookie<'c, Conn>, ConnectionError> |
| 456 | where |
| 457 | Conn: RequestConnection + ?Sized, |
| 458 | { |
| 459 | let request0: AddTrapsRequest<'_> = AddTrapsRequest { |
| 460 | picture, |
| 461 | x_off, |
| 462 | y_off, |
| 463 | traps: Cow::Borrowed(traps), |
| 464 | }; |
| 465 | let (bytes: [Cow<'_, [u8]>; 3], fds: Vec) = request0.serialize(major_opcode(conn)?); |
| 466 | let slices: [IoSlice<'_>; 3] = [IoSlice::new(&bytes[0]), IoSlice::new(&bytes[1]), IoSlice::new(&bytes[2])]; |
| 467 | assert_eq!(slices.len(), bytes.len()); |
| 468 | conn.send_request_without_reply(&slices, fds) |
| 469 | } |
| 470 | |
| 471 | pub fn create_solid_fill<Conn>(conn: &Conn, picture: Picture, color: Color) -> Result<VoidCookie<'_, Conn>, ConnectionError> |
| 472 | where |
| 473 | Conn: RequestConnection + ?Sized, |
| 474 | { |
| 475 | let request0: CreateSolidFillRequest = CreateSolidFillRequest { |
| 476 | picture, |
| 477 | color, |
| 478 | }; |
| 479 | let (bytes: [Cow<'static, [u8]>; 1], fds: Vec) = request0.serialize(major_opcode(conn)?); |
| 480 | let slices: [IoSlice<'_>; 1] = [IoSlice::new(&bytes[0])]; |
| 481 | assert_eq!(slices.len(), bytes.len()); |
| 482 | conn.send_request_without_reply(&slices, fds) |
| 483 | } |
| 484 | |
| 485 | pub fn create_linear_gradient<'c, 'input, Conn>(conn: &'c Conn, picture: Picture, p1: Pointfix, p2: Pointfix, stops: &'input [Fixed], colors: &'input [Color]) -> Result<VoidCookie<'c, Conn>, ConnectionError> |
| 486 | where |
| 487 | Conn: RequestConnection + ?Sized, |
| 488 | { |
| 489 | let request0: CreateLinearGradientRequest<'_> = CreateLinearGradientRequest { |
| 490 | picture, |
| 491 | p1, |
| 492 | p2, |
| 493 | stops: Cow::Borrowed(stops), |
| 494 | colors: Cow::Borrowed(colors), |
| 495 | }; |
| 496 | let (bytes: [Cow<'_, [u8]>; 4], fds: Vec) = request0.serialize(major_opcode(conn)?); |
| 497 | let slices: [IoSlice<'_>; 4] = [IoSlice::new(&bytes[0]), IoSlice::new(&bytes[1]), IoSlice::new(&bytes[2]), IoSlice::new(&bytes[3])]; |
| 498 | assert_eq!(slices.len(), bytes.len()); |
| 499 | conn.send_request_without_reply(&slices, fds) |
| 500 | } |
| 501 | |
| 502 | pub fn create_radial_gradient<'c, 'input, Conn>(conn: &'c Conn, picture: Picture, inner: Pointfix, outer: Pointfix, inner_radius: Fixed, outer_radius: Fixed, stops: &'input [Fixed], colors: &'input [Color]) -> Result<VoidCookie<'c, Conn>, ConnectionError> |
| 503 | where |
| 504 | Conn: RequestConnection + ?Sized, |
| 505 | { |
| 506 | let request0: CreateRadialGradientRequest<'_> = CreateRadialGradientRequest { |
| 507 | picture, |
| 508 | inner, |
| 509 | outer, |
| 510 | inner_radius, |
| 511 | outer_radius, |
| 512 | stops: Cow::Borrowed(stops), |
| 513 | colors: Cow::Borrowed(colors), |
| 514 | }; |
| 515 | let (bytes: [Cow<'_, [u8]>; 4], fds: Vec) = request0.serialize(major_opcode(conn)?); |
| 516 | let slices: [IoSlice<'_>; 4] = [IoSlice::new(&bytes[0]), IoSlice::new(&bytes[1]), IoSlice::new(&bytes[2]), IoSlice::new(&bytes[3])]; |
| 517 | assert_eq!(slices.len(), bytes.len()); |
| 518 | conn.send_request_without_reply(&slices, fds) |
| 519 | } |
| 520 | |
| 521 | pub fn create_conical_gradient<'c, 'input, Conn>(conn: &'c Conn, picture: Picture, center: Pointfix, angle: Fixed, stops: &'input [Fixed], colors: &'input [Color]) -> Result<VoidCookie<'c, Conn>, ConnectionError> |
| 522 | where |
| 523 | Conn: RequestConnection + ?Sized, |
| 524 | { |
| 525 | let request0: CreateConicalGradientRequest<'_> = CreateConicalGradientRequest { |
| 526 | picture, |
| 527 | center, |
| 528 | angle, |
| 529 | stops: Cow::Borrowed(stops), |
| 530 | colors: Cow::Borrowed(colors), |
| 531 | }; |
| 532 | let (bytes: [Cow<'_, [u8]>; 4], fds: Vec) = request0.serialize(major_opcode(conn)?); |
| 533 | let slices: [IoSlice<'_>; 4] = [IoSlice::new(&bytes[0]), IoSlice::new(&bytes[1]), IoSlice::new(&bytes[2]), IoSlice::new(&bytes[3])]; |
| 534 | assert_eq!(slices.len(), bytes.len()); |
| 535 | conn.send_request_without_reply(&slices, fds) |
| 536 | } |
| 537 | |
| 538 | /// Extension trait defining the requests of this extension. |
| 539 | pub trait ConnectionExt: RequestConnection { |
| 540 | fn render_query_version(&self, client_major_version: u32, client_minor_version: u32) -> Result<Cookie<'_, Self, QueryVersionReply>, ConnectionError> |
| 541 | { |
| 542 | query_version(self, client_major_version, client_minor_version) |
| 543 | } |
| 544 | fn render_query_pict_formats(&self) -> Result<Cookie<'_, Self, QueryPictFormatsReply>, ConnectionError> |
| 545 | { |
| 546 | query_pict_formats(self) |
| 547 | } |
| 548 | fn render_query_pict_index_values(&self, format: Pictformat) -> Result<Cookie<'_, Self, QueryPictIndexValuesReply>, ConnectionError> |
| 549 | { |
| 550 | query_pict_index_values(self, format) |
| 551 | } |
| 552 | fn render_create_picture<'c, 'input>(&'c self, pid: Picture, drawable: xproto::Drawable, format: Pictformat, value_list: &'input CreatePictureAux) -> Result<VoidCookie<'c, Self>, ConnectionError> |
| 553 | { |
| 554 | create_picture(self, pid, drawable, format, value_list) |
| 555 | } |
| 556 | fn render_change_picture<'c, 'input>(&'c self, picture: Picture, value_list: &'input ChangePictureAux) -> Result<VoidCookie<'c, Self>, ConnectionError> |
| 557 | { |
| 558 | change_picture(self, picture, value_list) |
| 559 | } |
| 560 | fn render_set_picture_clip_rectangles<'c, 'input>(&'c self, picture: Picture, clip_x_origin: i16, clip_y_origin: i16, rectangles: &'input [xproto::Rectangle]) -> Result<VoidCookie<'c, Self>, ConnectionError> |
| 561 | { |
| 562 | set_picture_clip_rectangles(self, picture, clip_x_origin, clip_y_origin, rectangles) |
| 563 | } |
| 564 | fn render_free_picture(&self, picture: Picture) -> Result<VoidCookie<'_, Self>, ConnectionError> |
| 565 | { |
| 566 | free_picture(self, picture) |
| 567 | } |
| 568 | fn render_composite<A>(&self, op: PictOp, src: Picture, mask: A, dst: Picture, src_x: i16, src_y: i16, mask_x: i16, mask_y: i16, dst_x: i16, dst_y: i16, width: u16, height: u16) -> Result<VoidCookie<'_, Self>, ConnectionError> |
| 569 | where |
| 570 | A: Into<Picture>, |
| 571 | { |
| 572 | composite(self, op, src, mask, dst, src_x, src_y, mask_x, mask_y, dst_x, dst_y, width, height) |
| 573 | } |
| 574 | fn render_trapezoids<'c, 'input>(&'c self, op: PictOp, src: Picture, dst: Picture, mask_format: Pictformat, src_x: i16, src_y: i16, traps: &'input [Trapezoid]) -> Result<VoidCookie<'c, Self>, ConnectionError> |
| 575 | { |
| 576 | trapezoids(self, op, src, dst, mask_format, src_x, src_y, traps) |
| 577 | } |
| 578 | fn render_triangles<'c, 'input>(&'c self, op: PictOp, src: Picture, dst: Picture, mask_format: Pictformat, src_x: i16, src_y: i16, triangles: &'input [Triangle]) -> Result<VoidCookie<'c, Self>, ConnectionError> |
| 579 | { |
| 580 | self::triangles(self, op, src, dst, mask_format, src_x, src_y, triangles) |
| 581 | } |
| 582 | fn render_tri_strip<'c, 'input>(&'c self, op: PictOp, src: Picture, dst: Picture, mask_format: Pictformat, src_x: i16, src_y: i16, points: &'input [Pointfix]) -> Result<VoidCookie<'c, Self>, ConnectionError> |
| 583 | { |
| 584 | tri_strip(self, op, src, dst, mask_format, src_x, src_y, points) |
| 585 | } |
| 586 | fn render_tri_fan<'c, 'input>(&'c self, op: PictOp, src: Picture, dst: Picture, mask_format: Pictformat, src_x: i16, src_y: i16, points: &'input [Pointfix]) -> Result<VoidCookie<'c, Self>, ConnectionError> |
| 587 | { |
| 588 | tri_fan(self, op, src, dst, mask_format, src_x, src_y, points) |
| 589 | } |
| 590 | fn render_create_glyph_set(&self, gsid: Glyphset, format: Pictformat) -> Result<VoidCookie<'_, Self>, ConnectionError> |
| 591 | { |
| 592 | create_glyph_set(self, gsid, format) |
| 593 | } |
| 594 | fn render_reference_glyph_set(&self, gsid: Glyphset, existing: Glyphset) -> Result<VoidCookie<'_, Self>, ConnectionError> |
| 595 | { |
| 596 | reference_glyph_set(self, gsid, existing) |
| 597 | } |
| 598 | fn render_free_glyph_set(&self, glyphset: Glyphset) -> Result<VoidCookie<'_, Self>, ConnectionError> |
| 599 | { |
| 600 | free_glyph_set(self, glyphset) |
| 601 | } |
| 602 | fn render_add_glyphs<'c, 'input>(&'c self, glyphset: Glyphset, glyphids: &'input [u32], glyphs: &'input [Glyphinfo], data: &'input [u8]) -> Result<VoidCookie<'c, Self>, ConnectionError> |
| 603 | { |
| 604 | add_glyphs(self, glyphset, glyphids, glyphs, data) |
| 605 | } |
| 606 | fn render_free_glyphs<'c, 'input>(&'c self, glyphset: Glyphset, glyphs: &'input [Glyph]) -> Result<VoidCookie<'c, Self>, ConnectionError> |
| 607 | { |
| 608 | free_glyphs(self, glyphset, glyphs) |
| 609 | } |
| 610 | fn render_composite_glyphs8<'c, 'input>(&'c self, op: PictOp, src: Picture, dst: Picture, mask_format: Pictformat, glyphset: Glyphset, src_x: i16, src_y: i16, glyphcmds: &'input [u8]) -> Result<VoidCookie<'c, Self>, ConnectionError> |
| 611 | { |
| 612 | composite_glyphs8(self, op, src, dst, mask_format, glyphset, src_x, src_y, glyphcmds) |
| 613 | } |
| 614 | fn render_composite_glyphs16<'c, 'input>(&'c self, op: PictOp, src: Picture, dst: Picture, mask_format: Pictformat, glyphset: Glyphset, src_x: i16, src_y: i16, glyphcmds: &'input [u8]) -> Result<VoidCookie<'c, Self>, ConnectionError> |
| 615 | { |
| 616 | composite_glyphs16(self, op, src, dst, mask_format, glyphset, src_x, src_y, glyphcmds) |
| 617 | } |
| 618 | fn render_composite_glyphs32<'c, 'input>(&'c self, op: PictOp, src: Picture, dst: Picture, mask_format: Pictformat, glyphset: Glyphset, src_x: i16, src_y: i16, glyphcmds: &'input [u8]) -> Result<VoidCookie<'c, Self>, ConnectionError> |
| 619 | { |
| 620 | composite_glyphs32(self, op, src, dst, mask_format, glyphset, src_x, src_y, glyphcmds) |
| 621 | } |
| 622 | fn render_fill_rectangles<'c, 'input>(&'c self, op: PictOp, dst: Picture, color: Color, rects: &'input [xproto::Rectangle]) -> Result<VoidCookie<'c, Self>, ConnectionError> |
| 623 | { |
| 624 | fill_rectangles(self, op, dst, color, rects) |
| 625 | } |
| 626 | fn render_create_cursor(&self, cid: xproto::Cursor, source: Picture, x: u16, y: u16) -> Result<VoidCookie<'_, Self>, ConnectionError> |
| 627 | { |
| 628 | create_cursor(self, cid, source, x, y) |
| 629 | } |
| 630 | fn render_set_picture_transform(&self, picture: Picture, transform: Transform) -> Result<VoidCookie<'_, Self>, ConnectionError> |
| 631 | { |
| 632 | set_picture_transform(self, picture, transform) |
| 633 | } |
| 634 | fn render_query_filters(&self, drawable: xproto::Drawable) -> Result<Cookie<'_, Self, QueryFiltersReply>, ConnectionError> |
| 635 | { |
| 636 | query_filters(self, drawable) |
| 637 | } |
| 638 | fn render_set_picture_filter<'c, 'input>(&'c self, picture: Picture, filter: &'input [u8], values: &'input [Fixed]) -> Result<VoidCookie<'c, Self>, ConnectionError> |
| 639 | { |
| 640 | set_picture_filter(self, picture, filter, values) |
| 641 | } |
| 642 | fn render_create_anim_cursor<'c, 'input>(&'c self, cid: xproto::Cursor, cursors: &'input [Animcursorelt]) -> Result<VoidCookie<'c, Self>, ConnectionError> |
| 643 | { |
| 644 | create_anim_cursor(self, cid, cursors) |
| 645 | } |
| 646 | fn render_add_traps<'c, 'input>(&'c self, picture: Picture, x_off: i16, y_off: i16, traps: &'input [Trap]) -> Result<VoidCookie<'c, Self>, ConnectionError> |
| 647 | { |
| 648 | add_traps(self, picture, x_off, y_off, traps) |
| 649 | } |
| 650 | fn render_create_solid_fill(&self, picture: Picture, color: Color) -> Result<VoidCookie<'_, Self>, ConnectionError> |
| 651 | { |
| 652 | create_solid_fill(self, picture, color) |
| 653 | } |
| 654 | fn render_create_linear_gradient<'c, 'input>(&'c self, picture: Picture, p1: Pointfix, p2: Pointfix, stops: &'input [Fixed], colors: &'input [Color]) -> Result<VoidCookie<'c, Self>, ConnectionError> |
| 655 | { |
| 656 | create_linear_gradient(self, picture, p1, p2, stops, colors) |
| 657 | } |
| 658 | fn render_create_radial_gradient<'c, 'input>(&'c self, picture: Picture, inner: Pointfix, outer: Pointfix, inner_radius: Fixed, outer_radius: Fixed, stops: &'input [Fixed], colors: &'input [Color]) -> Result<VoidCookie<'c, Self>, ConnectionError> |
| 659 | { |
| 660 | create_radial_gradient(self, picture, inner, outer, inner_radius, outer_radius, stops, colors) |
| 661 | } |
| 662 | fn render_create_conical_gradient<'c, 'input>(&'c self, picture: Picture, center: Pointfix, angle: Fixed, stops: &'input [Fixed], colors: &'input [Color]) -> Result<VoidCookie<'c, Self>, ConnectionError> |
| 663 | { |
| 664 | create_conical_gradient(self, picture, center, angle, stops, colors) |
| 665 | } |
| 666 | } |
| 667 | |
| 668 | impl<C: RequestConnection + ?Sized> ConnectionExt for C {} |
| 669 | |
| 670 | /// A RAII-like wrapper around a [Picture]. |
| 671 | /// |
| 672 | /// Instances of this struct represent a Picture that is freed in `Drop`. |
| 673 | /// |
| 674 | /// Any errors during `Drop` are silently ignored. Most likely an error here means that your |
| 675 | /// X11 connection is broken and later requests will also fail. |
| 676 | #[derive (Debug)] |
| 677 | pub struct PictureWrapper<C: RequestConnection>(C, Picture); |
| 678 | |
| 679 | impl<C: RequestConnection> PictureWrapper<C> |
| 680 | { |
| 681 | /// Assume ownership of the given resource and destroy it in `Drop`. |
| 682 | pub fn for_picture(conn: C, id: Picture) -> Self { |
| 683 | PictureWrapper(conn, id) |
| 684 | } |
| 685 | |
| 686 | /// Get the XID of the wrapped resource |
| 687 | pub fn picture(&self) -> Picture { |
| 688 | self.1 |
| 689 | } |
| 690 | |
| 691 | /// Assume ownership of the XID of the wrapped resource |
| 692 | /// |
| 693 | /// This function destroys this wrapper without freeing the underlying resource. |
| 694 | pub fn into_picture(self) -> Picture { |
| 695 | let id: u32 = self.1; |
| 696 | std::mem::forget(self); |
| 697 | id |
| 698 | } |
| 699 | } |
| 700 | |
| 701 | impl<'c, C: X11Connection> PictureWrapper<&'c C> |
| 702 | { |
| 703 | /// Create a new Picture and return a Picture wrapper and a cookie. |
| 704 | /// |
| 705 | /// This is a thin wrapper around [create_picture] that allocates an id for the Picture. |
| 706 | /// This function returns the resulting `PictureWrapper` that owns the created Picture and frees |
| 707 | /// it in `Drop`. This also returns a `VoidCookie` that comes from the call to |
| 708 | /// [create_picture]. |
| 709 | /// |
| 710 | /// Errors can come from the call to [X11Connection::generate_id] or [create_picture]. |
| 711 | pub fn create_picture_and_get_cookie(conn: &'c C, drawable: xproto::Drawable, format: Pictformat, value_list: &CreatePictureAux) -> Result<(Self, VoidCookie<'c, C>), ReplyOrIdError> |
| 712 | { |
| 713 | let pid: u32 = conn.generate_id()?; |
| 714 | let cookie: VoidCookie<'_, C> = create_picture(conn, pid, drawable, format, value_list)?; |
| 715 | Ok((Self::for_picture(conn, id:pid), cookie)) |
| 716 | } |
| 717 | } |
| 718 | impl<C: X11Connection> PictureWrapper<C> |
| 719 | { |
| 720 | /// Create a new Picture and return a Picture wrapper |
| 721 | /// |
| 722 | /// This is a thin wrapper around [create_picture] that allocates an id for the Picture. |
| 723 | /// This function returns the resulting `PictureWrapper` that owns the created Picture and frees |
| 724 | /// it in `Drop`. |
| 725 | /// |
| 726 | /// Errors can come from the call to [X11Connection::generate_id] or [create_picture]. |
| 727 | pub fn create_picture(conn: C, drawable: xproto::Drawable, format: Pictformat, value_list: &CreatePictureAux) -> Result<Self, ReplyOrIdError> |
| 728 | { |
| 729 | let pid: u32 = conn.generate_id()?; |
| 730 | let _ = create_picture(&conn, pid, drawable, format, value_list)?; |
| 731 | Ok(Self::for_picture(conn, id:pid)) |
| 732 | } |
| 733 | } |
| 734 | |
| 735 | impl<'c, C: X11Connection> PictureWrapper<&'c C> |
| 736 | { |
| 737 | /// Create a new Picture and return a Picture wrapper and a cookie. |
| 738 | /// |
| 739 | /// This is a thin wrapper around [create_solid_fill] that allocates an id for the Picture. |
| 740 | /// This function returns the resulting `PictureWrapper` that owns the created Picture and frees |
| 741 | /// it in `Drop`. This also returns a `VoidCookie` that comes from the call to |
| 742 | /// [create_solid_fill]. |
| 743 | /// |
| 744 | /// Errors can come from the call to [X11Connection::generate_id] or [create_solid_fill]. |
| 745 | pub fn create_solid_fill_and_get_cookie(conn: &'c C, color: Color) -> Result<(Self, VoidCookie<'c, C>), ReplyOrIdError> |
| 746 | { |
| 747 | let picture: u32 = conn.generate_id()?; |
| 748 | let cookie: VoidCookie<'_, C> = create_solid_fill(conn, picture, color)?; |
| 749 | Ok((Self::for_picture(conn, id:picture), cookie)) |
| 750 | } |
| 751 | } |
| 752 | impl<C: X11Connection> PictureWrapper<C> |
| 753 | { |
| 754 | /// Create a new Picture and return a Picture wrapper |
| 755 | /// |
| 756 | /// This is a thin wrapper around [create_solid_fill] that allocates an id for the Picture. |
| 757 | /// This function returns the resulting `PictureWrapper` that owns the created Picture and frees |
| 758 | /// it in `Drop`. |
| 759 | /// |
| 760 | /// Errors can come from the call to [X11Connection::generate_id] or [create_solid_fill]. |
| 761 | pub fn create_solid_fill(conn: C, color: Color) -> Result<Self, ReplyOrIdError> |
| 762 | { |
| 763 | let picture: u32 = conn.generate_id()?; |
| 764 | let _ = create_solid_fill(&conn, picture, color)?; |
| 765 | Ok(Self::for_picture(conn, id:picture)) |
| 766 | } |
| 767 | } |
| 768 | |
| 769 | impl<'c, C: X11Connection> PictureWrapper<&'c C> |
| 770 | { |
| 771 | /// Create a new Picture and return a Picture wrapper and a cookie. |
| 772 | /// |
| 773 | /// This is a thin wrapper around [create_linear_gradient] that allocates an id for the Picture. |
| 774 | /// This function returns the resulting `PictureWrapper` that owns the created Picture and frees |
| 775 | /// it in `Drop`. This also returns a `VoidCookie` that comes from the call to |
| 776 | /// [create_linear_gradient]. |
| 777 | /// |
| 778 | /// Errors can come from the call to [X11Connection::generate_id] or [create_linear_gradient]. |
| 779 | pub fn create_linear_gradient_and_get_cookie(conn: &'c C, p1: Pointfix, p2: Pointfix, stops: &[Fixed], colors: &[Color]) -> Result<(Self, VoidCookie<'c, C>), ReplyOrIdError> |
| 780 | { |
| 781 | let picture: u32 = conn.generate_id()?; |
| 782 | let cookie: VoidCookie<'_, C> = create_linear_gradient(conn, picture, p1, p2, stops, colors)?; |
| 783 | Ok((Self::for_picture(conn, id:picture), cookie)) |
| 784 | } |
| 785 | } |
| 786 | impl<C: X11Connection> PictureWrapper<C> |
| 787 | { |
| 788 | /// Create a new Picture and return a Picture wrapper |
| 789 | /// |
| 790 | /// This is a thin wrapper around [create_linear_gradient] that allocates an id for the Picture. |
| 791 | /// This function returns the resulting `PictureWrapper` that owns the created Picture and frees |
| 792 | /// it in `Drop`. |
| 793 | /// |
| 794 | /// Errors can come from the call to [X11Connection::generate_id] or [create_linear_gradient]. |
| 795 | pub fn create_linear_gradient(conn: C, p1: Pointfix, p2: Pointfix, stops: &[Fixed], colors: &[Color]) -> Result<Self, ReplyOrIdError> |
| 796 | { |
| 797 | let picture: u32 = conn.generate_id()?; |
| 798 | let _ = create_linear_gradient(&conn, picture, p1, p2, stops, colors)?; |
| 799 | Ok(Self::for_picture(conn, id:picture)) |
| 800 | } |
| 801 | } |
| 802 | |
| 803 | impl<'c, C: X11Connection> PictureWrapper<&'c C> |
| 804 | { |
| 805 | /// Create a new Picture and return a Picture wrapper and a cookie. |
| 806 | /// |
| 807 | /// This is a thin wrapper around [create_radial_gradient] that allocates an id for the Picture. |
| 808 | /// This function returns the resulting `PictureWrapper` that owns the created Picture and frees |
| 809 | /// it in `Drop`. This also returns a `VoidCookie` that comes from the call to |
| 810 | /// [create_radial_gradient]. |
| 811 | /// |
| 812 | /// Errors can come from the call to [X11Connection::generate_id] or [create_radial_gradient]. |
| 813 | pub fn create_radial_gradient_and_get_cookie(conn: &'c C, inner: Pointfix, outer: Pointfix, inner_radius: Fixed, outer_radius: Fixed, stops: &[Fixed], colors: &[Color]) -> Result<(Self, VoidCookie<'c, C>), ReplyOrIdError> |
| 814 | { |
| 815 | let picture: u32 = conn.generate_id()?; |
| 816 | let cookie: VoidCookie<'_, C> = create_radial_gradient(conn, picture, inner, outer, inner_radius, outer_radius, stops, colors)?; |
| 817 | Ok((Self::for_picture(conn, id:picture), cookie)) |
| 818 | } |
| 819 | } |
| 820 | impl<C: X11Connection> PictureWrapper<C> |
| 821 | { |
| 822 | /// Create a new Picture and return a Picture wrapper |
| 823 | /// |
| 824 | /// This is a thin wrapper around [create_radial_gradient] that allocates an id for the Picture. |
| 825 | /// This function returns the resulting `PictureWrapper` that owns the created Picture and frees |
| 826 | /// it in `Drop`. |
| 827 | /// |
| 828 | /// Errors can come from the call to [X11Connection::generate_id] or [create_radial_gradient]. |
| 829 | pub fn create_radial_gradient(conn: C, inner: Pointfix, outer: Pointfix, inner_radius: Fixed, outer_radius: Fixed, stops: &[Fixed], colors: &[Color]) -> Result<Self, ReplyOrIdError> |
| 830 | { |
| 831 | let picture: u32 = conn.generate_id()?; |
| 832 | let _ = create_radial_gradient(&conn, picture, inner, outer, inner_radius, outer_radius, stops, colors)?; |
| 833 | Ok(Self::for_picture(conn, id:picture)) |
| 834 | } |
| 835 | } |
| 836 | |
| 837 | impl<'c, C: X11Connection> PictureWrapper<&'c C> |
| 838 | { |
| 839 | /// Create a new Picture and return a Picture wrapper and a cookie. |
| 840 | /// |
| 841 | /// This is a thin wrapper around [create_conical_gradient] that allocates an id for the Picture. |
| 842 | /// This function returns the resulting `PictureWrapper` that owns the created Picture and frees |
| 843 | /// it in `Drop`. This also returns a `VoidCookie` that comes from the call to |
| 844 | /// [create_conical_gradient]. |
| 845 | /// |
| 846 | /// Errors can come from the call to [X11Connection::generate_id] or [create_conical_gradient]. |
| 847 | pub fn create_conical_gradient_and_get_cookie(conn: &'c C, center: Pointfix, angle: Fixed, stops: &[Fixed], colors: &[Color]) -> Result<(Self, VoidCookie<'c, C>), ReplyOrIdError> |
| 848 | { |
| 849 | let picture: u32 = conn.generate_id()?; |
| 850 | let cookie: VoidCookie<'_, C> = create_conical_gradient(conn, picture, center, angle, stops, colors)?; |
| 851 | Ok((Self::for_picture(conn, id:picture), cookie)) |
| 852 | } |
| 853 | } |
| 854 | impl<C: X11Connection> PictureWrapper<C> |
| 855 | { |
| 856 | /// Create a new Picture and return a Picture wrapper |
| 857 | /// |
| 858 | /// This is a thin wrapper around [create_conical_gradient] that allocates an id for the Picture. |
| 859 | /// This function returns the resulting `PictureWrapper` that owns the created Picture and frees |
| 860 | /// it in `Drop`. |
| 861 | /// |
| 862 | /// Errors can come from the call to [X11Connection::generate_id] or [create_conical_gradient]. |
| 863 | pub fn create_conical_gradient(conn: C, center: Pointfix, angle: Fixed, stops: &[Fixed], colors: &[Color]) -> Result<Self, ReplyOrIdError> |
| 864 | { |
| 865 | let picture: u32 = conn.generate_id()?; |
| 866 | let _ = create_conical_gradient(&conn, picture, center, angle, stops, colors)?; |
| 867 | Ok(Self::for_picture(conn, id:picture)) |
| 868 | } |
| 869 | } |
| 870 | |
| 871 | impl<C: RequestConnection> From<&PictureWrapper<C>> for Picture { |
| 872 | fn from(from: &PictureWrapper<C>) -> Self { |
| 873 | from.1 |
| 874 | } |
| 875 | } |
| 876 | |
| 877 | impl<C: RequestConnection> Drop for PictureWrapper<C> { |
| 878 | fn drop(&mut self) { |
| 879 | let _ = free_picture(&self.0, self.1); |
| 880 | } |
| 881 | } |
| 882 | |
| 883 | /// A RAII-like wrapper around a [Glyphset]. |
| 884 | /// |
| 885 | /// Instances of this struct represent a Glyphset that is freed in `Drop`. |
| 886 | /// |
| 887 | /// Any errors during `Drop` are silently ignored. Most likely an error here means that your |
| 888 | /// X11 connection is broken and later requests will also fail. |
| 889 | #[derive (Debug)] |
| 890 | pub struct GlyphsetWrapper<C: RequestConnection>(C, Glyphset); |
| 891 | |
| 892 | impl<C: RequestConnection> GlyphsetWrapper<C> |
| 893 | { |
| 894 | /// Assume ownership of the given resource and destroy it in `Drop`. |
| 895 | pub fn for_glyphset(conn: C, id: Glyphset) -> Self { |
| 896 | GlyphsetWrapper(conn, id) |
| 897 | } |
| 898 | |
| 899 | /// Get the XID of the wrapped resource |
| 900 | pub fn glyphset(&self) -> Glyphset { |
| 901 | self.1 |
| 902 | } |
| 903 | |
| 904 | /// Assume ownership of the XID of the wrapped resource |
| 905 | /// |
| 906 | /// This function destroys this wrapper without freeing the underlying resource. |
| 907 | pub fn into_glyphset(self) -> Glyphset { |
| 908 | let id: u32 = self.1; |
| 909 | std::mem::forget(self); |
| 910 | id |
| 911 | } |
| 912 | } |
| 913 | |
| 914 | impl<'c, C: X11Connection> GlyphsetWrapper<&'c C> |
| 915 | { |
| 916 | /// Create a new Glyphset and return a Glyphset wrapper and a cookie. |
| 917 | /// |
| 918 | /// This is a thin wrapper around [create_glyph_set] that allocates an id for the Glyphset. |
| 919 | /// This function returns the resulting `GlyphsetWrapper` that owns the created Glyphset and frees |
| 920 | /// it in `Drop`. This also returns a `VoidCookie` that comes from the call to |
| 921 | /// [create_glyph_set]. |
| 922 | /// |
| 923 | /// Errors can come from the call to [X11Connection::generate_id] or [create_glyph_set]. |
| 924 | pub fn create_glyph_set_and_get_cookie(conn: &'c C, format: Pictformat) -> Result<(Self, VoidCookie<'c, C>), ReplyOrIdError> |
| 925 | { |
| 926 | let gsid: u32 = conn.generate_id()?; |
| 927 | let cookie: VoidCookie<'_, C> = create_glyph_set(conn, gsid, format)?; |
| 928 | Ok((Self::for_glyphset(conn, id:gsid), cookie)) |
| 929 | } |
| 930 | } |
| 931 | impl<C: X11Connection> GlyphsetWrapper<C> |
| 932 | { |
| 933 | /// Create a new Glyphset and return a Glyphset wrapper |
| 934 | /// |
| 935 | /// This is a thin wrapper around [create_glyph_set] that allocates an id for the Glyphset. |
| 936 | /// This function returns the resulting `GlyphsetWrapper` that owns the created Glyphset and frees |
| 937 | /// it in `Drop`. |
| 938 | /// |
| 939 | /// Errors can come from the call to [X11Connection::generate_id] or [create_glyph_set]. |
| 940 | pub fn create_glyph_set(conn: C, format: Pictformat) -> Result<Self, ReplyOrIdError> |
| 941 | { |
| 942 | let gsid: u32 = conn.generate_id()?; |
| 943 | let _ = create_glyph_set(&conn, gsid, format)?; |
| 944 | Ok(Self::for_glyphset(conn, id:gsid)) |
| 945 | } |
| 946 | } |
| 947 | |
| 948 | impl<C: RequestConnection> From<&GlyphsetWrapper<C>> for Glyphset { |
| 949 | fn from(from: &GlyphsetWrapper<C>) -> Self { |
| 950 | from.1 |
| 951 | } |
| 952 | } |
| 953 | |
| 954 | impl<C: RequestConnection> Drop for GlyphsetWrapper<C> { |
| 955 | fn drop(&mut self) { |
| 956 | let _ = free_glyph_set(&self.0, self.1); |
| 957 | } |
| 958 | } |
| 959 | |