view_element.h 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. // Copyright 2017 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #ifndef COMPONENTS_UI_DEVTOOLS_VIEWS_VIEW_ELEMENT_H_
  5. #define COMPONENTS_UI_DEVTOOLS_VIEWS_VIEW_ELEMENT_H_
  6. #include "base/scoped_observation.h"
  7. #include "components/ui_devtools/ui_element.h"
  8. #include "components/ui_devtools/views/ui_element_with_metadata.h"
  9. #include "ui/gfx/geometry/rect.h"
  10. #include "ui/gfx/native_widget_types.h"
  11. #include "ui/views/view.h"
  12. #include "ui/views/view_observer.h"
  13. namespace ui_devtools {
  14. class UIElementDelegate;
  15. class ViewElement : public views::ViewObserver, public UIElementWithMetaData {
  16. public:
  17. ViewElement(views::View* view,
  18. UIElementDelegate* ui_element_delegate,
  19. UIElement* parent);
  20. ViewElement(const ViewElement&) = delete;
  21. ViewElement& operator=(const ViewElement&) = delete;
  22. ~ViewElement() override;
  23. views::View* view() const { return view_; }
  24. // views::ViewObserver
  25. void OnChildViewRemoved(views::View* parent, views::View* view) override;
  26. void OnChildViewAdded(views::View* parent, views::View* view) override;
  27. void OnChildViewReordered(views::View* parent, views::View*) override;
  28. void OnViewBoundsChanged(views::View* view) override;
  29. // UIElement:
  30. void GetBounds(gfx::Rect* bounds) const override;
  31. void SetBounds(const gfx::Rect& bounds) override;
  32. std::vector<std::string> GetAttributes() const override;
  33. std::pair<gfx::NativeWindow, gfx::Rect> GetNodeWindowAndScreenBounds()
  34. const override;
  35. static views::View* From(const UIElement* element);
  36. void PaintRect() const override;
  37. bool FindMatchByElementID(const ui::ElementIdentifier& identifier) override;
  38. bool DispatchMouseEvent(protocol::DOM::MouseEvent* event) override;
  39. bool DispatchKeyEvent(protocol::DOM::KeyEvent* event) override;
  40. protected:
  41. ui::metadata::ClassMetaData* GetClassMetaData() const override;
  42. void* GetClassInstance() const override;
  43. ui::Layer* GetLayer() const override;
  44. private:
  45. // Clears children and rebuilds ViewElement subtree from scratch. Called if an
  46. // inconsistency is detected between the current tree and the tree of the
  47. // backing view.
  48. void RebuildTree();
  49. views::View* view_;
  50. base::ScopedObservation<views::View, views::ViewObserver> observer_{this};
  51. };
  52. } // namespace ui_devtools
  53. #endif // COMPONENTS_UI_DEVTOOLS_VIEWS_VIEW_ELEMENT_H_