mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1205643 - Move scrollbar borders to slider to receive button events. r=karlt
This commit is contained in:
parent
8ffc1938d3
commit
1aea6b3e9f
@ -1188,13 +1188,21 @@ nsSliderFrame::IsEventOverThumb(WidgetGUIEvent* aEvent)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool isHorizontal = IsHorizontal();
|
||||
nsRect thumbRect = thumbFrame->GetRect();
|
||||
#if defined(MOZ_WIDGET_GTK)
|
||||
/* Scrollbar track can have padding, so it's better to check that eventPoint
|
||||
* is inside of actual thumb, not just its one axis. The part of the scrollbar
|
||||
* track adjacent to thumb can actually receive events in GTK3 */
|
||||
return eventPoint.x >= thumbRect.x && eventPoint.x < thumbRect.XMost() &&
|
||||
eventPoint.y >= thumbRect.y && eventPoint.y < thumbRect.YMost();
|
||||
#else
|
||||
bool isHorizontal = IsHorizontal();
|
||||
nscoord eventPos = isHorizontal ? eventPoint.x : eventPoint.y;
|
||||
nscoord thumbStart = isHorizontal ? thumbRect.x : thumbRect.y;
|
||||
nscoord thumbEnd = isHorizontal ? thumbRect.XMost() : thumbRect.YMost();
|
||||
|
||||
return eventPos >= thumbStart && eventPos < thumbEnd;
|
||||
#endif
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
|
@ -1123,7 +1123,21 @@ moz_gtk_scrollbar_button_paint(cairo_t *cr, GdkRectangle* rect,
|
||||
} else {
|
||||
gtk_style_context_add_class(style, GTK_STYLE_CLASS_TOP);
|
||||
}
|
||||
|
||||
|
||||
/* Scrollbar button has to be inset by trough_border because its DOM element
|
||||
* is filling width of vertical scrollbar's track (or height in case
|
||||
* of horizontal scrollbars). */
|
||||
|
||||
MozGtkScrollbarMetrics metrics;
|
||||
moz_gtk_get_scrollbar_metrics(&metrics);
|
||||
if (flags & MOZ_GTK_STEPPER_VERTICAL) {
|
||||
rect->x += metrics.trough_border;
|
||||
rect->width = metrics.slider_width;
|
||||
} else {
|
||||
rect->y += metrics.trough_border;
|
||||
rect->height = metrics.slider_width;
|
||||
}
|
||||
|
||||
gtk_render_background(style, cr, rect->x, rect->y, rect->width, rect->height);
|
||||
gtk_render_frame(style, cr, rect->x, rect->y, rect->width, rect->height);
|
||||
|
||||
|
@ -1211,11 +1211,21 @@ nsNativeThemeGTK::GetWidgetBorder(nsDeviceContext* aContext, nsIFrame* aFrame,
|
||||
aResult->top = aResult->left = aResult->right = aResult->bottom = 0;
|
||||
switch (aWidgetType) {
|
||||
case NS_THEME_SCROLLBAR_VERTICAL:
|
||||
case NS_THEME_SCROLLBAR_HORIZONTAL:
|
||||
case NS_THEME_SCROLLBAR_TRACK_HORIZONTAL:
|
||||
{
|
||||
MozGtkScrollbarMetrics metrics;
|
||||
moz_gtk_get_scrollbar_metrics(&metrics);
|
||||
aResult->top = aResult->left = aResult->right = aResult->bottom = metrics.trough_border;
|
||||
/* Top and bottom border for whole vertical scrollbar, top and bottom
|
||||
* border for horizontal track - to correctly position thumb element */
|
||||
aResult->top = aResult->bottom = metrics.trough_border;
|
||||
}
|
||||
break;
|
||||
case NS_THEME_SCROLLBAR_HORIZONTAL:
|
||||
case NS_THEME_SCROLLBAR_TRACK_VERTICAL:
|
||||
{
|
||||
MozGtkScrollbarMetrics metrics;
|
||||
moz_gtk_get_scrollbar_metrics(&metrics);
|
||||
aResult->left = aResult->right = metrics.trough_border;
|
||||
}
|
||||
break;
|
||||
case NS_THEME_TOOLBOX:
|
||||
@ -1748,6 +1758,8 @@ nsNativeThemeGTK::ThemeSupportsWidget(nsPresContext* aPresContext,
|
||||
case NS_THEME_SCROLLBAR_BUTTON_RIGHT:
|
||||
case NS_THEME_SCROLLBAR_HORIZONTAL:
|
||||
case NS_THEME_SCROLLBAR_VERTICAL:
|
||||
case NS_THEME_SCROLLBAR_TRACK_HORIZONTAL:
|
||||
case NS_THEME_SCROLLBAR_TRACK_VERTICAL:
|
||||
case NS_THEME_SCROLLBAR_THUMB_HORIZONTAL:
|
||||
case NS_THEME_SCROLLBAR_THUMB_VERTICAL:
|
||||
case NS_THEME_NUMBER_INPUT:
|
||||
|
Loading…
Reference in New Issue
Block a user