Changeset 64764 in webkit


Ignore:
Timestamp:
Aug 5, 2010 10:50:27 AM (14 years ago)
Author:
commit-queue@webkit.org
Message:

2010-08-05 Kenneth Rohde Christiansen <kenneth.christiansen@openbossa.org>

Reviewed by Simon Hausmann.

Make the viewport meta tag parser support the Android
target-densitydpi extension.
http://webkit.org/b/43492

http://developer.android.com/reference/android/webkit/WebView.html
Section 'Building web pages to support different screen densities'

  • dom/ViewportArguments.cpp: (WebCore::setViewportFeature): (WebCore::viewportErrorMessageTemplate):
  • dom/ViewportArguments.h: (WebCore::): (WebCore::ViewportArguments::ViewportArguments): (WebCore::ViewportArguments::hasCustomArgument):
Location:
trunk/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r64763 r64764  
     12010-08-05  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>
     2
     3        Reviewed by Simon Hausmann.
     4
     5        Make the viewport meta tag parser support the Android
     6        target-densitydpi extension.
     7        http://webkit.org/b/43492
     8
     9        http://developer.android.com/reference/android/webkit/WebView.html
     10        Section 'Building web pages to support different screen densities'
     11
     12        * dom/ViewportArguments.cpp:
     13        (WebCore::setViewportFeature):
     14        (WebCore::viewportErrorMessageTemplate):
     15        * dom/ViewportArguments.h:
     16        (WebCore::):
     17        (WebCore::ViewportArguments::ViewportArguments):
     18        (WebCore::ViewportArguments::hasCustomArgument):
     19
    1202010-08-05  Jian Li  <jianli@chromium.org>
    221 
  • trunk/WebCore/dom/ViewportArguments.cpp

    r61985 r64764  
    5454        if (document->page())
    5555            value = document->page()->chrome()->windowRect().height();
     56    } else if (equalIgnoringCase(valueString, "device-dpi")) {
     57        didUseConstants = true;
     58        // Default of today is 160dpi, resulting in a scaleFactor of 1.0.
     59        if (document->page())
     60            value = 160 * document->page()->chrome()->scaleFactor();
     61    } else if (equalIgnoringCase(valueString, "low-dpi")) {
     62        didUseConstants = true;
     63        value = 120;
     64    } else if (equalIgnoringCase(valueString, "medium-dpi")) {
     65        didUseConstants = true;
     66        value = 160;
     67    } else if (equalIgnoringCase(valueString, "high-dpi")) {
     68        didUseConstants = true;
     69        value = 240;
    5670    } else if (equalIgnoringCase(valueString, "default")) // This allows us to distinguish the omission of a key from asking for the default value.
    5771        value = -2;
     
    8195        else if (document->page() && value == document->page()->chrome()->windowRect().height() && !didUseConstants)
    8296            reportViewportWarning(document, DeviceHeightShouldBeUsedWarning, keyString);
    83        
    8497        arguments->height = value;
     98    } else if (keyString == "target-densitydpi" || keyString == "target-densityDpi") {
     99        if (!didUseConstants && (value < 70 || value > 400))
     100            reportViewportWarning(document, TargetDensityDpiTooSmallOrLargeError, keyString);
     101        arguments->targetDensityDpi = value;
    85102    } else
    86103        reportViewportWarning(document, UnrecognizedViewportArgumentError, keyString);
     
    89106static const char* viewportErrorMessageTemplate(ViewportErrorCode errorCode)
    90107{
    91     static const char* const errors[] = { 
     108    static const char* const errors[] = {
    92109        "Viewport width or height set to physical device width, try using \"device-width\" constant instead for future compatibility.",
    93110        "Viewport height or height set to physical device height, try using \"device-height\" constant instead for future compatibility.",
    94111        "Viewport argument \"%replacement\" not recognized. Content ignored.",
    95         "Viewport maximum-scale cannot be larger than 10.0.  The maximum-scale will be set to 10.0."
     112        "Viewport maximum-scale cannot be larger than 10.0.  The maximum-scale will be set to 10.0.",
     113        "Viewport target-densitydpi has to take a number between 70 and 400 as a valid target dpi, try using \"device-dpi\", \"low-dpi\", \"medium-dpi\" or \"high-dpi\" instead for future compatibility."
    96114    };
    97115
  • trunk/WebCore/dom/ViewportArguments.h

    r57775 r64764  
    3636    DeviceHeightShouldBeUsedWarning,
    3737    UnrecognizedViewportArgumentError,
    38     MaximumScaleTooLargeError
     38    MaximumScaleTooLargeError,
     39    TargetDensityDpiTooSmallOrLargeError
    3940};
    4041
     
    4950        , width(ValueUndefined)
    5051        , height(ValueUndefined)
     52        , targetDensityDpi(ValueUndefined)
    5153        , userScalable(ValueUndefined)
    5254    {
     
    5860    float width;
    5961    float height;
     62    float targetDensityDpi;
    6063
    6164    float userScalable;
     
    6366    bool hasCustomArgument() const
    6467    {
    65         return initialScale != ValueUndefined || minimumScale != ValueUndefined || maximumScale != ValueUndefined || width != ValueUndefined || height != ValueUndefined || userScalable != ValueUndefined;
     68        return initialScale != ValueUndefined || minimumScale != ValueUndefined || maximumScale != ValueUndefined || width != ValueUndefined || height != ValueUndefined || userScalable != ValueUndefined || targetDensityDpi != ValueUndefined;
    6669    }
    6770};
Note: See TracChangeset for help on using the changeset viewer.