// Copyright 2020 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 UI_VIEWS_VIEW_UTILS_H_ #define UI_VIEWS_VIEW_UTILS_H_ #include #include #include #include #include "ui/base/metadata/metadata_types.h" #include "ui/views/debug/debugger_utils.h" #include "ui/views/view.h" #include "ui/views/views_export.h" namespace views { class ViewDebugWrapperImpl : public debug::ViewDebugWrapper { public: explicit ViewDebugWrapperImpl(View* view); ViewDebugWrapperImpl(const ViewDebugWrapperImpl&) = delete; ViewDebugWrapperImpl& operator=(const ViewDebugWrapperImpl&) = delete; ~ViewDebugWrapperImpl() override; // debug::ViewDebugWrapper: std::string GetViewClassName() override; int GetID() override; debug::ViewDebugWrapper::BoundsTuple GetBounds() override; bool GetVisible() override; bool GetNeedsLayout() override; bool GetEnabled() override; std::vector GetChildren() override; void ForAllProperties(PropCallback callback) override; private: const View* const view_; std::vector> children_; }; template bool IsViewClass(View* view) { static_assert(std::is_base_of::value, "Only View classes supported"); ui::metadata::ClassMetaData* parent = V::MetaData(); ui::metadata::ClassMetaData* child = view->GetClassMetaData(); while (child && child != parent) child = child->parent_class_meta_data(); return !!child; } VIEWS_EXPORT void PrintViewHierarchy(View* view, bool verbose = false, int depth = -1); } // namespace views #endif // UI_VIEWS_VIEW_UTILS_H_