+2007-07-10 Qing Zhao <qing@staikos.net>
+
+ Reviewed by George Staikos.
+
+ Draw focus rings for nodes that are not rendered by QStyle.
+
+ * platform/graphics/qt/GraphicsContextQt.cpp:
+ (WebCore::focusRingColor):
+ (WebCore::GraphicsContext::drawFocusRing):
+ * platform/qt/RenderThemeQt.cpp:
+ (WebCore::RenderThemeQt::supportsFocusRing):
+ (WebCore::RenderThemeQt::supportsFocus):
+
2007-07-10 Nikolas Zimmermann <zimmermann@kde.org>
Reviewed by Geoff.
#include <QPolygonF>
#include <QPainterPath>
#include <QPaintDevice>
+#include <QDebug>
#ifndef M_PI
#define M_PI 3.14159265358979323846
* need it.
*/
void setFocusRingColorChangeFunction(void (*)()) { }
-Color focusRingColor() { return 0x00000000; }
+Color focusRingColor() { return Color(0, 0, 0); }
void GraphicsContext::drawFocusRing(const Color& color)
{
if (paintingDisabled())
return;
- return;
-
const Vector<IntRect>& rects = focusRingRects();
unsigned rectCount = rects.size();
- QVector<QRect> qrects(rectCount);
- for (int i = 0; i < rectCount; ++i)
- qrects[i] = rects[i];
- m_data->p().save();
- m_data->p().setClipRect(m_data->focusRingClip);
- m_data->p().setPen(color);
- m_data->p().drawRects(qrects);
- m_data->p().restore();
+ if (rects.size() > 1)
+ {
+ QPainterPath path;
+ for (int i = 0; i < rectCount; ++i)
+ path.addRect(QRectF(rects[i]));
+ m_data->p().save();
+ QPen nPen = m_data->p().pen();
+ nPen.setColor(color);
+ m_data->p().setBrush(Qt::NoBrush);
+ nPen.setStyle(Qt::DotLine);
+ m_data->p().setPen(nPen);
+#if 0
+ // FIXME How do we do a bounding outline with Qt?
+ QPainterPathStroker stroker;
+ QPainterPath newPath = stroker.createStroke(path);
+ m_data->p().strokePath(newPath, nPen);
+#else
+ m_data->p().drawRect(path.boundingRect());
+#endif
+ m_data->p().restore();
+ }
}
void GraphicsContext::setFocusRingClip(const IntRect& rect)
bool RenderThemeQt::supportsFocusRing(const RenderStyle* style) const
{
- return true;
+ return supportsFocus(style->appearance());
}
short RenderThemeQt::baselinePosition(const RenderObject* o) const
case ButtonAppearance:
case TextFieldAppearance:
case MenulistAppearance:
+ case RadioAppearance:
+ case CheckboxAppearance:
return true;
default: // No for all others...
return false;