77 lines
2.6 KiB
C++
77 lines
2.6 KiB
C++
// Copyright 2016 The Chromium Embedded Framework Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be found
|
|
// in the LICENSE file.
|
|
|
|
#include "libcef/browser/views/box_layout_impl.h"
|
|
|
|
#include "libcef/browser/thread_util.h"
|
|
#include "libcef/browser/views/view_util.h"
|
|
|
|
// static
|
|
CefRefPtr<CefBoxLayoutImpl> CefBoxLayoutImpl::Create(
|
|
const CefBoxLayoutSettings& settings,
|
|
views::View* owner_view) {
|
|
CEF_REQUIRE_UIT_RETURN(nullptr);
|
|
CefRefPtr<CefBoxLayoutImpl> impl = new CefBoxLayoutImpl(settings);
|
|
impl->Initialize(owner_view);
|
|
return impl;
|
|
}
|
|
|
|
void CefBoxLayoutImpl::SetFlexForView(CefRefPtr<CefView> view, int flex) {
|
|
CEF_REQUIRE_VALID_RETURN_VOID();
|
|
DCHECK_GE(flex, 0);
|
|
if (flex < 0)
|
|
return;
|
|
|
|
DCHECK(view && view->IsValid() && view->IsAttached());
|
|
if (!view || !view->IsValid() || !view->IsAttached())
|
|
return;
|
|
|
|
views::View* view_ptr = view_util::GetFor(view);
|
|
DCHECK_EQ(view_ptr->parent(), owner_view());
|
|
if (view_ptr->parent() != owner_view())
|
|
return;
|
|
|
|
layout()->SetFlexForView(view_ptr, flex);
|
|
}
|
|
|
|
void CefBoxLayoutImpl::ClearFlexForView(CefRefPtr<CefView> view) {
|
|
CEF_REQUIRE_VALID_RETURN_VOID();
|
|
DCHECK(view && view->IsValid() && view->IsAttached());
|
|
if (!view || !view->IsValid() || !view->IsAttached())
|
|
return;
|
|
|
|
views::View* view_ptr = view_util::GetFor(view);
|
|
DCHECK_EQ(view_ptr->parent(), owner_view());
|
|
if (view_ptr->parent() != owner_view())
|
|
return;
|
|
|
|
layout()->ClearFlexForView(view_ptr);
|
|
}
|
|
|
|
CefBoxLayoutImpl::CefBoxLayoutImpl(const CefBoxLayoutSettings& settings)
|
|
: settings_(settings) {}
|
|
|
|
views::BoxLayout* CefBoxLayoutImpl::CreateLayout() {
|
|
views::BoxLayout* layout = new views::BoxLayout(
|
|
settings_.horizontal ? views::BoxLayout::Orientation::kHorizontal
|
|
: views::BoxLayout::Orientation::kVertical,
|
|
gfx::Insets(settings_.inside_border_vertical_spacing,
|
|
settings_.inside_border_horizontal_spacing),
|
|
settings_.between_child_spacing);
|
|
layout->set_main_axis_alignment(
|
|
static_cast<views::BoxLayout::MainAxisAlignment>(
|
|
settings_.main_axis_alignment));
|
|
layout->set_cross_axis_alignment(
|
|
static_cast<views::BoxLayout::CrossAxisAlignment>(
|
|
settings_.cross_axis_alignment));
|
|
layout->set_inside_border_insets(gfx::Insets(
|
|
settings_.inside_border_insets.top, settings_.inside_border_insets.left,
|
|
settings_.inside_border_insets.bottom,
|
|
settings_.inside_border_insets.right));
|
|
layout->set_minimum_cross_axis_size(settings_.minimum_cross_axis_size);
|
|
if (settings_.default_flex > 0)
|
|
layout->SetDefaultFlex(settings_.default_flex);
|
|
return layout;
|
|
}
|