!14353 回退 'Pull Request !14204 : width height illegal '

Merge pull request !14353 from xiexiyun/revert-merge-14204-master
This commit is contained in:
openharmony_ci 2023-06-06 11:50:09 +00:00 committed by Gitee
commit 9a6b23ca5e
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
10 changed files with 44 additions and 68 deletions

View File

@ -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;
}

View File

@ -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)

View File

@ -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);

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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");

View File

@ -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);
}

View File

@ -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)

View File

@ -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;
}

View File

@ -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);