2016-11-12 11:56:39 +00:00
|
|
|
#include <xcb/xcb_icccm.h>
|
|
|
|
|
2016-11-02 19:22:45 +00:00
|
|
|
#include "x11/window.hpp"
|
|
|
|
#include "x11/xutils.hpp"
|
|
|
|
|
|
|
|
LEMONBUDDY_NS
|
|
|
|
|
2016-11-12 11:56:39 +00:00
|
|
|
window window::create_checked(int16_t x, int16_t y, uint16_t w, uint16_t h) {
|
|
|
|
if (*this == XCB_NONE) {
|
|
|
|
resource(connection(), connection().generate_id());
|
|
|
|
}
|
|
|
|
|
|
|
|
auto root = connection().screen()->root;
|
|
|
|
auto copy = XCB_COPY_FROM_PARENT;
|
|
|
|
connection().create_window_checked(copy, *this, root, x, y, w, h, 0, copy, copy, 0, nullptr);
|
|
|
|
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
|
|
|
window window::create_checked(int16_t x, int16_t y, uint16_t w, uint16_t h, uint32_t mask, const xcb_params_cw_t* p) {
|
|
|
|
if (*this == XCB_NONE) {
|
|
|
|
resource(connection(), connection().generate_id());
|
|
|
|
}
|
|
|
|
|
|
|
|
auto root = connection().screen()->root;
|
|
|
|
auto copy = XCB_COPY_FROM_PARENT;
|
|
|
|
uint32_t values[16];
|
|
|
|
xutils::pack_values(mask, p, values);
|
|
|
|
connection().create_window_checked(copy, *this, root, x, y, w, h, 0, copy, copy, mask, values);
|
|
|
|
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
|
|
|
window window::create_checked(uint16_t w, uint16_t h, uint32_t mask, const xcb_params_cw_t* p) {
|
|
|
|
return create_checked(0, 0, w, h, mask, p);
|
|
|
|
}
|
|
|
|
|
|
|
|
window window::reconfigure_geom(uint16_t w, uint16_t h, int16_t x, int16_t y) {
|
|
|
|
uint32_t mask = 0;
|
|
|
|
uint32_t values[7];
|
|
|
|
|
|
|
|
xcb_params_configure_window_t params;
|
|
|
|
XCB_AUX_ADD_PARAM(&mask, ¶ms, width, w);
|
|
|
|
XCB_AUX_ADD_PARAM(&mask, ¶ms, height, h);
|
|
|
|
XCB_AUX_ADD_PARAM(&mask, ¶ms, x, x);
|
|
|
|
XCB_AUX_ADD_PARAM(&mask, ¶ms, y, y);
|
|
|
|
|
|
|
|
xutils::pack_values(mask, ¶ms, values);
|
|
|
|
connection().configure_window_checked(*this, mask, values);
|
|
|
|
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
|
|
|
window window::reconfigure_pos(int16_t x, int16_t y) {
|
|
|
|
uint32_t mask = 0;
|
|
|
|
uint32_t values[7];
|
|
|
|
|
|
|
|
xcb_params_configure_window_t params;
|
|
|
|
XCB_AUX_ADD_PARAM(&mask, ¶ms, x, x);
|
|
|
|
XCB_AUX_ADD_PARAM(&mask, ¶ms, y, y);
|
|
|
|
|
|
|
|
xutils::pack_values(mask, ¶ms, values);
|
|
|
|
connection().configure_window_checked(*this, mask, values);
|
|
|
|
|
2016-11-02 19:22:45 +00:00
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
2016-11-12 11:56:39 +00:00
|
|
|
void window::redraw() {
|
|
|
|
xutils::visibility_notify(connection(), *this, XCB_VISIBILITY_FULLY_OBSCURED);
|
|
|
|
xutils::visibility_notify(connection(), *this, XCB_VISIBILITY_UNOBSCURED);
|
|
|
|
connection().flush();
|
2016-11-02 19:22:45 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
LEMONBUDDY_NS_END
|