15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef UI_GFX_POINT_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define UI_GFX_POINT_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/ui_export.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/point_base.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/point_f.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/vector2d.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef unsigned long DWORD; 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef struct tagPOINT POINT; 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_IOS) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <CoreGraphics/CoreGraphics.h> 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <ApplicationServices/ApplicationServices.h> 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gfx { 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A point has an x and y coordinate. 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class UI_EXPORT Point : public PointBase<Point, int, Vector2d> { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Point() : PointBase<Point, int, Vector2d>(0, 0) {} 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Point(int x, int y) : PointBase<Point, int, Vector2d>(x, y) {} 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |point| is a DWORD value that contains a coordinate. The x-coordinate is 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the low-order short and the y-coordinate is the high-order short. This 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // value is commonly acquired from GetMessagePos/GetCursorPos. 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit Point(DWORD point); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit Point(const POINT& point); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Point& operator=(const POINT& point); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit Point(const CGPoint& point); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~Point() {} 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) POINT ToPOINT() const; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CGPoint ToCGPoint() const; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) operator PointF() const { 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PointF(x(), y()); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns a string representation of point. 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string ToString() const; 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)inline bool operator==(const Point& lhs, const Point& rhs) { 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return lhs.x() == rhs.x() && lhs.y() == rhs.y(); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)inline bool operator!=(const Point& lhs, const Point& rhs) { 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return !(lhs == rhs); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)inline Point operator+(const Point& lhs, const Vector2d& rhs) { 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Point result(lhs); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result += rhs; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return result; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)inline Point operator-(const Point& lhs, const Vector2d& rhs) { 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Point result(lhs); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result -= rhs; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return result; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)inline Vector2d operator-(const Point& lhs, const Point& rhs) { 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return Vector2d(lhs.x() - rhs.x(), lhs.y() - rhs.y()); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)inline Point PointAtOffsetFromOrigin(const Vector2d& offset_from_origin) { 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return Point(offset_from_origin.x(), offset_from_origin.y()); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(COMPILER_MSVC) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)extern template class PointBase<Point, int, Vector2d>; 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace gfx 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // UI_GFX_POINT_H_ 91