mcu_hi3321_watch/tjd/ui/app/sport/TjdUiAppSportDrawGuiAPI.cpp
2025-05-26 20:15:20 +08:00

114 lines
4.1 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "TjdUiAppSportDrawGuiAPI.h"
using namespace OHOS;
namespace TJD {
static inline int16_t HorizontalCenter(int16_t width, int16_t parentWidth) {
return (parentWidth - width) / 2;
}
void InitLabelHorCenter(OHOS::UILabel &label, uint8_t size, int16_t y,
int16_t target, const char *text, uint64_t color) {
label.SetFont(TJD_VECTOR_FONT_FILENAME, size);
label.SetText(text);
label.SetLineBreakMode(OHOS::UILabel::LINE_BREAK_ADAPT);
label.SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_CENTER);
label.SetPosition(HorizontalCenter(label.GetWidth(), target), y);
label.SetTextColor(Color::GetColorFromRGBA(
static_cast<uint8_t>((color >> 24) & 0xFF),
static_cast<uint8_t>((color >> 16) & 0xFF),
static_cast<uint8_t>((color >> 8) & 0xFF),
static_cast<uint8_t>(color & 0xFF)
));
}
void InitLabelHorCenter(OHOS::UILabel &label, uint8_t size, int16_t y,
int16_t target, const char *text, const char* fontName) {
label.SetFont(fontName, size);
label.SetText(text);
label.SetLineBreakMode(OHOS::UILabel::LINE_BREAK_ADAPT);
label.SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_CENTER);
label.SetPosition(HorizontalCenter(label.GetWidth(), target), y);
}
void InitLabel(OHOS::UILabel &label, uint8_t size, int16_t x, int16_t y, const char *text, const char* fontName)
{
label.SetFont(fontName, size);
label.SetText(text);
label.SetLineBreakMode(OHOS::UILabel::LINE_BREAK_ADAPT);
label.SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_CENTER);
label.SetPosition(x, y);
}
void UiDrawImage(OHOS::UIImageView *Image, int16_t x, int16_t y,
OHOS::ImageInfo *imgInfo) // 绘制图片不需要id
{
Image->SetPosition(x, y); // widget's left position and top position
Image->SetSrc(imgInfo);
}
void UiDrawImage(OHOS::UIImageView *Image, int16_t x, int16_t y, const char *id,
OHOS::ImageInfo *imgInfo) // 绘制图片需要id
{
Image->SetPosition(x, y);
Image->SetViewId(id);
Image->SetSrc(imgInfo);
}
// 绘制缩放图片带id
void UIDrawImageScale(OHOS::UIImageView *Image, int16_t x, int16_t y,
const char *id, OHOS::ImageInfo *imgInfo,
float widthScale, float heightScale, uint8_t center_x,
uint8_t center_y) {
Image->SetPosition(x, y);
Image->SetViewId(id);
const OHOS::Vector2<float> &scale = {widthScale, heightScale};
OHOS::Vector2<float> pivot = {(float)center_x, (float)center_y};
Image->Scale(scale, pivot);
Image->SetSrc(imgInfo);
Image->Invalidate();
}
// 绘制缩放图片不需要id
void UIDrawImageScale(OHOS::UIImageView *Image, int16_t x, int16_t y,
OHOS::ImageInfo *imgInfo, float widthScale,
float heightScale, uint8_t center_x, uint8_t center_y) {
Image->SetPosition(x, y);
const OHOS::Vector2<float> &scale = {widthScale, heightScale};
OHOS::Vector2<float> pivot = {(float)center_x, (float)center_y};
Image->Scale(scale, pivot);
Image->SetSrc(imgInfo);
Image->Invalidate();
}
static const uint16_t SCALE_FACTOR = 340;
bool TransformItemBaseOnPosition(OHOS::UITransformList *list, OHOS::UIView *item)
{
if (list == nullptr || item == nullptr) {
return false;
}
if (item->GetViewType() != UI_TRANSFORM_GROUP) {
return false;
}
UITransformGroup *group = dynamic_cast<UITransformGroup *>(item);
if (group == nullptr) {
return false;
}
int16_t w = group->GetWidth();
int16_t h = group->GetHeight();
if (list->GetDirection() == UIList::VERTICAL) {
int16_t midY = list->GetY() + (list->GetHeight() >> 1);
int16_t y = group->GetY();
int offset = (y + (h >> 1) - midY);
int temp = EasingEquation::SineEaseIn(0, SCALE_FACTOR, abs(offset), SCALE_FACTOR);
float scale = 1.0 - (static_cast<float>(temp) / SCALE_FACTOR);
group->Scale(Vector2<float>(scale, scale), Vector2<float>(w >> 1, h >> 1));
if ((y <= midY) && (y + group->GetHeight() >= midY)) {
return true;
}
}
return false;
}
} // namespace TJD