chromium/ios/chrome/browser/ui/toolbar/public/toolbar_utils.mm

// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#import "ios/chrome/browser/ui/toolbar/public/toolbar_utils.h"

#import "ios/chrome/browser/shared/ui/util/uikit_ui_util.h"
#import "ios/chrome/browser/ui/toolbar/public/toolbar_constants.h"
#import "ios/chrome/common/ui/util/ui_util.h"
#import "ios/components/ui_util/dynamic_type_util.h"

namespace {

// Returns the `category` unchanged, unless it is ||, in which case it returns
// the preferred content size category from the shared application.
UIContentSizeCategory NormalizedCategory(UIContentSizeCategory category) {
  if ([category isEqualToString:UIContentSizeCategoryUnspecified])
    return [UIApplication sharedApplication].preferredContentSizeCategory;
  return category;
}

// Returns an interpolation of the height based on the multiplier associated
// with `category`, clamped between UIContentSizeCategoryLarge and
// UIContentSizeCategoryAccessibilityExtraLarge. This multiplier is applied to
// `default_height` - `non_dynamic_height`.
CGFloat Interpolate(UIContentSizeCategory category,
                    CGFloat default_height,
                    CGFloat non_dynamic_height) {
  return AlignValueToPixel((default_height - non_dynamic_height) *
                               ToolbarClampedFontSizeMultiplier(category) +
                           non_dynamic_height);
}

}  // namespace

CGFloat ToolbarClampedFontSizeMultiplier(UIContentSizeCategory category) {
  return ui_util::SystemSuggestedFontSizeMultiplier(
      category, UIContentSizeCategoryLarge,
      UIContentSizeCategoryAccessibilityExtraLarge);
}

CGFloat ToolbarCollapsedHeight(UIContentSizeCategory category) {
  category = NormalizedCategory(category);
  return Interpolate(category, kToolbarHeightFullscreen,
                     kNonDynamicToolbarHeightFullscreen);
}

CGFloat ToolbarExpandedHeight(UIContentSizeCategory category) {
  category = NormalizedCategory(category);
  return Interpolate(category, kToolbarOmniboxHeight, kNonDynamicToolbarHeight);
}

CGFloat LocationBarHeight(UIContentSizeCategory category) {
  category = NormalizedCategory(category);
  CGFloat verticalMargin =
      2 * kAdaptiveLocationBarVerticalMargin - kTopToolbarUnsplitMargin;
  CGFloat dynamicTypeVerticalAdjustment =
      (ToolbarClampedFontSizeMultiplier(category) - 1) *
      (kLocationBarVerticalMarginDynamicType +
       kAdaptiveLocationBarVerticalMargin);
  verticalMargin = verticalMargin + dynamicTypeVerticalAdjustment;
  return AlignValueToPixel(ToolbarExpandedHeight(category) - verticalMargin);
}