Guest User

Untitled

a guest
Jun 23rd, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.00 KB | None | 0 0
  1. fn set_strut(window: &gtk::Window, is_top: bool, rect: Rectangle) {
  2. let ptr: *mut gdk_sys::GdkWindow = window.get_window().unwrap().to_glib_none().0;
  3.  
  4. unsafe {
  5. // atoms
  6. let strut = CString::new("_NET_WM_STRUT").unwrap();
  7. let partial = CString::new("_NET_WM_STRUT_PARTIAL").unwrap();
  8. let cardinal = CString::new("CARDINAL").unwrap();
  9. let strut = gdk_sys::gdk_atom_intern(strut.as_ptr(), 0);
  10. let cardinal = gdk_sys::gdk_atom_intern(cardinal.as_ptr(), 0);
  11. let partial = gdk_sys::gdk_atom_intern(partial.as_ptr(), 0);
  12. // strut
  13. let format: c_int = 16; // number of bits (must be 8, 16 or 32)
  14. let mode: c_int = 0; // PROP_MODE_REPLACE
  15. // get height bytes
  16. let (lo, hi) = ((rect.height & 0xFF) as u8, (rect.height >> 8) as u8);
  17. let data = if is_top {[
  18. 0, 0, // left
  19. 0, 0, // right
  20. lo, hi, // top
  21. 0, 0, // bottom
  22. ]} else {[
  23. 0, 0, // left
  24. 0, 0, // right
  25. 0, 0, // top
  26. lo, hi, // bottom
  27. ]};
  28. let data_ptr: *const u8 = data.as_ptr();
  29. let el: c_int = 4 as i32;
  30. gdk_sys::gdk_property_change(
  31. ptr, // window:
  32. strut, // property:
  33. cardinal, // type_:
  34. format, // format:
  35. mode, // mode:
  36. data_ptr, // data:
  37. el, // nelements:
  38. );
  39. // partial
  40. let x1 = rect.x + rect.width - 1;
  41. let (x0lo, x0hi) = ((rect.x & 0xFF) as u8, (rect.x >> 8) as u8);
  42. let (x1lo, x1hi) = ((x1 & 0xFF) as u8, (x1 >> 8) as u8);
  43. let data = if is_top {[
  44. 0, 0, // left
  45. 0, 0, // right
  46. lo, hi, // top
  47. 0, 0, // bottom
  48. 0, 0, // start
  49. 0, 0, // end
  50. 0, 0, // start
  51. 0, 0, // end
  52. x0lo, x0hi, // start
  53. x1lo, x1hi, // end
  54. 0, 0, // start
  55. 0, 0, // end
  56. ]} else {[
  57. 0, 0, // left
  58. 0, 0, // right
  59. 0, 0, // top
  60. lo, hi, // bottom
  61. 0, 0, // start
  62. 0, 0, // end
  63. 0, 0, // start
  64. 0, 0, // end
  65. 0, 0, // start
  66. 0, 0, // end
  67. x0lo, x0hi, // start
  68. x1lo, x1hi, // end
  69. ]};
  70. // left, right, top, bottom
  71. let data_ptr: *const u8 = data.as_ptr();
  72. let el: c_int = 12 as i32;
  73. gdk_sys::gdk_property_change(
  74. ptr, // window:
  75. partial, // property:
  76. cardinal, // type_:
  77. format, // format:
  78. mode, // mode:
  79. data_ptr, // data:
  80. el, // nelements:
  81. );
  82. }
  83. }
Add Comment
Please, Sign In to add comment