Fixed working with units of measurement in CSSCalculator

This commit is contained in:
Kirill Poljakov
2023-09-18 20:10:20 +03:00
parent 7e2ce67e18
commit 9180ef65bf
4 changed files with 15 additions and 11 deletions

View File

@ -12,7 +12,7 @@
#include "StaticFunctions.h"
#include "ConstValues.h"
#define DEFAULTFONTSIZE 14
#define DEFAULTFONTSIZE 28 // 14 * 2
namespace NSCSS
{

View File

@ -27,7 +27,7 @@ namespace NSCSS
case NSCSS::Peak:
return 0.16667 / (double)ushDPI * dValue;
case NSCSS::Twips:
return (dValue / 96.) * 1440.;
return (dValue / (double)ushDPI) * 144.;
}
return 0.;
@ -95,6 +95,8 @@ namespace NSCSS
return dValue;
case NSCSS::Peak:
return dValue / 72.;
case NSCSS::Twips:
return dValue * 144.;
}
return 0.;
@ -117,7 +119,7 @@ namespace NSCSS
case NSCSS::Peak:
return dValue / 12.;
case NSCSS::Twips:
return (dValue / 72.) * 1440.;
return (dValue / 72.) * 144.;
}
return 0.;
@ -140,7 +142,7 @@ namespace NSCSS
case NSCSS::Peak:
return dValue;
case NSCSS::Twips:
return dValue * 12. * 20;
return dValue * 24.;
}
return 0.;

View File

@ -1984,10 +1984,10 @@ namespace NSCSS
bool CFont::SetSize(const std::wstring &wsValue, unsigned int unLevel, bool bHardMode)
{
const std::map<std::wstring, std::wstring> arAbsoluteFontValues =
{{L"xx-small", L"9px"}, {L"x-small", L"10px"},
{L"small", L"13px"}, {L"medium", L"16px"},
{L"large", L"18px"}, {L"x-large", L"24px"},
{L"xx-large", L"32px"}};
{{L"xx-small", L"0.6em"}, {L"x-small", L"0.75em"},
{L"small", L"0.875em"}, {L"medium", L"1em"},
{L"large", L"1.125em"}, {L"x-large", L"1.25em"},
{L"xx-large", L"1.5em"}};
size_t unFoundPos = std::wstring::npos;
std::wstring wsNewValue(wsValue);

View File

@ -9,7 +9,6 @@
#define LINEHEIGHTSCALE 10 // Значение LineHeight в OOXML должно быть в 10 раз больше чем указано в стиле
#define LINEHEIGHTCOEF 24 // Используется когда необходимо перевести в twips значение
#define POINTCOEF 20 // Используется для конвертации в OOXML значение интервала между абзацами (Измерение в двадцатых долях от точки)
#define FONTSCALE 2 // Значение шрифта при конвертации в OOXML необходимо увеличиыать в 2 рааз
#define PAGEWIDTH (12240 / POINTCOEF)
#define PAGEHEIGHT (15840 / POINTCOEF)
@ -319,8 +318,11 @@ namespace NSCSS
if (!oStyle.m_oFont.GetLineHeight().Empty())
{
const double dLineHeight = oStyle.m_oFont.GetLineHeight().ToDouble(NSCSS::Twips, LINEHEIGHTCOEF) * LINEHEIGHTSCALE;
double dLineHeight = oStyle.m_oFont.GetLineHeight().ToDouble(NSCSS::Twips, LINEHEIGHTCOEF) * LINEHEIGHTSCALE;
if (NSCSS::None == oStyle.m_oFont.GetLineHeight().GetUnitMeasure())
dLineHeight *= LINEHEIGHTCOEF;
if (0. != dLineHeight)
wsLineHeight = DOUBLE_TO_INTW(dLineHeight);
}
@ -425,7 +427,7 @@ namespace NSCSS
return;
if (!oStyle.m_oFont.GetSize().Empty())
oXmlElement.AddPropertiesInR(RProperties::R_Sz, DOUBLE_TO_INTW(oStyle.m_oFont.GetSize().ToDouble(NSCSS::Twips) * FONTSCALE));
oXmlElement.AddPropertiesInR(RProperties::R_Sz, DOUBLE_TO_INTW(oStyle.m_oFont.GetSize().ToDouble(NSCSS::Twips)));
oXmlElement.AddPropertiesInR(RProperties::R_Highlight, oStyle.m_oBackground.GetColor().ToWString());
oXmlElement.AddPropertiesInR(RProperties::R_Color, oStyle.m_oText.GetColor().ToWString());