43b24b49创建于 2025年5月21日历史提交
/*

 * Copyright (c) 2023 Huawei Device Co., Ltd.

 * Licensed under the Apache License, Version 2.0 (the "License");

 * you may not use this file except in compliance with the License.

 * You may obtain a copy of the License at,

 *

 *     http://www.apache.org/licenses/LICENSE-2.0

 *

 * Unless required by applicable law or agreed to in writing, software,

 * distributed under the License is distributed on an "AS IS" BASIS,

 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

 * See the License for the specific language governing permissions and

 * limitations under the License.

 */



#include "display_lite.h"



#include <cstdint>

#include <new>

#include <refbase.h>



#include "class_var_definition.h"

#include "display_info.h"

#include "display_manager_adapter_lite.h"

#include "dm_common.h"

#include "singleton_container.h"

#include "window_manager_hilog.h"



namespace OHOS::Rosen {

class DisplayLite::Impl : public RefBase {

public:

    Impl(const std::string& name, sptr<DisplayInfo> info)

    {

        displayInfo_ = info;

        name_= name;

    }

    ~Impl() = default;

    DEFINE_VAR_FUNC_GET_SET_WITH_LOCK(sptr<DisplayInfo>, DisplayInfo, displayInfo);

    DEFINE_VAR_FUNC_GET_SET(std::string, Name, name);

};



DisplayLite::DisplayLite(const std::string& name, sptr<DisplayInfo> info)

    : pImpl_(new Impl(name, info))

{

}



DisplayLite::~DisplayLite()

{

}



DisplayId DisplayLite::GetId() const

{

    if (pImpl_ == nullptr || pImpl_->GetDisplayInfo() == nullptr) {

        TLOGE(WmsLogTag::DMS, "pImpl_ or pImpl_->GetDisplayInfo is nullptr");

        return DisplayId(0);

    }

    return pImpl_->GetDisplayInfo()->GetDisplayId();

}



sptr<DisplayInfo> DisplayLite::GetDisplayInfo() const

{

    UpdateDisplayInfo();

    if (pImpl_ == nullptr || pImpl_->GetDisplayInfo() == nullptr) {

        TLOGE(WmsLogTag::DMS, "pImpl_ or pImpl_->GetDisplayInfo is nullptr");

        return nullptr;

    }

    return pImpl_->GetDisplayInfo();

}



int32_t DisplayLite::GetWidth() const

{

    UpdateDisplayInfo();

    if (pImpl_ == nullptr || pImpl_->GetDisplayInfo() == nullptr) {

        TLOGE(WmsLogTag::DMS, "pImpl_ or pImpl_->GetDisplayInfo is nullptr");

        return 0;

    }

    return pImpl_->GetDisplayInfo()->GetWidth();

}



int32_t DisplayLite::GetHeight() const

{

    UpdateDisplayInfo();

    if (pImpl_ == nullptr || pImpl_->GetDisplayInfo() == nullptr) {

        TLOGE(WmsLogTag::DMS, "pImpl_ or pImpl_->GetDisplayInfo is nullptr");

        return 0;

    }

    return pImpl_->GetDisplayInfo()->GetHeight();

}



sptr<CutoutInfo> DisplayLite::GetCutoutInfo() const

{

    return SingletonContainer::Get<DisplayManagerAdapterLite>().GetCutoutInfo(GetId());

}



void DisplayLite::UpdateDisplayInfo() const

{

    auto displayInfo = SingletonContainer::Get<DisplayManagerAdapterLite>().GetDisplayInfo(GetId());

    UpdateDisplayInfo(displayInfo);

}



void DisplayLite::UpdateDisplayInfo(sptr<DisplayInfo> displayInfo) const

{

    if (displayInfo == nullptr) {

        TLOGE(WmsLogTag::DMS, "displayInfo is nullptr");

        return;

    }

    if (pImpl_ == nullptr) {

        TLOGE(WmsLogTag::DMS, "pImpl_ is nullptr");

        return;

    }

    pImpl_->SetDisplayInfo(displayInfo);

}



Rotation DisplayLite::GetRotation() const

{

    UpdateDisplayInfo();

    if (pImpl_ == nullptr || pImpl_->GetDisplayInfo() == nullptr) {

        TLOGE(WmsLogTag::DMS, "pImpl_ or pImpl_->GetDisplayInfo is nullptr");

        return Rotation::ROTATION_0;

    }

    return pImpl_->GetDisplayInfo()->GetRotation();

}

} // namespace OHOS::Rosen