// Copyright 2015 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CC_INPUT_SCROLL_STATE_DATA_H_ #define CC_INPUT_SCROLL_STATE_DATA_H_ #include #include #include "cc/cc_export.h" #include "cc/trees/property_tree.h" namespace cc { class CC_EXPORT ScrollStateData { public: ScrollStateData(); ScrollStateData(const ScrollStateData& other); // Scroll delta in viewport coordinates (DIP). double delta_x; double delta_y; // Scroll delta hint in viewport coordinates (DIP). // Delta hints are equal to deltas of the first gesture scroll update event in // a scroll sequence and are used for hittesting. double delta_x_hint; double delta_y_hint; // Pointer (i.e. cursor/touch point) position in viewport coordinates (DIP). int position_x; int position_y; // Scroll velocity in DIP/seconds. double velocity_x; double velocity_y; bool is_beginning; bool is_in_inertial_phase; bool is_ending; bool from_user_input; // Whether the scroll sequence has had any delta consumed, in the // current frame, or any child frames. bool delta_consumed_for_scroll_sequence; // True if the user interacts directly with the display, e.g., via // touch. bool is_direct_manipulation; // Minimum amount this input device can scroll. double delta_granularity; // TODO(tdresser): ScrollState shouldn't need to keep track of whether or not // this ScrollState object has caused a scroll. Ideally, any native scroller // consuming delta has caused a scroll. Currently, there are some cases where // we consume delta without scrolling, such as in // |Viewport::AdjustOverscroll|. Once these cases are fixed, we should get rid // of |caused_scroll_*_|. See crbug.com/510045 for details. bool caused_scroll_x; bool caused_scroll_y; // Track if the scroll_chain has been cut by overscroll_behavior, in // order to properly handle overscroll-effects. // TODO(sunyunjia): overscroll should be handled at the top of scroll_chain, // as implemented at blink side. This field should be removed after it's // resolved. crbug.com/755164. bool is_scroll_chain_cut; ScrollNode* current_native_scrolling_node() const; void set_current_native_scrolling_node( ScrollNode* current_native_scrolling_node); ElementId current_native_scrolling_element() const; void set_current_native_scrolling_element(ElementId element_id); private: // Only one of current_native_scrolling_node_ and // current_native_scrolling_element_ may be non-null at a time. Whenever // possible, we should store the scroll node. // The last scroll node to respond to a scroll, or null if none exists. ScrollNode* current_native_scrolling_node_; // The id of the last native element to respond to a scroll, or 0 if none // exists. ElementId current_native_scrolling_element_; }; } // namespace cc #endif // CC_INPUT_SCROLL_STATE_DATA_H_