Home | History | Annotate | Download | only in wx
      1 /*
      2  * Copyright (C) 2007 Kevin Ollivier <kevino (at) theolliviers.com>
      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 #include "config.h"
     27 #include "Cursor.h"
     28 #include "Image.h"
     29 
     30 #include <wx/defs.h>
     31 #include <wx/cursor.h>
     32 #include <wx/image.h>
     33 
     34 namespace WebCore {
     35 
     36 Cursor::Cursor(const Cursor& other)
     37     : m_platformCursor(other.m_platformCursor)
     38 {
     39 }
     40 
     41 Cursor::Cursor(Image* image, const IntPoint&)
     42 {
     43     m_platformCursor = 0;
     44     // FIXME: figure out why the below code causes a crash
     45     //m_platformCursor = new wxCursor( image->getWxBitmap()->ConvertToImage() );
     46 }
     47 
     48 Cursor::~Cursor()
     49 {
     50 }
     51 
     52 Cursor& Cursor::operator=(const Cursor& other)
     53 {
     54     m_platformCursor = other.m_platformCursor;
     55     return *this;
     56 }
     57 
     58 Cursor::Cursor(wxCursor* c)
     59     : m_platformCursor(c)
     60 {
     61 }
     62 
     63 const Cursor& pointerCursor()
     64 {
     65     static Cursor c = new wxCursor(wxCURSOR_ARROW);
     66     return c;
     67 }
     68 
     69 const Cursor& crossCursor()
     70 {
     71     static Cursor c = new wxCursor(wxCURSOR_CROSS);
     72     return c;
     73 }
     74 
     75 const Cursor& handCursor()
     76 {
     77     static Cursor c = new wxCursor(wxCURSOR_HAND);
     78     return c;
     79 }
     80 
     81 const Cursor& iBeamCursor()
     82 {
     83     static Cursor c = new wxCursor(wxCURSOR_IBEAM);
     84     return c;
     85 }
     86 
     87 const Cursor& waitCursor()
     88 {
     89     static Cursor c = new wxCursor(wxCURSOR_WAIT);
     90     return c;
     91 }
     92 
     93 const Cursor& helpCursor()
     94 {
     95     static Cursor c = new wxCursor(wxCURSOR_QUESTION_ARROW);
     96     return c;
     97 }
     98 
     99 const Cursor& eastResizeCursor()
    100 {
    101     static Cursor c = new wxCursor(wxCURSOR_SIZEWE);
    102     return c;
    103 }
    104 
    105 const Cursor& northResizeCursor()
    106 {
    107     static Cursor c = new wxCursor(wxCURSOR_SIZENS);
    108     return c;
    109 }
    110 
    111 const Cursor& northEastResizeCursor()
    112 {
    113     static Cursor c = new wxCursor(wxCURSOR_SIZENESW);
    114     return c;
    115 }
    116 
    117 const Cursor& northWestResizeCursor()
    118 {
    119     static Cursor c = new wxCursor(wxCURSOR_SIZENWSE);
    120     return c;
    121 }
    122 
    123 const Cursor& southResizeCursor()
    124 {
    125     static Cursor c = northResizeCursor();
    126     return c;
    127 }
    128 
    129 const Cursor& southEastResizeCursor()
    130 {
    131     static Cursor c = northWestResizeCursor();
    132     return c;
    133 }
    134 
    135 const Cursor& southWestResizeCursor()
    136 {
    137     static Cursor c = northEastResizeCursor();
    138     return c;
    139 }
    140 
    141 const Cursor& westResizeCursor()
    142 {
    143     static Cursor c = eastResizeCursor();
    144     return c;
    145 }
    146 
    147 const Cursor& northSouthResizeCursor()
    148 {
    149     static Cursor c = northResizeCursor();
    150     return c;
    151 }
    152 
    153 const Cursor& eastWestResizeCursor()
    154 {
    155     static Cursor c = eastResizeCursor();
    156     return c;
    157 }
    158 
    159 const Cursor& northEastSouthWestResizeCursor()
    160 {
    161     static Cursor c = northEastResizeCursor();
    162     return c;
    163 }
    164 
    165 const Cursor& northWestSouthEastResizeCursor()
    166 {
    167     static Cursor c = northWestResizeCursor();
    168     return c;
    169 }
    170 
    171 const Cursor& columnResizeCursor()
    172 {
    173     // FIXME: Windows does not have a standard column resize cursor
    174     static Cursor c = new wxCursor(wxCURSOR_SIZING);
    175     return c;
    176 }
    177 
    178 const Cursor& rowResizeCursor()
    179 {
    180     // FIXME: Windows does not have a standard row resize cursor
    181     static Cursor c = new wxCursor(wxCURSOR_SIZING);
    182     return c;
    183 }
    184 
    185 const Cursor& middlePanningCursor()
    186 {
    187     return moveCursor();
    188 }
    189 
    190 const Cursor& eastPanningCursor()
    191 {
    192     return eastResizeCursor();
    193 }
    194 
    195 const Cursor& northPanningCursor()
    196 {
    197     return northResizeCursor();
    198 }
    199 
    200 const Cursor& northEastPanningCursor()
    201 {
    202     return northEastResizeCursor();
    203 }
    204 
    205 const Cursor& northWestPanningCursor()
    206 {
    207     return northWestResizeCursor();
    208 }
    209 
    210 const Cursor& southPanningCursor()
    211 {
    212     return southResizeCursor();
    213 }
    214 
    215 const Cursor& southEastPanningCursor()
    216 {
    217     return southEastResizeCursor();
    218 }
    219 
    220 const Cursor& southWestPanningCursor()
    221 {
    222     return southWestResizeCursor();
    223 }
    224 
    225 const Cursor& westPanningCursor()
    226 {
    227     return westResizeCursor();
    228 }
    229 
    230 const Cursor& verticalTextCursor()
    231 {
    232     return iBeamCursor();
    233 }
    234 
    235 const Cursor& cellCursor()
    236 {
    237     return pointerCursor();
    238 }
    239 
    240 const Cursor& contextMenuCursor()
    241 {
    242     return handCursor();
    243 }
    244 
    245 const Cursor& noDropCursor()
    246 {
    247     return pointerCursor();
    248 }
    249 
    250 const Cursor& progressCursor()
    251 {
    252     return waitCursor();
    253 }
    254 
    255 const Cursor& aliasCursor()
    256 {
    257     return pointerCursor();
    258 }
    259 
    260 const Cursor& copyCursor()
    261 {
    262     return pointerCursor();
    263 }
    264 
    265 const Cursor& noneCursor()
    266 {
    267     // TODO: Determine if we can find a better cursor for this.
    268     return pointerCursor();
    269 }
    270 
    271 const Cursor& notAllowedCursor()
    272 {
    273     static Cursor c = new wxCursor(wxCURSOR_NO_ENTRY);
    274     return c;
    275 }
    276 
    277 const Cursor& zoomInCursor()
    278 {
    279     static Cursor c = new wxCursor(wxCURSOR_MAGNIFIER);
    280     return c;
    281 }
    282 
    283 const Cursor& zoomOutCursor()
    284 {
    285     // TODO: Find a way to implement in/out magnifiers in wx.
    286     return zoomInCursor();
    287 }
    288 
    289 const Cursor& grabCursor()
    290 {
    291     // TODO: Determine if we can find a better cursor for this.
    292     return pointerCursor();
    293 }
    294 
    295 const Cursor& grabbingCursor()
    296 {
    297     // TODO: Determine if we can find a better cursor for this.
    298     return pointerCursor();
    299 }
    300 
    301 const Cursor& moveCursor()
    302 {
    303     static Cursor c = new wxCursor(wxCURSOR_SIZING);
    304     return c;
    305 }
    306 
    307 }
    308