mirror of
https://github.com/openharmony/ace_ace_engine.git
synced 2026-07-21 01:45:30 -04:00
@@ -314,10 +314,6 @@ void AceContainer::OnActive(int32_t instanceId)
|
||||
if (front && !container->IsSubContainer()) {
|
||||
front->OnActive();
|
||||
}
|
||||
auto context = container->GetPipelineContext();
|
||||
if (!context) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void AceContainer::OnInactive(int32_t instanceId)
|
||||
|
||||
@@ -434,6 +434,10 @@ void UIContentImpl::CommonInitialize(OHOS::Rosen::Window* window, const std::str
|
||||
abilityContext->StartAbility(want, REQUEST_CODE);
|
||||
}
|
||||
}));
|
||||
if (!container) {
|
||||
LOGE("Create container is null.");
|
||||
return;
|
||||
}
|
||||
container->SetWindowName(window_->GetWindowName());
|
||||
|
||||
// Mark the relationship between windowId and containerId, it is 1:1
|
||||
@@ -459,7 +463,7 @@ void UIContentImpl::CommonInitialize(OHOS::Rosen::Window* window, const std::str
|
||||
container->SetBundlePath(context->GetBundleCodeDir());
|
||||
container->SetFilesDataPath(context->GetFilesDir());
|
||||
|
||||
if (window_->IsDecorEnable()) {
|
||||
if (window_->IsDecorEnable() && SystemProperties::GetDeviceType() == DeviceType::TABLET) {
|
||||
LOGI("Container modal is enabled.");
|
||||
container->SetWindowModal(WindowModal::CONTAINER_MODAL);
|
||||
}
|
||||
@@ -493,7 +497,7 @@ void UIContentImpl::CommonInitialize(OHOS::Rosen::Window* window, const std::str
|
||||
#endif
|
||||
// set view
|
||||
Platform::AceContainer::SetView(flutterAceView, density, 0, 0, window_->GetWindowId(), callback);
|
||||
Platform::FlutterAceView::SurfaceChanged(flutterAceView, 0, 0, config_.Orientation());
|
||||
Platform::FlutterAceView::SurfaceChanged(flutterAceView, 0, 0, deviceHeight >= deviceWidth ? 0 : 1);
|
||||
auto nativeEngine = reinterpret_cast<NativeEngine*>(runtime_);
|
||||
if (!storage) {
|
||||
container->SetLocalStorage(nullptr, context->GetBindingObject()->Get<NativeReference>());
|
||||
@@ -519,14 +523,50 @@ void UIContentImpl::Background()
|
||||
|
||||
void UIContentImpl::Focus()
|
||||
{
|
||||
LOGI("Active UIContent");
|
||||
LOGI("UIContent window focus");
|
||||
Platform::AceContainer::OnActive(instanceId_);
|
||||
auto container = Platform::AceContainer::GetContainer(instanceId_);
|
||||
if (!container) {
|
||||
LOGE("Window focus failed: container is null.");
|
||||
return;
|
||||
}
|
||||
auto taskExecutor = container->GetTaskExecutor();
|
||||
if (!taskExecutor) {
|
||||
LOGE("Window focus failed: taskExecutor is null.");
|
||||
return;
|
||||
}
|
||||
taskExecutor->PostTask([container]() {
|
||||
auto pipelineContext = container->GetPipelineContext();
|
||||
if (!pipelineContext) {
|
||||
LOGE("Window focus failed, pipeline context is null.");
|
||||
return;
|
||||
}
|
||||
pipelineContext->WindowFocus(true);
|
||||
}, TaskExecutor::TaskType::UI);
|
||||
}
|
||||
|
||||
void UIContentImpl::UnFocus()
|
||||
{
|
||||
LOGI("Inactive UIContent");
|
||||
LOGI("UIContent window unFocus");
|
||||
Platform::AceContainer::OnInactive(instanceId_);
|
||||
auto container = Platform::AceContainer::GetContainer(instanceId_);
|
||||
if (!container) {
|
||||
LOGE("Window unFocus failed: container is null.");
|
||||
return;
|
||||
}
|
||||
auto taskExecutor = container->GetTaskExecutor();
|
||||
if (!taskExecutor) {
|
||||
LOGE("Window unFocus failed: taskExecutor is null.");
|
||||
return;
|
||||
}
|
||||
taskExecutor->PostTask([container]() {
|
||||
auto pipelineContext = container->GetPipelineContext();
|
||||
if (!pipelineContext) {
|
||||
LOGE("Window unFocus failed, pipeline context is null.");
|
||||
return;
|
||||
}
|
||||
pipelineContext->WindowFocus(false);
|
||||
}, TaskExecutor::TaskType::UI);
|
||||
}
|
||||
|
||||
void UIContentImpl::Destroy()
|
||||
@@ -627,8 +667,6 @@ void UIContentImpl::UpdateViewportConfig(const ViewportConfig& config, OHOS::Ros
|
||||
static_cast<WindowSizeChangeReason>(reason));
|
||||
},
|
||||
TaskExecutor::TaskType::PLATFORM);
|
||||
config_ = config;
|
||||
updateConfig_ = true;
|
||||
}
|
||||
|
||||
void UIContentImpl::UpdateWindowMode(OHOS::Rosen::WindowMode mode)
|
||||
@@ -639,18 +677,25 @@ void UIContentImpl::UpdateWindowMode(OHOS::Rosen::WindowMode mode)
|
||||
LOGE("UpdateWindowMode failed, get container(id=%{public}d) failed", instanceId_);
|
||||
return;
|
||||
}
|
||||
auto pipelineContext = container->GetPipelineContext();
|
||||
if (!pipelineContext) {
|
||||
LOGE("UpdateWindowMode failed, pipeline context is null.");
|
||||
auto taskExecutor = container->GetTaskExecutor();
|
||||
if (!taskExecutor) {
|
||||
LOGE("UpdateWindowMode failed: taskExecutor is null.");
|
||||
return;
|
||||
}
|
||||
if (mode == OHOS::Rosen::WindowMode::WINDOW_MODE_FULLSCREEN ||
|
||||
mode == OHOS::Rosen::WindowMode::WINDOW_MODE_SPLIT_PRIMARY ||
|
||||
mode == OHOS::Rosen::WindowMode::WINDOW_MODE_SPLIT_SECONDARY) {
|
||||
pipelineContext->ShowContainerTitle(false);
|
||||
} else {
|
||||
pipelineContext->ShowContainerTitle(true);
|
||||
}
|
||||
taskExecutor->PostTask([container, mode]() {
|
||||
auto pipelineContext = container->GetPipelineContext();
|
||||
if (!pipelineContext) {
|
||||
LOGE("UpdateWindowMode failed, pipeline context is null.");
|
||||
return;
|
||||
}
|
||||
if (mode == OHOS::Rosen::WindowMode::WINDOW_MODE_FULLSCREEN ||
|
||||
mode == OHOS::Rosen::WindowMode::WINDOW_MODE_SPLIT_PRIMARY ||
|
||||
mode == OHOS::Rosen::WindowMode::WINDOW_MODE_SPLIT_SECONDARY) {
|
||||
pipelineContext->ShowContainerTitle(false);
|
||||
} else {
|
||||
pipelineContext->ShowContainerTitle(true);
|
||||
}
|
||||
}, TaskExecutor::TaskType::UI);
|
||||
}
|
||||
|
||||
void UIContentImpl::DumpInfo(const std::vector<std::string>& params, std::vector<std::string>& info)
|
||||
|
||||
@@ -70,10 +70,8 @@ private:
|
||||
std::weak_ptr<OHOS::AbilityRuntime::Context> context_;
|
||||
void* runtime_ = nullptr;
|
||||
OHOS::Rosen::Window* window_ = nullptr;
|
||||
ViewportConfig config_;
|
||||
std::string startUrl_;
|
||||
int32_t instanceId_ = -1;
|
||||
bool updateConfig_ = false;
|
||||
OHOS::sptr<OHOS::Rosen::IWindowDragListener> dragWindowListener_ = nullptr;
|
||||
OHOS::sptr<OHOS::Rosen::IOccupiedAreaChangeListener> occupiedAreaChangeListener_ = nullptr;
|
||||
};
|
||||
|
||||
@@ -45,6 +45,11 @@ source_set("binary_resource") {
|
||||
sources = [
|
||||
"$ace_resource_dir/close.o",
|
||||
"$ace_resource_dir/container_modal_window_close.o",
|
||||
"$ace_resource_dir/container_modal_window_defocus_close.o",
|
||||
"$ace_resource_dir/container_modal_window_defocus_maximize.o",
|
||||
"$ace_resource_dir/container_modal_window_defocus_minimize.o",
|
||||
"$ace_resource_dir/container_modal_window_defocus_recover.o",
|
||||
"$ace_resource_dir/container_modal_window_defocus_split_left.o",
|
||||
"$ace_resource_dir/container_modal_window_maximize.o",
|
||||
"$ace_resource_dir/container_modal_window_minimize.o",
|
||||
"$ace_resource_dir/container_modal_window_recover.o",
|
||||
@@ -106,6 +111,11 @@ source_set("binary_resource_mac_and_windows") {
|
||||
sources = [
|
||||
"$ace_resource_dir/close.c",
|
||||
"$ace_resource_dir/container_modal_window_close.c",
|
||||
"$ace_resource_dir/container_modal_window_defocus_close.c",
|
||||
"$ace_resource_dir/container_modal_window_defocus_maximize.c",
|
||||
"$ace_resource_dir/container_modal_window_defocus_minimize.c",
|
||||
"$ace_resource_dir/container_modal_window_defocus_recover.c",
|
||||
"$ace_resource_dir/container_modal_window_defocus_split_left.c",
|
||||
"$ace_resource_dir/container_modal_window_maximize.c",
|
||||
"$ace_resource_dir/container_modal_window_minimize.c",
|
||||
"$ace_resource_dir/container_modal_window_recover.c",
|
||||
@@ -165,6 +175,11 @@ action_foreach("objcopy_resource") {
|
||||
sources = [
|
||||
"binary/close.svg",
|
||||
"binary/container_modal_window_close.svg",
|
||||
"binary/container_modal_window_defocus_close.svg",
|
||||
"binary/container_modal_window_defocus_maximize.svg",
|
||||
"binary/container_modal_window_defocus_minimize.svg",
|
||||
"binary/container_modal_window_defocus_recover.svg",
|
||||
"binary/container_modal_window_defocus_split_left.svg",
|
||||
"binary/container_modal_window_maximize.svg",
|
||||
"binary/container_modal_window_minimize.svg",
|
||||
"binary/container_modal_window_recover.svg",
|
||||
@@ -246,6 +261,11 @@ action_foreach("objcopy_resource_mac_and_windows") {
|
||||
sources = [
|
||||
"binary/close.svg",
|
||||
"binary/container_modal_window_close.svg",
|
||||
"binary/container_modal_window_defocus_close.svg",
|
||||
"binary/container_modal_window_defocus_maximize.svg",
|
||||
"binary/container_modal_window_defocus_minimize.svg",
|
||||
"binary/container_modal_window_defocus_recover.svg",
|
||||
"binary/container_modal_window_defocus_split_left.svg",
|
||||
"binary/container_modal_window_maximize.svg",
|
||||
"binary/container_modal_window_minimize.svg",
|
||||
"binary/container_modal_window_recover.svg",
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 25.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{opacity:0.4;}
|
||||
.st1{fill-rule:evenodd;clip-rule:evenodd;}
|
||||
</style>
|
||||
<g id="ic_ohos_window_close" class="st0">
|
||||
<path id="Shape" class="st1" d="M8.8,16.2c-0.3,0.3-0.8,0.3-1.1,0c-0.3-0.3-0.3-0.8,0-1.1l3.2-3.2L7.8,8.8c-0.3-0.3-0.3-0.8,0-1.1
|
||||
s0.8-0.3,1.1,0l3.2,3.2l3.2-3.2c0.3-0.3,0.8-0.3,1.1,0c0.3,0.3,0.3,0.8,0,1.1L8.8,16.2z M13.6,12.5l2.7,2.7c0.3,0.3,0.3,0.8,0,1.1
|
||||
c-0.3,0.3-0.8,0.3-1.1,0l-2.7-2.7L13.6,12.5z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 826 B |
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 25.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{opacity:0.4;}
|
||||
</style>
|
||||
<g id="ic_ohos_window_full" class="st0">
|
||||
<path id="Path" d="M16.2,11.5c-0.4,0-0.7,0.3-0.7,0.6l0,0.1v3.2h-3.2c-0.4,0-0.7,0.3-0.7,0.6l0,0.1c0,0.4,0.3,0.7,0.6,0.7l0.1,0h4
|
||||
c0.4,0,0.7-0.3,0.7-0.6l0-0.1v-4C17,11.8,16.7,11.5,16.2,11.5z"/>
|
||||
<path id="Path_1_" d="M7.8,12.5c0.4,0,0.7-0.3,0.7-0.6l0-0.1V8.5h3.2c0.4,0,0.7-0.3,0.7-0.6l0-0.1c0-0.4-0.3-0.7-0.6-0.7l-0.1,0h-4
|
||||
C7.4,7,7.1,7.3,7,7.6l0,0.1v4C7,12.2,7.3,12.5,7.8,12.5z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 859 B |
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 25.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{opacity:0.4;}
|
||||
.st1{fill-rule:evenodd;clip-rule:evenodd;}
|
||||
</style>
|
||||
<g id="ic_ohos_window_minimize" class="st0">
|
||||
<path id="Rectangle" class="st1" d="M6.8,11.2h10.5c0.4,0,0.8,0.3,0.8,0.8l0,0c0,0.4-0.3,0.8-0.8,0.8H6.8C6.3,12.8,6,12.4,6,12l0,0
|
||||
C6,11.6,6.3,11.2,6.8,11.2z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 679 B |
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 25.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{opacity:0.4;}
|
||||
</style>
|
||||
<g id="ic_ohos_window_exitfull" class="st0">
|
||||
<path id="Path" d="M13.2,18c0.4,0,0.7-0.3,0.7-0.6l0-0.1V14h3.2c0.4,0,0.7-0.3,0.7-0.6l0-0.1c0-0.4-0.3-0.7-0.6-0.7l-0.1,0h-4
|
||||
c-0.4,0-0.7,0.3-0.7,0.6l0,0.1v4C12.5,17.7,12.8,18,13.2,18z"/>
|
||||
<path id="Path_1_" d="M10.8,6c-0.4,0-0.7,0.3-0.7,0.6l0,0.1V10H6.8c-0.4,0-0.7,0.3-0.7,0.6l0,0.1c0,0.4,0.3,0.7,0.6,0.7l0.1,0h4
|
||||
c0.4,0,0.7-0.3,0.7-0.6l0-0.1v-4C11.5,6.3,11.2,6,10.8,6z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 855 B |
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 25.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
|
||||
<style type="text/css">
|
||||
.st0{opacity:0.4;}
|
||||
</style>
|
||||
<g id="ic_ohos_window_split_left" class="st0">
|
||||
<path id="Path" d="M12,17H9c-1,0-1.4-0.1-1.8-0.3c-0.4-0.2-0.7-0.5-0.9-0.9C6.1,15.5,6,15.1,6,14.2L6,10c0-1,0.1-1.4,0.3-1.8
|
||||
c0.2-0.4,0.5-0.7,0.9-0.9C7.5,7.1,7.9,7,8.8,7L12,7V17z"/>
|
||||
<path id="Path_1_" d="M12.8,7H15c1,0,1.4,0.1,1.8,0.3c0.4,0.2,0.7,0.5,0.9,0.9C17.9,8.6,18,9,18,10v4c0,1-0.1,1.4-0.3,1.8
|
||||
s-0.5,0.7-0.9,0.9S16,17,15,17h-2.3v-1.5l2.4,0l0.3,0c0.1,0,0.2,0,0.2,0l0.2,0c0,0,0.1,0,0.1,0l0.1,0l0,0c0.1-0.1,0.2-0.1,0.3-0.3
|
||||
l0,0l0-0.1c0,0,0-0.1,0-0.1l0-0.2l0-0.1l0-0.2l0-0.3l0-4.2l0-0.3c0-0.1,0-0.2,0-0.2l0-0.2c0,0,0-0.1,0-0.1l0-0.1l0,0
|
||||
c-0.1-0.1-0.1-0.2-0.3-0.3l0,0l-0.1,0c0,0-0.1,0-0.1,0l-0.2,0l-0.1,0l-0.4,0l-2.4,0V7z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
@@ -300,6 +300,7 @@ extern uint8_t _binary_fa_black_clock_widget_second_png_end[];
|
||||
// The following parameters represent the beginning and end of the file.
|
||||
extern uint8_t _binary_ic_public_drawer_svg_start[];
|
||||
extern uint8_t _binary_ic_public_drawer_svg_end[];
|
||||
|
||||
// binary/container_modal_window_close.svg
|
||||
extern uint8_t _binary_container_modal_window_close_svg_start[];
|
||||
extern uint8_t _binary_container_modal_window_close_svg_end[];
|
||||
@@ -320,6 +321,26 @@ extern uint8_t _binary_container_modal_window_recover_svg_end[];
|
||||
extern uint8_t _binary_container_modal_window_split_left_svg_start[];
|
||||
extern uint8_t _binary_container_modal_window_split_left_svg_end[];
|
||||
|
||||
// binary/container_modal_window_defocus_close.svg
|
||||
extern uint8_t _binary_container_modal_window_defocus_close_svg_start[];
|
||||
extern uint8_t _binary_container_modal_window_defocus_close_svg_end[];
|
||||
|
||||
// binary/container_modal_window_defocus_maximize.svg
|
||||
extern uint8_t _binary_container_modal_window_defocus_maximize_svg_start[];
|
||||
extern uint8_t _binary_container_modal_window_defocus_maximize_svg_end[];
|
||||
|
||||
// binary/container_modal_window_defocus_minimize.svg
|
||||
extern uint8_t _binary_container_modal_window_defocus_minimize_svg_start[];
|
||||
extern uint8_t _binary_container_modal_window_defocus_minimize_svg_end[];
|
||||
|
||||
// binary/container_modal_window_defocus_recover.svg
|
||||
extern uint8_t _binary_container_modal_window_defocus_recover_svg_start[];
|
||||
extern uint8_t _binary_container_modal_window_defocus_recover_svg_end[];
|
||||
|
||||
// binary/container_modal_window_defocus_split_left.svg
|
||||
extern uint8_t _binary_container_modal_window_defocus_split_left_svg_start[];
|
||||
extern uint8_t _binary_container_modal_window_defocus_split_left_svg_end[];
|
||||
|
||||
namespace OHOS::Ace {
|
||||
namespace {
|
||||
|
||||
@@ -512,6 +533,26 @@ const uint8_t* InternalResource::GetResource(const ResourceId id, size_t& size)
|
||||
ResourceData(_binary_container_modal_window_split_left_svg_start,
|
||||
static_cast<size_t>(_binary_container_modal_window_split_left_svg_end -
|
||||
_binary_container_modal_window_split_left_svg_start)) },
|
||||
{ InternalResource::ResourceId::CONTAINER_MODAL_WINDOW_DEFOCUS_CLOSE,
|
||||
ResourceData(_binary_container_modal_window_defocus_close_svg_start,
|
||||
static_cast<size_t>(_binary_container_modal_window_defocus_close_svg_end -
|
||||
_binary_container_modal_window_defocus_close_svg_start)) },
|
||||
{ InternalResource::ResourceId::CONTAINER_MODAL_WINDOW_DEFOCUS_MAXIMIZE,
|
||||
ResourceData(_binary_container_modal_window_defocus_maximize_svg_start,
|
||||
static_cast<size_t>(_binary_container_modal_window_defocus_maximize_svg_end -
|
||||
_binary_container_modal_window_defocus_maximize_svg_start)) },
|
||||
{ InternalResource::ResourceId::CONTAINER_MODAL_WINDOW_DEFOCUS_MINIMIZE,
|
||||
ResourceData(_binary_container_modal_window_defocus_minimize_svg_start,
|
||||
static_cast<size_t>(_binary_container_modal_window_defocus_minimize_svg_end -
|
||||
_binary_container_modal_window_defocus_minimize_svg_start)) },
|
||||
{ InternalResource::ResourceId::CONTAINER_MODAL_WINDOW_DEFOCUS_RECOVER,
|
||||
ResourceData(_binary_container_modal_window_defocus_recover_svg_start,
|
||||
static_cast<size_t>(_binary_container_modal_window_defocus_recover_svg_end -
|
||||
_binary_container_modal_window_defocus_recover_svg_start)) },
|
||||
{ InternalResource::ResourceId::CONTAINER_MODAL_WINDOW_DEFOCUS_SPLIT_LEFT,
|
||||
ResourceData(_binary_container_modal_window_defocus_split_left_svg_start,
|
||||
static_cast<size_t>(_binary_container_modal_window_defocus_split_left_svg_end -
|
||||
_binary_container_modal_window_defocus_split_left_svg_start)) },
|
||||
};
|
||||
auto iter = RESOURCE_MAP.find(id);
|
||||
if (iter != RESOURCE_MAP.end()) {
|
||||
|
||||
@@ -81,6 +81,11 @@ public:
|
||||
CONTAINER_MODAL_WINDOW_MINIMIZE,
|
||||
CONTAINER_MODAL_WINDOW_RECOVER,
|
||||
CONTAINER_MODAL_WINDOW_SPLIT_LEFT,
|
||||
CONTAINER_MODAL_WINDOW_DEFOCUS_CLOSE,
|
||||
CONTAINER_MODAL_WINDOW_DEFOCUS_MAXIMIZE,
|
||||
CONTAINER_MODAL_WINDOW_DEFOCUS_MINIMIZE,
|
||||
CONTAINER_MODAL_WINDOW_DEFOCUS_RECOVER,
|
||||
CONTAINER_MODAL_WINDOW_DEFOCUS_SPLIT_LEFT,
|
||||
SVG_END = 20000,
|
||||
|
||||
// 20001 - 30000 is reserved for i18n resource.
|
||||
|
||||
@@ -320,6 +320,26 @@ extern uint8_t* _binary_container_modal_window_recover_svg_end;
|
||||
extern uint8_t _binary_container_modal_window_split_left_svg_start[];
|
||||
extern uint8_t* _binary_container_modal_window_split_left_svg_end;
|
||||
|
||||
// binary/container_modal_window_defocus_close.svg
|
||||
extern uint8_t _binary_container_modal_window_defocus_close_svg_start[];
|
||||
extern uint8_t _binary_container_modal_window_defocus_close_svg_end[];
|
||||
|
||||
// binary/container_modal_window_defocus_maximize.svg
|
||||
extern uint8_t _binary_container_modal_window_defocus_maximize_svg_start[];
|
||||
extern uint8_t _binary_container_modal_window_defocus_maximize_svg_end[];
|
||||
|
||||
// binary/container_modal_window_defocus_minimize.svg
|
||||
extern uint8_t _binary_container_modal_window_defocus_minimize_svg_start[];
|
||||
extern uint8_t _binary_container_modal_window_defocus_minimize_svg_end[];
|
||||
|
||||
// binary/container_modal_window_defocus_recover.svg
|
||||
extern uint8_t _binary_container_modal_window_defocus_recover_svg_start[];
|
||||
extern uint8_t _binary_container_modal_window_defocus_recover_svg_end[];
|
||||
|
||||
// binary/container_modal_window_defocus_split_left.svg
|
||||
extern uint8_t _binary_container_modal_window_defocus_split_left_svg_start[];
|
||||
extern uint8_t _binary_container_modal_window_defocus_split_left_svg_end[];
|
||||
|
||||
namespace OHOS::Ace {
|
||||
namespace {
|
||||
|
||||
@@ -512,6 +532,26 @@ const uint8_t* InternalResource::GetResource(const ResourceId id, size_t& size)
|
||||
ResourceData(_binary_container_modal_window_split_left_svg_start,
|
||||
static_cast<size_t>(_binary_container_modal_window_split_left_svg_end -
|
||||
_binary_container_modal_window_split_left_svg_start)) },
|
||||
{ InternalResource::ResourceId::CONTAINER_MODAL_WINDOW_DEFOCUS_CLOSE,
|
||||
ResourceData(_binary_container_modal_window_defocus_close_svg_start,
|
||||
static_cast<size_t>(_binary_container_modal_window_defocus_close_svg_end -
|
||||
_binary_container_modal_window_defocus_close_svg_start)) },
|
||||
{ InternalResource::ResourceId::CONTAINER_MODAL_WINDOW_DEFOCUS_MAXIMIZE,
|
||||
ResourceData(_binary_container_modal_window_defocus_maximize_svg_start,
|
||||
static_cast<size_t>(_binary_container_modal_window_defocus_maximize_svg_end -
|
||||
_binary_container_modal_window_defocus_maximize_svg_start)) },
|
||||
{ InternalResource::ResourceId::CONTAINER_MODAL_WINDOW_DEFOCUS_MINIMIZE,
|
||||
ResourceData(_binary_container_modal_window_defocus_minimize_svg_start,
|
||||
static_cast<size_t>(_binary_container_modal_window_defocus_minimize_svg_end -
|
||||
_binary_container_modal_window_defocus_minimize_svg_start)) },
|
||||
{ InternalResource::ResourceId::CONTAINER_MODAL_WINDOW_DEFOCUS_RECOVER,
|
||||
ResourceData(_binary_container_modal_window_defocus_recover_svg_start,
|
||||
static_cast<size_t>(_binary_container_modal_window_defocus_recover_svg_end -
|
||||
_binary_container_modal_window_defocus_recover_svg_start)) },
|
||||
{ InternalResource::ResourceId::CONTAINER_MODAL_WINDOW_DEFOCUS_SPLIT_LEFT,
|
||||
ResourceData(_binary_container_modal_window_defocus_split_left_svg_start,
|
||||
static_cast<size_t>(_binary_container_modal_window_defocus_split_left_svg_end -
|
||||
_binary_container_modal_window_defocus_split_left_svg_start)) },
|
||||
};
|
||||
auto iter = RESOURCE_MAP.find(id);
|
||||
if (iter != RESOURCE_MAP.end()) {
|
||||
|
||||
@@ -51,7 +51,7 @@ RefPtr<Component> ContainerModalComponent::BuildTitle()
|
||||
// build title box
|
||||
auto titleBox = AceType::MakeRefPtr<BoxComponent>();
|
||||
titleBox->SetHeight(CONTAINER_TITLE_HEIGHT);
|
||||
titleChildrenRow_ =
|
||||
auto titleChildrenRow =
|
||||
AceType::MakeRefPtr<RowComponent>(FlexAlign::FLEX_START, FlexAlign::CENTER, BuildTitleChildren(false));
|
||||
|
||||
// handle mouse move
|
||||
@@ -69,7 +69,7 @@ RefPtr<Component> ContainerModalComponent::BuildTitle()
|
||||
context->FireWindowStartMoveCallBack();
|
||||
}
|
||||
});
|
||||
titleBox->SetChild(titleChildrenRow_);
|
||||
titleBox->SetChild(titleChildrenRow);
|
||||
auto display = AceType::MakeRefPtr<DisplayComponent>(titleBox);
|
||||
return display;
|
||||
}
|
||||
@@ -84,9 +84,9 @@ RefPtr<Component> ContainerModalComponent::BuildFloatingTitle()
|
||||
titleBox->SetHeight(CONTAINER_TITLE_HEIGHT);
|
||||
titleBox->SetBackDecoration(titleDecoration);
|
||||
|
||||
floatingTitleChildrenRow_ =
|
||||
auto floatingTitleChildrenRow =
|
||||
AceType::MakeRefPtr<RowComponent>(FlexAlign::FLEX_START, FlexAlign::CENTER, BuildTitleChildren(true));
|
||||
titleBox->SetChild(floatingTitleChildrenRow_);
|
||||
titleBox->SetChild(floatingTitleChildrenRow);
|
||||
auto tween = AceType::MakeRefPtr<TweenComponent>("ContainerModal", titleBox);
|
||||
return tween;
|
||||
}
|
||||
@@ -108,7 +108,7 @@ RefPtr<Component> ContainerModalComponent::BuildContent()
|
||||
}
|
||||
|
||||
RefPtr<ButtonComponent> ContainerModalComponent::BuildControlButton(
|
||||
InternalResource::ResourceId icon, std::function<void()>&& clickCallback)
|
||||
InternalResource::ResourceId icon, std::function<void()>&& clickCallback, bool isFocus)
|
||||
{
|
||||
auto image = AceType::MakeRefPtr<ImageComponent>(icon);
|
||||
image->SetWidth(TITLE_ICON_SIZE);
|
||||
@@ -120,7 +120,7 @@ RefPtr<ButtonComponent> ContainerModalComponent::BuildControlButton(
|
||||
button->SetWidth(TITLE_BUTTON_SIZE);
|
||||
button->SetHeight(TITLE_BUTTON_SIZE);
|
||||
button->SetType(ButtonType::CIRCLE);
|
||||
button->SetBackgroundColor(TITLE_BUTTON_BACKGROUND_COLOR);
|
||||
button->SetBackgroundColor(isFocus ? TITLE_BUTTON_BACKGROUND_COLOR : TITLE_BUTTON_BACKGROUND_COLOR_LOST_FOCUS);
|
||||
button->SetClickedColor(TITLE_BUTTON_CLICKED_COLOR);
|
||||
button->SetClickFunction(std::move(clickCallback));
|
||||
return button;
|
||||
@@ -170,7 +170,7 @@ void ContainerModalComponent::BuildInnerChild()
|
||||
SetChild(containerBox);
|
||||
}
|
||||
|
||||
std::list<RefPtr<Component>> ContainerModalComponent::BuildTitleChildren(bool isFloating)
|
||||
std::list<RefPtr<Component>> ContainerModalComponent::BuildTitleChildren(bool isFloating, bool isFocus)
|
||||
{
|
||||
// title icon
|
||||
if (!titleIcon_) {
|
||||
@@ -182,57 +182,64 @@ std::list<RefPtr<Component>> ContainerModalComponent::BuildTitleChildren(bool is
|
||||
// title text
|
||||
if (!titleLabel_) {
|
||||
titleLabel_ = AceType::MakeRefPtr<TextComponent>("");
|
||||
TextStyle style;
|
||||
style.SetFontSize(TITLE_TEXT_FONT_SIZE);
|
||||
style.SetTextColor(TITLE_TEXT_COLOR);
|
||||
style.SetFontWeight(FontWeight::W500);
|
||||
style.SetAllowScale(false);
|
||||
style.SetTextOverflow(TextOverflow::ELLIPSIS);
|
||||
titleLabel_->SetTextStyle(style);
|
||||
titleLabel_->SetFlexWeight(1.0);
|
||||
}
|
||||
TextStyle style;
|
||||
style.SetFontSize(TITLE_TEXT_FONT_SIZE);
|
||||
style.SetTextColor(isFocus ? TITLE_TEXT_COLOR : TITLE_TEXT_COLOR_LOST_FOCUS);
|
||||
style.SetFontWeight(FontWeight::W500);
|
||||
style.SetAllowScale(false);
|
||||
style.SetTextOverflow(TextOverflow::ELLIPSIS);
|
||||
titleLabel_->SetTextStyle(style);
|
||||
titleLabel_->SetFlexWeight(1.0);
|
||||
|
||||
// title control button
|
||||
auto contextWptr = context_;
|
||||
auto titleLeftSplitButton =
|
||||
BuildControlButton(InternalResource::ResourceId::CONTAINER_MODAL_WINDOW_SPLIT_LEFT, [contextWptr]() {
|
||||
auto leftSplitButton = isFocus ? InternalResource::ResourceId::CONTAINER_MODAL_WINDOW_SPLIT_LEFT
|
||||
: InternalResource::ResourceId::CONTAINER_MODAL_WINDOW_DEFOCUS_SPLIT_LEFT;
|
||||
auto titleLeftSplitButton = BuildControlButton(leftSplitButton, [contextWptr]() {
|
||||
LOGI("left split button clicked");
|
||||
auto context = contextWptr.Upgrade();
|
||||
if (context) {
|
||||
context->FireWindowSplitCallBack();
|
||||
}
|
||||
});
|
||||
auto buttonResourceId = isFloating ? InternalResource::ResourceId::CONTAINER_MODAL_WINDOW_RECOVER
|
||||
}, isFocus);
|
||||
auto maxRecoverButton = isFloating ? InternalResource::ResourceId::CONTAINER_MODAL_WINDOW_RECOVER
|
||||
: InternalResource::ResourceId::CONTAINER_MODAL_WINDOW_MAXIMIZE;
|
||||
auto titleMaximizeRecoverButton = BuildControlButton(buttonResourceId, [contextWptr]() {
|
||||
auto context = contextWptr.Upgrade();
|
||||
if (context) {
|
||||
auto mode = context->FireWindowGetModeCallBack();
|
||||
if (mode == WindowMode::WINDOW_MODE_FULLSCREEN) {
|
||||
LOGI("recover button clicked");
|
||||
context->FireWindowRecoverCallBack();
|
||||
} else {
|
||||
LOGI("maximize button clicked");
|
||||
context->FireWindowMaximizeCallBack();
|
||||
if (!isFocus) {
|
||||
maxRecoverButton = isFloating ? InternalResource::ResourceId::CONTAINER_MODAL_WINDOW_DEFOCUS_RECOVER
|
||||
: InternalResource::ResourceId::CONTAINER_MODAL_WINDOW_DEFOCUS_MAXIMIZE;
|
||||
}
|
||||
auto titleMaximizeRecoverButton = BuildControlButton(maxRecoverButton, [contextWptr]() {
|
||||
auto context = contextWptr.Upgrade();
|
||||
if (context) {
|
||||
auto mode = context->FireWindowGetModeCallBack();
|
||||
if (mode == WindowMode::WINDOW_MODE_FULLSCREEN) {
|
||||
LOGI("recover button clicked");
|
||||
context->FireWindowRecoverCallBack();
|
||||
} else {
|
||||
LOGI("maximize button clicked");
|
||||
context->FireWindowMaximizeCallBack();
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
auto titleMinimizeButton =
|
||||
BuildControlButton(InternalResource::ResourceId::CONTAINER_MODAL_WINDOW_MINIMIZE, [contextWptr]() {
|
||||
}, isFocus);
|
||||
auto minimizeButton = isFocus ? InternalResource::ResourceId::CONTAINER_MODAL_WINDOW_MINIMIZE
|
||||
: InternalResource::ResourceId::CONTAINER_MODAL_WINDOW_DEFOCUS_MINIMIZE;
|
||||
auto titleMinimizeButton = BuildControlButton(minimizeButton, [contextWptr]() {
|
||||
auto context = contextWptr.Upgrade();
|
||||
if (context) {
|
||||
LOGI("minimize button clicked");
|
||||
context->FireWindowMinimizeCallBack();
|
||||
}
|
||||
});
|
||||
auto titleCloseButton =
|
||||
BuildControlButton(InternalResource::ResourceId::CONTAINER_MODAL_WINDOW_CLOSE, [contextWptr]() {
|
||||
}, isFocus);
|
||||
auto closeButton = isFocus ? InternalResource::ResourceId::CONTAINER_MODAL_WINDOW_CLOSE
|
||||
: InternalResource::ResourceId::CONTAINER_MODAL_WINDOW_DEFOCUS_CLOSE;
|
||||
auto titleCloseButton = BuildControlButton(closeButton, [contextWptr]() {
|
||||
auto context = contextWptr.Upgrade();
|
||||
if (context) {
|
||||
LOGI("close button clicked");
|
||||
context->FireWindowCloseCallBack();
|
||||
}
|
||||
});
|
||||
}, isFocus);
|
||||
std::list<RefPtr<Component>> titleChildren;
|
||||
titleChildren.emplace_back(SetPadding(titleIcon_, TITLE_PADDING_START, TITLE_ELEMENT_MARGIN_HORIZONTAL));
|
||||
titleChildren.emplace_back(titleLabel_);
|
||||
|
||||
@@ -38,6 +38,7 @@ public:
|
||||
RefPtr<Element> CreateElement() override;
|
||||
RefPtr<RenderNode> CreateRenderNode() override;
|
||||
void BuildInnerChild();
|
||||
std::list<RefPtr<Component>> BuildTitleChildren(bool isFloating, bool isFocus = true);
|
||||
|
||||
RefPtr<ImageComponent> GetTitleIcon() const
|
||||
{
|
||||
@@ -49,31 +50,18 @@ public:
|
||||
return titleLabel_;
|
||||
}
|
||||
|
||||
RefPtr<RowComponent> GetTitleChildrenRow() const
|
||||
{
|
||||
return titleChildrenRow_;
|
||||
}
|
||||
|
||||
RefPtr<RowComponent> GetFloatingTitleChildrenRow() const
|
||||
{
|
||||
return floatingTitleChildrenRow_;
|
||||
}
|
||||
|
||||
private:
|
||||
RefPtr<Component> BuildTitle();
|
||||
RefPtr<Component> BuildFloatingTitle();
|
||||
RefPtr<Component> BuildContent();
|
||||
RefPtr<ButtonComponent> BuildControlButton(
|
||||
InternalResource::ResourceId icon, std::function<void()>&& clickCallback);
|
||||
std::list<RefPtr<Component>> BuildTitleChildren(bool isFloating);
|
||||
InternalResource::ResourceId icon, std::function<void()>&& clickCallback, bool isFocus);
|
||||
static RefPtr<Component> SetPadding(
|
||||
const RefPtr<Component>& component, const Dimension& leftPadding, const Dimension& rightPadding);
|
||||
|
||||
WeakPtr<PipelineContext> context_;
|
||||
RefPtr<ImageComponent> titleIcon_;
|
||||
RefPtr<TextComponent> titleLabel_;
|
||||
RefPtr<RowComponent> titleChildrenRow_;
|
||||
RefPtr<RowComponent> floatingTitleChildrenRow_;
|
||||
};
|
||||
|
||||
} // namespace OHOS::Ace
|
||||
|
||||
@@ -31,10 +31,14 @@ const Dimension TITLE_BUTTON_SIZE = 24.0_vp;
|
||||
const Dimension TITLE_TEXT_FONT_SIZE = 16.0_fp;
|
||||
const Dimension CONTENT_PADDING = 4.0_vp;
|
||||
const Color CONTAINER_BACKGROUND_COLOR = Color(0xf2e6e7ed);
|
||||
const Color CONTAINER_BACKGROUND_COLOR_LOST_FOCUS = Color(0xfff2f2f2);
|
||||
const Color CONTAINER_BORDER_COLOR = Color(0x33000000);
|
||||
const Color TITLE_TEXT_COLOR = Color(0xe5000000);
|
||||
const Color CONTAINER_BORDER_COLOR_LOST_FOCUS = Color(0x19000000);
|
||||
const Color TITLE_TEXT_COLOR = Color(0xff000000);
|
||||
const Color TITLE_TEXT_COLOR_LOST_FOCUS = Color(0x66000000);
|
||||
const Color CONTENT_BACKGROUND_COLOR = Color(0xffffffff);
|
||||
const Color TITLE_BUTTON_BACKGROUND_COLOR = Color(0x19000000);
|
||||
const Color TITLE_BUTTON_BACKGROUND_COLOR_LOST_FOCUS = Color(0x0a000000);
|
||||
const Color TITLE_BUTTON_CLICKED_COLOR = Color(0x33000000);
|
||||
|
||||
} // namespace OHOS::Ace
|
||||
|
||||
@@ -29,9 +29,9 @@ namespace {
|
||||
constexpr uint32_t COLUMN_CHILD_NUM = 2;
|
||||
constexpr uint32_t SPLIT_BUTTON_POSITION = 2;
|
||||
constexpr uint32_t BLUR_WINDOW_RADIUS = 100;
|
||||
constexpr uint32_t TITLE_POPUP_TIME = 200; // 200ms
|
||||
constexpr double MOUSE_MOVE_POPUP_DISTANCE = 5.0; // 5.0px
|
||||
constexpr double TITLE_POPUP_DISTANCE = 37.0; // 37vp height of title
|
||||
constexpr uint32_t TITLE_POPUP_TIME = 200; // 200ms
|
||||
constexpr double MOUSE_MOVE_POPUP_DISTANCE = 5.0; // 5.0px
|
||||
constexpr double TITLE_POPUP_DISTANCE = 37.0; // 37vp height of title
|
||||
|
||||
} // namespace
|
||||
|
||||
@@ -113,6 +113,12 @@ void ContainerModalElement::ShowTitle(bool isShow)
|
||||
LOGE("ContainerModalElement showTitle failed, container box element is null!");
|
||||
return;
|
||||
}
|
||||
auto context = context_.Upgrade();
|
||||
if (!context) {
|
||||
LOGE("ContainerModalElement showTitle failed, context is null.");
|
||||
return;
|
||||
}
|
||||
windowMode_ = context->FireWindowGetModeCallBack();
|
||||
|
||||
// full screen need to hide border and padding.
|
||||
auto containerRenderBox = AceType::DynamicCast<RenderBox>(containerBox->GetRenderNode());
|
||||
@@ -199,6 +205,17 @@ void ContainerModalElement::PerformBuild()
|
||||
LOGE("ContainerModalElement PerformBuild failed, stack element is null!");
|
||||
return;
|
||||
}
|
||||
auto column = AceType::DynamicCast<ColumnElement>(stackElement->GetFirstChild());
|
||||
if (!column || column->GetChildren().size() != COLUMN_CHILD_NUM) {
|
||||
// column should have 2 children, title and content.
|
||||
LOGE("ContainerModalElement PerformBuild failed, column element is null or children size error!");
|
||||
return;
|
||||
}
|
||||
|
||||
auto titleDisplay = AceType::DynamicCast<DisplayElement>(column->GetFirstChild());
|
||||
if (titleDisplay) {
|
||||
titleBox_ = AceType::DynamicCast<BoxElement>(titleDisplay->GetFirstChild());
|
||||
}
|
||||
|
||||
auto tween = AceType::DynamicCast<TweenElement>(stackElement->GetLastChild());
|
||||
if (!tween) {
|
||||
@@ -219,9 +236,9 @@ void ContainerModalElement::PerformBuild()
|
||||
}
|
||||
|
||||
// The first time it starts up, it needs to hide title if mode as follows.
|
||||
auto mode = context_.Upgrade()->FireWindowGetModeCallBack();
|
||||
if (mode == WindowMode::WINDOW_MODE_FULLSCREEN || mode == WindowMode::WINDOW_MODE_SPLIT_PRIMARY ||
|
||||
mode == WindowMode::WINDOW_MODE_SPLIT_SECONDARY) {
|
||||
windowMode_ = context_.Upgrade()->FireWindowGetModeCallBack();
|
||||
if (windowMode_ == WindowMode::WINDOW_MODE_FULLSCREEN || windowMode_ == WindowMode::WINDOW_MODE_SPLIT_PRIMARY ||
|
||||
windowMode_ == WindowMode::WINDOW_MODE_SPLIT_SECONDARY) {
|
||||
ShowTitle(false);
|
||||
}
|
||||
}
|
||||
@@ -230,14 +247,12 @@ void ContainerModalElement::Update()
|
||||
{
|
||||
RenderElement::Update();
|
||||
|
||||
const auto container = AceType::DynamicCast<ContainerModalComponent>(component_);
|
||||
if (!container) {
|
||||
containerModalComponent_ = AceType::DynamicCast<ContainerModalComponent>(component_);
|
||||
if (!containerModalComponent_) {
|
||||
LOGE("ContainerModalElement update failed, container modal component is null.");
|
||||
return;
|
||||
}
|
||||
titleChildrenRow_ = container->GetTitleChildrenRow();
|
||||
floatingTitleChildrenRow_ = container->GetFloatingTitleChildrenRow();
|
||||
auto containerBox = AceType::DynamicCast<BoxComponent>(container->GetChild());
|
||||
auto containerBox = AceType::DynamicCast<BoxComponent>(containerModalComponent_->GetChild());
|
||||
if (!containerBox) {
|
||||
LOGE("ContainerModalElement update failed, container box component is null.");
|
||||
return;
|
||||
@@ -300,14 +315,12 @@ void ContainerModalElement::Update()
|
||||
|
||||
bool ContainerModalElement::CanShowFloatingTitle()
|
||||
{
|
||||
auto context = context_.Upgrade();
|
||||
if (!context || !floatingTitleDisplay_ || !controller_) {
|
||||
LOGI("Show floating title failed, context, floatingTitleDisplay or controller is null.");
|
||||
if (!floatingTitleDisplay_ || !controller_) {
|
||||
LOGI("Show floating title failed, floatingTitleDisplay or controller is null.");
|
||||
return false;
|
||||
}
|
||||
auto mode = context->FireWindowGetModeCallBack();
|
||||
if (mode != WindowMode::WINDOW_MODE_FULLSCREEN && mode != WindowMode::WINDOW_MODE_SPLIT_PRIMARY &&
|
||||
mode != WindowMode::WINDOW_MODE_SPLIT_SECONDARY) {
|
||||
if (windowMode_ != WindowMode::WINDOW_MODE_FULLSCREEN && windowMode_ != WindowMode::WINDOW_MODE_SPLIT_PRIMARY &&
|
||||
windowMode_ != WindowMode::WINDOW_MODE_SPLIT_SECONDARY) {
|
||||
LOGI("Window is not full screen or split screen, can not show floating title.");
|
||||
return false;
|
||||
}
|
||||
@@ -331,17 +344,21 @@ bool ContainerModalElement::CanHideFloatingTitle()
|
||||
return true;
|
||||
}
|
||||
|
||||
void ContainerModalElement::ChangeFloatingTitleIcon()
|
||||
void ContainerModalElement::ChangeFloatingTitleIcon(bool isFocus)
|
||||
{
|
||||
if (!floatingTitleBox_ || !titleChildrenRow_ || !floatingTitleChildrenRow_) {
|
||||
if (!floatingTitleBox_ || !containerModalComponent_) {
|
||||
LOGE("ChangeFloatingTitleIcon failed.");
|
||||
return;
|
||||
}
|
||||
auto context = context_.Upgrade();
|
||||
if (!context) {
|
||||
LOGE("ChangeFloatingTitleIcon failed, context is null.");
|
||||
auto renderFloatingTitleBox = AceType::DynamicCast<RenderBox>(floatingTitleBox_->GetRenderNode());
|
||||
if (!renderFloatingTitleBox) {
|
||||
LOGE("ChangeFloatingTitleIcon failed, render floating title box is null.");
|
||||
return;
|
||||
}
|
||||
auto backDecoration = renderFloatingTitleBox->GetBackDecoration();
|
||||
backDecoration->SetBackgroundColor(isFocus ? CONTAINER_BACKGROUND_COLOR : CONTAINER_BACKGROUND_COLOR_LOST_FOCUS);
|
||||
renderFloatingTitleBox->SetBackDecoration(backDecoration);
|
||||
|
||||
auto rowElement = AceType::DynamicCast<RowElement>(floatingTitleBox_->GetFirstChild());
|
||||
if (!rowElement) {
|
||||
LOGE("ChangeFloatingTitleIcon failed, row element is null.");
|
||||
@@ -356,16 +373,35 @@ void ContainerModalElement::ChangeFloatingTitleIcon()
|
||||
std::advance(iterator, SPLIT_BUTTON_POSITION);
|
||||
auto splitButton = AceType::DynamicCast<RenderPadding>(*iterator);
|
||||
|
||||
auto mode = context->FireWindowGetModeCallBack();
|
||||
if (mode == WindowMode::WINDOW_MODE_FULLSCREEN) {
|
||||
rowElement->SetUpdateComponent(floatingTitleChildrenRow_);
|
||||
if (windowMode_ == WindowMode::WINDOW_MODE_FULLSCREEN) {
|
||||
auto floatingTitleChildrenRow = AceType::MakeRefPtr<RowComponent>(
|
||||
FlexAlign::FLEX_START, FlexAlign::CENTER, containerModalComponent_->BuildTitleChildren(true, isFocus));
|
||||
rowElement->SetUpdateComponent(floatingTitleChildrenRow);
|
||||
splitButton->SetHidden(false);
|
||||
} else {
|
||||
rowElement->SetUpdateComponent(titleChildrenRow_);
|
||||
auto titleChildrenRow = AceType::MakeRefPtr<RowComponent>(
|
||||
FlexAlign::FLEX_START, FlexAlign::CENTER, containerModalComponent_->BuildTitleChildren(false, isFocus));
|
||||
rowElement->SetUpdateComponent(titleChildrenRow);
|
||||
splitButton->SetHidden(true);
|
||||
}
|
||||
}
|
||||
|
||||
void ContainerModalElement::ChangeTitleIcon(bool isFocus)
|
||||
{
|
||||
if (!titleBox_ || !containerModalComponent_) {
|
||||
LOGE("ChangeTitleIcon failed.");
|
||||
return;
|
||||
}
|
||||
auto rowElement = AceType::DynamicCast<RowElement>(titleBox_->GetFirstChild());
|
||||
if (!rowElement) {
|
||||
LOGE("ChangeTitleIcon failed, row element is null.");
|
||||
return;
|
||||
}
|
||||
auto titleChildrenRow = AceType::MakeRefPtr<RowComponent>(
|
||||
FlexAlign::FLEX_START, FlexAlign::CENTER, containerModalComponent_->BuildTitleChildren(false, isFocus));
|
||||
rowElement->SetUpdateComponent(titleChildrenRow);
|
||||
}
|
||||
|
||||
void ContainerModalElement::BlurWindow(bool isBlur)
|
||||
{
|
||||
auto containerBox = AceType::DynamicCast<BoxElement>(GetFirstChild());
|
||||
@@ -387,4 +423,30 @@ void ContainerModalElement::BlurWindow(bool isBlur)
|
||||
}
|
||||
}
|
||||
|
||||
void ContainerModalElement::WindowFocus(bool isFocus)
|
||||
{
|
||||
auto containerBox = AceType::DynamicCast<BoxElement>(GetFirstChild());
|
||||
if (!containerBox) {
|
||||
LOGE("ContainerModalElement WindowFocus failed, container box element is null!");
|
||||
return;
|
||||
}
|
||||
|
||||
auto containerRenderBox = AceType::DynamicCast<RenderBox>(containerBox->GetRenderNode());
|
||||
if (containerRenderBox) {
|
||||
auto containerDecoration = containerRenderBox->GetBackDecoration();
|
||||
containerDecoration->SetBackgroundColor(
|
||||
isFocus ? CONTAINER_BACKGROUND_COLOR : CONTAINER_BACKGROUND_COLOR_LOST_FOCUS);
|
||||
auto border = containerDecoration->GetBorder();
|
||||
border.SetColor(isFocus ? CONTAINER_BORDER_COLOR : CONTAINER_BORDER_COLOR_LOST_FOCUS);
|
||||
containerDecoration->SetBorder(border);
|
||||
containerRenderBox->SetBackDecoration(containerDecoration);
|
||||
}
|
||||
if (windowMode_ == WindowMode::WINDOW_MODE_FULLSCREEN || windowMode_ == WindowMode::WINDOW_MODE_SPLIT_PRIMARY ||
|
||||
windowMode_ == WindowMode::WINDOW_MODE_SPLIT_SECONDARY) {
|
||||
ChangeFloatingTitleIcon(isFocus);
|
||||
} else {
|
||||
ChangeTitleIcon(isFocus);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace OHOS::Ace
|
||||
@@ -16,6 +16,7 @@
|
||||
#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CONTAINER_MODAL_CONTAINER_MODAL_ELEMENT_H
|
||||
#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CONTAINER_MODAL_CONTAINER_MODAL_ELEMENT_H
|
||||
|
||||
#include "core/components/container_modal/container_modal_component.h"
|
||||
#include "core/components/flex/flex_component.h"
|
||||
#include "core/components/overlay/overlay_element.h"
|
||||
#include "core/components/stage/stage_element.h"
|
||||
@@ -31,6 +32,7 @@ public:
|
||||
RefPtr<StageElement> GetStageElement() const;
|
||||
void ShowTitle(bool isShow);
|
||||
void BlurWindow(bool isBlur);
|
||||
void WindowFocus(bool isFocus);
|
||||
void Update() override;
|
||||
void PerformBuild() override;
|
||||
|
||||
@@ -38,12 +40,14 @@ private:
|
||||
RefPtr<StackElement> GetStackElement() const;
|
||||
bool CanShowFloatingTitle();
|
||||
bool CanHideFloatingTitle();
|
||||
void ChangeFloatingTitleIcon();
|
||||
void ChangeFloatingTitleIcon(bool isFocus = true);
|
||||
void ChangeTitleIcon(bool isFocus = true);
|
||||
WindowMode windowMode_;
|
||||
RefPtr<Animator> controller_;
|
||||
RefPtr<RenderDisplay> floatingTitleDisplay_;
|
||||
RefPtr<BoxElement> floatingTitleBox_;
|
||||
RefPtr<RowComponent> titleChildrenRow_;
|
||||
RefPtr<RowComponent> floatingTitleChildrenRow_;
|
||||
RefPtr<BoxElement> titleBox_;
|
||||
RefPtr<ContainerModalComponent> containerModalComponent_;
|
||||
float density_ = 1.0f;
|
||||
};
|
||||
|
||||
|
||||
@@ -628,7 +628,6 @@ void PipelineContext::FlushRender()
|
||||
if (FrameReport::GetInstance().GetEnable()) {
|
||||
FrameReport::GetInstance().EndFlushRender();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void PipelineContext::FlushRenderFinish()
|
||||
@@ -2764,6 +2763,22 @@ void PipelineContext::RootLostFocus() const
|
||||
}
|
||||
}
|
||||
|
||||
void PipelineContext::WindowFocus(bool isFocus) const
|
||||
{
|
||||
if (windowModal_ != WindowModal::CONTAINER_MODAL) {
|
||||
LOGW("WindowFocus failed, Window modal is not container.");
|
||||
return;
|
||||
}
|
||||
if (!rootElement_) {
|
||||
LOGW("WindowFocus failed, rootElement_ is null.");
|
||||
return;
|
||||
}
|
||||
auto containerModal = AceType::DynamicCast<ContainerModalElement>(rootElement_->GetFirstChild());
|
||||
if (containerModal) {
|
||||
containerModal->WindowFocus(isFocus);
|
||||
}
|
||||
}
|
||||
|
||||
void PipelineContext::AddPageUpdateTask(std::function<void()>&& task, bool directExecute)
|
||||
{
|
||||
CHECK_RUN_ON(UI);
|
||||
|
||||
@@ -588,6 +588,8 @@ public:
|
||||
|
||||
void FlushFocus();
|
||||
|
||||
void WindowFocus(bool isFocus) const;
|
||||
|
||||
void SetIsRightToLeft(bool isRightToLeft)
|
||||
{
|
||||
isRightToLeft_ = isRightToLeft;
|
||||
|
||||
Reference in New Issue
Block a user