[SCM] WebKit Debian packaging branch, debian/experimental, updated. debian/1.3.8-1-1049-g2e11a8e
carlosgc at webkit.org
carlosgc at webkit.org
Fri Jan 21 15:07:23 UTC 2011
The following commit has been merged in the debian/experimental branch:
commit 7c6ce43850c4cf0f321f3c32a81b145cc2f52f11
Author: carlosgc at webkit.org <carlosgc at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Fri Jan 7 13:58:53 2011 +0000
2011-01-07 Carlos Garcia Campos <cgarcia at igalia.com> and Martin Robinson <mrobinson at igalia.com>
Reviewed by Xan Lopez.
[GTK] Port slider painting to GtkStyleContext
https://bugs.webkit.org/show_bug.cgi?id=51874
Use GtkStyleContext API to paint sliders when building with GTK+
3.x. Also move the code to adjust media slider to its own method
in RenderThemeGtk.cpp since it's common to both gtk 2 and 3.
No new tests. This should not change functionality.
* platform/gtk/RenderThemeGtk.cpp:
(WebCore::RenderThemeGtk::adjustMediaSliderThumbSize):
* platform/gtk/RenderThemeGtk.h:
* platform/gtk/RenderThemeGtk2.cpp:
(WebCore::RenderThemeGtk::adjustSliderThumbSize):
* platform/gtk/RenderThemeGtk3.cpp:
(WebCore::RenderThemeGtk::paintSliderTrack):
(WebCore::RenderThemeGtk::paintSliderThumb):
(WebCore::RenderThemeGtk::adjustSliderThumbSize):
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@75241 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 6d89be2..bd9fc7b 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,26 @@
+2011-01-07 Carlos Garcia Campos <cgarcia at igalia.com> and Martin Robinson <mrobinson at igalia.com>
+
+ Reviewed by Xan Lopez.
+
+ [GTK] Port slider painting to GtkStyleContext
+ https://bugs.webkit.org/show_bug.cgi?id=51874
+
+ Use GtkStyleContext API to paint sliders when building with GTK+
+ 3.x. Also move the code to adjust media slider to its own method
+ in RenderThemeGtk.cpp since it's common to both gtk 2 and 3.
+
+ No new tests. This should not change functionality.
+
+ * platform/gtk/RenderThemeGtk.cpp:
+ (WebCore::RenderThemeGtk::adjustMediaSliderThumbSize):
+ * platform/gtk/RenderThemeGtk.h:
+ * platform/gtk/RenderThemeGtk2.cpp:
+ (WebCore::RenderThemeGtk::adjustSliderThumbSize):
+ * platform/gtk/RenderThemeGtk3.cpp:
+ (WebCore::RenderThemeGtk::paintSliderTrack):
+ (WebCore::RenderThemeGtk::paintSliderThumb):
+ (WebCore::RenderThemeGtk::adjustSliderThumbSize):
+
2011-01-07 Benjamin Poulain <benjamin.poulain at nokia.com>
Reviewed by Andreas Kling.
diff --git a/WebCore/platform/gtk/RenderThemeGtk.cpp b/WebCore/platform/gtk/RenderThemeGtk.cpp
index 704a55c..c194946 100644
--- a/WebCore/platform/gtk/RenderThemeGtk.cpp
+++ b/WebCore/platform/gtk/RenderThemeGtk.cpp
@@ -436,6 +436,16 @@ String RenderThemeGtk::extraMediaControlsStyleSheet()
return String(mediaControlsGtkUserAgentStyleSheet, sizeof(mediaControlsGtkUserAgentStyleSheet));
}
+void RenderThemeGtk::adjustMediaSliderThumbSize(RenderObject* renderObject) const
+{
+ ControlPart part = renderObject->style()->appearance();
+
+ if (part == MediaSliderThumbPart) {
+ renderObject->style()->setWidth(Length(m_mediaSliderThumbWidth, Fixed));
+ renderObject->style()->setHeight(Length(m_mediaSliderThumbHeight, Fixed));
+ }
+}
+
bool RenderThemeGtk::paintMediaButton(RenderObject* renderObject, GraphicsContext* context, const IntRect& rect, const char* iconName)
{
GRefPtr<GdkPixbuf> icon = getStockIcon(GTK_TYPE_CONTAINER, iconName,
diff --git a/WebCore/platform/gtk/RenderThemeGtk.h b/WebCore/platform/gtk/RenderThemeGtk.h
index e02a62d..17b31b5 100644
--- a/WebCore/platform/gtk/RenderThemeGtk.h
+++ b/WebCore/platform/gtk/RenderThemeGtk.h
@@ -54,6 +54,8 @@ public:
// A general method asking if any control tinting is supported at all.
virtual bool supportsControlTints() const { return true; }
+ virtual void adjustRepaintRect(const RenderObject*, IntRect&);
+
// A method to obtain the baseline position for a "leaf" control. This will only be used if a baseline
// position cannot be determined by examining child content. Checkboxes and radio buttons are examples of
// controls that need to do this.
@@ -138,6 +140,7 @@ protected:
#if ENABLE(VIDEO)
void initMediaColors();
void initMediaButtons();
+ void adjustMediaSliderThumbSize(RenderObject*) const;
virtual bool paintMediaFullscreenButton(RenderObject*, const PaintInfo&, const IntRect&);
virtual bool paintMediaPlayButton(RenderObject*, const PaintInfo&, const IntRect&);
virtual bool paintMediaMuteButton(RenderObject*, const PaintInfo&, const IntRect&);
diff --git a/WebCore/platform/gtk/RenderThemeGtk2.cpp b/WebCore/platform/gtk/RenderThemeGtk2.cpp
index 16849d4..fd391b7 100644
--- a/WebCore/platform/gtk/RenderThemeGtk2.cpp
+++ b/WebCore/platform/gtk/RenderThemeGtk2.cpp
@@ -59,6 +59,10 @@ void RenderThemeGtk::initMediaColors()
}
#endif
+void RenderThemeGtk::adjustRepaintRect(const RenderObject*, IntRect&)
+{
+}
+
GtkStateType RenderThemeGtk::getGtkStateType(RenderObject* object)
{
if (!isEnabled(object) || isReadOnlyControl(object))
@@ -302,13 +306,10 @@ void RenderThemeGtk::adjustSliderThumbSize(RenderObject* o) const
{
ControlPart part = o->style()->appearance();
#if ENABLE(VIDEO)
- if (part == MediaSliderThumbPart) {
- o->style()->setWidth(Length(m_mediaSliderThumbWidth, Fixed));
- o->style()->setHeight(Length(m_mediaSliderThumbHeight, Fixed));
+ if (part == MediaSliderThumbPart || part == MediaVolumeSliderThumbPart) {
+ adjustMediaSliderThumbSize(o);
return;
}
- if (part == MediaVolumeSliderThumbPart)
- return;
#endif
GtkWidget* widget = part == SliderThumbHorizontalPart ? gtkHScale() : gtkVScale();
diff --git a/WebCore/platform/gtk/RenderThemeGtk3.cpp b/WebCore/platform/gtk/RenderThemeGtk3.cpp
index a37abc7..cf548a8 100644
--- a/WebCore/platform/gtk/RenderThemeGtk3.cpp
+++ b/WebCore/platform/gtk/RenderThemeGtk3.cpp
@@ -101,6 +101,24 @@ void RenderThemeGtk::initMediaColors()
m_sliderThumbColor = style->bg[GTK_STATE_SELECTED];
}
+void RenderThemeGtk::adjustRepaintRect(const RenderObject* renderObject, IntRect& rect)
+{
+ ControlPart part = renderObject->style()->appearance();
+ switch (part) {
+ case SliderVerticalPart:
+ case SliderHorizontalPart: {
+ GtkStyleContext* context = getStyleContext(part == SliderThumbHorizontalPart ? GTK_TYPE_HSCALE : GTK_TYPE_VSCALE);
+ gint focusWidth, focusPad;
+ gtk_style_context_get_style(context,
+ "focus-line-width", &focusWidth,
+ "focus-padding", &focusPad, NULL);
+ rect.inflate(focusWidth + focusPad);
+ }
+ default:
+ break;
+ }
+}
+
GtkStateType RenderThemeGtk::getGtkStateType(RenderObject* object)
{
if (!isEnabled(object) || isReadOnlyControl(object))
@@ -273,94 +291,99 @@ bool RenderThemeGtk::paintTextField(RenderObject* object, const PaintInfo& info,
return paintRenderObject(MOZ_GTK_ENTRY, object, info.context, rect);
}
-bool RenderThemeGtk::paintSliderTrack(RenderObject* object, const PaintInfo& info, const IntRect& rect)
+bool RenderThemeGtk::paintSliderTrack(RenderObject* renderObject, const PaintInfo& paintInfo, const IntRect& rect)
{
- if (info.context->paintingDisabled())
- return false;
-
- ControlPart part = object->style()->appearance();
+ ControlPart part = renderObject->style()->appearance();
ASSERT(part == SliderHorizontalPart || part == SliderVerticalPart);
- // We shrink the trough rect slightly to make room for the focus indicator.
- IntRect troughRect(IntPoint(), rect.size()); // This is relative to rect.
- GtkWidget* widget = 0;
- if (part == SliderVerticalPart) {
- widget = gtkVScale();
- troughRect.inflateY(-gtk_widget_get_style(widget)->ythickness);
- } else {
- widget = gtkHScale();
- troughRect.inflateX(-gtk_widget_get_style(widget)->xthickness);
- }
- gtk_widget_set_direction(widget, gtkTextDirection(object->style()->direction()));
+ GtkStyleContext* context = getStyleContext(part == SliderThumbHorizontalPart ? GTK_TYPE_HSCALE : GTK_TYPE_VSCALE);
+ gtk_style_context_save(context);
- WidgetRenderingContext widgetContext(info.context, rect);
- widgetContext.gtkPaintBox(troughRect, widget, GTK_STATE_ACTIVE, GTK_SHADOW_OUT, "trough");
- if (isFocused(object))
- widgetContext.gtkPaintFocus(IntRect(IntPoint(), rect.size()), widget, getGtkStateType(object), "trough");
+ gtk_style_context_set_direction(context, gtkTextDirection(renderObject->style()->direction()));
+ gtk_style_context_add_class(context, GTK_STYLE_CLASS_SCALE);
+ gtk_style_context_add_class(context, GTK_STYLE_CLASS_TROUGH);
+
+ if (!isEnabled(renderObject) || isReadOnlyControl(renderObject))
+ gtk_style_context_set_state(context, GTK_STATE_FLAG_INSENSITIVE);
+
+ gtk_render_background(context, paintInfo.context->platformContext(),
+ rect.x(), rect.y(), rect.width(), rect.height());
+ gtk_render_frame(context, paintInfo.context->platformContext(),
+ rect.x(), rect.y(), rect.width(), rect.height());
+
+ if (isFocused(renderObject)) {
+ gint focusWidth, focusPad;
+ gtk_style_context_get_style(context,
+ "focus-line-width", &focusWidth,
+ "focus-padding", &focusPad, NULL);
+ IntRect focusRect(rect);
+ focusRect.inflate(focusWidth + focusPad);
+ gtk_render_focus(context, paintInfo.context->platformContext(),
+ focusRect.x(), focusRect.y(), focusRect.width(), focusRect.height());
+ }
+ gtk_style_context_restore(context);
return false;
}
-bool RenderThemeGtk::paintSliderThumb(RenderObject* object, const PaintInfo& info, const IntRect& rect)
+bool RenderThemeGtk::paintSliderThumb(RenderObject* renderObject, const PaintInfo& paintInfo, const IntRect& rect)
{
- if (info.context->paintingDisabled())
- return false;
-
- ControlPart part = object->style()->appearance();
+ ControlPart part = renderObject->style()->appearance();
ASSERT(part == SliderThumbHorizontalPart || part == SliderThumbVerticalPart);
- GtkWidget* widget = 0;
- const char* detail = 0;
- GtkOrientation orientation;
- if (part == SliderThumbVerticalPart) {
- widget = gtkVScale();
- detail = "vscale";
- orientation = GTK_ORIENTATION_VERTICAL;
- } else {
- widget = gtkHScale();
- detail = "hscale";
- orientation = GTK_ORIENTATION_HORIZONTAL;
- }
- gtk_widget_set_direction(widget, gtkTextDirection(object->style()->direction()));
+ GtkStyleContext* context = getStyleContext(part == SliderThumbHorizontalPart ? GTK_TYPE_HSCALE : GTK_TYPE_VSCALE);
+ gtk_style_context_save(context);
+
+ gtk_style_context_set_direction(context, gtkTextDirection(renderObject->style()->direction()));
+ gtk_style_context_add_class(context, GTK_STYLE_CLASS_SCALE);
+ gtk_style_context_add_class(context, GTK_STYLE_CLASS_SLIDER);
+
+ gint troughBorder;
+ gtk_style_context_get_style(context, "trough-border", &troughBorder, NULL);
+
+ IntRect sliderRect(rect);
+ sliderRect.inflate(-troughBorder);
+
+ guint flags = 0;
+ if (!isEnabled(renderObject) || isReadOnlyControl(renderObject))
+ flags |= GTK_STATE_FLAG_INSENSITIVE;
+ else if (isHovered(renderObject))
+ flags |= GTK_STATE_FLAG_PRELIGHT;
+ if (isPressed(renderObject))
+ flags |= GTK_STATE_FLAG_ACTIVE;
+ gtk_style_context_set_state(context, static_cast<GtkStateFlags>(flags));
+
+ gtk_render_slider(context, paintInfo.context->platformContext(), sliderRect.x(), sliderRect.y(), sliderRect.width(), sliderRect.height(),
+ part == SliderThumbHorizontalPart ? GTK_ORIENTATION_HORIZONTAL : GTK_ORIENTATION_VERTICAL);
+
+ gtk_style_context_restore(context);
- // Only some themes have slider thumbs respond to clicks and some don't. This information is
- // gathered via the 'activate-slider' property, but it's deprecated in GTK+ 2.22 and removed in
- // GTK+ 3.x. The drawback of not honoring it is that slider thumbs change color when you click
- // on them.
- IntRect thumbRect(IntPoint(), rect.size());
- WidgetRenderingContext widgetContext(info.context, rect);
- widgetContext.gtkPaintSlider(thumbRect, widget, getGtkStateType(object), GTK_SHADOW_OUT, detail, orientation);
return false;
}
-void RenderThemeGtk::adjustSliderThumbSize(RenderObject* o) const
+void RenderThemeGtk::adjustSliderThumbSize(RenderObject* renderObject) const
{
- ControlPart part = o->style()->appearance();
+ ControlPart part = renderObject->style()->appearance();
#if ENABLE(VIDEO)
- if (part == MediaSliderThumbPart) {
- o->style()->setWidth(Length(m_mediaSliderThumbWidth, Fixed));
- o->style()->setHeight(Length(m_mediaSliderThumbHeight, Fixed));
+ if (part == MediaSliderThumbPart || part == MediaVolumeSliderThumbPart) {
+ adjustMediaSliderThumbSize(renderObject);
return;
}
- if (part == MediaVolumeSliderThumbPart)
- return;
#endif
- GtkWidget* widget = part == SliderThumbHorizontalPart ? gtkHScale() : gtkVScale();
- int length = 0, width = 0;
- gtk_widget_style_get(widget,
- "slider_length", &length,
- "slider_width", &width,
- NULL);
-
+ gint sliderWidth, sliderLength;
+ gtk_style_context_get_style(getStyleContext(part == SliderThumbHorizontalPart ? GTK_TYPE_HSCALE : GTK_TYPE_VSCALE),
+ "slider-width", &sliderWidth,
+ "slider-length", &sliderLength,
+ NULL);
if (part == SliderThumbHorizontalPart) {
- o->style()->setWidth(Length(length, Fixed));
- o->style()->setHeight(Length(width, Fixed));
+ renderObject->style()->setWidth(Length(sliderLength, Fixed));
+ renderObject->style()->setHeight(Length(sliderWidth, Fixed));
return;
}
ASSERT(part == SliderThumbVerticalPart);
- o->style()->setWidth(Length(width, Fixed));
- o->style()->setHeight(Length(length, Fixed));
+ renderObject->style()->setWidth(Length(sliderWidth, Fixed));
+ renderObject->style()->setHeight(Length(sliderLength, Fixed));
}
#if ENABLE(PROGRESS_TAG)
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list