diff --git a/interfaces/innerkits/wm/wm_common.h b/interfaces/innerkits/wm/wm_common.h index c685e0029e2471456eb348694de3ccb2117a72e2..c3549d1fc1295adbdf75eb3431e3555115d49f63 100644 --- a/interfaces/innerkits/wm/wm_common.h +++ b/interfaces/innerkits/wm/wm_common.h @@ -27,6 +27,7 @@ #include "../dm/dm_common.h" #include "securec.h" +#include "wm_math.h" namespace OHOS { namespace Rosen { @@ -699,6 +700,43 @@ private: } }; +/** + * @struct SingleHandTransform + * + * @brief parameter of transform in single hand mode. + */ +struct SingleHandTransform { + int32_t posX = 0; + int32_t posY = 0; + float scaleX = 0; + float scaleY = 0; + + bool operator==(const SingleHandTransform& right) const + { + return posX == right.posX && MathHelper::NearEqual(scaleX, right.scaleX) && + posY == right.posY && MathHelper::NearEqual(scaleY, right.scaleY); + } + + bool operator!=(const SingleHandTransform& right) const + { + return !(*this == right); + } + + bool Marshalling(Parcel& parcel) const + { + return parcel.WriteInt32(posX) && parcel.WriteInt32(posY) && + parcel.WriteFloat(scaleX) && parcel.WriteFloat(scaleY); + } + + void Unmarshalling(Parcel& parcel) + { + posX = parcel.ReadInt32(); + posY = parcel.ReadInt32(); + scaleX = parcel.ReadFloat(); + scaleY = parcel.ReadFloat(); + } +}; + /** * @struct SystemBarProperty * diff --git a/utils/include/wm_math.h b/utils/include/wm_math.h index 0fbe679872b303e9fa2bcf30f0084b13b79c507d..3226aac208ffe69d83f395e7870574e0c7185a41 100644 --- a/utils/include/wm_math.h +++ b/utils/include/wm_math.h @@ -32,6 +32,8 @@ inline bool NearZero(float val) return val < POS_ZERO && val > NAG_ZERO; } +inline bool NearEqual(float left, float right) { return std::abs(left - right) < POS_ZERO; } + inline float ToRadians(float degrees) { return degrees * PI / 180.0f;