texthandles: Move start handle to bottom
The asset is going to change to point upwards, so physically place the handle below the text position. https://bugzilla.gnome.org/show_bug.cgi?id=750692
This commit is contained in:
@ -243,20 +243,16 @@ gtk_text_handle_widget_event (GtkWidget *widget,
|
|||||||
event->motion.state & GDK_BUTTON1_MASK &&
|
event->motion.state & GDK_BUTTON1_MASK &&
|
||||||
priv->windows[pos].dragged)
|
priv->windows[pos].dragged)
|
||||||
{
|
{
|
||||||
gint x, y, width, height, handle_height;
|
gint x, y, width, handle_height;
|
||||||
GtkAllocation allocation;
|
GtkAllocation allocation;
|
||||||
|
|
||||||
gtk_widget_get_allocation (priv->windows[pos].widget, &allocation);
|
gtk_widget_get_allocation (priv->windows[pos].widget, &allocation);
|
||||||
width = allocation.width;
|
width = allocation.width;
|
||||||
height = allocation.height;
|
|
||||||
_gtk_text_handle_get_size (handle, NULL, &handle_height);
|
_gtk_text_handle_get_size (handle, NULL, &handle_height);
|
||||||
|
|
||||||
x = event->motion.x - priv->windows[pos].dx + (width / 2);
|
x = event->motion.x - priv->windows[pos].dx + (width / 2);
|
||||||
y = event->motion.y - priv->windows[pos].dy;
|
y = event->motion.y - priv->windows[pos].dy +
|
||||||
|
priv->windows[pos].pointing_to.height / 2;
|
||||||
if (pos != GTK_TEXT_HANDLE_POSITION_CURSOR)
|
|
||||||
y += height - handle_height;
|
|
||||||
|
|
||||||
y += priv->windows[pos].pointing_to.height / 2;
|
|
||||||
|
|
||||||
gtk_widget_translate_coordinates (widget, priv->parent, x, y, &x, &y);
|
gtk_widget_translate_coordinates (widget, priv->parent, x, y, &x, &y);
|
||||||
g_signal_emit (handle, signals[HANDLE_DRAGGED], 0, pos, x, y);
|
g_signal_emit (handle, signals[HANDLE_DRAGGED], 0, pos, x, y);
|
||||||
@ -372,7 +368,6 @@ _gtk_text_handle_update (GtkTextHandle *handle,
|
|||||||
handle_window->mode_visible && handle_window->user_visible)
|
handle_window->mode_visible && handle_window->user_visible)
|
||||||
{
|
{
|
||||||
cairo_rectangle_int_t rect;
|
cairo_rectangle_int_t rect;
|
||||||
GtkPositionType handle_pos;
|
|
||||||
gint width, height;
|
gint width, height;
|
||||||
GtkWidget *window;
|
GtkWidget *window;
|
||||||
GtkBorder shadow;
|
GtkBorder shadow;
|
||||||
@ -395,24 +390,14 @@ _gtk_text_handle_update (GtkTextHandle *handle,
|
|||||||
gtk_widget_translate_coordinates (priv->parent, window,
|
gtk_widget_translate_coordinates (priv->parent, window,
|
||||||
rect.x, rect.y, &rect.x, &rect.y);
|
rect.x, rect.y, &rect.x, &rect.y);
|
||||||
|
|
||||||
if (pos == GTK_TEXT_HANDLE_POSITION_CURSOR)
|
if (pos == GTK_TEXT_HANDLE_POSITION_CURSOR &&
|
||||||
{
|
priv->mode == GTK_TEXT_HANDLE_MODE_CURSOR)
|
||||||
handle_pos = GTK_POS_BOTTOM;
|
rect.x -= rect.width / 2;
|
||||||
if (priv->mode == GTK_TEXT_HANDLE_MODE_CURSOR)
|
else if (pos == GTK_TEXT_HANDLE_POSITION_SELECTION_START)
|
||||||
rect.x -= rect.width / 2;
|
rect.x -= rect.width;
|
||||||
|
|
||||||
border->top = height;
|
border->top = height;
|
||||||
border->bottom = handle_window->pointing_to.height;
|
border->bottom = handle_window->pointing_to.height;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
handle_pos = GTK_POS_TOP;
|
|
||||||
rect.y += handle_window->pointing_to.height;
|
|
||||||
rect.x -= rect.width;
|
|
||||||
|
|
||||||
border->top = handle_window->pointing_to.height;
|
|
||||||
border->bottom = height;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* The goal is to make the window 3 times as wide and high. The handle
|
/* The goal is to make the window 3 times as wide and high. The handle
|
||||||
* will be rendered in the center, making the rest an invisible border.
|
* will be rendered in the center, making the rest an invisible border.
|
||||||
@ -447,7 +432,7 @@ _gtk_text_handle_update (GtkTextHandle *handle,
|
|||||||
gtk_widget_show (handle_window->widget);
|
gtk_widget_show (handle_window->widget);
|
||||||
_gtk_window_set_popover_position (GTK_WINDOW (window),
|
_gtk_window_set_popover_position (GTK_WINDOW (window),
|
||||||
handle_window->widget,
|
handle_window->widget,
|
||||||
handle_pos, &rect);
|
GTK_POS_BOTTOM, &rect);
|
||||||
}
|
}
|
||||||
else if (handle_window->widget)
|
else if (handle_window->widget)
|
||||||
gtk_widget_hide (handle_window->widget);
|
gtk_widget_hide (handle_window->widget);
|
||||||
|
|||||||
Reference in New Issue
Block a user