/* * Copyright (c) 2022 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 "font/ui_font_cache_manager.h" #include "font/font_ram_allocator.h" #include "gfx_utils/graphic_log.h" #include "securec.h" namespace OHOS { UIFontCacheManager::UIFontCacheManager() : bitmapCache_(nullptr) {} UIFontCacheManager::~UIFontCacheManager() { if (bitmapCache_ != nullptr) { delete bitmapCache_; bitmapCache_ = nullptr; } } UIFontCacheManager* UIFontCacheManager::GetInstance() { static UIFontCacheManager instance_; return &instance_; } int8_t UIFontCacheManager::GlyphsCacheInit() { return glyphsCache_.CacheInit(); } void UIFontCacheManager::ClearCacheFlag() { return glyphsCache_.ClearCacheFlag(); } GlyphCacheNode* UIFontCacheManager::GetNodeFromCache(uint32_t unicode, uint16_t fontKey, uint16_t cacheType) { return glyphsCache_.GetNodeFromCache(unicode, fontKey, cacheType); } GlyphCacheNode* UIFontCacheManager::GetNodeCacheSpace(uint32_t unicode, uint16_t fontKey) { return glyphsCache_.GetNodeCacheSpace(unicode, fontKey); } void UIFontCacheManager::SetBitmapCacheSize(uint32_t bitmapCacheSize) { bitmapCacheSize_ = bitmapCacheSize; } void UIFontCacheManager::BitmapCacheInit() { if (bitmapCache_ != nullptr) { return; } uint8_t* bitmapCacheAddr = reinterpret_cast(FontRamAllocator::GetInstance().DynamicAllocate(bitmapCacheSize_)); if (bitmapCacheAddr == nullptr) { GRAPHIC_LOGE("UIFontCacheManager::BitmapCacheInit allocate failed"); return; } if (memset_s(bitmapCacheAddr, bitmapCacheSize_, 0, bitmapCacheSize_)!= EOK) { GRAPHIC_LOGE("UIFontCacheManager::BitmapCacheInit memset failed"); return; } bitmapCache_ = new UIFontCache(bitmapCacheAddr, bitmapCacheSize_); } void UIFontCacheManager::BitmapCacheClear() { delete bitmapCache_; bitmapCache_ = nullptr; } uint8_t* UIFontCacheManager::GetSpace(uint16_t fontKey, uint32_t unicode, uint32_t size, TextStyle textStyle) { if (bitmapCache_ != nullptr) { return bitmapCache_->GetSpace(fontKey, unicode, size, textStyle); } GRAPHIC_LOGE("UIFontCacheManager::GetSpace invalid bitmapCache"); return nullptr; } void UIFontCacheManager::PutSpace(uint8_t* addr) { if (bitmapCache_ != nullptr) { bitmapCache_->PutSpace(addr); } GRAPHIC_LOGE("UIFontCacheManager::PutSpace invalid bitmapCache"); } uint8_t* UIFontCacheManager::GetBitmap(uint16_t fontKey, uint32_t unicode, TextStyle textStyle) { if (bitmapCache_ != nullptr) { return bitmapCache_->GetBitmap(fontKey, unicode, textStyle); } GRAPHIC_LOGE("UIFontCacheManager::GetBitmap invalid bitmapCache"); return nullptr; } } // namespace OHOS