Index: Source/WebCore/css/MediaQueryEvaluator.cpp |
diff --git a/Source/WebCore/css/MediaQueryEvaluator.cpp b/Source/WebCore/css/MediaQueryEvaluator.cpp |
index c2fc0f619f744844af357db68942cb89dd1de770..b9ad87b69381873c1d2670ab18a016ba5000f930 100644 |
--- a/Source/WebCore/css/MediaQueryEvaluator.cpp |
+++ b/Source/WebCore/css/MediaQueryEvaluator.cpp |
@@ -697,31 +697,14 @@ static bool view_modeMediaFeatureEval(CSSValue* value, RenderStyle*, Frame* fram |
} |
#endif // ENABLE(VIEW_MODE_CSS_MEDIA) |
-enum PointerDeviceType { TouchPointer, MousePointer, NoPointer, UnknownPointer }; |
- |
-static PointerDeviceType leastCapablePrimaryPointerDeviceType(Frame* frame) |
-{ |
- if (frame->settings()->deviceSupportsTouch()) |
- return TouchPointer; |
- |
- // FIXME: We should also try to determine if we know we have a mouse. |
- // When we do this, we'll also need to differentiate between known not to |
- // have mouse or touch screen (NoPointer) and unknown (UnknownPointer). |
- // We could also take into account other preferences like accessibility |
- // settings to decide which of the available pointers should be considered |
- // "primary". |
- |
- return UnknownPointer; |
-} |
- |
static bool hoverMediaFeatureEval(CSSValue* value, RenderStyle*, Frame* frame, MediaFeaturePrefix) |
{ |
- PointerDeviceType pointer = leastCapablePrimaryPointerDeviceType(frame); |
+ int pointer = frame->settings()->primaryPointerDevices(); |
// If we're on a port that hasn't explicitly opted into providing pointer device information |
// (or otherwise can't be confident in the pointer hardware available), then behave exactly |
// as if this feature feature isn't supported. |
- if (pointer == UnknownPointer) |
+ if (pointer == PointerDeviceUnknown) |
return false; |
float number = 1; |
@@ -730,31 +713,40 @@ static bool hoverMediaFeatureEval(CSSValue* value, RenderStyle*, Frame* frame, M |
return false; |
} |
- return (pointer == NoPointer && !number) |
- || (pointer == TouchPointer && !number) |
- || (pointer == MousePointer && number == 1); |
+ if (pointer & (PointerDeviceTouch | PointerDeviceNone)) |
+ return !number; |
+ else if (pointer & PointerDeviceMouse) |
+ return number == 1; |
+ else |
+ return false; |
} |
static bool pointerMediaFeatureEval(CSSValue* value, RenderStyle*, Frame* frame, MediaFeaturePrefix) |
{ |
- PointerDeviceType pointer = leastCapablePrimaryPointerDeviceType(frame); |
+ int pointer = frame->settings()->primaryPointerDevices(); |
// If we're on a port that hasn't explicitly opted into providing pointer device information |
// (or otherwise can't be confident in the pointer hardware available), then behave exactly |
// as if this feature feature isn't supported. |
- if (pointer == UnknownPointer) |
+ if (pointer == PointerDeviceUnknown) |
return false; |
if (!value) |
- return pointer != NoPointer; |
+ return !(pointer & PointerDeviceNone); |
if (!value->isPrimitiveValue()) |
return false; |
const int id = static_cast<CSSPrimitiveValue*>(value)->getIdent(); |
- return (pointer == NoPointer && id == CSSValueNone) |
- || (pointer == TouchPointer && id == CSSValueCoarse) |
- || (pointer == MousePointer && id == CSSValueFine); |
+ |
+ if (pointer & PointerDeviceNone) |
+ return id == CSSValueNone; |
+ else if (pointer & PointerDeviceTouch) |
+ return id == CSSValueCoarse; |
+ else if (pointer & PointerDeviceMouse) |
+ return id == CSSValueFine; |
+ else |
+ return false; |
} |
static void createFunctionMap() |