Home | History | Annotate | Download | only in platform
      1 /*
      2  * Copyright (C) 2004, 2006, 2008 Apple Inc. All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions
      6  * are met:
      7  * 1. Redistributions of source code must retain the above copyright
      8  *    notice, this list of conditions and the following disclaimer.
      9  * 2. Redistributions in binary form must reproduce the above copyright
     10  *    notice, this list of conditions and the following disclaimer in the
     11  *    documentation and/or other materials provided with the distribution.
     12  *
     13  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
     14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
     17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
     20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
     21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     24  */
     25 
     26 #ifndef Cursor_h
     27 #define Cursor_h
     28 
     29 #include "platform/PlatformExport.h"
     30 #include "platform/geometry/IntPoint.h"
     31 #include "platform/graphics/Image.h"
     32 #include "wtf/Assertions.h"
     33 #include "wtf/RefPtr.h"
     34 
     35 namespace WebCore {
     36 
     37 class PLATFORM_EXPORT Cursor {
     38     WTF_MAKE_FAST_ALLOCATED;
     39 public:
     40     enum Type {
     41         Pointer = 0,
     42         Cross,
     43         Hand,
     44         IBeam,
     45         Wait,
     46         Help,
     47         EastResize,
     48         NorthResize,
     49         NorthEastResize,
     50         NorthWestResize,
     51         SouthResize,
     52         SouthEastResize,
     53         SouthWestResize,
     54         WestResize,
     55         NorthSouthResize,
     56         EastWestResize,
     57         NorthEastSouthWestResize,
     58         NorthWestSouthEastResize,
     59         ColumnResize,
     60         RowResize,
     61         MiddlePanning,
     62         EastPanning,
     63         NorthPanning,
     64         NorthEastPanning,
     65         NorthWestPanning,
     66         SouthPanning,
     67         SouthEastPanning,
     68         SouthWestPanning,
     69         WestPanning,
     70         Move,
     71         VerticalText,
     72         Cell,
     73         ContextMenu,
     74         Alias,
     75         Progress,
     76         NoDrop,
     77         Copy,
     78         None,
     79         NotAllowed,
     80         ZoomIn,
     81         ZoomOut,
     82         Grab,
     83         Grabbing,
     84         Custom
     85     };
     86 
     87     static const Cursor& fromType(Cursor::Type);
     88 
     89     Cursor()
     90         // This is an invalid Cursor and should never actually get used.
     91         : m_type(static_cast<Type>(-1))
     92     {
     93     }
     94 
     95     Cursor(Image*, const IntPoint& hotSpot);
     96 
     97     // Hot spot is in image pixels.
     98     Cursor(Image*, const IntPoint& hotSpot, float imageScaleFactor);
     99 
    100     Cursor(const Cursor&);
    101     ~Cursor();
    102     Cursor& operator=(const Cursor&);
    103 
    104     explicit Cursor(Type);
    105     Type type() const
    106     {
    107         ASSERT(m_type >= 0 && m_type <= Custom);
    108         return m_type;
    109     }
    110     Image* image() const { return m_image.get(); }
    111     const IntPoint& hotSpot() const { return m_hotSpot; }
    112     // Image scale in image pixels per logical (UI) pixel.
    113     float imageScaleFactor() const { return m_imageScaleFactor; }
    114 
    115 private:
    116     Type m_type;
    117     RefPtr<Image> m_image;
    118     IntPoint m_hotSpot;
    119     float m_imageScaleFactor;
    120 };
    121 
    122 PLATFORM_EXPORT IntPoint determineHotSpot(Image*, const IntPoint& specifiedHotSpot);
    123 
    124 PLATFORM_EXPORT const Cursor& pointerCursor();
    125 PLATFORM_EXPORT const Cursor& crossCursor();
    126 PLATFORM_EXPORT const Cursor& handCursor();
    127 PLATFORM_EXPORT const Cursor& moveCursor();
    128 PLATFORM_EXPORT const Cursor& iBeamCursor();
    129 PLATFORM_EXPORT const Cursor& waitCursor();
    130 PLATFORM_EXPORT const Cursor& helpCursor();
    131 PLATFORM_EXPORT const Cursor& eastResizeCursor();
    132 PLATFORM_EXPORT const Cursor& northResizeCursor();
    133 PLATFORM_EXPORT const Cursor& northEastResizeCursor();
    134 PLATFORM_EXPORT const Cursor& northWestResizeCursor();
    135 PLATFORM_EXPORT const Cursor& southResizeCursor();
    136 PLATFORM_EXPORT const Cursor& southEastResizeCursor();
    137 PLATFORM_EXPORT const Cursor& southWestResizeCursor();
    138 PLATFORM_EXPORT const Cursor& westResizeCursor();
    139 PLATFORM_EXPORT const Cursor& northSouthResizeCursor();
    140 PLATFORM_EXPORT const Cursor& eastWestResizeCursor();
    141 PLATFORM_EXPORT const Cursor& northEastSouthWestResizeCursor();
    142 PLATFORM_EXPORT const Cursor& northWestSouthEastResizeCursor();
    143 PLATFORM_EXPORT const Cursor& columnResizeCursor();
    144 PLATFORM_EXPORT const Cursor& rowResizeCursor();
    145 PLATFORM_EXPORT const Cursor& middlePanningCursor();
    146 PLATFORM_EXPORT const Cursor& eastPanningCursor();
    147 PLATFORM_EXPORT const Cursor& northPanningCursor();
    148 PLATFORM_EXPORT const Cursor& northEastPanningCursor();
    149 PLATFORM_EXPORT const Cursor& northWestPanningCursor();
    150 PLATFORM_EXPORT const Cursor& southPanningCursor();
    151 PLATFORM_EXPORT const Cursor& southEastPanningCursor();
    152 PLATFORM_EXPORT const Cursor& southWestPanningCursor();
    153 PLATFORM_EXPORT const Cursor& westPanningCursor();
    154 PLATFORM_EXPORT const Cursor& verticalTextCursor();
    155 PLATFORM_EXPORT const Cursor& cellCursor();
    156 PLATFORM_EXPORT const Cursor& contextMenuCursor();
    157 PLATFORM_EXPORT const Cursor& noDropCursor();
    158 PLATFORM_EXPORT const Cursor& notAllowedCursor();
    159 PLATFORM_EXPORT const Cursor& progressCursor();
    160 PLATFORM_EXPORT const Cursor& aliasCursor();
    161 PLATFORM_EXPORT const Cursor& zoomInCursor();
    162 PLATFORM_EXPORT const Cursor& zoomOutCursor();
    163 PLATFORM_EXPORT const Cursor& copyCursor();
    164 PLATFORM_EXPORT const Cursor& noneCursor();
    165 PLATFORM_EXPORT const Cursor& grabCursor();
    166 PLATFORM_EXPORT const Cursor& grabbingCursor();
    167 
    168 } // namespace WebCore
    169 
    170 #endif // Cursor_h
    171