114 lines
4.1 KiB
C++
114 lines
4.1 KiB
C++
#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
|