added edge resize modes
This commit is contained in:
parent
474e201745
commit
daca07edaf
4 changed files with 40 additions and 30 deletions
|
@ -1,6 +1,9 @@
|
|||
(Format: Year/Month/Day)
|
||||
Changes for 1.0.1:
|
||||
*07/12/11:
|
||||
* Added new resize modes for key command StartResizing: NearestEdge, Left,
|
||||
Right, Top, Bottom (Mark)
|
||||
Window.cc
|
||||
* Only allow one menu to be open at a time (Mark)
|
||||
FbTk/Menu.cc/hh
|
||||
*07/12/09:
|
||||
|
|
|
@ -69,6 +69,10 @@ FbWinFrameTheme::FbWinFrameTheme(int screen_num):
|
|||
m_cursor_lower_right_angle = XCreateFontCursor(disp, XC_lr_angle);
|
||||
m_cursor_upper_right_angle = XCreateFontCursor(disp, XC_ur_angle);
|
||||
m_cursor_upper_left_angle = XCreateFontCursor(disp, XC_ul_angle);
|
||||
m_cursor_left_side = XCreateFontCursor(disp, XC_left_side);
|
||||
m_cursor_top_side = XCreateFontCursor(disp, XC_top_side);
|
||||
m_cursor_right_side = XCreateFontCursor(disp, XC_right_side);
|
||||
m_cursor_bottom_side = XCreateFontCursor(disp, XC_bottom_side);
|
||||
|
||||
reconfigTheme();
|
||||
}
|
||||
|
|
|
@ -78,6 +78,10 @@ public:
|
|||
inline Cursor lowerRightAngleCursor() const { return m_cursor_lower_right_angle; }
|
||||
inline Cursor upperLeftAngleCursor() const { return m_cursor_upper_left_angle; }
|
||||
inline Cursor upperRightAngleCursor() const { return m_cursor_upper_right_angle; }
|
||||
inline Cursor leftSideCursor() const { return m_cursor_left_side; }
|
||||
inline Cursor rightSideCursor() const { return m_cursor_right_side; }
|
||||
inline Cursor topSideCursor() const { return m_cursor_top_side; }
|
||||
inline Cursor bottomSideCursor() const { return m_cursor_bottom_side; }
|
||||
|
||||
inline Shape::ShapePlace shapePlace() const { return *m_shape_place; }
|
||||
inline const BorderTheme &border() const { return m_border; }
|
||||
|
@ -114,6 +118,10 @@ private:
|
|||
Cursor m_cursor_lower_right_angle;
|
||||
Cursor m_cursor_upper_left_angle;
|
||||
Cursor m_cursor_upper_right_angle;
|
||||
Cursor m_cursor_left_side;
|
||||
Cursor m_cursor_right_side;
|
||||
Cursor m_cursor_top_side;
|
||||
Cursor m_cursor_bottom_side;
|
||||
unsigned char m_focused_alpha;
|
||||
unsigned char m_unfocused_alpha;
|
||||
|
||||
|
|
|
@ -2788,20 +2788,23 @@ void FluxboxWindow::motionNotifyEvent(XMotionEvent &me) {
|
|||
|
||||
int dx = me.x - m_button_grab_x;
|
||||
int dy = me.y - m_button_grab_y;
|
||||
switch (m_resize_corner) {
|
||||
case LEFTTOP:
|
||||
m_last_resize_w = frame().width() - dx;
|
||||
m_last_resize_x = frame().x() + dx;
|
||||
// no break, use code below too
|
||||
case RIGHTTOP:
|
||||
if (m_resize_corner == LEFTTOP || m_resize_corner == LEFTBOTTOM ||
|
||||
m_resize_corner == LEFT) {
|
||||
m_last_resize_w = frame().width() - dx;
|
||||
m_last_resize_x = frame().x() + dx;
|
||||
}
|
||||
if (m_resize_corner == LEFTTOP || m_resize_corner == RIGHTTOP ||
|
||||
m_resize_corner == TOP) {
|
||||
m_last_resize_h = frame().height() - dy;
|
||||
m_last_resize_y = frame().y() + dy;
|
||||
break;
|
||||
case LEFTBOTTOM:
|
||||
m_last_resize_w = frame().width() - dx;
|
||||
m_last_resize_x = frame().x() + dx;
|
||||
break;
|
||||
case ALLCORNERS:
|
||||
}
|
||||
if (m_resize_corner == LEFTBOTTOM || m_resize_corner == BOTTOM ||
|
||||
m_resize_corner == RIGHTBOTTOM)
|
||||
m_last_resize_h = frame().height() + dy;
|
||||
if (m_resize_corner == RIGHTBOTTOM || m_resize_corner == RIGHTTOP ||
|
||||
m_resize_corner == RIGHT)
|
||||
m_last_resize_w = frame().width() + dx;
|
||||
if (m_resize_corner == ALLCORNERS) {
|
||||
// dx or dy must be at least 2
|
||||
if (abs(dx) >= 2 || abs(dy) >= 2) {
|
||||
// take max and make it even
|
||||
|
@ -2813,21 +2816,7 @@ void FluxboxWindow::motionNotifyEvent(XMotionEvent &me) {
|
|||
m_last_resize_x = frame().x() - diff/2;
|
||||
m_last_resize_y = frame().y() - diff/2;
|
||||
}
|
||||
break;
|
||||
default: // kill warning
|
||||
break;
|
||||
};
|
||||
|
||||
// if not on top or all corner then move bottom
|
||||
|
||||
if (!(m_resize_corner == LEFTTOP || m_resize_corner == RIGHTTOP ||
|
||||
m_resize_corner == ALLCORNERS))
|
||||
m_last_resize_h = frame().height() + dy;
|
||||
|
||||
// if not top or left bottom or all corners then move right side
|
||||
if (!(m_resize_corner == LEFTTOP || m_resize_corner == LEFTBOTTOM ||
|
||||
m_resize_corner == ALLCORNERS))
|
||||
m_last_resize_w = frame().width() + dx;
|
||||
}
|
||||
|
||||
fixsize(&gx, &gy);
|
||||
|
||||
|
@ -3402,7 +3391,7 @@ FluxboxWindow::ResizeDirection FluxboxWindow::getResizeDirection(int x, int y,
|
|||
if (model == CENTERRESIZE)
|
||||
return ALLCORNERS;
|
||||
if (model == NEARESTEDGERESIZE) {
|
||||
if (abs(cy - abs(y - cy)) > abs(cx - abs(x - cx))) // y is nearest
|
||||
if (cy - abs(y - cy) < cx - abs(x - cx)) // y is nearest
|
||||
return (y > cy) ? BOTTOM : TOP;
|
||||
return (x > cx) ? RIGHT : LEFT;
|
||||
}
|
||||
|
@ -3437,6 +3426,10 @@ void FluxboxWindow::startResizing(int x, int y, ResizeDirection dir) {
|
|||
const Cursor& cursor = (m_resize_corner == LEFTTOP) ? frame().theme().upperLeftAngleCursor() :
|
||||
(m_resize_corner == RIGHTTOP) ? frame().theme().upperRightAngleCursor() :
|
||||
(m_resize_corner == RIGHTBOTTOM) ? frame().theme().lowerRightAngleCursor() :
|
||||
(m_resize_corner == LEFT) ? frame().theme().leftSideCursor() :
|
||||
(m_resize_corner == RIGHT) ? frame().theme().rightSideCursor() :
|
||||
(m_resize_corner == TOP) ? frame().theme().topSideCursor() :
|
||||
(m_resize_corner == BOTTOM) ? frame().theme().bottomSideCursor() :
|
||||
frame().theme().lowerLeftAngleCursor();
|
||||
|
||||
grabPointer(fbWindow().window(),
|
||||
|
@ -3724,11 +3717,13 @@ void FluxboxWindow::fixsize(int *user_w, int *user_h, bool maximizing) {
|
|||
m_last_resize_h = dh + decoration_height;
|
||||
|
||||
// move X if necessary
|
||||
if (m_resize_corner == LEFTTOP || m_resize_corner == LEFTBOTTOM) {
|
||||
if (m_resize_corner == LEFTTOP || m_resize_corner == LEFTBOTTOM ||
|
||||
m_resize_corner == LEFT) {
|
||||
m_last_resize_x = frame().x() + frame().width() - m_last_resize_w;
|
||||
}
|
||||
|
||||
if (m_resize_corner == LEFTTOP || m_resize_corner == RIGHTTOP) {
|
||||
if (m_resize_corner == LEFTTOP || m_resize_corner == RIGHTTOP ||
|
||||
m_resize_corner == TOP) {
|
||||
m_last_resize_y = frame().y() + frame().height() - m_last_resize_h;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue