Home | History | Annotate | Download | only in efl
      1 /*
      2  * Copyright (C) 2006 Dirk Mueller <mueller (at) kde.org>
      3  * Copyright (C) 2006 George Staikos <staikos (at) kde.org>
      4  * Copyright (C) 2006 Charles Samuels <charles (at) kde.org>
      5  * Copyright (C) 2008 Holger Hans Peter Freyther
      6  * Copyright (C) 2008 Kenneth Rohde Christiansen
      7  * Copyright (C) 2009-2010 ProFUSION embedded systems
      8  * Copyright (C) 2009-2010 Samsung Electronics
      9  *
     10  * All rights reserved.
     11  *
     12  * Redistribution and use in source and binary forms, with or without
     13  * modification, are permitted provided that the following conditions
     14  * are met:
     15  * 1. Redistributions of source code must retain the above copyright
     16  *    notice, this list of conditions and the following disclaimer.
     17  * 2. Redistributions in binary form must reproduce the above copyright
     18  *    notice, this list of conditions and the following disclaimer in the
     19  *    documentation and/or other materials provided with the distribution.
     20  *
     21  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
     22  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     23  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     24  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
     25  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     26  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     27  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
     28  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
     29  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     30  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     31  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     32  */
     33 
     34 #include "config.h"
     35 #include "Cursor.h"
     36 
     37 #include "NotImplemented.h"
     38 
     39 #include <Edje.h>
     40 #include <Evas.h>
     41 #include <stdio.h>
     42 #include <wtf/Assertions.h>
     43 
     44 namespace WebCore {
     45 
     46 Cursor::Cursor(PlatformCursor p)
     47 {
     48     m_platformCursor = eina_stringshare_add(p);
     49 }
     50 
     51 Cursor::Cursor(const Cursor& other)
     52 {
     53     m_platformCursor = eina_stringshare_ref(other.m_platformCursor);
     54 }
     55 
     56 Cursor::~Cursor()
     57 {
     58     if (m_platformCursor) {
     59         eina_stringshare_del(m_platformCursor);
     60         m_platformCursor = 0;
     61     }
     62 }
     63 
     64 Cursor::Cursor(Image* image, const IntPoint& hotspot)
     65     : m_platformCursor(0)
     66 {
     67     notImplemented();
     68 }
     69 
     70 Cursor& Cursor::operator=(const Cursor& other)
     71 {
     72     eina_stringshare_ref(other.m_platformCursor);
     73     eina_stringshare_del(m_platformCursor);
     74     m_platformCursor = other.m_platformCursor;
     75     return *this;
     76 }
     77 
     78 namespace {
     79 
     80 class Cursors {
     81 protected:
     82     Cursors()
     83         : PointerCursor("cursor/pointer")
     84         , MoveCursor("cursor/move")
     85         , CrossCursor("cursor/cross")
     86         , HandCursor("cursor/hand")
     87         , IBeamCursor("cursor/i_beam")
     88         , WaitCursor("cursor/wait")
     89         , HelpCursor("cursor/help")
     90         , EastResizeCursor("cursor/east_resize")
     91         , NorthResizeCursor("cursor/north_resize")
     92         , NorthEastResizeCursor("cursor/north_east_resize")
     93         , NorthWestResizeCursor("cursor/north_west_resize")
     94         , SouthResizeCursor("cursor/south_resize")
     95         , SouthEastResizeCursor("cursor/south_east_resize")
     96         , SouthWestResizeCursor("cursor/south_west_resize")
     97         , WestResizeCursor("cursor/west_resize")
     98         , NorthSouthResizeCursor("cursor/north_south_resize")
     99         , EastWestResizeCursor("cursor/east_west_resize")
    100         , NorthEastSouthWestResizeCursor("cursor/north_east_south_west_resize")
    101         , NorthWestSouthEastResizeCursor("cursor/north_west_south_east_resize")
    102         , ColumnResizeCursor("cursor/column_resize")
    103         , RowResizeCursor("cursor/row_resize")
    104         , MiddlePanningCursor("cursor/middle_panning")
    105         , EastPanningCursor("cursor/east_panning")
    106         , NorthPanningCursor("cursor/north_panning")
    107         , NorthEastPanningCursor("cursor/north_east_panning")
    108         , NorthWestPanningCursor("cursor/north_west_panning")
    109         , SouthPanningCursor("cursor/south_panning")
    110         , SouthEastPanningCursor("cursor/south_east_panning")
    111         , SouthWestPanningCursor("cursor/south_west_panning")
    112         , WestPanningCursor("cursor/west_panning")
    113         , VerticalTextCursor("cursor/vertical_text")
    114         , CellCursor("cursor/cell")
    115         , ContextMenuCursor("cursor/context_menu")
    116         , NoDropCursor("cursor/no_drop")
    117         , CopyCursor("cursor/copy")
    118         , ProgressCursor("cursor/progress")
    119         , AliasCursor("cursor/alias")
    120         , NoneCursor("cursor/none")
    121         , NotAllowedCursor("cursor/not_allowed")
    122         , ZoomInCursor("cursor/zoom_in")
    123         , ZoomOutCursor("cursor/zoom_out")
    124         , GrabCursor("cursor/grab")
    125         , GrabbingCursor("cursor/grabbing")
    126     {
    127     }
    128 
    129     ~Cursors()
    130     {
    131     }
    132 
    133 public:
    134     static Cursors* self();
    135     static Cursors* s_self;
    136 
    137     Cursor PointerCursor;
    138     Cursor MoveCursor;
    139     Cursor CrossCursor;
    140     Cursor HandCursor;
    141     Cursor IBeamCursor;
    142     Cursor WaitCursor;
    143     Cursor HelpCursor;
    144     Cursor EastResizeCursor;
    145     Cursor NorthResizeCursor;
    146     Cursor NorthEastResizeCursor;
    147     Cursor NorthWestResizeCursor;
    148     Cursor SouthResizeCursor;
    149     Cursor SouthEastResizeCursor;
    150     Cursor SouthWestResizeCursor;
    151     Cursor WestResizeCursor;
    152     Cursor NorthSouthResizeCursor;
    153     Cursor EastWestResizeCursor;
    154     Cursor NorthEastSouthWestResizeCursor;
    155     Cursor NorthWestSouthEastResizeCursor;
    156     Cursor ColumnResizeCursor;
    157     Cursor RowResizeCursor;
    158     Cursor MiddlePanningCursor;
    159     Cursor EastPanningCursor;
    160     Cursor NorthPanningCursor;
    161     Cursor NorthEastPanningCursor;
    162     Cursor NorthWestPanningCursor;
    163     Cursor SouthPanningCursor;
    164     Cursor SouthEastPanningCursor;
    165     Cursor SouthWestPanningCursor;
    166     Cursor WestPanningCursor;
    167     Cursor VerticalTextCursor;
    168     Cursor CellCursor;
    169     Cursor ContextMenuCursor;
    170     Cursor NoDropCursor;
    171     Cursor CopyCursor;
    172     Cursor ProgressCursor;
    173     Cursor AliasCursor;
    174     Cursor NoneCursor;
    175     Cursor NotAllowedCursor;
    176     Cursor ZoomInCursor;
    177     Cursor ZoomOutCursor;
    178     Cursor GrabCursor;
    179     Cursor GrabbingCursor;
    180 };
    181 
    182 Cursors* Cursors::s_self = 0;
    183 
    184 Cursors* Cursors::self()
    185 {
    186     if (!s_self)
    187         s_self = new Cursors();
    188 
    189     return s_self;
    190 }
    191 
    192 }
    193 
    194 const Cursor& pointerCursor()
    195 {
    196     return Cursors::self()->PointerCursor;
    197 }
    198 
    199 const Cursor& moveCursor()
    200 {
    201     return Cursors::self()->MoveCursor;
    202 }
    203 
    204 const Cursor& crossCursor()
    205 {
    206     return Cursors::self()->CrossCursor;
    207 }
    208 
    209 const Cursor& handCursor()
    210 {
    211     return Cursors::self()->HandCursor;
    212 }
    213 
    214 const Cursor& iBeamCursor()
    215 {
    216     return Cursors::self()->IBeamCursor;
    217 }
    218 
    219 const Cursor& waitCursor()
    220 {
    221     return Cursors::self()->WaitCursor;
    222 }
    223 
    224 const Cursor& helpCursor()
    225 {
    226     return Cursors::self()->HelpCursor;
    227 }
    228 
    229 const Cursor& eastResizeCursor()
    230 {
    231     return Cursors::self()->EastResizeCursor;
    232 }
    233 
    234 const Cursor& northResizeCursor()
    235 {
    236     return Cursors::self()->NorthResizeCursor;
    237 }
    238 
    239 const Cursor& northEastResizeCursor()
    240 {
    241     return Cursors::self()->NorthEastResizeCursor;
    242 }
    243 
    244 const Cursor& northWestResizeCursor()
    245 {
    246     return Cursors::self()->NorthWestResizeCursor;
    247 }
    248 
    249 const Cursor& southResizeCursor()
    250 {
    251     return Cursors::self()->SouthResizeCursor;
    252 }
    253 
    254 const Cursor& southEastResizeCursor()
    255 {
    256     return Cursors::self()->SouthEastResizeCursor;
    257 }
    258 
    259 const Cursor& southWestResizeCursor()
    260 {
    261     return Cursors::self()->SouthWestResizeCursor;
    262 }
    263 
    264 const Cursor& westResizeCursor()
    265 {
    266     return Cursors::self()->WestResizeCursor;
    267 }
    268 
    269 const Cursor& northSouthResizeCursor()
    270 {
    271     return Cursors::self()->NorthSouthResizeCursor;
    272 }
    273 
    274 const Cursor& eastWestResizeCursor()
    275 {
    276     return Cursors::self()->EastWestResizeCursor;
    277 }
    278 
    279 const Cursor& northEastSouthWestResizeCursor()
    280 {
    281     return Cursors::self()->NorthEastSouthWestResizeCursor;
    282 }
    283 
    284 const Cursor& northWestSouthEastResizeCursor()
    285 {
    286     return Cursors::self()->NorthWestSouthEastResizeCursor;
    287 }
    288 
    289 const Cursor& columnResizeCursor()
    290 {
    291     return Cursors::self()->ColumnResizeCursor;
    292 }
    293 
    294 const Cursor& rowResizeCursor()
    295 {
    296     return Cursors::self()->RowResizeCursor;
    297 }
    298 
    299 const Cursor& middlePanningCursor()
    300 {
    301     return Cursors::self()->MiddlePanningCursor;
    302 }
    303 
    304 const Cursor& eastPanningCursor()
    305 {
    306     return Cursors::self()->EastPanningCursor;
    307 }
    308 
    309 const Cursor& northPanningCursor()
    310 {
    311     return Cursors::self()->NorthPanningCursor;
    312 }
    313 
    314 const Cursor& northEastPanningCursor()
    315 {
    316     return Cursors::self()->NorthEastPanningCursor;
    317 }
    318 
    319 const Cursor& northWestPanningCursor()
    320 {
    321     return Cursors::self()->NorthWestPanningCursor;
    322 }
    323 
    324 const Cursor& southPanningCursor()
    325 {
    326     return Cursors::self()->SouthPanningCursor;
    327 }
    328 
    329 const Cursor& southEastPanningCursor()
    330 {
    331     return Cursors::self()->SouthEastPanningCursor;
    332 }
    333 
    334 const Cursor& southWestPanningCursor()
    335 {
    336     return Cursors::self()->SouthWestPanningCursor;
    337 }
    338 
    339 const Cursor& westPanningCursor()
    340 {
    341     return Cursors::self()->WestPanningCursor;
    342 }
    343 
    344 const Cursor& verticalTextCursor()
    345 {
    346     return Cursors::self()->VerticalTextCursor;
    347 }
    348 
    349 const Cursor& cellCursor()
    350 {
    351     return Cursors::self()->CellCursor;
    352 }
    353 
    354 const Cursor& contextMenuCursor()
    355 {
    356     return Cursors::self()->ContextMenuCursor;
    357 }
    358 
    359 const Cursor& noDropCursor()
    360 {
    361     return Cursors::self()->NoDropCursor;
    362 }
    363 
    364 const Cursor& copyCursor()
    365 {
    366     return Cursors::self()->CopyCursor;
    367 }
    368 
    369 const Cursor& progressCursor()
    370 {
    371     return Cursors::self()->ProgressCursor;
    372 }
    373 
    374 const Cursor& aliasCursor()
    375 {
    376     return Cursors::self()->AliasCursor;
    377 }
    378 
    379 const Cursor& noneCursor()
    380 {
    381     return Cursors::self()->NoneCursor;
    382 }
    383 
    384 const Cursor& notAllowedCursor()
    385 {
    386     return Cursors::self()->NotAllowedCursor;
    387 }
    388 
    389 const Cursor& zoomInCursor()
    390 {
    391     return Cursors::self()->ZoomInCursor;
    392 }
    393 
    394 const Cursor& zoomOutCursor()
    395 {
    396     return Cursors::self()->ZoomOutCursor;
    397 }
    398 
    399 const Cursor& grabCursor()
    400 {
    401     return Cursors::self()->GrabCursor;
    402 }
    403 
    404 const Cursor& grabbingCursor()
    405 {
    406     return Cursors::self()->GrabbingCursor;
    407 }
    408 
    409 }
    410