mirror of
https://gitee.com/openharmony/arkui_ace_engine
synced 2024-10-07 16:33:54 +00:00
Merge pull request !14353 from xiexiyun/revert-merge-14204-master
This commit is contained in:
commit
9a6b23ca5e
@ -262,8 +262,7 @@ bool CalculateExpImpl(const std::vector<std::string>& rpnexp, const std::functio
|
||||
for (auto& i : rpnexp) {
|
||||
if (ops.find(i) == ops.npos) {
|
||||
std::string value = i;
|
||||
Dimension dim;
|
||||
StringUtils::StringToDimensionWithUnit(value, dim, DimensionUnit::PX, 0.0f, true);
|
||||
Dimension dim = StringUtils::StringToDimensionWithUnit(value, DimensionUnit::PX, 0.0f, true);
|
||||
if (dim.Unit() == DimensionUnit::INVALID) {
|
||||
return false;
|
||||
}
|
||||
|
@ -212,79 +212,63 @@ inline float StringToFloat(const std::string& value)
|
||||
return result;
|
||||
}
|
||||
}
|
||||
static bool StringToDimensionWithUnit(const std::string& value, Dimension& dimensionResult,
|
||||
DimensionUnit defaultUnit = DimensionUnit::PX, float defaultValue = 0.0f, bool isCalc = false)
|
||||
|
||||
static Dimension StringToDimensionWithUnit(const std::string& value, DimensionUnit defaultUnit = DimensionUnit::PX,
|
||||
float defaultValue = 0.0f, bool isCalc = false)
|
||||
{
|
||||
errno = 0;
|
||||
if (std::strcmp(value.c_str(), "auto") == 0) {
|
||||
dimensionResult = Dimension(defaultValue, DimensionUnit::AUTO);
|
||||
return true;
|
||||
return Dimension(defaultValue, DimensionUnit::AUTO);
|
||||
}
|
||||
char* pEnd = nullptr;
|
||||
double result = std::strtod(value.c_str(), &pEnd);
|
||||
if (pEnd == value.c_str() || errno == ERANGE) {
|
||||
dimensionResult = Dimension(defaultValue, defaultUnit);
|
||||
return false;
|
||||
return Dimension(defaultValue, defaultUnit);
|
||||
}
|
||||
if (pEnd != nullptr) {
|
||||
if (std::strcmp(pEnd, "%") == 0) {
|
||||
// Parse percent, transfer from [0, 100] to [0, 1]
|
||||
dimensionResult = Dimension(result / 100.0, DimensionUnit::PERCENT);
|
||||
return true;
|
||||
return Dimension(result / 100.0, DimensionUnit::PERCENT);
|
||||
}
|
||||
if (std::strcmp(pEnd, "px") == 0) {
|
||||
dimensionResult = Dimension(result, DimensionUnit::PX);
|
||||
return true;
|
||||
return Dimension(result, DimensionUnit::PX);
|
||||
}
|
||||
if (std::strcmp(pEnd, "vp") == 0) {
|
||||
dimensionResult = Dimension(result, DimensionUnit::VP);
|
||||
return true;
|
||||
return Dimension(result, DimensionUnit::VP);
|
||||
}
|
||||
if (std::strcmp(pEnd, "fp") == 0) {
|
||||
dimensionResult = Dimension(result, DimensionUnit::FP);
|
||||
return true;
|
||||
return Dimension(result, DimensionUnit::FP);
|
||||
}
|
||||
if (std::strcmp(pEnd, "lpx") == 0) {
|
||||
dimensionResult = Dimension(result, DimensionUnit::LPX);
|
||||
return true;
|
||||
return Dimension(result, DimensionUnit::LPX);
|
||||
}
|
||||
if ((std::strcmp(pEnd, "\0") == 0) && isCalc) {
|
||||
dimensionResult = Dimension(result, DimensionUnit::NONE);
|
||||
return true;
|
||||
return Dimension(result, DimensionUnit::NONE);
|
||||
}
|
||||
if (isCalc) {
|
||||
dimensionResult = Dimension(result, DimensionUnit::INVALID);
|
||||
return true;
|
||||
}
|
||||
if ((std::strcmp(pEnd, "\0") != 0)) {
|
||||
dimensionResult = Dimension(result, DimensionUnit::NONE);
|
||||
return false;
|
||||
return Dimension(result, DimensionUnit::INVALID);
|
||||
}
|
||||
}
|
||||
dimensionResult = Dimension(result, defaultUnit);
|
||||
return true;
|
||||
return Dimension(result, defaultUnit);
|
||||
}
|
||||
|
||||
inline bool StringToCalcDimension(
|
||||
const std::string& value, CalcDimension& result, bool useVp = false, DimensionUnit defaultUnit = DimensionUnit::PX)
|
||||
inline CalcDimension StringToCalcDimension(
|
||||
const std::string& value, bool useVp = false, DimensionUnit defaultUnit = DimensionUnit::PX)
|
||||
{
|
||||
if (value.find("calc") != std::string::npos) {
|
||||
LOGI("StringToCalcDimension calc value = %{public}s", value.c_str());
|
||||
result = CalcDimension(value, DimensionUnit::CALC);
|
||||
return true;
|
||||
return CalcDimension(value, DimensionUnit::CALC);
|
||||
} else {
|
||||
if (useVp) {
|
||||
return StringToDimensionWithUnit(value, result, DimensionUnit::VP);
|
||||
return StringToDimensionWithUnit(value, DimensionUnit::VP);
|
||||
}
|
||||
return StringToDimensionWithUnit(value, result, defaultUnit);
|
||||
return StringToDimensionWithUnit(value, defaultUnit);
|
||||
}
|
||||
}
|
||||
|
||||
inline Dimension StringToDimension(const std::string& value, bool useVp = false)
|
||||
{
|
||||
Dimension result;
|
||||
StringToDimensionWithUnit(value, result, useVp ? DimensionUnit::VP : DimensionUnit::PX);
|
||||
return result;
|
||||
return StringToDimensionWithUnit(value, useVp ? DimensionUnit::VP : DimensionUnit::PX);
|
||||
}
|
||||
|
||||
inline Dimension StringToDimensionWithThemeValue(const std::string& value, bool useVp, const Dimension& themeValue)
|
||||
@ -295,9 +279,8 @@ inline Dimension StringToDimensionWithThemeValue(const std::string& value, bool
|
||||
if (pEnd == value.c_str() || errno == ERANGE) {
|
||||
return themeValue;
|
||||
}
|
||||
Dimension result;
|
||||
StringToDimensionWithUnit(value, result, useVp ? DimensionUnit::VP : DimensionUnit::PX);
|
||||
return result;
|
||||
|
||||
return StringToDimensionWithUnit(value, useVp ? DimensionUnit::VP : DimensionUnit::PX);
|
||||
}
|
||||
|
||||
inline double StringToDegree(const std::string& value)
|
||||
|
@ -157,10 +157,9 @@ inline Dimension StringToDimension(const std::string& value)
|
||||
return StringUtils::StringToDimension(value);
|
||||
}
|
||||
|
||||
inline bool StringToDimensionWithUnit(
|
||||
const std::string& value, Dimension& result, DimensionUnit defaultUnit = DimensionUnit::PX)
|
||||
inline Dimension StringToDimensionWithUnit(const std::string& value, DimensionUnit defaultUnit = DimensionUnit::PX)
|
||||
{
|
||||
return StringUtils::StringToDimensionWithUnit(value, result, defaultUnit);
|
||||
return StringUtils::StringToDimensionWithUnit(value, defaultUnit);
|
||||
}
|
||||
|
||||
inline int32_t StringToInt(const std::string& value)
|
||||
@ -627,7 +626,7 @@ inline void HandleEscapeCharaterInUtf8TextForJson(std::string& text)
|
||||
((text.at(pos) >= ESCAPE_CHARATER_START) && (text.at(pos) <= ESCAPE_CHARATER_END))) {
|
||||
std::ostringstream is;
|
||||
is << UNICODE_HEAD << std::hex << std::setw(UNICODE_LENGTH) << std::setfill(UNICODE_BODY)
|
||||
<< int(text.at(pos));
|
||||
<< int(text.at(pos));
|
||||
text.replace(pos, 1, is.str());
|
||||
}
|
||||
}
|
||||
@ -681,8 +680,8 @@ inline void ReplacePlaceHolder(std::string& resultStr, const std::unique_ptr<Jso
|
||||
}
|
||||
}
|
||||
|
||||
inline std::string ParserPluralResource(
|
||||
const std::unique_ptr<JsonValue>& argsPtr, const std::string& choice, const std::string& count)
|
||||
inline std::string ParserPluralResource(const std::unique_ptr<JsonValue>& argsPtr, const std::string& choice,
|
||||
const std::string& count)
|
||||
{
|
||||
std::string valueStr;
|
||||
std::string defaultPluralStr(DEFAULT_PLURAL_CHOICE);
|
||||
|
@ -272,7 +272,7 @@ void JSShape::SetStrokeWidth(const JSCallbackInfo& info)
|
||||
CalcDimension lineWidth = 1.0_vp;
|
||||
if (info[0]->IsString()) {
|
||||
const std::string& value = info[0]->ToString();
|
||||
StringUtils::StringToDimensionWithUnit(value, lineWidth, DimensionUnit::VP, 1.0);
|
||||
lineWidth = StringUtils::StringToDimensionWithUnit(value, DimensionUnit::VP, 1.0);
|
||||
} else {
|
||||
ParseJsDimensionVp(info[0], lineWidth);
|
||||
}
|
||||
|
@ -196,7 +196,7 @@ void JSShapeAbstract::SetStrokeWidth(const JSCallbackInfo& info)
|
||||
CalcDimension lineWidth = 1.0_vp;
|
||||
if (info[0]->IsString()) {
|
||||
const std::string& value = info[0]->ToString();
|
||||
StringUtils::StringToDimensionWithUnit(value, lineWidth, DimensionUnit::VP, 1.0);
|
||||
lineWidth = StringUtils::StringToDimensionWithUnit(value, DimensionUnit::VP, 1.0);
|
||||
} else {
|
||||
ParseJsDimensionVp(info[0], lineWidth);
|
||||
}
|
||||
|
@ -1287,7 +1287,6 @@ bool JSViewAbstract::JsWidth(const JSRef<JSVal>& jsValue)
|
||||
return true;
|
||||
}
|
||||
if (!ParseJsDimensionVp(jsValue, value)) {
|
||||
ViewAbstractModel::GetInstance()->ClearWidthOrHeight(true);
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -1312,7 +1311,6 @@ bool JSViewAbstract::JsHeight(const JSRef<JSVal>& jsValue)
|
||||
return true;
|
||||
}
|
||||
if (!ParseJsDimensionVp(jsValue, value)) {
|
||||
ViewAbstractModel::GetInstance()->ClearWidthOrHeight(true);
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -3035,7 +3033,8 @@ bool JSViewAbstract::ParseJsDimension(const JSRef<JSVal>& jsValue, CalcDimension
|
||||
return true;
|
||||
}
|
||||
if (jsValue->IsString()) {
|
||||
return StringUtils::StringToCalcDimension(jsValue->ToString(), result, false, defaultUnit);
|
||||
result = StringUtils::StringToCalcDimension(jsValue->ToString(), false, defaultUnit);
|
||||
return true;
|
||||
}
|
||||
JSRef<JSObject> jsObj = JSRef<JSObject>::Cast(jsValue);
|
||||
JSRef<JSVal> resId = jsObj->GetProperty("id");
|
||||
@ -3068,12 +3067,14 @@ bool JSViewAbstract::ParseJsDimension(const JSRef<JSVal>& jsValue, CalcDimension
|
||||
if (!type->IsNull() && type->IsNumber() &&
|
||||
type->ToNumber<uint32_t>() == static_cast<uint32_t>(ResourceType::STRING)) {
|
||||
auto value = themeConstants->GetString(resId->ToNumber<uint32_t>());
|
||||
return StringUtils::StringToCalcDimension(value, result, false, defaultUnit);
|
||||
result = StringUtils::StringToCalcDimension(value, false, defaultUnit);
|
||||
return true;
|
||||
}
|
||||
if (!type->IsNull() && type->IsNumber() &&
|
||||
type->ToNumber<uint32_t>() == static_cast<uint32_t>(ResourceType::INTEGER)) {
|
||||
auto value = std::to_string(themeConstants->GetInt(resId->ToNumber<uint32_t>()));
|
||||
return StringUtils::StringToDimensionWithUnit(value, result, defaultUnit);
|
||||
result = StringUtils::StringToDimensionWithUnit(value, defaultUnit);
|
||||
return true;
|
||||
}
|
||||
result = themeConstants->GetDimension(resId->ToNumber<uint32_t>());
|
||||
return true;
|
||||
@ -4952,7 +4953,7 @@ void JSViewAbstract::ParseSheetStyle(const JSRef<JSObject>& paramObj, NG::SheetS
|
||||
LOGI("calc value = %{public}s", heightStr.c_str());
|
||||
sheetHeight = CalcDimension(heightStr, DimensionUnit::CALC);
|
||||
} else {
|
||||
StringUtils::StringToDimensionWithUnit(heightStr, sheetHeight, DimensionUnit::VP, -1.0);
|
||||
sheetHeight = StringUtils::StringToDimensionWithUnit(heightStr, DimensionUnit::VP, -1.0);
|
||||
}
|
||||
if (sheetHeight.Value() < 0) {
|
||||
sheetStyle.sheetMode = NG::SheetMode::LARGE;
|
||||
@ -5409,7 +5410,8 @@ bool JSViewAbstract::ParseJsonDimension(
|
||||
return true;
|
||||
}
|
||||
if (jsonValue->IsString()) {
|
||||
return StringUtils::StringToCalcDimension(jsonValue->GetString(), result, false, defaultUnit);
|
||||
result = StringUtils::StringToCalcDimension(jsonValue->GetString(), false, defaultUnit);
|
||||
return true;
|
||||
}
|
||||
auto resVal = JsonUtil::ParseJsonString(jsonValue->ToString());
|
||||
auto resId = resVal->GetValue("id");
|
||||
|
@ -3250,9 +3250,7 @@ Dimension Declaration::ParseDimension(const std::string& value, bool useVp) cons
|
||||
CalcDimension Declaration::ParseCalcDimension(const std::string& value, bool useVp) const
|
||||
{
|
||||
if (value.find("calc") != std::string::npos) {
|
||||
CalcDimension result;
|
||||
StringUtils::StringToCalcDimension(value, result, useVp);
|
||||
return result;
|
||||
return StringUtils::StringToCalcDimension(value, useVp);
|
||||
} else {
|
||||
return ParseDimension(value, useVp);
|
||||
}
|
||||
|
@ -107,10 +107,7 @@ void GridModelNG::SetScrollBarColor(const std::string& value)
|
||||
|
||||
void GridModelNG::SetScrollBarWidth(const std::string& value)
|
||||
{
|
||||
Dimension result;
|
||||
StringUtils::StringToDimensionWithUnit(value, result);
|
||||
ACE_UPDATE_PAINT_PROPERTY(
|
||||
ScrollablePaintProperty, ScrollBarWidth, result);
|
||||
ACE_UPDATE_PAINT_PROPERTY(ScrollablePaintProperty, ScrollBarWidth, StringUtils::StringToDimensionWithUnit(value));
|
||||
}
|
||||
|
||||
void GridModelNG::SetCachedCount(int32_t value)
|
||||
|
@ -118,7 +118,7 @@ static std::optional<Dimension> HandleDimensionType(napi_value ParameterNApi, na
|
||||
std::unique_ptr<char[]> ParameterTemp = std::make_unique<char[]>(ParameterLen);
|
||||
napi_get_value_string_utf8(env, ParameterNApi, ParameterTemp.get(), ParameterLen, &ret);
|
||||
ParameterStr = ParameterTemp.get();
|
||||
StringUtils::StringToDimensionWithUnit(ParameterStr, Parameter, DimensionUnit::VP);
|
||||
Parameter = StringUtils::StringToDimensionWithUnit(ParameterStr, DimensionUnit::VP);
|
||||
} else if (valueType == napi_object) {
|
||||
int32_t id = 0;
|
||||
int32_t type = 0;
|
||||
@ -131,7 +131,7 @@ static std::optional<Dimension> HandleDimensionType(napi_value ParameterNApi, na
|
||||
LOGE("can not get message from resource manager.");
|
||||
return std::nullopt;
|
||||
}
|
||||
StringUtils::StringToDimensionWithUnit(ParameterStr, Parameter, DimensionUnit::VP);
|
||||
Parameter = StringUtils::StringToDimensionWithUnit(ParameterStr, DimensionUnit::VP);
|
||||
} else {
|
||||
return std::nullopt;
|
||||
}
|
||||
|
@ -541,8 +541,7 @@ HWTEST_F(BaseUtilsTest, BaseUtilsTest021, TestSize.Level1)
|
||||
{
|
||||
const std::string stringToDimensionValue = "auto";
|
||||
auto dim = StringUtils::StringToDimension(stringToDimensionValue, true);
|
||||
CalcDimension calcDim;
|
||||
StringUtils::StringToCalcDimension(stringToDimensionValue, calcDim, true);
|
||||
auto calcDim = StringUtils::StringToCalcDimension(stringToDimensionValue, true);
|
||||
ASSERT_EQ(dim.Value(), 0);
|
||||
ASSERT_EQ(dim.Unit(), DimensionUnit::AUTO);
|
||||
ASSERT_EQ(calcDim.Value(), 0);
|
||||
@ -558,8 +557,7 @@ HWTEST_F(BaseUtilsTest, BaseUtilsTest022, TestSize.Level1)
|
||||
{
|
||||
const std::string stringToDimensionValue = "100.0calc";
|
||||
auto dim = StringUtils::StringToDimension(stringToDimensionValue, true);
|
||||
CalcDimension calcDim;
|
||||
StringUtils::StringToCalcDimension(stringToDimensionValue, calcDim, true);
|
||||
auto calcDim = StringUtils::StringToCalcDimension(stringToDimensionValue, true);
|
||||
ASSERT_EQ(dim.Unit(), DimensionUnit::VP);
|
||||
ASSERT_EQ(calcDim.CalcValue(), STRING_TO_CALC_DIMENSION_RESULT);
|
||||
ASSERT_EQ(calcDim.Unit(), DimensionUnit::CALC);
|
||||
|
Loading…
Reference in New Issue
Block a user