blob: 0646bec8b6d2dbdf4de36cf54c211834a045c591 [file] [log] [blame]
/*
* Copyright (C) 2004, 2006, 2008 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_CURSOR_H_
#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_CURSOR_H_
#include "base/memory/scoped_refptr.h"
#include "third_party/blink/renderer/platform/geometry/int_point.h"
#include "third_party/blink/renderer/platform/graphics/image.h"
#include "third_party/blink/renderer/platform/platform_export.h"
#include "third_party/blink/renderer/platform/wtf/assertions.h"
// To avoid conflicts with the CreateWindow macro from the Windows SDK...
#undef CopyCursor
namespace blink {
class PLATFORM_EXPORT Cursor {
USING_FAST_MALLOC(Cursor);
public:
enum Type {
kPointer = 0,
kCross,
kHand,
kIBeam,
kWait,
kHelp,
kEastResize,
kNorthResize,
kNorthEastResize,
kNorthWestResize,
kSouthResize,
kSouthEastResize,
kSouthWestResize,
kWestResize,
kNorthSouthResize,
kEastWestResize,
kNorthEastSouthWestResize,
kNorthWestSouthEastResize,
kColumnResize,
kRowResize,
kMiddlePanning,
kEastPanning,
kNorthPanning,
kNorthEastPanning,
kNorthWestPanning,
kSouthPanning,
kSouthEastPanning,
kSouthWestPanning,
kWestPanning,
kMove,
kVerticalText,
kCell,
kContextMenu,
kAlias,
kProgress,
kNoDrop,
kCopy,
kNone,
kNotAllowed,
kZoomIn,
kZoomOut,
kGrab,
kGrabbing,
kCustom
};
Cursor()
// This is an invalid Cursor and should never actually get used.
: type_(static_cast<Type>(-1)) {}
Cursor(Image*, bool hot_spot_specified, const IntPoint& hot_spot);
// Hot spot is in image pixels.
Cursor(Image*,
bool hot_spot_specified,
const IntPoint& hot_spot,
float image_scale_factor);
Cursor(const Cursor&);
~Cursor();
Cursor& operator=(const Cursor&);
explicit Cursor(Type);
Type GetType() const {
DCHECK_GE(type_, 0);
DCHECK_LE(type_, kCustom);
return type_;
}
Image* GetImage() const { return image_.get(); }
const IntPoint& HotSpot() const { return hot_spot_; }
// Image scale in image pixels per logical (UI) pixel.
float ImageScaleFactor() const { return image_scale_factor_; }
private:
Type type_;
scoped_refptr<Image> image_;
IntPoint hot_spot_;
float image_scale_factor_;
};
PLATFORM_EXPORT IntPoint DetermineHotSpot(Image*,
bool hot_spot_specified,
const IntPoint& specified_hot_spot);
PLATFORM_EXPORT const Cursor& PointerCursor();
PLATFORM_EXPORT const Cursor& CrossCursor();
PLATFORM_EXPORT const Cursor& HandCursor();
PLATFORM_EXPORT const Cursor& MoveCursor();
PLATFORM_EXPORT const Cursor& IBeamCursor();
PLATFORM_EXPORT const Cursor& WaitCursor();
PLATFORM_EXPORT const Cursor& HelpCursor();
PLATFORM_EXPORT const Cursor& EastResizeCursor();
PLATFORM_EXPORT const Cursor& NorthResizeCursor();
PLATFORM_EXPORT const Cursor& NorthEastResizeCursor();
PLATFORM_EXPORT const Cursor& NorthWestResizeCursor();
PLATFORM_EXPORT const Cursor& SouthResizeCursor();
PLATFORM_EXPORT const Cursor& SouthEastResizeCursor();
PLATFORM_EXPORT const Cursor& SouthWestResizeCursor();
PLATFORM_EXPORT const Cursor& WestResizeCursor();
PLATFORM_EXPORT const Cursor& NorthSouthResizeCursor();
PLATFORM_EXPORT const Cursor& EastWestResizeCursor();
PLATFORM_EXPORT const Cursor& NorthEastSouthWestResizeCursor();
PLATFORM_EXPORT const Cursor& NorthWestSouthEastResizeCursor();
PLATFORM_EXPORT const Cursor& ColumnResizeCursor();
PLATFORM_EXPORT const Cursor& RowResizeCursor();
PLATFORM_EXPORT const Cursor& MiddlePanningCursor();
PLATFORM_EXPORT const Cursor& EastPanningCursor();
PLATFORM_EXPORT const Cursor& NorthPanningCursor();
PLATFORM_EXPORT const Cursor& NorthEastPanningCursor();
PLATFORM_EXPORT const Cursor& NorthWestPanningCursor();
PLATFORM_EXPORT const Cursor& SouthPanningCursor();
PLATFORM_EXPORT const Cursor& SouthEastPanningCursor();
PLATFORM_EXPORT const Cursor& SouthWestPanningCursor();
PLATFORM_EXPORT const Cursor& WestPanningCursor();
PLATFORM_EXPORT const Cursor& VerticalTextCursor();
PLATFORM_EXPORT const Cursor& CellCursor();
PLATFORM_EXPORT const Cursor& ContextMenuCursor();
PLATFORM_EXPORT const Cursor& NoDropCursor();
PLATFORM_EXPORT const Cursor& NotAllowedCursor();
PLATFORM_EXPORT const Cursor& ProgressCursor();
PLATFORM_EXPORT const Cursor& AliasCursor();
PLATFORM_EXPORT const Cursor& ZoomInCursor();
PLATFORM_EXPORT const Cursor& ZoomOutCursor();
PLATFORM_EXPORT const Cursor& CopyCursor();
PLATFORM_EXPORT const Cursor& NoneCursor();
PLATFORM_EXPORT const Cursor& GrabCursor();
PLATFORM_EXPORT const Cursor& GrabbingCursor();
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_PLATFORM_CURSOR_H_