1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ui/views/frame/browser_frame_view_layout_linux.h"
#include "base/i18n/rtl.h"
#include "chrome/browser/ui/layout_constants.h"
#include "chrome/browser/ui/views/frame/browser_frame_view_linux.h"
#include "chrome/browser/ui/views/frame/browser_frame_view_paint_utils_linux.h"
#include "chrome/browser/ui/views/frame/opaque_browser_frame_view_layout.h"
#include "ui/base/ui_base_features.h"
#include "ui/gfx/geometry/insets.h"
namespace {
// This is the same thickness as the resize border on ChromeOS.
constexpr unsigned int kResizeBorder = 10;
// The "extra top border" is only 1dip in OpaqueBrowserFrameViewLayout, but that
// does not include the 2dip 3D frame border at the top, which
// BrowserFrameViewLayoutLinux doesn't have. We need to add that back here so
// that the tabstrip area maintains the same height.
constexpr unsigned int kExtraTopBorder = 3;
} // namespace
BrowserFrameViewLayoutLinux::BrowserFrameViewLayoutLinux() = default;
BrowserFrameViewLayoutLinux::~BrowserFrameViewLayoutLinux() = default;
gfx::Insets BrowserFrameViewLayoutLinux::RestoredMirroredFrameBorderInsets()
const {
auto border = RestoredFrameBorderInsets();
return base::i18n::IsRTL() ? gfx::Insets::TLBR(border.top(), border.right(),
border.bottom(), border.left())
: border;
}
gfx::Insets BrowserFrameViewLayoutLinux::GetInputInsets() const {
bool showing_shadow = delegate_->ShouldDrawRestoredFrameShadow() &&
!delegate_->IsFrameCondensed();
return gfx::Insets(showing_shadow ? kResizeBorder : 0);
}
int BrowserFrameViewLayoutLinux::CaptionButtonY(views::FrameButton button_id,
bool restored) const {
return FrameEdgeInsets(restored).top();
}
gfx::Insets BrowserFrameViewLayoutLinux::RestoredFrameBorderInsets() const {
// Borderless mode only has a minimal frame to be able to resize it from the
// borders.
if (delegate_->GetBorderlessModeEnabled()) {
return gfx::Insets(
OpaqueBrowserFrameViewLayout::RestoredFrameBorderInsets());
}
#if BUILDFLAG(IS_LINUX)
const bool tiled = delegate_->IsTiled();
#else
const bool tiled = false;
#endif
auto shadow_values =
tiled ? gfx::ShadowValues() : view_->GetShadowValues(true);
return GetRestoredFrameBorderInsetsLinux(
delegate_->ShouldDrawRestoredFrameShadow(),
OpaqueBrowserFrameViewLayout::RestoredFrameBorderInsets(), shadow_values,
gfx::Insets(kResizeBorder));
}
gfx::Insets BrowserFrameViewLayoutLinux::RestoredFrameEdgeInsets() const {
return delegate_->ShouldDrawRestoredFrameShadow()
? RestoredFrameBorderInsets()
: gfx::Insets();
}
int BrowserFrameViewLayoutLinux::NonClientExtraTopThickness() const {
return delegate_->IsTabStripVisible() ? 0 : kExtraTopBorder;
}
|