struct _FontCoordHolder
{
- _ResUtil::CoordHolder <int> size;
- _ResUtil::CoordHolder <int> charSpace;
- _ResUtil::CoordHolder <float> sizeF;
- _ResUtil::CoordHolder <float> charSpaceF;
+ _ResUtil::CoordinateHolder <float, int> size;
+ _ResUtil::CoordinateHolder <float, int> charSpace;
_FontCoordHolder()
+ : __pcBaseScale(1.0f)
+ , __vcBaseScale(1.0f)
{
- Reset(-1);
- Reset(-1.0f);
+ _CoordinateSystem* pCoordinateSystem = _CoordinateSystem::GetInstance();
+
+ if (pCoordinateSystem)
+ {
+ __pcBaseScale = pCoordinateSystem->GetTargetBaseScaleFactor();
+ __vcBaseScale = pCoordinateSystem->GetAppBaseScaleFactor();
+ }
+
+ ResetFromVc(-1);
}
- void Reset(int _size)
+ void ResetFromVc(int intVcSize)
{
- size = _size;
- charSpace = 0;
- sizeF = static_cast<float>(_size);
- charSpaceF = 0.0f;
+ this->ResetFromVc(static_cast<float>(intVcSize));
+ size.vcInt = intVcSize;
+ size.vcFloatActual = static_cast<float>(intVcSize);
+ }
+
+ void ResetFromVc(float floatVcSize)
+ {
+ size.vcInt = _FloatToIntForSize(floatVcSize);
+ size.pcInt = _FloatToIntForSize(static_cast<float>(__ConvertToPhyCoord(floatVcSize)));
+ size.vcFloat = floatVcSize;
+ size.vcFloatActual = size.vcFloat;
+
+ SetCharSpaceFromVc(0.0f);
+ }
+
+ void ResetFromPc(int intPcSize)
+ {
+ this->ResetFromPc(static_cast<float>(intPcSize));
+ size.pcInt = intPcSize;
+ }
+
+ void ResetFromPc(float floatPcSize)
+ {
+ size.vcInt = _FloatToIntForSize(static_cast<float>(__ConvertToVirCoord(floatPcSize)));
+ size.pcInt = _FloatToIntForSize(floatPcSize);
+ size.vcFloat = static_cast<float>(__ConvertToVirCoord(floatPcSize));
+ size.vcFloatActual = static_cast<float>(__ConvertToVirCoord(static_cast<double>(size.pcInt)));
+
+ SetCharSpaceFromVc(0.0f);
}
- void Reset(float _size)
+ void SetCharSpaceFromVc(int intVcSize)
{
- size = static_cast<int>(_size);
- charSpace = 0;
- sizeF = _size;
- charSpaceF = 0.0f;
+ this->SetCharSpaceFromVc(static_cast<float>(intVcSize));
+ charSpace.vcInt = intVcSize;
+ charSpace.vcFloatActual = static_cast<float>(intVcSize);
+ }
+
+ void SetCharSpaceFromVc(float floatVcSize)
+ {
+ charSpace.vcInt = _FloatToIntForPos(floatVcSize);
+ charSpace.pcInt = _FloatToIntForPos(static_cast<float>(__ConvertToPhyCoord(floatVcSize)));
+ charSpace.vcFloat = floatVcSize;
+ charSpace.vcFloatActual = floatVcSize;
+ }
+
+private:
+ double __pcBaseScale;
+ double __vcBaseScale;
+
+ inline double __ConvertToPhyCoord(double val)
+ {
+ return val * __pcBaseScale / __vcBaseScale;
+ }
+
+ inline double __ConvertToVirCoord(double val)
+ {
+ return val * __vcBaseScale / __pcBaseScale;
}
};
result r = _pNativeFont->Construct(style, pcSize);
SysTryReturn(NID_GRP, r == E_SUCCESS, r, r, "[%s] Failed to construct _Font", GetErrorMessage(r));
- _pCoordHolder->Reset(vcSize);
+ _pCoordHolder->ResetFromVc(vcSize);
return E_SUCCESS;
}
result r = _pNativeFont->Construct(fontName, style, pcSize, isPathEnabled);
SysTryReturn(NID_GRP, r == E_SUCCESS, r, r, "[%s] Failed to construct _Font", GetErrorMessage(r));
- _pCoordHolder->Reset(vcSize);
+ _pCoordHolder->ResetFromVc(vcSize);
return E_SUCCESS;
}
result r = _pNativeFont->Construct(fontData, style, pcSize);
SysTryReturn(NID_GRP, r == E_SUCCESS, r, r, "[%s] Failed to construct _Font", GetErrorMessage(r));
- _pCoordHolder->Reset(vcSize);
+ _pCoordHolder->ResetFromVc(vcSize);
return E_SUCCESS;
}
result r = _pNativeFont->Construct(style, pcSize);
SysTryReturn(NID_GRP, r == E_SUCCESS, r, r, "[%s] Failed to construct _Font", GetErrorMessage(r));
- _pCoordHolder->Reset(vcSize);
+ _pCoordHolder->ResetFromVc(vcSize);
return E_SUCCESS;
}
result r = _pNativeFont->Construct(fontName, style, pcSize, isPathEnabled);
SysTryReturn(NID_GRP, r == E_SUCCESS, r, r, "[%s] Failed to construct _Font", GetErrorMessage(r));
- _pCoordHolder->Reset(vcSize);
+ _pCoordHolder->ResetFromVc(vcSize);
return E_SUCCESS;
}
result r = _pNativeFont->Construct(fontData, style, pcSize);
SysTryReturn(NID_GRP, r == E_SUCCESS, r, r, "[%s] Failed to construct _Font", GetErrorMessage(r));
- _pCoordHolder->Reset(vcSize);
+ _pCoordHolder->ResetFromVc(vcSize);
return E_SUCCESS;
}
CRITICAL_SECTION;
IF_NOT_CONSTRUCTED(return -1);
- return _pCoordHolder->size.required;
+ return _FloatToIntForSize(_pCoordHolder->size.vcFloatActual);
}
float
CRITICAL_SECTION;
IF_NOT_CONSTRUCTED(return -1.0f);
- return _pCoordHolder->sizeF.required;
+ return _pCoordHolder->size.vcFloatActual;
}
void
IF_NOT_CONSTRUCTED(return);
// save it
- _pCoordHolder->charSpace = vcSpace;
+ _pCoordHolder->SetCharSpaceFromVc(vcSpace);
- // convert VC -> PC
- int pcSpace = _ResUtil::ConvertToPhyCoordWidth(vcSpace);
-
- _pNativeFont->SetCharSpace(pcSpace);
+ _pNativeFont->SetCharSpace(_pCoordHolder->charSpace.pcInt);
return;
}
IF_NOT_CONSTRUCTED(return);
// save it
- _pCoordHolder->charSpaceF = vcSpace;
-
- // convert VC -> PC
- float pcSpace = _ResUtil::ConvertToPhyCoordWidth(vcSpace);
+ _pCoordHolder->SetCharSpaceFromVc(vcSpace);
- _pNativeFont->SetCharSpace(_FloatToIntForPos(pcSpace));
+ _pNativeFont->SetCharSpace(_pCoordHolder->charSpace.pcInt);
return;
}
CRITICAL_SECTION;
IF_NOT_CONSTRUCTED(return 0);
- return _pCoordHolder->charSpace.required;
+ return _pCoordHolder->charSpace.vcInt;
}
float
CRITICAL_SECTION;
IF_NOT_CONSTRUCTED(return 0.0f);
- return _pCoordHolder->charSpaceF.required;
+ return _pCoordHolder->charSpace.vcFloatActual;
}
Tizen::Base::String
return pFont.release();
}
+Font*
+_FontImpl::CreateFontN(int style, float expectedMaxHeight)
+{
+ CRITICAL_SECTION;
+ SysTryReturn(NID_GRP, expectedMaxHeight > 0.0f, null, E_INVALID_ARG, "[E_INVALID_ARG] The specified max-height MUST be greater than 0.0f.");
+
+ _Util::FixedPoint26_6 pcSize(_ResUtil::ConvertToPhyCoordHeight(expectedMaxHeight));
+
+ std::auto_ptr<Font> pFont(new (std::nothrow) Font());
+ SysTryReturn(NID_GRP, pFont.get(), null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
+
+ _FontImpl* pFontImpl = _FontImpl::GetInstance(*pFont);
+ SysTryReturn(NID_GRP, pFontImpl, null, E_SYSTEM, "[E_SYSTEM] Getting native font instance failed.");
+
+ result r = pFontImpl->_pNativeFont->Construct(style, _Util::FixedPoint26_6(expectedMaxHeight));
+ SysTryReturn(NID_GRP, r == E_SUCCESS, null, r, "[%s] _Font construct is failed.", GetErrorMessage(r));
+
+ _Util::CarveMagicKey(*pFontImpl, pFontImpl->_magicKey);
+ SysTryReturn(NID_GRP, pFontImpl->IsConstructed(), null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
+
+ float fontPcSize = pFontImpl->_pNativeFont->GetFontSizeFromMaxHeight(pcSize);
+
+ pFontImpl->_pCoordHolder->ResetFromPc(fontPcSize);
+ pFontImpl->SetSize(pFontImpl->_pCoordHolder->size.vcFloat);
+
+ return pFont.release();
+}
+
+Font*
+_FontImpl::CreateFontN(const Tizen::Base::String& fontName, int style, float expectedMaxHeight)
+{
+ CRITICAL_SECTION;
+ SysTryReturn(NID_GRP, expectedMaxHeight > 0.0f, null, E_INVALID_ARG, "[E_INVALID_ARG] The specified max-height MUST be greater than 0.0f.");
+
+ _Util::FixedPoint26_6 pcSize(_ResUtil::ConvertToPhyCoordHeight(expectedMaxHeight));
+
+ std::auto_ptr<Font> pFont(new (std::nothrow) Font());
+ SysTryReturn(NID_GRP, pFont.get(), null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
+
+ _FontImpl* pFontImpl = _FontImpl::GetInstance(*pFont);
+ SysTryReturn(NID_GRP, pFontImpl, null, E_SYSTEM, "[E_SYSTEM] Getting native font instance failed.");
+
+ result r = pFontImpl->_pNativeFont->Construct(fontName, style, _Util::FixedPoint26_6(expectedMaxHeight));
+ SysTryReturn(NID_GRP, r == E_SUCCESS, null, r, "[%s] _Font construct is failed.", GetErrorMessage(r));
+
+ _Util::CarveMagicKey(*pFontImpl, pFontImpl->_magicKey);
+ SysTryReturn(NID_GRP, pFontImpl->IsConstructed(), null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
+
+ float fontPcSize = pFontImpl->_pNativeFont->GetFontSizeFromMaxHeight(pcSize);
+
+ pFontImpl->_pCoordHolder->ResetFromPc(fontPcSize);
+ pFontImpl->SetSize(pFontImpl->_pCoordHolder->size.vcFloat);
+
+ return pFont.release();
+}
+
result
_FontImpl::GetTextExtent(int vcWidth, const Tizen::Base::String& text, int startIndex, int length, bool outline, int& count, Dimension& vcDim) const
{
IF_NOT_CONSTRUCTED(return E_OPERATION_FAILED);
SysTryReturnResult(NID_GRP, vcSize > 0, E_INVALID_ARG, "Font size should be greater than 0");
- _pCoordHolder->Reset(vcSize);
+ _pCoordHolder->ResetFromVc(vcSize);
// convert VC -> PC
_Util::FixedPoint26_6 pcSize(_ResUtil::ConvertToPhyCoordHeight(vcSize));
{
pcSize = _Util::FixedPoint26_6(1);
- _pCoordHolder->size.phyCoord = 1;
- _pCoordHolder->size.virCoord = vcSize;
+ _pCoordHolder->ResetFromPc(1);
+ _pCoordHolder->size.vcInt = vcSize;
+ _pCoordHolder->size.vcFloat = static_cast<float>(vcSize);
+ _pCoordHolder->size.vcFloatActual = _pCoordHolder->size.vcFloat;
}
result r = _pNativeFont->SetSize(pcSize);
IF_NOT_CONSTRUCTED(return E_OPERATION_FAILED);
SysTryReturnResult(NID_GRP, vcSize > 0.0f, E_INVALID_ARG, "Font size should be greater than 0");
- _pCoordHolder->Reset(vcSize);
+ _pCoordHolder->ResetFromVc(vcSize);
// convert VC -> PC
_Util::FixedPoint26_6 pcSize(_ResUtil::ConvertToPhyCoordHeight(vcSize));
{
pcSize = _Util::FixedPoint26_6(1.0f);
- _pCoordHolder->sizeF.phyCoord = 1.0f;
- _pCoordHolder->sizeF.virCoord = vcSize;
+ _pCoordHolder->ResetFromPc(1.0f);
+ _pCoordHolder->size.vcInt = static_cast<int>(vcSize);
+ _pCoordHolder->size.vcFloat = vcSize;
+ _pCoordHolder->size.vcFloatActual = _pCoordHolder->size.vcFloat;
}
result r = _pNativeFont->SetSize(pcSize);