18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2001 Peter Kelly (pmk@post.com)
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2001 Tobias Anton (anton@stud.fbi.fh-darmstadt.de)
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2006 Samuel Weinig (sam.weinig@gmail.com)
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2003, 2004, 2005, 2006 Apple Computer, Inc.
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is free software; you can redistribute it and/or
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modify it under the terms of the GNU Library General Public
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License as published by the Free Software Foundation; either
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * version 2 of the License, or (at your option) any later version.
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is distributed in the hope that it will be useful,
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Library General Public License for more details.
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * You should have received a copy of the GNU Library General Public License
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * along with this library; see the file COPYING.LIB.  If not, write to
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Boston, MA 02110-1301, USA.
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef MouseRelatedEvent_h
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define MouseRelatedEvent_h
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
278f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "IntPoint.h"
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "UIEventWithKeyState.h"
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore {
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // Internal only: Helper class for what's common between mouse and wheel events.
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    class MouseRelatedEvent : public UIEventWithKeyState {
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    public:
358f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian        // Note that these values are adjusted to counter the effects of zoom, so that values
368f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian        // exposed via DOM APIs are invariant under zooming.
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        int screenX() const { return m_screenX; }
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        int screenY() const { return m_screenY; }
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        int clientX() const { return m_clientX; }
408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        int clientY() const { return m_clientY; }
412bde8e466a4451c7319e3a072d118917957d6554Steve Block        int layerX();
422bde8e466a4451c7319e3a072d118917957d6554Steve Block        int layerY();
432bde8e466a4451c7319e3a072d118917957d6554Steve Block        int offsetX();
442bde8e466a4451c7319e3a072d118917957d6554Steve Block        int offsetY();
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool isSimulated() const { return m_isSimulated; }
468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual int pageX() const;
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual int pageY() const;
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        int x() const;
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        int y() const;
508f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
518f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian        // Page point in "absolute" coordinates (i.e. post-zoomed, page-relative coords,
528f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian        // usable with RenderObject::absoluteToLocal).
538f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian        IntPoint absoluteLocation() const { return m_absoluteLocation; }
548f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian        void setAbsoluteLocation(const IntPoint& p) { m_absoluteLocation = p; }
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    protected:
578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        MouseRelatedEvent();
588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        MouseRelatedEvent(const AtomicString& type, bool canBubble, bool cancelable, PassRefPtr<AbstractView>,
598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                          int detail, int screenX, int screenY, int pageX, int pageY,
608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                          bool ctrlKey, bool altKey, bool shiftKey, bool metaKey, bool isSimulated = false);
618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        void initCoordinates();
638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        void initCoordinates(int clientX, int clientY);
648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        virtual void receivedTarget();
658f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
668f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian        void computePageLocation();
672bde8e466a4451c7319e3a072d118917957d6554Steve Block        void computeRelativePosition();
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        // Expose these so MouseEvent::initMouseEvent can set them.
708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        int m_screenX;
718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        int m_screenY;
728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        int m_clientX;
738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        int m_clientY;
748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    private:
768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        int m_pageX;
778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        int m_pageY;
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        int m_layerX;
798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        int m_layerY;
808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        int m_offsetX;
818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        int m_offsetY;
828f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian        IntPoint m_absoluteLocation;
838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        bool m_isSimulated;
842bde8e466a4451c7319e3a072d118917957d6554Steve Block        bool m_hasCachedRelativePosition;
858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    };
868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore
888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // MouseRelatedEvent_h
90