mirror of
https://gitee.com/openharmony/arkui_ace_engine
synced 2024-10-07 08:24:11 +00:00
commit
86f977ee9f
@ -247,27 +247,6 @@ void NavigationGroupNode::AddBackButtonIconToNavDestination(const RefPtr<UINode>
|
||||
}
|
||||
}
|
||||
|
||||
void NavigationGroupNode::SetBackButtonVisible(const RefPtr<UINode>& navDestinationNode, bool isVisible)
|
||||
{
|
||||
auto navDestination = AceType::DynamicCast<NavDestinationGroupNode>(navDestinationNode);
|
||||
CHECK_NULL_VOID(navDestination);
|
||||
auto titleBarNode = AceType::DynamicCast<TitleBarNode>(navDestination->GetTitleBarNode());
|
||||
CHECK_NULL_VOID(titleBarNode);
|
||||
auto titleBarLayoutProperty = titleBarNode->GetLayoutProperty<TitleBarLayoutProperty>();
|
||||
CHECK_NULL_VOID(titleBarLayoutProperty);
|
||||
auto backButtonNode = AceType::DynamicCast<FrameNode>(titleBarNode->GetBackButton());
|
||||
CHECK_NULL_VOID(backButtonNode);
|
||||
auto backButtonLayoutProperty = backButtonNode->GetLayoutProperty<LayoutProperty>();
|
||||
CHECK_NULL_VOID(backButtonLayoutProperty);
|
||||
if (isVisible) {
|
||||
backButtonLayoutProperty->UpdateVisibility(VisibleType::VISIBLE);
|
||||
} else {
|
||||
backButtonLayoutProperty->UpdateVisibility(VisibleType::GONE);
|
||||
}
|
||||
backButtonNode->MarkModifyDone();
|
||||
navDestination->UpdateTitleFontSize(isVisible);
|
||||
}
|
||||
|
||||
void NavigationGroupNode::SetBackButtonEvent(
|
||||
const RefPtr<NavDestinationGroupNode>& navDestination, const RefPtr<NavRouterPattern>& navRouterPattern)
|
||||
{
|
||||
|
@ -110,7 +110,6 @@ public:
|
||||
void SetBackButtonEvent(const RefPtr<NavDestinationGroupNode>& navDestination,
|
||||
const RefPtr<NavRouterPattern>& navRouterPattern = nullptr);
|
||||
void AddBackButtonIconToNavDestination(const RefPtr<UINode>& navDestinationNode);
|
||||
void SetBackButtonVisible(const RefPtr<UINode>& navDestinationNode, bool isVisible = true);
|
||||
|
||||
void ExitTransitionWithPop(const RefPtr<FrameNode>& node);
|
||||
void ExitTransitionWithPush(const RefPtr<FrameNode>& node, bool isNavBar = false);
|
||||
|
@ -555,16 +555,6 @@ bool NavigationPattern::OnDirtyLayoutWrapperSwap(const RefPtr<LayoutWrapper>& di
|
||||
// considering backButton visibility
|
||||
auto curTopNavDestination = AceType::DynamicCast<NavDestinationGroupNode>(
|
||||
NavigationGroupNode::GetNavDestinationNode(curTopNavPath->second));
|
||||
if (navigationStack->Size() == 1 &&
|
||||
(pattern->GetNavigationMode() == NavigationMode::SPLIT ||
|
||||
navigationLayoutProperty->GetHideNavBar().value_or(false))) {
|
||||
// cases that backButton of navDestination is gone when there's only one child and
|
||||
// 1. In SPLIT mode, it's the first level page
|
||||
// 2. In STACK mode, the navBar is hidden
|
||||
navigationGroupNode->SetBackButtonVisible(curTopNavDestination, false);
|
||||
} else {
|
||||
navigationGroupNode->SetBackButtonVisible(curTopNavDestination, true);
|
||||
}
|
||||
pattern->UpdateContextRect(curTopNavDestination, navigationGroupNode);
|
||||
}
|
||||
// considering navBar visibility
|
||||
@ -601,10 +591,6 @@ void NavigationPattern::UpdateContextRect(
|
||||
CHECK_NULL_VOID(navBarNode);
|
||||
auto navigationPattern = AceType::DynamicCast<NavigationPattern>(hostNode->GetPattern());
|
||||
CHECK_NULL_VOID(navigationPattern);
|
||||
auto size = curDestination->GetGeometryNode()->GetFrameSize();
|
||||
curDestination->GetRenderContext()->ClipWithRRect(
|
||||
RectF(0.0f, 0.0f, size.Width(), size.Height()), RadiusF(EdgeF(0.0f, 0.0f)));
|
||||
curDestination->GetRenderContext()->UpdateTranslateInXY(OffsetF { 0.0f, 0.0f });
|
||||
|
||||
if (navigationPattern->GetNavigationMode() == NavigationMode::STACK) {
|
||||
curDestination->GetRenderContext()->SetActualForegroundColor(DEFAULT_MASK_COLOR);
|
||||
|
@ -30,6 +30,7 @@
|
||||
#include "core/components_ng/pattern/navigation/title_bar_node.h"
|
||||
#include "core/components_ng/pattern/navigation/title_bar_pattern.h"
|
||||
#include "core/components_ng/pattern/navrouter/navdestination_group_node.h"
|
||||
#include "core/components_ng/pattern/navrouter/navdestination_pattern.h"
|
||||
#include "core/components_ng/pattern/navrouter/navdestination_layout_property.h"
|
||||
#include "core/components_ng/pattern/text/text_layout_property.h"
|
||||
#include "core/components_ng/property/layout_constraint.h"
|
||||
@ -49,7 +50,7 @@ constexpr int32_t MENU_OFFSET_RATIO = 9;
|
||||
void TitleBarLayoutAlgorithm::MeasureBackButton(LayoutWrapper* layoutWrapper, const RefPtr<TitleBarNode>& titleBarNode,
|
||||
const RefPtr<TitleBarLayoutProperty>& titleBarLayoutProperty)
|
||||
{
|
||||
auto backButtonNode = titleBarNode->GetBackButton();
|
||||
auto backButtonNode = AceType::DynamicCast<FrameNode>(titleBarNode->GetBackButton());
|
||||
CHECK_NULL_VOID(backButtonNode);
|
||||
auto index = titleBarNode->GetChildIndexById(backButtonNode->GetId());
|
||||
auto backButtonWrapper = layoutWrapper->GetOrCreateChildByIndex(index);
|
||||
@ -58,6 +59,19 @@ void TitleBarLayoutAlgorithm::MeasureBackButton(LayoutWrapper* layoutWrapper, co
|
||||
// navDestination title bar
|
||||
if (titleBarLayoutProperty->GetTitleBarParentTypeValue(TitleBarParentType::NAVBAR) ==
|
||||
TitleBarParentType::NAV_DESTINATION) {
|
||||
if (!showBackButton_) {
|
||||
constraint.selfIdealSize = OptionalSizeF(0.0f, 0.0f);
|
||||
auto backButtonLayoutProperty = backButtonNode->GetLayoutProperty();
|
||||
PaddingProperty padding;
|
||||
padding.SetEdges(CalcLength(Dimension(0.0f, DimensionUnit::VP)));
|
||||
backButtonLayoutProperty->UpdatePadding(padding);
|
||||
backButtonWrapper->Measure(constraint);
|
||||
return;
|
||||
}
|
||||
auto buttonLayoutProperty = backButtonNode->GetLayoutProperty();
|
||||
PaddingProperty padding;
|
||||
padding.SetEdges(CalcLength(BUTTON_PADDING));
|
||||
buttonLayoutProperty->UpdatePadding(padding);
|
||||
if (Container::LessThanAPIVersion(PlatformVersion::VERSION_TEN)) {
|
||||
constraint.selfIdealSize = OptionalSizeF(static_cast<float>(BACK_BUTTON_ICON_SIZE.ConvertToPx()),
|
||||
static_cast<float>(BACK_BUTTON_ICON_SIZE.ConvertToPx()));
|
||||
@ -101,7 +115,7 @@ float TitleBarLayoutAlgorithm::GetTitleWidth(const RefPtr<TitleBarNode>& titleBa
|
||||
auto isCustom = navDestination->GetPrevTitleIsCustomValue(false);
|
||||
float occupiedWidth = 0.0f;
|
||||
// left padding
|
||||
if (GetNavigationBackButtonState(titleBarNode)) {
|
||||
if (showBackButton_) {
|
||||
occupiedWidth += isCustom ? (maxPaddingStart_ + BACK_BUTTON_ICON_SIZE + BUTTON_PADDING).ConvertToPx() :
|
||||
(maxPaddingStart_ + BACK_BUTTON_ICON_SIZE + NAV_HORIZONTAL_MARGIN_L).ConvertToPx();
|
||||
} else {
|
||||
@ -311,7 +325,10 @@ void TitleBarLayoutAlgorithm::LayoutBackButton(LayoutWrapper* layoutWrapper, con
|
||||
// navDestination title bar
|
||||
if (titleBarLayoutProperty->GetTitleBarParentTypeValue(TitleBarParentType::NAVBAR) ==
|
||||
TitleBarParentType::NAV_DESTINATION) {
|
||||
if (!titleBarNode->GetBackButton()) {
|
||||
if (!showBackButton_) {
|
||||
SizeF size = SizeF(0.0f, 0.0f);
|
||||
geometryNode->SetFrameSize(size);
|
||||
backButtonWrapper->Layout();
|
||||
return;
|
||||
}
|
||||
if (Container::LessThanAPIVersion(PlatformVersion::VERSION_TEN)) {
|
||||
@ -377,7 +394,7 @@ void TitleBarLayoutAlgorithm::LayoutTitle(LayoutWrapper* layoutWrapper, const Re
|
||||
auto isCustom = navDestination->GetPrevTitleIsCustomValue(false);
|
||||
// add sdk 9 compatible
|
||||
if (Container::LessThanAPIVersion(PlatformVersion::VERSION_TEN)) {
|
||||
if (GetNavigationBackButtonState(titleBarNode)) {
|
||||
if (showBackButton_) {
|
||||
geometryNode->SetMarginFrameOffset(OffsetF {
|
||||
static_cast<float>((maxPaddingStart_ + BACK_BUTTON_ICON_SIZE +
|
||||
NAV_HORIZONTAL_MARGIN_M).ConvertToPx()), offsetY });
|
||||
@ -388,7 +405,7 @@ void TitleBarLayoutAlgorithm::LayoutTitle(LayoutWrapper* layoutWrapper, const Re
|
||||
titleWrapper->Layout();
|
||||
return;
|
||||
}
|
||||
if (GetNavigationBackButtonState(titleBarNode)) {
|
||||
if (showBackButton_) {
|
||||
auto offsetX = isCustom ? (maxPaddingStart_ + BACK_BUTTON_ICON_SIZE + BUTTON_PADDING).ConvertToPx() :
|
||||
(maxPaddingStart_ + BACK_BUTTON_ICON_SIZE + NAV_HORIZONTAL_MARGIN_L).ConvertToPx();
|
||||
offsetY = isCustom ? 0.0f : offsetY;
|
||||
@ -546,7 +563,7 @@ void TitleBarLayoutAlgorithm::LayoutSubtitle(LayoutWrapper* layoutWrapper, const
|
||||
if (titleBarLayoutProperty->GetTitleBarParentTypeValue(TitleBarParentType::NAVBAR) ==
|
||||
TitleBarParentType::NAV_DESTINATION) {
|
||||
// subtitle doesn't support custom title
|
||||
if (GetNavigationBackButtonState(titleBarNode)) {
|
||||
if (showBackButton_) {
|
||||
if (Container::LessThanAPIVersion(PlatformVersion::VERSION_TEN)) {
|
||||
geometryNode->SetMarginFrameOffset(OffsetF {
|
||||
(maxPaddingStart_ + BACK_BUTTON_ICON_SIZE + NAV_HORIZONTAL_MARGIN_M).ConvertToPx(), offsetY });
|
||||
@ -694,7 +711,17 @@ void TitleBarLayoutAlgorithm::Measure(LayoutWrapper* layoutWrapper)
|
||||
const auto& padding = layoutWrapper->GetLayoutProperty()->CreatePaddingAndBorder();
|
||||
MinusPaddingToSize(padding, size);
|
||||
InitializeTheme();
|
||||
|
||||
do {
|
||||
if (layoutProperty->GetTitleBarParentTypeValue(TitleBarParentType::NAVBAR) !=
|
||||
TitleBarParentType::NAV_DESTINATION) {
|
||||
break;
|
||||
}
|
||||
auto navDestinationNode = AceType::DynamicCast<FrameNode>(titleBarNode->GetParent());
|
||||
CHECK_NULL_BREAK(navDestinationNode);
|
||||
auto navDestinationPattern = AceType::DynamicCast<NavDestinationPattern>(navDestinationNode->GetPattern());
|
||||
CHECK_NULL_BREAK(navDestinationPattern);
|
||||
showBackButton_ = navDestinationPattern->GetBackButtonState();
|
||||
} while (0);
|
||||
MeasureBackButton(layoutWrapper, titleBarNode, layoutProperty);
|
||||
MeasureMenu(layoutWrapper, titleBarNode, layoutProperty);
|
||||
auto titleMaxWidth = GetTitleWidth(titleBarNode, layoutProperty, size);
|
||||
@ -736,12 +763,4 @@ void TitleBarLayoutAlgorithm::Layout(LayoutWrapper* layoutWrapper)
|
||||
LayoutMenu(layoutWrapper, titleBarNode, layoutProperty, subtitleHeight);
|
||||
}
|
||||
|
||||
bool TitleBarLayoutAlgorithm::GetNavigationBackButtonState(const RefPtr<TitleBarNode>& titleBarNode)
|
||||
{
|
||||
auto backButton = AceType::DynamicCast<FrameNode>(titleBarNode->GetBackButton());
|
||||
CHECK_NULL_RETURN(backButton, false);
|
||||
auto layoutProperty = backButton->GetLayoutProperty();
|
||||
CHECK_NULL_RETURN(layoutProperty, false);
|
||||
return layoutProperty->GetVisibilityValue(VisibleType::VISIBLE) == VisibleType::VISIBLE;
|
||||
}
|
||||
} // namespace OHOS::Ace::NG
|
||||
|
@ -110,8 +110,6 @@ private:
|
||||
void LayoutMenu(LayoutWrapper* layoutWrapper, const RefPtr<TitleBarNode>& titleBarNode,
|
||||
const RefPtr<TitleBarLayoutProperty>& titleBarLayoutProperty, float subtitleHeight);
|
||||
|
||||
bool GetNavigationBackButtonState(const RefPtr<TitleBarNode>& titleBarNode);
|
||||
|
||||
// set variables from theme
|
||||
void InitializeTheme();
|
||||
|
||||
@ -128,6 +126,7 @@ private:
|
||||
bool isInitialSubtitle_ = true;
|
||||
float minTitleHeight_ = 0.0f;
|
||||
float menuWidth_ = 0.0f;
|
||||
bool showBackButton_ = false;
|
||||
|
||||
ACE_DISALLOW_COPY_AND_MOVE(TitleBarLayoutAlgorithm);
|
||||
};
|
||||
|
@ -22,9 +22,9 @@
|
||||
#include "base/utils/utils.h"
|
||||
#include "core/components_ng/base/frame_node.h"
|
||||
#include "core/components_ng/pattern/linear_layout/linear_layout_property.h"
|
||||
#include "core/components_ng/pattern/navigation/navigation_layout_algorithm.h"
|
||||
#include "core/components_ng/pattern/navigation/title_bar_layout_property.h"
|
||||
#include "core/components_ng/pattern/navigation/title_bar_node.h"
|
||||
#include "core/components_ng/pattern/navigation/navigation_layout_algorithm.h"
|
||||
#include "core/components_ng/pattern/navrouter/navdestination_group_node.h"
|
||||
#include "core/components_ng/pattern/navrouter/navdestination_layout_property.h"
|
||||
#include "core/components_ng/property/layout_constraint.h"
|
||||
@ -52,24 +52,24 @@ float MeasureTitleBar(LayoutWrapper* layoutWrapper, const RefPtr<NavDestinationG
|
||||
}
|
||||
|
||||
if (navDestinationLayoutProperty->HasTitleBarHeight()) {
|
||||
auto titleHeight = static_cast<float>(navDestinationLayoutProperty->GetTitleBarHeightValue().
|
||||
ConvertToPxWithSize(constraint.percentReference.Height()));
|
||||
auto titleHeight =
|
||||
static_cast<float>(navDestinationLayoutProperty->GetTitleBarHeightValue().ConvertToPxWithSize(
|
||||
constraint.percentReference.Height()));
|
||||
constraint.selfIdealSize.SetHeight((titleHeight));
|
||||
titleBarWrapper->Measure(constraint);
|
||||
return titleHeight;
|
||||
}
|
||||
|
||||
auto titleHeight = navDestinationLayoutProperty->GetTitleBarHeightValue(hostNode->GetSubtitle() ?
|
||||
DOUBLE_LINE_TITLEBAR_HEIGHT : SINGLE_LINE_TITLEBAR_HEIGHT);
|
||||
constraint.selfIdealSize = OptionalSizeF(size.Width(),
|
||||
static_cast<float>(titleHeight.ConvertToPxWithSize(constraint.percentReference.Height())));
|
||||
auto titleHeight = navDestinationLayoutProperty->GetTitleBarHeightValue(
|
||||
hostNode->GetSubtitle() ? DOUBLE_LINE_TITLEBAR_HEIGHT : SINGLE_LINE_TITLEBAR_HEIGHT);
|
||||
constraint.selfIdealSize = OptionalSizeF(
|
||||
size.Width(), static_cast<float>(titleHeight.ConvertToPxWithSize(constraint.percentReference.Height())));
|
||||
titleBarWrapper->Measure(constraint);
|
||||
return static_cast<float>(titleHeight.ConvertToPxWithSize(constraint.percentReference.Height()));
|
||||
}
|
||||
|
||||
float MeasureContentChild(LayoutWrapper* layoutWrapper, const RefPtr<NavDestinationGroupNode>& hostNode,
|
||||
const RefPtr<NavDestinationLayoutProperty>& navDestinationLayoutProperty, const SizeF& size,
|
||||
float titleBarHeight)
|
||||
const RefPtr<NavDestinationLayoutProperty>& navDestinationLayoutProperty, const SizeF& size, float titleBarHeight)
|
||||
{
|
||||
auto contentNode = hostNode->GetContentNode();
|
||||
CHECK_NULL_RETURN(contentNode, 0.0f);
|
||||
@ -143,10 +143,18 @@ void NavDestinationLayoutAlgorithm::Measure(LayoutWrapper* layoutWrapper)
|
||||
MinusPaddingToSize(padding, size);
|
||||
|
||||
float titleBarHeight = MeasureTitleBar(layoutWrapper, hostNode, navDestinationLayoutProperty, size);
|
||||
float contentChildHeight = MeasureContentChild(layoutWrapper, hostNode,
|
||||
navDestinationLayoutProperty, size, titleBarHeight);
|
||||
float contentChildHeight =
|
||||
MeasureContentChild(layoutWrapper, hostNode, navDestinationLayoutProperty, size, titleBarHeight);
|
||||
size.SetHeight(titleBarHeight + contentChildHeight);
|
||||
layoutWrapper->GetGeometryNode()->SetFrameSize(size);
|
||||
auto parent = hostNode->GetParent();
|
||||
if (hostNode->IsOnAnimation()) {
|
||||
return;
|
||||
}
|
||||
hostNode->GetRenderContext()->ClipWithRRect(
|
||||
RectF(0.0f, 0.0f, size.Width(), size.Height()), RadiusF(EdgeF(0.0f, 0.0f)));
|
||||
OffsetF offset = OffsetF(0.0f, 0.0f);
|
||||
hostNode->GetRenderContext()->UpdateTranslateInXY(offset);
|
||||
}
|
||||
|
||||
void NavDestinationLayoutAlgorithm::Layout(LayoutWrapper* layoutWrapper)
|
||||
|
@ -88,7 +88,6 @@ void NavDestinationModelNG::CreateImageButton(const RefPtr<NavDestinationGroupNo
|
||||
auto backButtonLayoutProperty = backButtonNode->GetLayoutProperty<ImageLayoutProperty>();
|
||||
CHECK_NULL_VOID(backButtonLayoutProperty);
|
||||
backButtonLayoutProperty->UpdateImageSourceInfo(imageSourceInfo);
|
||||
backButtonLayoutProperty->UpdateVisibility(VisibleType::GONE);
|
||||
backButtonNode->MarkModifyDone();
|
||||
|
||||
auto titleBarLayoutProperty = titleBarNode->GetLayoutProperty<TitleBarLayoutProperty>();
|
||||
@ -112,7 +111,6 @@ void NavDestinationModelNG::CreateBackButton(const RefPtr<NavDestinationGroupNod
|
||||
titleBarNode->SetBackButton(backButtonNode);
|
||||
auto backButtonLayoutProperty = backButtonNode->GetLayoutProperty<ButtonLayoutProperty>();
|
||||
CHECK_NULL_VOID(backButtonLayoutProperty);
|
||||
backButtonLayoutProperty->UpdateVisibility(VisibleType::GONE);
|
||||
backButtonLayoutProperty->UpdateUserDefinedIdealSize(
|
||||
CalcSize(CalcLength(BACK_BUTTON_SIZE), CalcLength(BACK_BUTTON_SIZE)));
|
||||
backButtonLayoutProperty->UpdateType(ButtonType::NORMAL);
|
||||
|
@ -30,6 +30,8 @@
|
||||
#include "core/components_ng/pattern/navigation/title_bar_layout_property.h"
|
||||
#include "core/components_ng/pattern/navigation/title_bar_node.h"
|
||||
#include "core/components_ng/pattern/navigation/title_bar_pattern.h"
|
||||
#include "core/components_ng/pattern/navigation/navigation_pattern.h"
|
||||
#include "core/components_ng/pattern/navigation/navigation_group_node.h"
|
||||
#include "core/components_ng/pattern/navrouter/navdestination_group_node.h"
|
||||
#include "core/components_ng/pattern/navrouter/navdestination_layout_algorithm.h"
|
||||
#include "core/components_ng/pattern/navrouter/navdestination_layout_property.h"
|
||||
@ -154,4 +156,61 @@ void NavDestinationPattern::OnModifyDone()
|
||||
}
|
||||
MountTitleBar(hostNode);
|
||||
}
|
||||
|
||||
bool NavDestinationPattern::GetBackButtonState()
|
||||
{
|
||||
auto hostNode = AceType::DynamicCast<NavDestinationGroupNode>(GetHost());
|
||||
CHECK_NULL_RETURN(hostNode, false);
|
||||
auto navDestinationLayoutProperty = hostNode->GetLayoutProperty<NavDestinationLayoutProperty>();
|
||||
CHECK_NULL_RETURN(navDestinationLayoutProperty, false);
|
||||
if (navDestinationLayoutProperty->GetHideTitleBarValue(false)) {
|
||||
return false;
|
||||
}
|
||||
// get navigation node
|
||||
auto parent = AceType::DynamicCast<FrameNode>(hostNode->GetParent());
|
||||
RefPtr<NavigationGroupNode> navigationNode;
|
||||
while (parent && !parent->IsRootNode()) {
|
||||
navigationNode = AceType::DynamicCast<NavigationGroupNode>(parent);
|
||||
if (navigationNode) {
|
||||
break;
|
||||
}
|
||||
parent = AceType::DynamicCast<FrameNode>(parent->GetParent());
|
||||
}
|
||||
if (!navigationNode) {
|
||||
TAG_LOGW(AceLogTag::ACE_NAVIGATION, "can't find navigation node");
|
||||
return false;
|
||||
}
|
||||
auto navigationLayoutProperty = navigationNode->GetLayoutProperty<NavigationLayoutProperty>();
|
||||
CHECK_NULL_RETURN(navigationLayoutProperty, false);
|
||||
auto pattern = navigationNode->GetPattern<NavigationPattern>();
|
||||
auto stack = pattern->GetNavigationStack();
|
||||
auto index = stack->FindIndex(name_, navDestinationNode_.Upgrade(), true);
|
||||
bool showBackButton = true;
|
||||
auto titleBarNode = AceType::DynamicCast<TitleBarNode>(hostNode->GetTitleBarNode());
|
||||
auto layoutWrapper = AceType::DynamicCast<LayoutAlgorithmWrapper>(navigationNode->GetLayoutAlgorithm());
|
||||
CHECK_NULL_RETURN(layoutWrapper, showBackButton);
|
||||
auto layout = AceType::DynamicCast<NavigationLayoutAlgorithm>(layoutWrapper->GetLayoutAlgorithm());
|
||||
CHECK_NULL_RETURN(layout, false);
|
||||
if (index == 0 && (layout->GetNavigationMode() == NavigationMode::SPLIT ||
|
||||
navigationLayoutProperty->GetHideNavBarValue(false))) {
|
||||
showBackButton = false;
|
||||
}
|
||||
auto isCustomTitle = hostNode->GetPrevTitleIsCustomValue(false);
|
||||
if (isCustomTitle) {
|
||||
return showBackButton;
|
||||
}
|
||||
auto titleNode = AceType::DynamicCast<FrameNode>(titleBarNode->GetTitle());
|
||||
CHECK_NULL_RETURN(titleNode, showBackButton);
|
||||
auto theme = NavigationGetTheme();
|
||||
CHECK_NULL_RETURN(theme, showBackButton);
|
||||
auto textLayoutProperty = titleNode->GetLayoutProperty<TextLayoutProperty>();
|
||||
auto currentFontSize = textLayoutProperty->GetAdaptMaxFontSizeValue(Dimension(0.0, DimensionUnit::FP));
|
||||
auto targetFontSize = showBackButton ? theme->GetTitleFontSizeMin() : theme->GetTitleFontSize();
|
||||
if (targetFontSize == currentFontSize) {
|
||||
return showBackButton;
|
||||
}
|
||||
textLayoutProperty->UpdateFontSize(targetFontSize);
|
||||
textLayoutProperty->UpdatePropertyChangeFlag(PROPERTY_UPDATE_MEASURE);
|
||||
return showBackButton;
|
||||
}
|
||||
} // namespace OHOS::Ace::NG
|
||||
|
@ -103,6 +103,8 @@ public:
|
||||
return isOnShow_;
|
||||
}
|
||||
|
||||
bool GetBackButtonState();
|
||||
|
||||
private:
|
||||
RefPtr<ShallowBuilder> shallowBuilder_;
|
||||
std::string name_;
|
||||
|
@ -2444,20 +2444,6 @@ HWTEST_F(NavigationTestNg, NavigationModelNG0014, TestSize.Level1)
|
||||
ASSERT_NE(backButtonNode2->renderContext_, nullptr);
|
||||
navigation->BackButtonAnimation(backButtonNode2, false);
|
||||
navigation->BackButtonAnimation(backButtonNode2, true);
|
||||
|
||||
auto titleBarNode = TitleBarNode::GetOrCreateTitleBarNode(
|
||||
"titleBarNode", 124, []() { return AceType::MakeRefPtr<TitleBarPattern>(); });
|
||||
navDestination->titleBarNode_ = titleBarNode;
|
||||
auto titleBarLayoutProperty = titleBarNode->GetLayoutProperty<TitleBarLayoutProperty>();
|
||||
|
||||
auto backButtonNode = FrameNode::CreateFrameNode("backButtonNode22", 125, AceType::MakeRefPtr<ButtonPattern>());
|
||||
titleBarNode->backButton_ = backButtonNode;
|
||||
auto backButtonLayoutProperty = backButtonNode->GetLayoutProperty<ButtonLayoutProperty>();
|
||||
navigation->SetBackButtonVisible(navDestination);
|
||||
ASSERT_EQ(backButtonLayoutProperty->propVisibility_.value(), VisibleType::VISIBLE);
|
||||
|
||||
navigation->SetBackButtonVisible(navDestination, false);
|
||||
ASSERT_EQ(backButtonLayoutProperty->propVisibility_.value(), VisibleType::GONE);
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user