Changeset 136919 in webkit


Ignore:
Timestamp:
Dec 6, 2012 7:07:24 PM (11 years ago)
Author:
commit-queue@webkit.org
Message:

CSS cursor property should support webkit-image-set
https://bugs.webkit.org/show_bug.cgi?id=99493

Patch by Rick Byers <rbyers@chromium.org> on 2012-12-06
Reviewed by Beth Dakin.

.:

Add ENABLE_MOUSE_CURSOR_SCALE (disabled by default)

  • Source/cmake/WebKitFeatures.cmake:
  • Source/cmakeconfig.h.cmake:

Source/JavaScriptCore:

Add ENABLE_MOUSE_CURSOR_SCALE (disabled by default)

  • Configurations/FeatureDefines.xcconfig:

Source/WebCore:

Add support for image scale factors attached to custom mouse cursor images
behind ENABLE(MOUSE_CURSOR_SCALE).

This required refactoring CSSCursorImageValue to derive directly from
CSSValue since it can contain either a CSSImageValue or a CSSImageSetValue.
If it contains an image-set, then we can plumb directly through to the
CSSImageSetValue. If it contains an image, then either we can plumb directly
through to the CSSImageValue, or if the URL represents an SVG cursor we have
to intercept the image loading in order to substitute the actual SVG image URL
and do the appropriate lifetime management.

Tests: fast/css/cursor-parsing-image-set.html

fast/events/mouse-cursor-image-set.html

  • Configurations/FeatureDefines.xcconfig: Add ENABLE_MOUSE_CURSOR_SCALE - disabled
  • GNUmakefile.features.am: ditto
  • css/CSSCursorImageValue.cpp: Refactor to inherit directly from CSSValue and support image sets

(WebCore::CSSCursorImageValue::CSSCursorImageValue):
(WebCore::CSSCursorImageValue::~CSSCursorImageValue):
(WebCore::CSSCursorImageValue::customCssText):
(WebCore::CSSCursorImageValue::updateIfSVGCursorIsUsed):
(WebCore::CSSCursorImageValue::cachedImage):
(WebCore::CSSCursorImageValue::cachedOrPendingImage):
(WebCore::CSSCursorImageValue::isSVGCursor):
(WebCore::CSSCursorImageValue::cachedImageURL):
(WebCore::CSSCursorImageValue::clearCachedImage):
(WebCore::CSSCursorImageValue::reportDescendantMemoryUsage):

  • css/CSSCursorImageValue.h: Remove cursor-specific hacks

(WebCore::CSSCursorImageValue::create):
(CSSCursorImageValue):

  • css/CSSImageValue.cpp:

(WebCore::CSSImageValue::cachedImage):

  • css/CSSImageValue.h:

(CSSImageValue):

  • css/CSSParser.cpp:

(WebCore::CSSParser::parseValue): Parse cursor(-webkit-image-set(...)) rules

  • css/CSSValue.h:

(WebCore::CSSValue::isImageValue):

  • css/StyleBuilder.cpp:

(WebCore::ApplyPropertyCursor::applyValue):

  • css/StyleResolver.cpp: Hook up new CSSCursorImageValue support since it can't be handled like other images any more.

(WebCore::StyleResolver::styleImage):
(WebCore::StyleResolver::cursorOrPendingFromValue):
(WebCore::StyleResolver::loadPendingImage):

  • css/StyleResolver.h:

(StyleResolver):

  • page/EventHandler.cpp:

(WebCore::EventHandler::selectCursor): Handle StyleCachedImageSet images and plumb scale factor through

  • platform/Cursor.cpp:

(WebCore::Cursor::Cursor): Add imageScaleFactor

  • platform/Cursor.h: Add imageScaleFactor

(Cursor):
(WebCore::Cursor::imageScaleFactor):

  • platform/chromium/CursorChromium.cpp: Add imageScaleFactor

(WebCore::Cursor::Cursor):
(WebCore::Cursor::operator=):

  • rendering/style/CursorData.h: Clarify hotspot units

(CursorData):

  • rendering/style/StyleCachedImage.h:

(StyleCachedImage::cachedImage): Override new virtual.

  • rendering/style/StyleCachedImageSet.h:

(StyleCachedImageSet::cachedImage): Override new virtual.

  • rendering/style/StyleImage.h:

(StyleImage::cachedImage): Add new virtual method to avoid lots of casts and typechecks.

  • rendering/style/StylePendingImage.h: Add CSSCursorImageValue support

(WebCore::StylePendingImage::cssCursorImageValue):

  • testing/Internals.cpp:

(WebCore::Internals::getCurrentCursorInfo): Print non-identity scale factors for testing

Source/WebKit/chromium:

Add ENABLE_MOUSE_CURSOR_SCALE and enable it on the chromium port.
Plumb cursor image scale factor through to chromium API.

  • features.gypi:
  • public/WebCursorInfo.h:
  • src/WebCursorInfo.cpp:

(WebKit::WebCursorInfo::WebCursorInfo):

Source/WebKit/mac:

Add ENABLE_MOUSE_CURSOR_SCALE - disabled by default.

  • Configurations/FeatureDefines.xcconfig:

Source/WebKit2:

Add ENABLE_MOUSE_CURSOR_SCALE - disabled by default.

  • Configurations/FeatureDefines.xcconfig:

Tools:

Add ENABLE_MOUSE_CURSOR_SCALE - disabled by default

  • Scripts/webkitperl/FeatureList.pm:
  • qmake/mkspecs/features/features.pri:

WebKitLibraries:

Add ENABLE_MOUSE_CURSOR_SCALE - disabled by default

  • win/tools/vsprops/FeatureDefines.vsprops:
  • win/tools/vsprops/FeatureDefinesCairo.vsprops:

LayoutTests:

Add tests for parser round-tripping of cursor rules with -webkit-image-set,
and also end-to-end mouse cursor tests that validate the cursor details
ultimately used at different device scales.

Tests are disabled on ports other than chromium (require ENABLE(MOUSE_CURSOR_SCALE))

  • fast/css/cursor-parsing-image-set-expected.txt: Added.
  • fast/css/cursor-parsing-image-set.html: Added.
  • fast/events/mouse-cursor-image-set-expected.txt: Added.
  • fast/events/mouse-cursor-image-set.html: Added.
  • fast/events/resources/greenbox200.png: Added.
  • fast/events/resources/greenbox30-hotspot28-3.cur: Added.
  • fast/events/resources/greenbox30.png: Added.
  • platform/efl/TestExpectations:
  • platform/gtk/TestExpectations:
  • platform/mac/TestExpectations:
  • platform/win/TestExpectations:
Location:
trunk
Files:
7 added
45 edited

Legend:

Unmodified
Added
Removed
  • trunk/ChangeLog

    r136884 r136919  
     12012-12-06  Rick Byers  <rbyers@chromium.org>
     2
     3        CSS cursor property should support webkit-image-set
     4        https://bugs.webkit.org/show_bug.cgi?id=99493
     5
     6        Reviewed by Beth Dakin.
     7
     8        Add ENABLE_MOUSE_CURSOR_SCALE (disabled by default)
     9
     10        * Source/cmake/WebKitFeatures.cmake:
     11        * Source/cmakeconfig.h.cmake:
     12
    1132012-12-06  Laszlo Gombos  <l.gombos@samsung.com>
    214
  • trunk/LayoutTests/ChangeLog

    r136918 r136919  
     12012-12-06  Rick Byers  <rbyers@chromium.org>
     2
     3        CSS cursor property should support webkit-image-set
     4        https://bugs.webkit.org/show_bug.cgi?id=99493
     5
     6        Reviewed by Beth Dakin.
     7
     8        Add tests for parser round-tripping of cursor rules with -webkit-image-set,
     9        and also end-to-end mouse cursor tests that validate the cursor details
     10        ultimately used at different device scales.
     11
     12        Tests are disabled on ports other than chromium (require ENABLE(MOUSE_CURSOR_SCALE))
     13
     14        * fast/css/cursor-parsing-image-set-expected.txt: Added.
     15        * fast/css/cursor-parsing-image-set.html: Added.
     16        * fast/events/mouse-cursor-image-set-expected.txt: Added.
     17        * fast/events/mouse-cursor-image-set.html: Added.
     18        * fast/events/resources/greenbox200.png: Added.
     19        * fast/events/resources/greenbox30-hotspot28-3.cur: Added.
     20        * fast/events/resources/greenbox30.png: Added.
     21        * platform/efl/TestExpectations:
     22        * platform/gtk/TestExpectations:
     23        * platform/mac/TestExpectations:
     24        * platform/win/TestExpectations:
     25
    1262012-12-06  Hayato Ito  <hayato@chromium.org>
    227
  • trunk/LayoutTests/platform/efl/TestExpectations

    r136865 r136919  
    5757fast/dom/Window/slow-unload-handler.html
    5858fast/dom/Window/slow-unload-handler-only-frame-is-stopped.html
     59
     60# Need ENABLE(MOUSE_CURSOR_SCALE)
     61fast/css/cursor-parsing-image-set.html
     62fast/events/mouse-cursor-image-set.html
    5963
    6064# ----------------------------------------
  • trunk/LayoutTests/platform/gtk/TestExpectations

    r136849 r136919  
    290290webkit.org/b/99027 fast/css/image-set-parsing-invalid.html [ Pass ]
    291291webkit.org/b/99027 fast/css/image-set-setting.html [ Failure ]
     292webkit.org/b/99027 fast/css/cursor-parsing-image-set.html [ Failure ]
     293webkit.org/b/99027 fast/events/mouse-cursor-image-set.html [ Failure ]
    292294
    293295# For now, Web Audio API is disabled
  • trunk/LayoutTests/platform/mac/TestExpectations

    r136849 r136919  
    12371237Bug(jernoble) [ MountainLion Lion SnowLeopard ] media/video-src-blob.html
    12381238
     1239# Needs ENABLE(MOUSE_CURSOR_SCALE)
     1240webkit.org/b/102579 fast/css/cursor-parsing-image-set.html [ Fail ]
     1241webkit.org/b/102579 fast/events/mouse-cursor-image-set.html [ Fail ]
     1242
    12391243webkit.org/b/104104 fast/overflow/scrollbar-click-retains-focus.html [ Failure ]
  • trunk/LayoutTests/platform/win/TestExpectations

    r136849 r136919  
    5252fast/css/image-set-parsing.html
    5353fast/css/image-set-parsing-invalid.html
     54fast/css/cursor-parsing-image-set.html
     55fast/events/mouse-cursor-image-set.html
    5456
    5557# CSS3 Background is not yet enabled (needs ENABLE_CSS3_BACKGROUND).
  • trunk/Source/JavaScriptCore/ChangeLog

    r136914 r136919  
     12012-12-06  Rick Byers  <rbyers@chromium.org>
     2
     3        CSS cursor property should support webkit-image-set
     4        https://bugs.webkit.org/show_bug.cgi?id=99493
     5
     6        Reviewed by Beth Dakin.
     7
     8        Add ENABLE_MOUSE_CURSOR_SCALE (disabled by default)
     9
     10        * Configurations/FeatureDefines.xcconfig:
     11
    1122012-12-06  Laszlo Gombos  <l.gombos@samsung.com>
    213
  • trunk/Source/JavaScriptCore/Configurations/FeatureDefines.xcconfig

    r136415 r136919  
    116116ENABLE_MHTML = ;
    117117ENABLE_MICRODATA = ;
     118ENABLE_MOUSE_CURSOR_SCALE = ;
    118119ENABLE_MUTATION_OBSERVERS = ENABLE_MUTATION_OBSERVERS;
    119120ENABLE_NAVIGATOR_CONTENT_UTILS = ;
     
    160161ENABLE_XSLT = ENABLE_XSLT;
    161162
    162 FEATURE_DEFINES = $(ENABLE_3D_RENDERING) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ANIMATION_API) $(ENABLE_BLOB) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CSP_NEXT) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_EXCLUSIONS) $(ENABLE_CSS_FILTERS) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_REGIONS) $(ENABLE_CSS_SHADERS) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_STICKY_POSITION) $(ENABLE_CSS_VARIABLES) $(ENABLE_CSS3_CONDITIONAL_RULES) $(ENABLE_CSS3_BACKGROUND) $(ENABLE_CSS3_TEXT) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_TRANSFER_ITEMS) $(ENABLE_DETAILS_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DIALOG_ELEMENT) $(ENABLE_DIRECTORY_UPLOAD) $(ENABLE_DRAGGABLE_REGION) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_FILE_SYSTEM) $(ENABLE_FILTERS) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_HIDDEN_PAGE_DOM_TIMER_THROTTLING) $(ENABLE_HIGH_DPI_CANVAS) $(ENABLE_ICONDATABASE) $(ENABLE_IFRAME_SEAMLESS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INPUT_SPEECH) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_JAVASCRIPT_DEBUGGER) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_NOTIFICATIONS) $(ENABLE_LEGACY_VENDOR_PREFIXES) $(ENABLE_LEGACY_WEB_AUDIO) $(ENABLE_LINK_PREFETCH) $(ENABLE_LINK_PRERENDER) $(ENABLE_MATHML) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MICRODATA) $(ENABLE_MUTATION_OBSERVERS) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAGE_VISIBILITY_API) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_PROGRESS_ELEMENT) $(ENABLE_PROXIMITY_EVENTS) $(ENABLE_QUOTA) $(ENABLE_REQUEST_ANIMATION_FRAME) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_SCRIPTED_SPEECH) $(ENABLE_SHADOW_DOM) $(ENABLE_SHARED_WORKERS) $(ENABLE_SQL_DATABASE) $(ENABLE_STYLE_SCOPED) $(ENABLE_SUBPIXEL_LAYOUT) $(ENABLE_SVG) $(ENABLE_SVG_DOM_OBJC_BINDINGS) $(ENABLE_SVG_FONTS) $(ENABLE_TEMPLATE_ELEMENT) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TEXT_NOTIFICATIONS_ONLY) $(ENABLE_TOUCH_ICON_LOADING) $(ENABLE_USERSELECT_ALL) $(ENABLE_VIDEO) $(ENABLE_VIDEO_TRACK) $(ENABLE_WEBGL) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WORKERS) $(ENABLE_XHR_TIMEOUT) $(ENABLE_XSLT);
     163FEATURE_DEFINES = $(ENABLE_3D_RENDERING) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ANIMATION_API) $(ENABLE_BLOB) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CSP_NEXT) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_EXCLUSIONS) $(ENABLE_CSS_FILTERS) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_REGIONS) $(ENABLE_CSS_SHADERS) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_STICKY_POSITION) $(ENABLE_CSS_VARIABLES) $(ENABLE_CSS3_CONDITIONAL_RULES) $(ENABLE_CSS3_BACKGROUND) $(ENABLE_CSS3_TEXT) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_TRANSFER_ITEMS) $(ENABLE_DETAILS_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DIALOG_ELEMENT) $(ENABLE_DIRECTORY_UPLOAD) $(ENABLE_DRAGGABLE_REGION) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_FILE_SYSTEM) $(ENABLE_FILTERS) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_HIDDEN_PAGE_DOM_TIMER_THROTTLING) $(ENABLE_HIGH_DPI_CANVAS) $(ENABLE_ICONDATABASE) $(ENABLE_IFRAME_SEAMLESS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INPUT_SPEECH) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_JAVASCRIPT_DEBUGGER) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_NOTIFICATIONS) $(ENABLE_LEGACY_VENDOR_PREFIXES) $(ENABLE_LEGACY_WEB_AUDIO) $(ENABLE_LINK_PREFETCH) $(ENABLE_LINK_PRERENDER) $(ENABLE_MATHML) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MICRODATA) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_MUTATION_OBSERVERS) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAGE_VISIBILITY_API) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_PROGRESS_ELEMENT) $(ENABLE_PROXIMITY_EVENTS) $(ENABLE_QUOTA) $(ENABLE_REQUEST_ANIMATION_FRAME) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_SCRIPTED_SPEECH) $(ENABLE_SHADOW_DOM) $(ENABLE_SHARED_WORKERS) $(ENABLE_SQL_DATABASE) $(ENABLE_STYLE_SCOPED) $(ENABLE_SUBPIXEL_LAYOUT) $(ENABLE_SVG) $(ENABLE_SVG_DOM_OBJC_BINDINGS) $(ENABLE_SVG_FONTS) $(ENABLE_TEMPLATE_ELEMENT) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TEXT_NOTIFICATIONS_ONLY) $(ENABLE_TOUCH_ICON_LOADING) $(ENABLE_USERSELECT_ALL) $(ENABLE_VIDEO) $(ENABLE_VIDEO_TRACK) $(ENABLE_WEBGL) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WORKERS) $(ENABLE_XHR_TIMEOUT) $(ENABLE_XSLT);
    163164
  • trunk/Source/WebCore/ChangeLog

    r136918 r136919  
     12012-12-06  Rick Byers  <rbyers@chromium.org>
     2
     3        CSS cursor property should support webkit-image-set
     4        https://bugs.webkit.org/show_bug.cgi?id=99493
     5
     6        Reviewed by Beth Dakin.
     7
     8        Add support for image scale factors attached to custom mouse cursor images
     9        behind ENABLE(MOUSE_CURSOR_SCALE).
     10
     11        This required refactoring CSSCursorImageValue to derive directly from
     12        CSSValue since it can contain either a CSSImageValue or a CSSImageSetValue.
     13        If it contains an image-set, then we can plumb directly through to the
     14        CSSImageSetValue.  If it contains an image, then either we can plumb directly
     15        through to the CSSImageValue, or if the URL represents an SVG cursor we have
     16        to intercept the image loading in order to substitute the actual SVG image URL
     17        and do the appropriate lifetime management.
     18
     19        Tests: fast/css/cursor-parsing-image-set.html
     20               fast/events/mouse-cursor-image-set.html
     21
     22        * Configurations/FeatureDefines.xcconfig: Add ENABLE_MOUSE_CURSOR_SCALE - disabled
     23        * GNUmakefile.features.am: ditto
     24        * css/CSSCursorImageValue.cpp: Refactor to inherit directly from CSSValue and support image sets
     25        (WebCore::CSSCursorImageValue::CSSCursorImageValue):
     26        (WebCore::CSSCursorImageValue::~CSSCursorImageValue):
     27        (WebCore::CSSCursorImageValue::customCssText):
     28        (WebCore::CSSCursorImageValue::updateIfSVGCursorIsUsed):
     29        (WebCore::CSSCursorImageValue::cachedImage):
     30        (WebCore::CSSCursorImageValue::cachedOrPendingImage):
     31        (WebCore::CSSCursorImageValue::isSVGCursor):
     32        (WebCore::CSSCursorImageValue::cachedImageURL):
     33        (WebCore::CSSCursorImageValue::clearCachedImage):
     34        (WebCore::CSSCursorImageValue::reportDescendantMemoryUsage):
     35        * css/CSSCursorImageValue.h: Remove cursor-specific hacks
     36        (WebCore::CSSCursorImageValue::create):
     37        (CSSCursorImageValue):
     38        * css/CSSImageValue.cpp:
     39        (WebCore::CSSImageValue::cachedImage):
     40        * css/CSSImageValue.h:
     41        (CSSImageValue):
     42        * css/CSSParser.cpp:
     43        (WebCore::CSSParser::parseValue): Parse cursor(-webkit-image-set(...)) rules
     44        * css/CSSValue.h:
     45        (WebCore::CSSValue::isImageValue):
     46        * css/StyleBuilder.cpp:
     47        (WebCore::ApplyPropertyCursor::applyValue):
     48        * css/StyleResolver.cpp: Hook up new CSSCursorImageValue support since it can't be handled like other images any more.
     49        (WebCore::StyleResolver::styleImage):
     50        (WebCore::StyleResolver::cursorOrPendingFromValue):
     51        (WebCore::StyleResolver::loadPendingImage):
     52        * css/StyleResolver.h:
     53        (StyleResolver):
     54        * page/EventHandler.cpp:
     55        (WebCore::EventHandler::selectCursor): Handle StyleCachedImageSet images and plumb scale factor through
     56        * platform/Cursor.cpp:
     57        (WebCore::Cursor::Cursor): Add imageScaleFactor
     58        * platform/Cursor.h: Add imageScaleFactor
     59        (Cursor):
     60        (WebCore::Cursor::imageScaleFactor):
     61        * platform/chromium/CursorChromium.cpp: Add imageScaleFactor
     62        (WebCore::Cursor::Cursor):
     63        (WebCore::Cursor::operator=):
     64        * rendering/style/CursorData.h: Clarify hotspot units
     65        (CursorData):
     66        * rendering/style/StyleCachedImage.h:
     67        (StyleCachedImage::cachedImage): Override new virtual.
     68        * rendering/style/StyleCachedImageSet.h:
     69        (StyleCachedImageSet::cachedImage): Override new virtual.
     70        * rendering/style/StyleImage.h:
     71        (StyleImage::cachedImage): Add new virtual method to avoid lots of casts and typechecks.
     72        * rendering/style/StylePendingImage.h: Add CSSCursorImageValue support
     73        (WebCore::StylePendingImage::cssCursorImageValue):
     74        * testing/Internals.cpp:
     75        (WebCore::Internals::getCurrentCursorInfo): Print non-identity scale factors for testing
     76
    1772012-12-06  Hayato Ito  <hayato@chromium.org>
    278
  • trunk/Source/WebCore/Configurations/FeatureDefines.xcconfig

    r136415 r136919  
    116116ENABLE_MHTML = ;
    117117ENABLE_MICRODATA = ;
     118ENABLE_MOUSE_CURSOR_SCALE = ;
    118119ENABLE_MUTATION_OBSERVERS = ENABLE_MUTATION_OBSERVERS;
    119120ENABLE_NAVIGATOR_CONTENT_UTILS = ;
     
    160161ENABLE_XSLT = ENABLE_XSLT;
    161162
    162 FEATURE_DEFINES = $(ENABLE_3D_RENDERING) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ANIMATION_API) $(ENABLE_BLOB) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CSP_NEXT) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_EXCLUSIONS) $(ENABLE_CSS_FILTERS) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_REGIONS) $(ENABLE_CSS_SHADERS) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_STICKY_POSITION) $(ENABLE_CSS_VARIABLES) $(ENABLE_CSS3_CONDITIONAL_RULES) $(ENABLE_CSS3_BACKGROUND) $(ENABLE_CSS3_TEXT) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_TRANSFER_ITEMS) $(ENABLE_DETAILS_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DIALOG_ELEMENT) $(ENABLE_DIRECTORY_UPLOAD) $(ENABLE_DRAGGABLE_REGION) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_FILE_SYSTEM) $(ENABLE_FILTERS) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_HIDDEN_PAGE_DOM_TIMER_THROTTLING) $(ENABLE_HIGH_DPI_CANVAS) $(ENABLE_ICONDATABASE) $(ENABLE_IFRAME_SEAMLESS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INPUT_SPEECH) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_JAVASCRIPT_DEBUGGER) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_NOTIFICATIONS) $(ENABLE_LEGACY_VENDOR_PREFIXES) $(ENABLE_LEGACY_WEB_AUDIO) $(ENABLE_LINK_PREFETCH) $(ENABLE_LINK_PRERENDER) $(ENABLE_MATHML) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MICRODATA) $(ENABLE_MUTATION_OBSERVERS) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAGE_VISIBILITY_API) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_PROGRESS_ELEMENT) $(ENABLE_PROXIMITY_EVENTS) $(ENABLE_QUOTA) $(ENABLE_REQUEST_ANIMATION_FRAME) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_SCRIPTED_SPEECH) $(ENABLE_SHADOW_DOM) $(ENABLE_SHARED_WORKERS) $(ENABLE_SQL_DATABASE) $(ENABLE_STYLE_SCOPED) $(ENABLE_SUBPIXEL_LAYOUT) $(ENABLE_SVG) $(ENABLE_SVG_DOM_OBJC_BINDINGS) $(ENABLE_SVG_FONTS) $(ENABLE_TEMPLATE_ELEMENT) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TEXT_NOTIFICATIONS_ONLY) $(ENABLE_TOUCH_ICON_LOADING) $(ENABLE_USERSELECT_ALL) $(ENABLE_VIDEO) $(ENABLE_VIDEO_TRACK) $(ENABLE_WEBGL) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WORKERS) $(ENABLE_XHR_TIMEOUT) $(ENABLE_XSLT);
     163FEATURE_DEFINES = $(ENABLE_3D_RENDERING) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ANIMATION_API) $(ENABLE_BLOB) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CSP_NEXT) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_EXCLUSIONS) $(ENABLE_CSS_FILTERS) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_REGIONS) $(ENABLE_CSS_SHADERS) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_STICKY_POSITION) $(ENABLE_CSS_VARIABLES) $(ENABLE_CSS3_CONDITIONAL_RULES) $(ENABLE_CSS3_BACKGROUND) $(ENABLE_CSS3_TEXT) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_TRANSFER_ITEMS) $(ENABLE_DETAILS_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DIALOG_ELEMENT) $(ENABLE_DIRECTORY_UPLOAD) $(ENABLE_DRAGGABLE_REGION) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_FILE_SYSTEM) $(ENABLE_FILTERS) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_HIDDEN_PAGE_DOM_TIMER_THROTTLING) $(ENABLE_HIGH_DPI_CANVAS) $(ENABLE_ICONDATABASE) $(ENABLE_IFRAME_SEAMLESS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INPUT_SPEECH) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_JAVASCRIPT_DEBUGGER) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_NOTIFICATIONS) $(ENABLE_LEGACY_VENDOR_PREFIXES) $(ENABLE_LEGACY_WEB_AUDIO) $(ENABLE_LINK_PREFETCH) $(ENABLE_LINK_PRERENDER) $(ENABLE_MATHML) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MICRODATA) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_MUTATION_OBSERVERS) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAGE_VISIBILITY_API) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_PROGRESS_ELEMENT) $(ENABLE_PROXIMITY_EVENTS) $(ENABLE_QUOTA) $(ENABLE_REQUEST_ANIMATION_FRAME) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_SCRIPTED_SPEECH) $(ENABLE_SHADOW_DOM) $(ENABLE_SHARED_WORKERS) $(ENABLE_SQL_DATABASE) $(ENABLE_STYLE_SCOPED) $(ENABLE_SUBPIXEL_LAYOUT) $(ENABLE_SVG) $(ENABLE_SVG_DOM_OBJC_BINDINGS) $(ENABLE_SVG_FONTS) $(ENABLE_TEMPLATE_ELEMENT) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TEXT_NOTIFICATIONS_ONLY) $(ENABLE_TOUCH_ICON_LOADING) $(ENABLE_USERSELECT_ALL) $(ENABLE_VIDEO) $(ENABLE_VIDEO_TRACK) $(ENABLE_WEBGL) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WORKERS) $(ENABLE_XHR_TIMEOUT) $(ENABLE_XSLT);
    163164
  • trunk/Source/WebCore/GNUmakefile.features.am

    r136407 r136919  
    6464        ENABLE_MHTML=1 \
    6565        ENABLE_MICRODATA=1 \
     66        ENABLE_MOUSE_CURSOR_SCALE=0 \
    6667        ENABLE_MUTATION_OBSERVERS=1 \
    6768        ENABLE_NAVIGATOR_CONTENT_UTILS=0 \
  • trunk/Source/WebCore/css/CSSCursorImageValue.cpp

    r136256 r136919  
    2323#include "CSSCursorImageValue.h"
    2424
     25#include "CSSImageValue.h"
     26#include "CachedImage.h"
    2527#include "CachedResourceLoader.h"
     28#include "StyleCachedImage.h"
     29#include "StyleImage.h"
     30#include "StylePendingImage.h"
    2631#include "TreeScope.h"
    2732#include "WebCoreMemoryInstrumentation.h"
     
    3843#endif
    3944
     45#if ENABLE(CSS_IMAGE_SET)
     46#include "CSSImageSetValue.h"
     47#include "StyleCachedImageSet.h"
     48#endif
     49
    4050namespace WebCore {
    4151
    4252#if ENABLE(SVG)
    43 static inline bool isSVGCursorIdentifier(const String& url)
    44 {
    45     KURL kurl(ParsedURLString, url);
    46     return kurl.hasFragmentIdentifier();
    47 }
    48 
    4953static inline SVGCursorElement* resourceReferencedByCursorElement(const String& url, Document* document)
    5054{
     
    5761#endif
    5862
    59 CSSCursorImageValue::CSSCursorImageValue(const String& url, bool hasHotSpot, const IntPoint& hotSpot)
    60     : CSSImageValue(CursorImageClass, url)
     63CSSCursorImageValue::CSSCursorImageValue(PassRefPtr<CSSValue> imageValue, bool hasHotSpot, const IntPoint& hotSpot)
     64    : CSSValue(CursorImageClass)
     65    , m_imageValue(imageValue)
    6166    , m_hasHotSpot(hasHotSpot)
    6267    , m_hotSpot(hotSpot)
     68    , m_accessedImage(false)
    6369{
    6470}
     
    6773{
    6874#if ENABLE(SVG)
    69     if (!isSVGCursorIdentifier(url()))
     75    if (!isSVGCursor())
    7076        return;
    7177
    7278    HashSet<SVGElement*>::const_iterator it = m_referencedElements.begin();
    7379    HashSet<SVGElement*>::const_iterator end = m_referencedElements.end();
     80    String url = static_cast<CSSImageValue*>(m_imageValue.get())->url();
    7481
    7582    for (; it != end; ++it) {
    7683        SVGElement* referencedElement = *it;
    7784        referencedElement->cursorImageValueRemoved();
    78         if (SVGCursorElement* cursorElement = resourceReferencedByCursorElement(url(), referencedElement->document()))
     85        if (SVGCursorElement* cursorElement = resourceReferencedByCursorElement(url, referencedElement->document()))
    7986            cursorElement->removeClient(referencedElement);
    8087    }
     
    8592{
    8693    StringBuilder result;
    87     result.append(CSSImageValue::customCssText());
     94    result.append(m_imageValue->cssText());
    8895    if (m_hasHotSpot) {
    8996        result.append(' ');
     
    103110        return false;
    104111
    105     if (!isSVGCursorIdentifier(url()))
     112    if (!isSVGCursor())
    106113        return false;
    107114
    108     if (SVGCursorElement* cursorElement = resourceReferencedByCursorElement(url(), element->document())) {
     115    String url = static_cast<CSSImageValue*>(m_imageValue.get())->url();
     116    if (SVGCursorElement* cursorElement = resourceReferencedByCursorElement(url, element->document())) {
    109117        // FIXME: This will override hot spot specified in CSS, which is probably incorrect.
    110118        SVGLengthContext lengthContext(0);
     
    130138}
    131139
    132 StyleCachedImage* CSSCursorImageValue::cachedImage(CachedResourceLoader* loader)
    133 {
    134 #if ENABLE(SVG)
    135     if (isSVGCursorIdentifier(url()) && loader && loader->document()) {
    136         // FIXME: This will fail if the <cursor> element is in a shadow DOM (bug 59827)
    137         if (SVGCursorElement* cursorElement = resourceReferencedByCursorElement(url(), loader->document()))
    138             return CSSImageValue::cachedImage(loader, cursorElement->href());
    139     }
    140 #endif
    141 
    142     return CSSImageValue::cachedImage(loader, url());
    143 }
    144 
    145 #if ENABLE(SVG)
     140StyleImage* CSSCursorImageValue::cachedImage(CachedResourceLoader* loader)
     141{
     142#if ENABLE(CSS_IMAGE_SET)
     143    if (m_imageValue->isImageSetValue())
     144        return static_cast<CSSImageSetValue*>(m_imageValue.get())->cachedImageSet(loader);
     145#endif
     146
     147    if (!m_accessedImage) {
     148        m_accessedImage = true;
     149
     150#if ENABLE(SVG)
     151        // For SVG images we need to lazily substitute in the correct URL. Rather than attempt
     152        // to change the URL of the CSSImageValue (which would then change behavior like cssText),
     153        // we create an alternate CSSImageValue to use.
     154        if (isSVGCursor() && loader && loader->document()) {
     155            RefPtr<CSSImageValue> imageValue = static_cast<CSSImageValue*>(m_imageValue.get());
     156            // FIXME: This will fail if the <cursor> element is in a shadow DOM (bug 59827)
     157            if (SVGCursorElement* cursorElement = resourceReferencedByCursorElement(imageValue->url(), loader->document())) {
     158                RefPtr<CSSImageValue> svgImageValue = CSSImageValue::create(cursorElement->href());
     159                StyleCachedImage* cachedImage = svgImageValue->cachedImage(loader);
     160                m_image = cachedImage;
     161                return cachedImage;
     162            }
     163        }
     164#endif
     165
     166        if (m_imageValue->isImageValue())
     167            m_image = static_cast<CSSImageValue*>(m_imageValue.get())->cachedImage(loader);
     168    }
     169
     170    if (m_image && m_image->isCachedImage())
     171        return static_cast<StyleCachedImage*>(m_image.get());
     172
     173    return 0;
     174}
     175
     176StyleImage* CSSCursorImageValue::cachedOrPendingImage(Document* document)
     177{
     178#if ENABLE(CSS_IMAGE_SET)
     179    // Need to delegate completely so that changes in device scale factor can be handled appropriately.
     180    if (m_imageValue->isImageSetValue())
     181        return static_cast<CSSImageSetValue*>(m_imageValue.get())->cachedOrPendingImageSet(document);
     182#endif
     183
     184    if (!m_image)
     185        m_image = StylePendingImage::create(this);
     186
     187    return m_image.get();
     188}
     189
     190#if ENABLE(SVG)
     191bool CSSCursorImageValue::isSVGCursor() const
     192{
     193    if (m_imageValue->isImageValue()) {
     194        RefPtr<CSSImageValue> imageValue = static_cast<CSSImageValue*>(m_imageValue.get());
     195        KURL kurl(ParsedURLString, imageValue->url());
     196        return kurl.hasFragmentIdentifier();
     197    }
     198    return false;
     199}
     200
     201String CSSCursorImageValue::cachedImageURL()
     202{
     203    if (!m_image || !m_image->isCachedImage())
     204        return String();
     205    return static_cast<StyleCachedImage*>(m_image.get())->cachedImage()->url();
     206}
     207
     208void CSSCursorImageValue::clearCachedImage()
     209{
     210    m_image = 0;
     211    m_accessedImage = false;
     212}
     213
    146214void CSSCursorImageValue::removeReferencedElement(SVGElement* element)
    147215{
     
    153221{
    154222    MemoryClassInfo info(memoryObjectInfo, this, WebCoreMemoryTypes::CSS);
    155     CSSImageValue::reportDescendantMemoryUsage(memoryObjectInfo);
     223    m_imageValue->reportMemoryUsage(memoryObjectInfo);
     224    // No need to report m_image as it is counted as part of RenderArena.
    156225#if ENABLE(SVG)
    157226    info.addMember(m_referencedElements);
  • trunk/Source/WebCore/css/CSSCursorImageValue.h

    r132966 r136919  
    2828namespace WebCore {
    2929
     30class Document;
    3031class Element;
    3132class SVGElement;
    3233
    33 class CSSCursorImageValue : public CSSImageValue {
     34class CSSCursorImageValue : public CSSValue {
    3435public:
    35     static PassRefPtr<CSSCursorImageValue> create(const String& url, bool hasHotSpot, const IntPoint& hotSpot)
     36    static PassRefPtr<CSSCursorImageValue> create(PassRefPtr<CSSValue> imageValue, bool hasHotSpot, const IntPoint& hotSpot)
    3637    {
    37         return adoptRef(new CSSCursorImageValue(url, hasHotSpot, hotSpot));
     38        return adoptRef(new CSSCursorImageValue(imageValue, hasHotSpot, hotSpot));
    3839    }
    3940
     
    5253
    5354    bool updateIfSVGCursorIsUsed(Element*);
    54     StyleCachedImage* cachedImage(CachedResourceLoader*);
     55    StyleImage* cachedImage(CachedResourceLoader*);
     56    StyleImage* cachedOrPendingImage(Document*);
    5557
    5658#if ENABLE(SVG)
     
    6163
    6264private:
    63     CSSCursorImageValue(const String& url, bool hasHotSpot, const IntPoint& hotSpot);
     65    CSSCursorImageValue(PassRefPtr<CSSValue> imageValue, bool hasHotSpot, const IntPoint& hotSpot);
     66
     67#if ENABLE(SVG)
     68    bool isSVGCursor() const;
     69    String cachedImageURL();
     70    void clearCachedImage();
     71#endif
     72
     73    RefPtr<CSSValue> m_imageValue;
    6474
    6575    bool m_hasHotSpot;
    6676    IntPoint m_hotSpot;
     77    RefPtr<StyleImage> m_image;
     78    bool m_accessedImage;
    6779
    6880#if ENABLE(SVG)
  • trunk/Source/WebCore/css/CSSImageValue.cpp

    r136256 r136919  
    3838namespace WebCore {
    3939
    40 CSSImageValue::CSSImageValue(ClassType classType, const String& url)
    41     : CSSValue(classType)
    42     , m_url(url)
    43     , m_accessedImage(false)
    44 {
    45 }
    46 
    4740CSSImageValue::CSSImageValue(const String& url)
    4841    : CSSValue(ImageClass)
     
    7467StyleCachedImage* CSSImageValue::cachedImage(CachedResourceLoader* loader)
    7568{
    76     if (isCursorImageValue())
    77         return static_cast<CSSCursorImageValue*>(this)->cachedImage(loader);
    78     return cachedImage(loader, m_url);
    79 }
    80 
    81 StyleCachedImage* CSSImageValue::cachedImage(CachedResourceLoader* loader, const String& url)
    82 {
    8369    ASSERT(loader);
    8470
     
    8672        m_accessedImage = true;
    8773
    88         CachedResourceRequest request(ResourceRequest(loader->document()->completeURL(url)));
     74        CachedResourceRequest request(ResourceRequest(loader->document()->completeURL(m_url)));
    8975        if (m_initiatorName.isEmpty())
    9076            request.setInitiator(cachedResourceRequestInitiators().css);
     
    9682
    9783    return (m_image && m_image->isCachedImage()) ? static_cast<StyleCachedImage*>(m_image.get()) : 0;
    98 }
    99 
    100 String CSSImageValue::cachedImageURL()
    101 {
    102     if (!m_image || !m_image->isCachedImage())
    103         return String();
    104     return static_cast<StyleCachedImage*>(m_image.get())->cachedImage()->url();
    105 }
    106 
    107 void CSSImageValue::clearCachedImage()
    108 {
    109     m_image = 0;
    110     m_accessedImage = false;
    11184}
    11285
  • trunk/Source/WebCore/css/CSSImageValue.h

    r136256 r136919  
    5757    void setInitiator(const AtomicString& name) { m_initiatorName = name; }
    5858
    59 protected:
    60     CSSImageValue(ClassType, const String& url);
    61 
    62     StyleCachedImage* cachedImage(CachedResourceLoader*, const String& url);
    63     String cachedImageURL();
    64     void clearCachedImage();
    65 
    6659private:
    6760    explicit CSSImageValue(const String& url);
  • trunk/Source/WebCore/css/CSSParser.cpp

    r136754 r136919  
    19051905
    19061906    case CSSPropertyCursor: {
    1907         // [<uri>,]*  [ auto | crosshair | default | pointer | progress | move | e-resize | ne-resize |
     1907        // Grammar defined by CSS3 UI and modified by CSS4 images:
     1908        // [ [<image> [<x> <y>]?,]*
     1909        // [ auto | crosshair | default | pointer | progress | move | e-resize | ne-resize |
    19081910        // nw-resize | n-resize | se-resize | sw-resize | s-resize | w-resize | ew-resize |
    19091911        // ns-resize | nesw-resize | nwse-resize | col-resize | row-resize | text | wait | help |
     
    19111913        // -webkit-zoom-out | all-scroll | -webkit-grab | -webkit-grabbing ] ] | inherit
    19121914        RefPtr<CSSValueList> list;
    1913         while (value && value->unit == CSSPrimitiveValue::CSS_URI) {
    1914             if (!list)
    1915                 list = CSSValueList::createCommaSeparated();
    1916             String uri = value->string;
     1915        while (value) {
     1916            RefPtr<CSSValue> image = 0;
     1917            if (value->unit == CSSPrimitiveValue::CSS_URI) {
     1918                String uri = value->string;
     1919                if (!uri.isNull())
     1920                    image = CSSImageValue::create(completeURL(uri));
     1921#if ENABLE(CSS_IMAGE_SET)
     1922            } else if (value->unit == CSSParserValue::Function && equalIgnoringCase(value->function->name, "-webkit-image-set(")) {
     1923                image = parseImageSet(m_valueList.get());
     1924                if (!image)
     1925                    break;
     1926#endif
     1927            } else
     1928                break;
     1929
    19171930            Vector<int> coords;
    19181931            value = m_valueList->next();
     
    19311944            }
    19321945
    1933             if (!uri.isNull())
    1934                 list->append(CSSCursorImageValue::create(completeURL(uri), hasHotSpot, hotSpot));
     1946            if (!list)
     1947                list = CSSValueList::createCommaSeparated();
     1948
     1949            if (image)
     1950                list->append(CSSCursorImageValue::create(image, hasHotSpot, hotSpot));
    19351951
    19361952            if ((inStrictMode() && !value) || (value && !(value->unit == CSSParserValue::Operator && value->iValue == ',')))
  • trunk/Source/WebCore/css/CSSValue.h

    r128418 r136919  
    8080    bool isImageSetValue() const { return m_classType == ImageSetClass; }
    8181#endif
    82     bool isImageValue() const { return m_classType == ImageClass || m_classType == CursorImageClass; }
     82    bool isImageValue() const { return m_classType == ImageClass; }
    8383    bool isImplicitInitialValue() const;
    8484    bool isInheritedValue() const { return m_classType == InheritedClass; }
  • trunk/Source/WebCore/css/StyleBuilder.cpp

    r136640 r136919  
    10931093                    if (image->updateIfSVGCursorIsUsed(styleResolver->element())) // Elements with SVG cursors are not allowed to share style.
    10941094                        styleResolver->style()->setUnique();
    1095                     styleResolver->style()->addCursor(styleResolver->cachedOrPendingFromValue(CSSPropertyCursor, image), image->hotSpot());
     1095                    styleResolver->style()->addCursor(styleResolver->styleImage(CSSPropertyCursor, image), image->hotSpot());
    10961096                } else if (item->isPrimitiveValue()) {
    10971097                    CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(item);
  • trunk/Source/WebCore/css/StyleResolver.cpp

    r136722 r136919  
    39863986#endif
    39873987
     3988    if (value->isCursorImageValue())
     3989        return cursorOrPendingFromValue(property, static_cast<CSSCursorImageValue*>(value));
     3990
    39883991    return 0;
    39893992}
     
    40154018}
    40164019#endif
     4020
     4021PassRefPtr<StyleImage> StyleResolver::cursorOrPendingFromValue(CSSPropertyID property, CSSCursorImageValue* value)
     4022{
     4023    RefPtr<StyleImage> image = value->cachedOrPendingImage(document());
     4024    if (image && image->isPendingImage())
     4025        m_pendingImageProperties.set(property, value);
     4026    return image.release();
     4027}
    40174028
    40184029void StyleResolver::checkForTextSizeAdjust()
     
    51245135    }
    51255136
     5137    if (pendingImage->cssCursorImageValue()) {
     5138        CSSCursorImageValue* cursorImageValue = pendingImage->cssCursorImageValue();
     5139        return cursorImageValue->cachedImage(cachedResourceLoader);
     5140    }
     5141
    51265142#if ENABLE(CSS_IMAGE_SET)
    51275143    if (pendingImage->cssImageSetValue()) {
  • trunk/Source/WebCore/css/StyleResolver.h

    r136640 r136919  
    4646enum ESmartMinimumForFontSize { DoNotUseSmartMinimumForFontSize, UseSmartMinimumForFontFize };
    4747
     48class CSSCursorImageValue;
    4849class CSSFontSelector;
    49 class CSSPageRule;
    50 class CSSPrimitiveValue;
    51 class CSSProperty;
    52 class CSSRuleList;
    5350class CSSFontFace;
    5451class CSSFontFaceRule;
     
    5653class CSSImageSetValue;
    5754class CSSImageValue;
     55class CSSPageRule;
     56class CSSPrimitiveValue;
     57class CSSProperty;
     58class CSSRuleList;
    5859class CSSSelector;
    5960class CSSStyleRule;
     
    415416    PassRefPtr<StyleImage> setOrPendingFromValue(CSSPropertyID, CSSImageSetValue*);
    416417#endif
     418    PassRefPtr<StyleImage> cursorOrPendingFromValue(CSSPropertyID, CSSCursorImageValue*);
    417419
    418420    bool applyPropertyToRegularStyle() const { return m_applyPropertyToRegularStyle; }
  • trunk/Source/WebCore/page/EventHandler.cpp

    r136642 r136919  
    112112#endif
    113113
     114#if ENABLE(CSS_IMAGE_SET)
     115#include "StyleCachedImageSet.h"
     116#endif
     117
    114118namespace WebCore {
    115119
     
    148152const double fakeMouseMoveIntervalReductionLimit = 0.5;
    149153const double fakeMouseMoveIntervalReductionFraction = 0.75;
     154
     155const int maximumCursorSize = 128;
     156#if ENABLE(MOUSE_CURSOR_SCALE)
     157// It's pretty unlikely that a scale of less than one would ever be used. But all we really
     158// need to ensure here is that the scale isn't so small that integer overflow can occur when
     159// dividing cursor sizes (limited above) by the scale.
     160const double minimumCursorScale = 0.001;
     161#endif
    150162
    151163enum NoCursorChangeType { NoCursorChange };
     
    14511463        const CursorList* cursors = style->cursors();
    14521464        for (unsigned i = 0; i < cursors->size(); ++i) {
    1453             CachedImage* cimage = 0;
    1454             StyleImage* image = (*cursors)[i].image();
    1455             if (image && image->isCachedImage())
    1456                 cimage = static_cast<StyleCachedImage*>(image)->cachedImage();
    1457             if (!cimage)
     1465            StyleImage* styleImage = (*cursors)[i].image();
     1466            if (!styleImage)
    14581467                continue;
     1468            CachedImage* cachedImage = styleImage->cachedImage();
     1469            if (!cachedImage)
     1470                continue;
     1471            float scale = styleImage->imageScaleFactor();
     1472            // Get hotspot and convert from logical pixels to physical pixels.
    14591473            IntPoint hotSpot = (*cursors)[i].hotSpot();
    1460             // Limit the size of cursors so that they cannot be used to cover UI elements in chrome.
    1461             IntSize size = cimage->imageForRenderer(renderer)->size();
    1462             if (size.width() > 128 || size.height() > 128)
     1474            hotSpot.scale(scale, scale);
     1475            IntSize size = cachedImage->imageForRenderer(renderer)->size();
     1476            if (cachedImage->errorOccurred())
    14631477                continue;
    1464             if (!cimage->errorOccurred())
    1465                 return Cursor(cimage->imageForRenderer(renderer), hotSpot);
     1478            // Limit the size of cursors (in UI pixels) so that they cannot be
     1479            // used to cover UI elements in chrome.
     1480            size.scale(1 / scale);
     1481            if (size.width() > maximumCursorSize || size.height() > maximumCursorSize)
     1482                continue;
     1483
     1484            Image* image = cachedImage->imageForRenderer(renderer);
     1485#if ENABLE(MOUSE_CURSOR_SCALE)
     1486            // Ensure no overflow possible in calculations above.
     1487            if (scale < minimumCursorScale)
     1488                continue;
     1489            return Cursor(image, hotSpot, scale);
     1490#else
     1491            ASSERT(scale == 1);
     1492            return Cursor(image, hotSpot);
     1493#endif // ENABLE(MOUSE_CURSOR_SCALE)
    14661494        }
    14671495    }
  • trunk/Source/WebCore/platform/Cursor.cpp

    r101698 r136919  
    2828
    2929#include "Image.h"
     30#include <wtf/Assertions.h>
    3031
    3132namespace WebCore {
     
    151152    , m_image(image)
    152153    , m_hotSpot(determineHotSpot(image, hotSpot))
     154#if ENABLE(MOUSE_CURSOR_SCALE)
     155    , m_imageScaleFactor(1)
     156#endif
    153157    , m_platformCursor(0)
    154158{
    155159}
     160
     161#if ENABLE(MOUSE_CURSOR_SCALE)
     162Cursor::Cursor(Image* image, const IntPoint& hotSpot, float scale)
     163    : m_type(Custom)
     164    , m_image(image)
     165    , m_hotSpot(determineHotSpot(image, hotSpot))
     166    , m_imageScaleFactor(scale)
     167    , m_platformCursor(0)
     168{
     169}
     170#endif
    156171
    157172Cursor::Cursor(Type type)
    158173    : m_type(type)
     174#if ENABLE(MOUSE_CURSOR_SCALE)
     175    , m_imageScaleFactor(1)
     176#endif
    159177    , m_platformCursor(0)
    160178{
  • trunk/Source/WebCore/platform/Cursor.h

    r134803 r136919  
    165165        Cursor(Image*, const IntPoint& hotSpot);
    166166        Cursor(const Cursor&);
     167
     168#if ENABLE(MOUSE_CURSOR_SCALE)
     169        // Hot spot is in image pixels.
     170        Cursor(Image*, const IntPoint& hotSpot, float imageScaleFactor);
     171#endif
     172
    167173        ~Cursor();
    168174        Cursor& operator=(const Cursor&);
     
    177183        Image* image() const { return m_image.get(); }
    178184        const IntPoint& hotSpot() const { return m_hotSpot; }
     185#if ENABLE(MOUSE_CURSOR_SCALE)
     186        // Image scale in image pixels per logical (UI) pixel.
     187        float imageScaleFactor() const { return m_imageScaleFactor; }
     188#endif
    179189        PlatformCursor platformCursor() const;
    180190#else
     
    190200        RefPtr<Image> m_image;
    191201        IntPoint m_hotSpot;
     202#if ENABLE(MOUSE_CURSOR_SCALE)
     203        float m_imageScaleFactor;
     204#endif
    192205#endif
    193206
  • trunk/Source/WebCore/platform/chromium/CursorChromium.cpp

    r134149 r136919  
    4040    , m_image(other.m_image)
    4141    , m_hotSpot(other.m_hotSpot)
     42    , m_imageScaleFactor(other.m_imageScaleFactor)
    4243    , m_platformCursor(other.m_platformCursor)
    4344{
     
    4950    m_image = other.m_image;
    5051    m_hotSpot = other.m_hotSpot;
     52    m_imageScaleFactor = other.m_imageScaleFactor;
    5153    m_platformCursor = other.m_platformCursor;
    5254    return *this;
  • trunk/Source/WebCore/rendering/style/CursorData.h

    r66391 r136919  
    5252    void setImage(PassRefPtr<StyleImage> image) { m_image = image; }   
    5353
     54    // Hot spot in the image in logical pixels.
    5455    const IntPoint& hotSpot() const { return m_hotSpot; }
    5556   
  • trunk/Source/WebCore/rendering/style/StyleCachedImage.h

    r135629 r136919  
    4343    virtual PassRefPtr<CSSValue> cssValue() const;
    4444   
    45     CachedImage* cachedImage() const { return m_image.get(); }
    46 
    4745    virtual bool canRender(const RenderObject*, float multiplier) const;
    4846    virtual bool isLoaded() const;
     
    5856    virtual PassRefPtr<Image> image(RenderObject*, const IntSize&) const;
    5957    virtual bool hasAlpha(const RenderObject*) const OVERRIDE;
     58    virtual CachedImage* cachedImage() const OVERRIDE { return m_image.get(); }
    6059   
    6160private:
  • trunk/Source/WebCore/rendering/style/StyleCachedImageSet.h

    r136560 r136919  
    5757    virtual WrappedImagePtr data() const { return m_bestFitImage.get(); }
    5858
    59     CachedImage* cachedImage() const { return m_bestFitImage.get(); }
    60 
    6159    void clearImageSetValue() { m_imageSetValue = 0; }
    6260
     
    7573    virtual float imageScaleFactor() const { return m_imageScaleFactor; }
    7674    virtual bool hasAlpha(const RenderObject*) const OVERRIDE;
     75    virtual CachedImage* cachedImage() const OVERRIDE { return m_bestFitImage.get(); }
    7776   
    7877private:
  • trunk/Source/WebCore/rendering/style/StyleImage.h

    r135629 r136919  
    3535namespace WebCore {
    3636
     37class CachedImage;
    3738class CSSValue;
    3839class RenderObject;
     
    6667    virtual float imageScaleFactor() const { return 1; }
    6768    virtual bool hasAlpha(const RenderObject*) const = 0;
     69    virtual CachedImage* cachedImage() const { return 0; }
    6870
    6971    ALWAYS_INLINE bool isCachedImage() const { return m_isCachedImage; }
  • trunk/Source/WebCore/rendering/style/StylePendingImage.h

    r135629 r136919  
    2727#define StylePendingImage_h
    2828
     29#include "CSSCursorImageValue.h"
    2930#include "CSSImageGeneratorValue.h"
    3031#if ENABLE(CSS_IMAGE_SET)
     
    5051    CSSImageValue* cssImageValue() const { return m_value->isImageValue() ? static_cast<CSSImageValue*>(m_value) : 0; }
    5152    CSSImageGeneratorValue* cssImageGeneratorValue() const { return m_value->isImageGeneratorValue() ? static_cast<CSSImageGeneratorValue*>(m_value) : 0; }
     53    CSSCursorImageValue* cssCursorImageValue() const { return m_value->isCursorImageValue() ? static_cast<CSSCursorImageValue*>(m_value) : 0; }
    5254#if ENABLE(CSS_IMAGE_SET)
    5355    CSSImageSetValue* cssImageSetValue() const { return m_value->isImageSetValue() ? static_cast<CSSImageSetValue*>(m_value) : 0; }
  • trunk/Source/WebCore/testing/Internals.cpp

    r136878 r136919  
    8585#include <wtf/text/StringBuffer.h>
    8686
    87 
    8887#if ENABLE(INPUT_TYPE_COLOR)
    8988#include "ColorChooser.h"
     
    105104#if ENABLE(TOUCH_ADJUSTMENT)
    106105#include "WebKitPoint.h"
     106#endif
     107
     108#if ENABLE(MOUSE_CURSOR_SCALE)
     109#include <wtf/dtoa.h>
    107110#endif
    108111
     
    17151718        result.appendNumber(size.height());
    17161719    }
     1720#if ENABLE(MOUSE_CURSOR_SCALE)
     1721    if (cursor.imageScaleFactor() != 1) {
     1722        result.append(" scale=");
     1723        NumberToStringBuffer buffer;
     1724        result.append(numberToFixedPrecisionString(cursor.imageScaleFactor(), 8, buffer, true));
     1725    }
     1726#endif
    17171727    return result.toString();
    17181728#else
  • trunk/Source/WebKit/chromium/ChangeLog

    r136904 r136919  
     12012-12-06  Rick Byers  <rbyers@chromium.org>
     2
     3        CSS cursor property should support webkit-image-set
     4        https://bugs.webkit.org/show_bug.cgi?id=99493
     5
     6        Reviewed by Beth Dakin.
     7
     8        Add ENABLE_MOUSE_CURSOR_SCALE and enable it on the chromium port.
     9        Plumb cursor image scale factor through to chromium API.
     10
     11        * features.gypi:
     12        * public/WebCursorInfo.h:
     13        * src/WebCursorInfo.cpp:
     14        (WebKit::WebCursorInfo::WebCursorInfo):
     15
    1162012-12-06  James Simonsen  <simonjam@chromium.org>
    217
  • trunk/Source/WebKit/chromium/features.gypi

    r136904 r136919  
    9191      'ENABLE_MHTML=1',
    9292      'ENABLE_MICRODATA=0',
     93      'ENABLE_MOUSE_CURSOR_SCALE=1',
    9394      'ENABLE_MUTATION_OBSERVERS=<(enable_mutation_observers)',
    9495      'ENABLE_NAVIGATOR_CONTENT_UTILS=1',
  • trunk/Source/WebKit/chromium/src/WebCursorInfo.cpp

    r135076 r136919  
    4141    : type(static_cast<Type>(cursor.type()))
    4242    , hotSpot(cursor.hotSpot())
    43     , imageScaleFactor(1)
     43    , imageScaleFactor(cursor.imageScaleFactor())
    4444    , customImage(cursor.image())
    4545#ifdef WIN32
  • trunk/Source/WebKit/mac/ChangeLog

    r136455 r136919  
     12012-12-06  Rick Byers  <rbyers@chromium.org>
     2
     3        CSS cursor property should support webkit-image-set
     4        https://bugs.webkit.org/show_bug.cgi?id=99493
     5
     6        Reviewed by Beth Dakin.
     7
     8        Add ENABLE_MOUSE_CURSOR_SCALE - disabled by default.
     9
     10        * Configurations/FeatureDefines.xcconfig:
     11
    1122012-12-03  Yury Semikhatsky  <yurys@chromium.org>
    213
  • trunk/Source/WebKit/mac/Configurations/FeatureDefines.xcconfig

    r136415 r136919  
    116116ENABLE_MHTML = ;
    117117ENABLE_MICRODATA = ;
     118ENABLE_MOUSE_CURSOR_SCALE = ;
    118119ENABLE_MUTATION_OBSERVERS = ENABLE_MUTATION_OBSERVERS;
    119120ENABLE_NAVIGATOR_CONTENT_UTILS = ;
     
    160161ENABLE_XSLT = ENABLE_XSLT;
    161162
    162 FEATURE_DEFINES = $(ENABLE_3D_RENDERING) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ANIMATION_API) $(ENABLE_BLOB) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CSP_NEXT) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_EXCLUSIONS) $(ENABLE_CSS_FILTERS) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_REGIONS) $(ENABLE_CSS_SHADERS) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_STICKY_POSITION) $(ENABLE_CSS_VARIABLES) $(ENABLE_CSS3_CONDITIONAL_RULES) $(ENABLE_CSS3_BACKGROUND) $(ENABLE_CSS3_TEXT) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_TRANSFER_ITEMS) $(ENABLE_DETAILS_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DIALOG_ELEMENT) $(ENABLE_DIRECTORY_UPLOAD) $(ENABLE_DRAGGABLE_REGION) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_FILE_SYSTEM) $(ENABLE_FILTERS) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_HIDDEN_PAGE_DOM_TIMER_THROTTLING) $(ENABLE_HIGH_DPI_CANVAS) $(ENABLE_ICONDATABASE) $(ENABLE_IFRAME_SEAMLESS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INPUT_SPEECH) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_JAVASCRIPT_DEBUGGER) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_NOTIFICATIONS) $(ENABLE_LEGACY_VENDOR_PREFIXES) $(ENABLE_LEGACY_WEB_AUDIO) $(ENABLE_LINK_PREFETCH) $(ENABLE_LINK_PRERENDER) $(ENABLE_MATHML) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MICRODATA) $(ENABLE_MUTATION_OBSERVERS) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAGE_VISIBILITY_API) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_PROGRESS_ELEMENT) $(ENABLE_PROXIMITY_EVENTS) $(ENABLE_QUOTA) $(ENABLE_REQUEST_ANIMATION_FRAME) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_SCRIPTED_SPEECH) $(ENABLE_SHADOW_DOM) $(ENABLE_SHARED_WORKERS) $(ENABLE_SQL_DATABASE) $(ENABLE_STYLE_SCOPED) $(ENABLE_SUBPIXEL_LAYOUT) $(ENABLE_SVG) $(ENABLE_SVG_DOM_OBJC_BINDINGS) $(ENABLE_SVG_FONTS) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TEXT_NOTIFICATIONS_ONLY) $(ENABLE_TOUCH_ICON_LOADING) $(ENABLE_USERSELECT_ALL) $(ENABLE_VIDEO) $(ENABLE_VIDEO_TRACK) $(ENABLE_WEBGL) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WORKERS) $(ENABLE_XHR_TIMEOUT) $(ENABLE_XSLT);
     163FEATURE_DEFINES = $(ENABLE_3D_RENDERING) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ANIMATION_API) $(ENABLE_BLOB) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CSP_NEXT) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_EXCLUSIONS) $(ENABLE_CSS_FILTERS) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_REGIONS) $(ENABLE_CSS_SHADERS) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_STICKY_POSITION) $(ENABLE_CSS_VARIABLES) $(ENABLE_CSS3_CONDITIONAL_RULES) $(ENABLE_CSS3_BACKGROUND) $(ENABLE_CSS3_TEXT) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_TRANSFER_ITEMS) $(ENABLE_DETAILS_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DIALOG_ELEMENT) $(ENABLE_DIRECTORY_UPLOAD) $(ENABLE_DRAGGABLE_REGION) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_FILE_SYSTEM) $(ENABLE_FILTERS) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_HIDDEN_PAGE_DOM_TIMER_THROTTLING) $(ENABLE_HIGH_DPI_CANVAS) $(ENABLE_ICONDATABASE) $(ENABLE_IFRAME_SEAMLESS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INPUT_SPEECH) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_JAVASCRIPT_DEBUGGER) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_NOTIFICATIONS) $(ENABLE_LEGACY_VENDOR_PREFIXES) $(ENABLE_LEGACY_WEB_AUDIO) $(ENABLE_LINK_PREFETCH) $(ENABLE_LINK_PRERENDER) $(ENABLE_MATHML) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MICRODATA) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_MUTATION_OBSERVERS) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAGE_VISIBILITY_API) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_PROGRESS_ELEMENT) $(ENABLE_PROXIMITY_EVENTS) $(ENABLE_QUOTA) $(ENABLE_REQUEST_ANIMATION_FRAME) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_SCRIPTED_SPEECH) $(ENABLE_SHADOW_DOM) $(ENABLE_SHARED_WORKERS) $(ENABLE_SQL_DATABASE) $(ENABLE_STYLE_SCOPED) $(ENABLE_SUBPIXEL_LAYOUT) $(ENABLE_SVG) $(ENABLE_SVG_DOM_OBJC_BINDINGS) $(ENABLE_SVG_FONTS) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TEXT_NOTIFICATIONS_ONLY) $(ENABLE_TOUCH_ICON_LOADING) $(ENABLE_USERSELECT_ALL) $(ENABLE_VIDEO) $(ENABLE_VIDEO_TRACK) $(ENABLE_WEBGL) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WORKERS) $(ENABLE_XHR_TIMEOUT) $(ENABLE_XSLT);
  • trunk/Source/WebKit2/ChangeLog

    r136912 r136919  
     12012-12-06  Rick Byers  <rbyers@chromium.org>
     2
     3        CSS cursor property should support webkit-image-set
     4        https://bugs.webkit.org/show_bug.cgi?id=99493
     5
     6        Reviewed by Beth Dakin.
     7
     8        Add ENABLE_MOUSE_CURSOR_SCALE - disabled by default.
     9
     10        * Configurations/FeatureDefines.xcconfig:
     11
    1122012-12-06  Jae Hyun Park  <jae.park@company100.net>
    213
  • trunk/Source/WebKit2/Configurations/FeatureDefines.xcconfig

    r136415 r136919  
    116116ENABLE_MHTML = ;
    117117ENABLE_MICRODATA = ;
     118ENABLE_MOUSE_CURSOR_SCALE = ;
    118119ENABLE_MUTATION_OBSERVERS = ENABLE_MUTATION_OBSERVERS;
    119120ENABLE_NAVIGATOR_CONTENT_UTILS = ;
     
    160161ENABLE_XSLT = ENABLE_XSLT;
    161162
    162 FEATURE_DEFINES = $(ENABLE_3D_RENDERING) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ANIMATION_API) $(ENABLE_BLOB) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CSP_NEXT) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_EXCLUSIONS) $(ENABLE_CSS_FILTERS) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_REGIONS) $(ENABLE_CSS_SHADERS) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_STICKY_POSITION) $(ENABLE_CSS_VARIABLES) $(ENABLE_CSS3_CONDITIONAL_RULES) $(ENABLE_CSS3_BACKGROUND) $(ENABLE_CSS3_TEXT) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_TRANSFER_ITEMS) $(ENABLE_DETAILS_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DIALOG_ELEMENT) $(ENABLE_DIRECTORY_UPLOAD) $(ENABLE_DRAGGABLE_REGION) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_FILE_SYSTEM) $(ENABLE_FILTERS) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_HIDDEN_PAGE_DOM_TIMER_THROTTLING) $(ENABLE_HIGH_DPI_CANVAS) $(ENABLE_ICONDATABASE) $(ENABLE_IFRAME_SEAMLESS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INPUT_SPEECH) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_JAVASCRIPT_DEBUGGER) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_NOTIFICATIONS) $(ENABLE_LEGACY_VENDOR_PREFIXES) $(ENABLE_LEGACY_WEB_AUDIO) $(ENABLE_LINK_PREFETCH) $(ENABLE_LINK_PRERENDER) $(ENABLE_MATHML) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MICRODATA) $(ENABLE_MUTATION_OBSERVERS) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAGE_VISIBILITY_API) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_PROGRESS_ELEMENT) $(ENABLE_PROXIMITY_EVENTS) $(ENABLE_QUOTA) $(ENABLE_REQUEST_ANIMATION_FRAME) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_SCRIPTED_SPEECH) $(ENABLE_SHADOW_DOM) $(ENABLE_SHARED_WORKERS) $(ENABLE_SQL_DATABASE) $(ENABLE_STYLE_SCOPED) $(ENABLE_SUBPIXEL_LAYOUT) $(ENABLE_SVG) $(ENABLE_SVG_DOM_OBJC_BINDINGS) $(ENABLE_SVG_FONTS) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TEXT_NOTIFICATIONS_ONLY) $(ENABLE_TOUCH_ICON_LOADING) $(ENABLE_USERSELECT_ALL) $(ENABLE_VIDEO) $(ENABLE_VIDEO_TRACK) $(ENABLE_WEBGL) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WORKERS) $(ENABLE_XHR_TIMEOUT) $(ENABLE_XSLT);
     163FEATURE_DEFINES = $(ENABLE_3D_RENDERING) $(ENABLE_ACCELERATED_2D_CANVAS) $(ENABLE_ANIMATION_API) $(ENABLE_BLOB) $(ENABLE_CHANNEL_MESSAGING) $(ENABLE_CSP_NEXT) $(ENABLE_CSS_BOX_DECORATION_BREAK) $(ENABLE_CSS_DEVICE_ADAPTATION) $(ENABLE_CSS_EXCLUSIONS) $(ENABLE_CSS_FILTERS) $(ENABLE_CSS_IMAGE_ORIENTATION) $(ENABLE_CSS_IMAGE_RESOLUTION) $(ENABLE_CSS_REGIONS) $(ENABLE_CSS_SHADERS) $(ENABLE_CSS_COMPOSITING) $(ENABLE_CSS_STICKY_POSITION) $(ENABLE_CSS_VARIABLES) $(ENABLE_CSS3_CONDITIONAL_RULES) $(ENABLE_CSS3_BACKGROUND) $(ENABLE_CSS3_TEXT) $(ENABLE_CUSTOM_SCHEME_HANDLER) $(ENABLE_DASHBOARD_SUPPORT) $(ENABLE_DATALIST_ELEMENT) $(ENABLE_DATA_TRANSFER_ITEMS) $(ENABLE_DETAILS_ELEMENT) $(ENABLE_DEVICE_ORIENTATION) $(ENABLE_DIALOG_ELEMENT) $(ENABLE_DIRECTORY_UPLOAD) $(ENABLE_DRAGGABLE_REGION) $(ENABLE_ENCRYPTED_MEDIA) $(ENABLE_FILE_SYSTEM) $(ENABLE_FILTERS) $(ENABLE_FULLSCREEN_API) $(ENABLE_GAMEPAD) $(ENABLE_GEOLOCATION) $(ENABLE_HIDDEN_PAGE_DOM_TIMER_THROTTLING) $(ENABLE_HIGH_DPI_CANVAS) $(ENABLE_ICONDATABASE) $(ENABLE_IFRAME_SEAMLESS) $(ENABLE_INDEXED_DATABASE) $(ENABLE_INPUT_SPEECH) $(ENABLE_INPUT_TYPE_COLOR) $(ENABLE_INPUT_TYPE_DATE) $(ENABLE_INPUT_TYPE_DATETIME) $(ENABLE_INPUT_TYPE_DATETIMELOCAL) $(ENABLE_INPUT_TYPE_MONTH) $(ENABLE_INPUT_TYPE_TIME) $(ENABLE_INPUT_TYPE_WEEK) $(ENABLE_JAVASCRIPT_DEBUGGER) $(ENABLE_LEGACY_CSS_VENDOR_PREFIXES) $(ENABLE_LEGACY_NOTIFICATIONS) $(ENABLE_LEGACY_VENDOR_PREFIXES) $(ENABLE_LEGACY_WEB_AUDIO) $(ENABLE_LINK_PREFETCH) $(ENABLE_LINK_PRERENDER) $(ENABLE_MATHML) $(ENABLE_MEDIA_SOURCE) $(ENABLE_MEDIA_STATISTICS) $(ENABLE_METER_ELEMENT) $(ENABLE_MHTML) $(ENABLE_MICRODATA) $(ENABLE_MOUSE_CURSOR_SCALE) $(ENABLE_MUTATION_OBSERVERS) $(ENABLE_NAVIGATOR_CONTENT_UTILS) $(ENABLE_NOTIFICATIONS) $(ENABLE_PAGE_VISIBILITY_API) $(ENABLE_PDFKIT_PLUGIN) $(ENABLE_PROGRESS_ELEMENT) $(ENABLE_PROXIMITY_EVENTS) $(ENABLE_QUOTA) $(ENABLE_REQUEST_ANIMATION_FRAME) $(ENABLE_RESOLUTION_MEDIA_QUERY) $(ENABLE_SCRIPTED_SPEECH) $(ENABLE_SHADOW_DOM) $(ENABLE_SHARED_WORKERS) $(ENABLE_SQL_DATABASE) $(ENABLE_STYLE_SCOPED) $(ENABLE_SUBPIXEL_LAYOUT) $(ENABLE_SVG) $(ENABLE_SVG_DOM_OBJC_BINDINGS) $(ENABLE_SVG_FONTS) $(ENABLE_TEXT_AUTOSIZING) $(ENABLE_TEXT_NOTIFICATIONS_ONLY) $(ENABLE_TOUCH_ICON_LOADING) $(ENABLE_USERSELECT_ALL) $(ENABLE_VIDEO) $(ENABLE_VIDEO_TRACK) $(ENABLE_WEBGL) $(ENABLE_WEB_AUDIO) $(ENABLE_WEB_SOCKETS) $(ENABLE_WEB_TIMING) $(ENABLE_WORKERS) $(ENABLE_XHR_TIMEOUT) $(ENABLE_XSLT);
  • trunk/Source/cmake/WebKitFeatures.cmake

    r136884 r136919  
    8585    WEBKIT_OPTION_DEFINE(ENABLE_MHTML "Toggle MHTML support" OFF)
    8686    WEBKIT_OPTION_DEFINE(ENABLE_MICRODATA "Toggle Microdata support" OFF)
     87    WEBKIT_OPTION_DEFINE(ENABLE_ENABLE_MOUSE_CURSOR_SCALE "Toggle Scaled mouse cursor support" OFF)
    8788    WEBKIT_OPTION_DEFINE(ENABLE_MUTATION_OBSERVERS "Toggle DOM mutation observer support" ON)
    8889    WEBKIT_OPTION_DEFINE(ENABLE_NAVIGATOR_CONTENT_UTILS "Toggle Navigator Content Utils support" OFF)
  • trunk/Source/cmakeconfig.h.cmake

    r136884 r136919  
    7979#cmakedefine01 ENABLE_MHTML
    8080#cmakedefine01 ENABLE_MICRODATA
     81#cmakedefine01 ENABLE_MOUSE_CURSOR_SCALE
    8182#cmakedefine01 ENABLE_MUTATION_OBSERVERS
    8283#cmakedefine01 ENABLE_NAVIGATOR_CONTENT_UTILS
  • trunk/Tools/ChangeLog

    r136901 r136919  
     12012-12-06  Rick Byers  <rbyers@chromium.org>
     2
     3        CSS cursor property should support webkit-image-set
     4        https://bugs.webkit.org/show_bug.cgi?id=99493
     5
     6        Reviewed by Beth Dakin.
     7
     8        Add ENABLE_MOUSE_CURSOR_SCALE - disabled by default
     9
     10        * Scripts/webkitperl/FeatureList.pm:
     11        * qmake/mkspecs/features/features.pri:
     12
    1132012-12-06  Vivek Galatage  <vivek.vg@samsung.com>
    214
  • trunk/Tools/Scripts/webkitperl/FeatureList.pm

    r136727 r136919  
    106106    $mhtmlSupport,
    107107    $microdataSupport,
     108    $mouseCursorScaleSupport,
    108109    $mutationObserversSupport,
    109110    $netscapePluginAPISupport,
     
    332333      define => "ENABLE_MICRODATA", default => (isEfl() || isBlackBerry()), value => \$microdataSupport },
    333334
     335    { option => "mouse-cursor-scale", desc => "Toggle Scaled mouse cursor support",
     336      define => "ENABLE_MOUSE_CURSOR_SCALE", default => 0, value => \$mouseCursorScaleSupport },
     337
    334338    { option => "mutation-observers", desc => "Toggle Mutation Observers support",
    335339      define => "ENABLE_MUTATION_OBSERVERS", default => 1, value => \$mutationObserversSupport },
  • trunk/Tools/qmake/mkspecs/features/features.pri

    r136387 r136919  
    8181    ENABLE_MHTML=1 \
    8282    ENABLE_MICRODATA=0 \
     83    ENABLE_MOUSE_CURSOR_SCALE=0 \
    8384    ENABLE_MUTATION_OBSERVERS=1 \
    8485    ENABLE_NAVIGATOR_CONTENT_UTILS=0 \
  • trunk/WebKitLibraries/ChangeLog

    r135766 r136919  
     12012-12-06  Rick Byers  <rbyers@chromium.org>
     2
     3        CSS cursor property should support webkit-image-set
     4        https://bugs.webkit.org/show_bug.cgi?id=99493
     5
     6        Reviewed by Beth Dakin.
     7
     8        Add ENABLE_MOUSE_CURSOR_SCALE - disabled by default
     9
     10        * win/tools/vsprops/FeatureDefines.vsprops:
     11        * win/tools/vsprops/FeatureDefinesCairo.vsprops:
     12
    1132012-11-26  Roger Fong  <roger_fong@apple.com>
    214
  • trunk/WebKitLibraries/win/tools/vsprops/FeatureDefines.vsprops

    r135766 r136919  
    273273        />
    274274  <UserMacro
     275        Name="ENABLE_MOUSE_CURSOR_SCALE"
     276        Value=""
     277        PerformEnvironmentSet="true"
     278    />
     279  <UserMacro
    275280                Name="ENABLE_MUTATION_OBSERVERS"
    276281                Value="ENABLE_MUTATION_OBSERVERS"
  • trunk/WebKitLibraries/win/tools/vsprops/FeatureDefinesCairo.vsprops

    r135632 r136919  
    263263        />
    264264  <UserMacro
     265        Name="ENABLE_MOUSE_CURSOR_SCALE"
     266        Value=""
     267        PerformEnvironmentSet="true"
     268    />
     269  <UserMacro
    265270                Name="ENABLE_MUTATION_OBSERVERS"
    266271                Value="ENABLE_MUTATION_OBSERVERS"
Note: See TracChangeset for help on using the changeset viewer.