| OLD | NEW |
| 1 /* | 1 /* |
| 2 * CSS Media Query Evaluator | 2 * CSS Media Query Evaluator |
| 3 * | 3 * |
| 4 * Copyright (C) 2006 Kimmo Kinnunen <kimmo.t.kinnunen@nokia.com>. | 4 * Copyright (C) 2006 Kimmo Kinnunen <kimmo.t.kinnunen@nokia.com>. |
| 5 * Copyright (C) 2013 Apple Inc. All rights reserved. | 5 * Copyright (C) 2013 Apple Inc. All rights reserved. |
| 6 * Copyright (C) 2013 Intel Corporation. All rights reserved. | 6 * Copyright (C) 2013 Intel Corporation. All rights reserved. |
| 7 * | 7 * |
| 8 * Redistribution and use in source and binary forms, with or without | 8 * Redistribution and use in source and binary forms, with or without |
| 9 * modification, are permitted provided that the following conditions | 9 * modification, are permitted provided that the following conditions |
| 10 * are met: | 10 * are met: |
| (...skipping 316 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 327 static bool gridMediaFeatureEval(CSSValue* value, RenderStyle*, Frame*, MediaFea
turePrefix op) | 327 static bool gridMediaFeatureEval(CSSValue* value, RenderStyle*, Frame*, MediaFea
turePrefix op) |
| 328 { | 328 { |
| 329 // if output device is bitmap, grid: 0 == true | 329 // if output device is bitmap, grid: 0 == true |
| 330 // assume we have bitmap device | 330 // assume we have bitmap device |
| 331 float number; | 331 float number; |
| 332 if (value && numberValue(value, number)) | 332 if (value && numberValue(value, number)) |
| 333 return compareValue(static_cast<int>(number), 0, op); | 333 return compareValue(static_cast<int>(number), 0, op); |
| 334 return false; | 334 return false; |
| 335 } | 335 } |
| 336 | 336 |
| 337 static bool computeLength(CSSValue* value, bool strict, RenderStyle* style, Rend
erStyle* rootStyle, int& result) | 337 static bool computeLength(Document* document, CSSValue* value, RenderStyle* styl
e, RenderStyle* rootStyle, int& result) |
| 338 { | 338 { |
| 339 if (!value->isPrimitiveValue()) | 339 if (!value->isPrimitiveValue()) |
| 340 return false; | 340 return false; |
| 341 | 341 |
| 342 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 342 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); |
| 343 | 343 |
| 344 if (primitiveValue->isNumber()) { | 344 if (primitiveValue->isNumber()) { |
| 345 result = primitiveValue->getIntValue(); | 345 result = primitiveValue->getIntValue(); |
| 346 bool strict = !document->inQuirksMode(); |
| 346 return !strict || !result; | 347 return !strict || !result; |
| 347 } | 348 } |
| 348 | 349 |
| 350 if (primitiveValue->primitiveType() == CSSPrimitiveValue::CSS_REMS) { |
| 351 // Use the initial font size instead of <html> font size. |
| 352 RefPtr<RenderStyle> defaultStyle = StyleResolver::styleForDocument(docum
ent); |
| 353 result = primitiveValue->computeLength<int>(style, defaultStyle.get(), 1
.0 /* multiplier */, true /* computingFontSize */); |
| 354 return true; |
| 355 } |
| 356 |
| 349 if (primitiveValue->isLength()) { | 357 if (primitiveValue->isLength()) { |
| 350 result = primitiveValue->computeLength<int>(style, rootStyle, 1.0 /* mul
tiplier */, true /* computingFontSize */); | 358 result = primitiveValue->computeLength<int>(style, rootStyle, 1.0 /* mul
tiplier */, true /* computingFontSize */); |
| 351 return true; | 359 return true; |
| 352 } | 360 } |
| 353 | 361 |
| 354 return false; | 362 return false; |
| 355 } | 363 } |
| 356 | 364 |
| 357 static bool deviceHeightMediaFeatureEval(CSSValue* value, RenderStyle* style, Fr
ame* frame, MediaFeaturePrefix op) | 365 static bool deviceHeightMediaFeatureEval(CSSValue* value, RenderStyle* style, Fr
ame* frame, MediaFeaturePrefix op) |
| 358 { | 366 { |
| 359 if (value) { | 367 if (value) { |
| 360 FloatRect sg = screenRect(frame->page()->mainFrame()->view()); | 368 FloatRect sg = screenRect(frame->page()->mainFrame()->view()); |
| 361 RenderStyle* rootStyle = frame->document()->documentElement()->renderSty
le(); | 369 RenderStyle* rootStyle = frame->document()->documentElement()->renderSty
le(); |
| 362 int length; | 370 int length; |
| 363 long height = sg.height(); | 371 long height = sg.height(); |
| 364 InspectorInstrumentation::applyScreenHeightOverride(frame, &height); | 372 InspectorInstrumentation::applyScreenHeightOverride(frame, &height); |
| 365 return computeLength(value, !frame->document()->inQuirksMode(), style, r
ootStyle, length) && compareValue(static_cast<int>(height), length, op); | 373 return computeLength(frame->document(), value, style, rootStyle, length)
&& compareValue(static_cast<int>(height), length, op); |
| 366 } | 374 } |
| 367 // ({,min-,max-}device-height) | 375 // ({,min-,max-}device-height) |
| 368 // assume if we have a device, assume non-zero | 376 // assume if we have a device, assume non-zero |
| 369 return true; | 377 return true; |
| 370 } | 378 } |
| 371 | 379 |
| 372 static bool deviceWidthMediaFeatureEval(CSSValue* value, RenderStyle* style, Fra
me* frame, MediaFeaturePrefix op) | 380 static bool deviceWidthMediaFeatureEval(CSSValue* value, RenderStyle* style, Fra
me* frame, MediaFeaturePrefix op) |
| 373 { | 381 { |
| 374 if (value) { | 382 if (value) { |
| 375 FloatRect sg = screenRect(frame->page()->mainFrame()->view()); | 383 FloatRect sg = screenRect(frame->page()->mainFrame()->view()); |
| 376 RenderStyle* rootStyle = frame->document()->documentElement()->renderSty
le(); | 384 RenderStyle* rootStyle = frame->document()->documentElement()->renderSty
le(); |
| 377 int length; | 385 int length; |
| 378 long width = sg.width(); | 386 long width = sg.width(); |
| 379 InspectorInstrumentation::applyScreenWidthOverride(frame, &width); | 387 InspectorInstrumentation::applyScreenWidthOverride(frame, &width); |
| 380 return computeLength(value, !frame->document()->inQuirksMode(), style, r
ootStyle, length) && compareValue(static_cast<int>(width), length, op); | 388 return computeLength(frame->document(), value, style, rootStyle, length)
&& compareValue(static_cast<int>(width), length, op); |
| 381 } | 389 } |
| 382 // ({,min-,max-}device-width) | 390 // ({,min-,max-}device-width) |
| 383 // assume if we have a device, assume non-zero | 391 // assume if we have a device, assume non-zero |
| 384 return true; | 392 return true; |
| 385 } | 393 } |
| 386 | 394 |
| 387 static bool heightMediaFeatureEval(CSSValue* value, RenderStyle* style, Frame* f
rame, MediaFeaturePrefix op) | 395 static bool heightMediaFeatureEval(CSSValue* value, RenderStyle* style, Frame* f
rame, MediaFeaturePrefix op) |
| 388 { | 396 { |
| 389 FrameView* view = frame->view(); | 397 FrameView* view = frame->view(); |
| 390 | 398 |
| 391 int height = viewportSize(view).height(); | 399 int height = viewportSize(view).height(); |
| 392 if (value) { | 400 if (value) { |
| 393 if (RenderView* renderView = frame->document()->renderView()) | 401 if (RenderView* renderView = frame->document()->renderView()) |
| 394 height = adjustForAbsoluteZoom(height, renderView); | 402 height = adjustForAbsoluteZoom(height, renderView); |
| 395 RenderStyle* rootStyle = frame->document()->documentElement()->renderSty
le(); | 403 RenderStyle* rootStyle = frame->document()->documentElement()->renderSty
le(); |
| 396 int length; | 404 int length; |
| 397 return computeLength(value, !frame->document()->inQuirksMode(), style, r
ootStyle, length) && compareValue(height, length, op); | 405 return computeLength(frame->document(), value, style, rootStyle, length)
&& compareValue(height, length, op); |
| 398 } | 406 } |
| 399 | 407 |
| 400 return height; | 408 return height; |
| 401 } | 409 } |
| 402 | 410 |
| 403 static bool widthMediaFeatureEval(CSSValue* value, RenderStyle* style, Frame* fr
ame, MediaFeaturePrefix op) | 411 static bool widthMediaFeatureEval(CSSValue* value, RenderStyle* style, Frame* fr
ame, MediaFeaturePrefix op) |
| 404 { | 412 { |
| 405 FrameView* view = frame->view(); | 413 FrameView* view = frame->view(); |
| 406 | 414 |
| 407 int width = viewportSize(view).width(); | 415 int width = viewportSize(view).width(); |
| 408 if (value) { | 416 if (value) { |
| 409 if (RenderView* renderView = frame->document()->renderView()) | 417 if (RenderView* renderView = frame->document()->renderView()) |
| 410 width = adjustForAbsoluteZoom(width, renderView); | 418 width = adjustForAbsoluteZoom(width, renderView); |
| 411 RenderStyle* rootStyle = frame->document()->documentElement()->renderSty
le(); | 419 RenderStyle* rootStyle = frame->document()->documentElement()->renderSty
le(); |
| 412 int length; | 420 int length; |
| 413 return computeLength(value, !frame->document()->inQuirksMode(), style, r
ootStyle, length) && compareValue(width, length, op); | 421 return computeLength(frame->document(), value, style, rootStyle, length)
&& compareValue(width, length, op); |
| 414 } | 422 } |
| 415 | 423 |
| 416 return width; | 424 return width; |
| 417 } | 425 } |
| 418 | 426 |
| 419 // rest of the functions are trampolines which set the prefix according to the m
edia feature expression used | 427 // rest of the functions are trampolines which set the prefix according to the m
edia feature expression used |
| 420 | 428 |
| 421 static bool minColorMediaFeatureEval(CSSValue* value, RenderStyle* style, Frame*
frame, MediaFeaturePrefix) | 429 static bool minColorMediaFeatureEval(CSSValue* value, RenderStyle* style, Frame*
frame, MediaFeaturePrefix) |
| 422 { | 430 { |
| 423 return colorMediaFeatureEval(value, style, frame, MinPrefix); | 431 return colorMediaFeatureEval(value, style, frame, MinPrefix); |
| (...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 685 // and let trampoline functions override the prefix if prefix is | 693 // and let trampoline functions override the prefix if prefix is |
| 686 // used | 694 // used |
| 687 EvalFunc func = gFunctionMap->get(expr->mediaFeature().impl()); | 695 EvalFunc func = gFunctionMap->get(expr->mediaFeature().impl()); |
| 688 if (func) | 696 if (func) |
| 689 return func(expr->value(), m_style.get(), m_frame, NoPrefix); | 697 return func(expr->value(), m_style.get(), m_frame, NoPrefix); |
| 690 | 698 |
| 691 return false; | 699 return false; |
| 692 } | 700 } |
| 693 | 701 |
| 694 } // namespace | 702 } // namespace |
| OLD | NEW |