-void XWindow::resize(unsigned int width, unsigned int height) const {
- XResizeWindow(_epist->getXDisplay(), _window, width, height);
+void XWindow::resizeRel(int dwidth, int dheight) const {
+ // resize in increments if requested by the window
+ unsigned int width = _rect.width(), height = _rect.height();
+
+ unsigned int wdest = width + (dwidth * _inc_x) / _inc_x * _inc_x + _base_x;
+ unsigned int hdest = height + (dheight * _inc_y) / _inc_y * _inc_y + _base_y;
+
+ XResizeWindow(_epist->getXDisplay(), _window, wdest, hdest);
+}
+
+
+void XWindow::resizeAbs(unsigned int width, unsigned int height) const {
+ // resize in increments if requested by the window
+
+ unsigned int wdest = width / _inc_x * _inc_x + _base_x;
+ unsigned int hdest = height / _inc_y * _inc_y + _base_y;
+
+ if (width > wdest) {
+ while (width > wdest)
+ wdest += _inc_x;
+ } else {
+ while (width < wdest)
+ wdest -= _inc_x;
+ }
+ if (height > hdest) {
+ while (height > hdest)
+ hdest += _inc_y;
+ } else {
+ while (height < hdest)
+ hdest -= _inc_y;
+ }
+
+ XResizeWindow(_epist->getXDisplay(), _window, wdest, hdest);