mirror of
https://github.com/brl/mutter.git
synced 2025-01-23 18:09:10 +00:00
2972ab6df6
2005-08-03 Ray Strode <rstrode@redhat.com> Improve the behavior of keyboard move/resize and edge snapping. Still not perfect, bug 310888. * src/effects.c (draw_xor_rect): Make the outside of a wireframe rectangle line up with the outside edge of its window, instead of centering the wireframe edges on the window edges. * src/keybindings.c (process_keyboard_move_grab): allow edge snapping in wireframe mode. Adjust code to take into account changed semantics of find_next_*_edge functions. (process_keyboard_resize_grab_op_change): new function to take some orthogonal logic out of process_keyboard_resize_grab_op. Only allow keyboard resize cursor to go to flat edges, not corners. (process_keyboard_resize_grab): allow edge snapping in wireframe mode. Fix up snapping logic. * src/place.c (get_{vertical,horizontal}_edges): use GArray instead of int *, since the number of output edges isn't known until the middle of the function now. Use xor rect extents instead of window extends if in wireframe mode. (meta_window_find_next_{vertical,horizontal}_edge: add new source_edge_position parameter to specify which edge on the active window to start from when looking for next edge on the screen. Return the coordinate of the edge found and not the coordinate of where the window should be moved to snap to where the edge was found. * src/window.c (update_move): all the user to specify an edge to resize with mouse in keyboard resize mode. window
65 lines
2.2 KiB
C
65 lines
2.2 KiB
C
/* Metacity window placement */
|
|
|
|
/*
|
|
* Copyright (C) 2001 Havoc Pennington
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License as
|
|
* published by the Free Software Foundation; either version 2 of the
|
|
* License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
|
* 02111-1307, USA.
|
|
*/
|
|
|
|
#ifndef META_PLACE_H
|
|
#define META_PLACE_H
|
|
|
|
#include "window.h"
|
|
#include "frame.h"
|
|
|
|
typedef enum _MetaWindowEdgePosition MetaWindowEdgePosition;
|
|
|
|
enum _MetaWindowEdgePosition
|
|
{
|
|
META_WINDOW_EDGE_TOP = 0,
|
|
META_WINDOW_EDGE_LEFT,
|
|
META_WINDOW_EDGE_RIGHT,
|
|
META_WINDOW_EDGE_BOTTOM
|
|
};
|
|
|
|
void meta_window_place (MetaWindow *window,
|
|
MetaFrameGeometry *fgeom,
|
|
int x,
|
|
int y,
|
|
int *new_x,
|
|
int *new_y);
|
|
|
|
/* Returns the position to move the specified window edge to in order
|
|
* to snap it to the next edge in the given direction,
|
|
* while moving.
|
|
*/
|
|
int meta_window_find_next_vertical_edge (MetaWindow *window,
|
|
MetaWindowEdgePosition source_edge_position,
|
|
gboolean down);
|
|
int meta_window_find_next_horizontal_edge (MetaWindow *window,
|
|
MetaWindowEdgePosition source_edge_position,
|
|
gboolean right);
|
|
|
|
/* Returns the position to move the window to in order
|
|
* to snap it to the nearest edge, while moving.
|
|
*/
|
|
int meta_window_find_nearest_vertical_edge (MetaWindow *window,
|
|
int x_pos);
|
|
|
|
int meta_window_find_nearest_horizontal_edge (MetaWindow *window,
|
|
int y_pos);
|
|
#endif
|