18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2006 Dirk Mueller <mueller@kde.org> 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2006 George Staikos <staikos@kde.org> 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2006 Charles Samuels <charles@kde.org> 5cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block * Copyright (C) 2008, 2009 Holger Hans Peter Freyther 6e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block * Copyright (C) 2010 University of Szeged 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * All rights reserved. 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met: 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer. 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * documentation and/or other materials provided with the distribution. 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h" 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Cursor.h" 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Image.h" 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "IntPoint.h" 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "NotImplemented.h" 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <stdio.h> 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <stdlib.h> 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#undef CopyCursor 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectCursor::Cursor(const Cursor& other) 48e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block : m_type(other.m_type) 49e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block , m_image(other.m_image) 50e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block , m_hotSpot(other.m_hotSpot) 51e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#ifndef QT_NO_CURSOR 52e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block , m_platformCursor(other.m_platformCursor ? new QCursor(*other.m_platformCursor) : 0) 53e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#endif 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectCursor::~Cursor() 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef QT_NO_CURSOR 60e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block delete m_platformCursor; 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectCursor& Cursor::operator=(const Cursor& other) 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 66e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_type = other.m_type; 67e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_image = other.m_image; 68e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_hotSpot = other.m_hotSpot; 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef QT_NO_CURSOR 70e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_platformCursor = other.m_platformCursor ? new QCursor(*other.m_platformCursor) : 0; 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 72e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block return *this; 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 75a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#ifndef QT_NO_CURSOR 76e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockstatic QCursor* createCustomCursor(Image* image, const IntPoint& hotSpot) 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 78e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block IntPoint effectiveHotSpot = determineHotSpot(image, hotSpot); 79e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block return new QCursor(*(image->nativeImageForCurrentFrame()), effectiveHotSpot.x(), effectiveHotSpot.y()); 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 81a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#endif 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 83e8b154fd68f9b33be40a3590e58347f353835f5cSteve Blockvoid Cursor::ensurePlatformCursor() const 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 85e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#ifndef QT_NO_CURSOR 86e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block if (m_platformCursor) 87e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block return; 88e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 89e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block switch (m_type) { 90e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block case Pointer: 91e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_platformCursor = new QCursor(Qt::ArrowCursor); 92e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block break; 93e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block case Cross: 94e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_platformCursor = new QCursor(Qt::CrossCursor); 95e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block break; 96e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block case Hand: 97e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_platformCursor = new QCursor(Qt::PointingHandCursor); 98e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block break; 99e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block case IBeam: 100e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_platformCursor = new QCursor(Qt::IBeamCursor); 101e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block break; 102e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block case Wait: 103e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_platformCursor = new QCursor(Qt::WaitCursor); 104e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block break; 105e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block case Help: 106e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_platformCursor = new QCursor(Qt::WhatsThisCursor); 107e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block break; 108e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block case EastResize: 109e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block case EastPanning: 110e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_platformCursor = new QCursor(Qt::SizeHorCursor); 111e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block break; 112e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block case NorthResize: 113e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block case NorthPanning: 114e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_platformCursor = new QCursor(Qt::SizeVerCursor); 115e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block break; 116e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block case NorthEastResize: 117e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block case NorthEastPanning: 118e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_platformCursor = new QCursor(Qt::SizeBDiagCursor); 119e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block break; 120e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block case NorthWestResize: 121e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block case NorthWestPanning: 122e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_platformCursor = new QCursor(Qt::SizeFDiagCursor); 123e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block break; 124e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block case SouthResize: 125e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block case SouthPanning: 126e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_platformCursor = new QCursor(Qt::SizeVerCursor); 127e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block break; 128e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block case SouthEastResize: 129e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block case SouthEastPanning: 130e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_platformCursor = new QCursor(Qt::SizeFDiagCursor); 131e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block break; 132e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block case SouthWestResize: 133e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block case SouthWestPanning: 134e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_platformCursor = new QCursor(Qt::SizeBDiagCursor); 135e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block break; 136e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block case WestResize: 137e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block case WestPanning: 138e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_platformCursor = new QCursor(Qt::SizeHorCursor); 139e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block break; 140e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block case NorthSouthResize: 141e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_platformCursor = new QCursor(Qt::SizeVerCursor); 142e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block break; 143e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block case EastWestResize: 144e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_platformCursor = new QCursor(Qt::SizeHorCursor); 145e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block break; 146e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block case NorthEastSouthWestResize: 147e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_platformCursor = new QCursor(Qt::SizeBDiagCursor); 148e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block break; 149e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block case NorthWestSouthEastResize: 150e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_platformCursor = new QCursor(Qt::SizeFDiagCursor); 151e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block break; 152e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block case ColumnResize: 153e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_platformCursor = new QCursor(Qt::SplitHCursor); 154e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block break; 155e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block case RowResize: 156e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_platformCursor = new QCursor(Qt::SplitVCursor); 157e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block break; 158e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block case MiddlePanning: 159e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block case Move: 160e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_platformCursor = new QCursor(Qt::SizeAllCursor); 161e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block break; 162e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block case None: 163e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_platformCursor = new QCursor(Qt::BlankCursor); 164e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block break; 165e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block case NoDrop: 166e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block case NotAllowed: 167e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_platformCursor = new QCursor(Qt::ForbiddenCursor); 168e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block break; 169e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block case Grab: 170e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block case Grabbing: 171e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block notImplemented(); 172e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_platformCursor = new QCursor(Qt::ArrowCursor); 173e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block break; 174e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block case VerticalText: 175e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_platformCursor = new QCursor(QPixmap(QLatin1String(":/webkit/resources/verticalTextCursor.png")), 7, 7); 176e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block break; 177e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block case Cell: 178e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_platformCursor = new QCursor(QPixmap(QLatin1String(":/webkit/resources/cellCursor.png")), 7, 7); 179e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block break; 180e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block case ContextMenu: 181e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_platformCursor = new QCursor(QPixmap(QLatin1String(":/webkit/resources/contextMenuCursor.png")), 3, 2); 182e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block break; 183e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block case Alias: 184e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_platformCursor = new QCursor(QPixmap(QLatin1String(":/webkit/resources/aliasCursor.png")), 11, 3); 185e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block break; 186e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block case Progress: 187e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_platformCursor = new QCursor(QPixmap(QLatin1String(":/webkit/resources/progressCursor.png")), 3, 2); 188e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block break; 189e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block case Copy: 190e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_platformCursor = new QCursor(QPixmap(QLatin1String(":/webkit/resources/copyCursor.png")), 3, 2); 191e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block break; 192e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block case ZoomIn: 193e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_platformCursor = new QCursor(QPixmap(QLatin1String(":/webkit/resources/zoomInCursor.png")), 7, 7); 194e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block break; 195e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block case ZoomOut: 196e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_platformCursor = new QCursor(QPixmap(QLatin1String(":/webkit/resources/zoomOutCursor.png")), 7, 7); 197e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block break; 198e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block case Custom: 199e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_platformCursor = createCustomCursor(m_image.get(), m_hotSpot); 200e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block break; 201e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block default: 202e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block ASSERT_NOT_REACHED(); 203e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block } 204e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#endif 2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// vim: ts=4 sw=4 et 210