12,7 → 12,46 |
#include "scribusdoc.h" |
#include "selection.h" |
|
#include "fonts/fontfeatures.h" |
quint64 PropertyWidget_FontFeatures::FeatureCommonLigatures = 1; |
quint64 PropertyWidget_FontFeatures::FeatureContextualLigatures = ((quint64) 1 << 1); |
quint64 PropertyWidget_FontFeatures::FeatureDiscretionaryLigatures = ((quint64) 1 << 2); |
quint64 PropertyWidget_FontFeatures::FeatureHistoricalLigatures = ((quint64) 1 << 3); |
quint64 PropertyWidget_FontFeatures::FeatureSmallCaps = ((quint64) 1 << 4); |
quint64 PropertyWidget_FontFeatures::FeatureSmallCapsFromCaps = ((quint64) 1 << 5); |
quint64 PropertyWidget_FontFeatures::FeaturePetiteCaps = ((quint64) 1 << 6); |
quint64 PropertyWidget_FontFeatures::FeaturePetiteCapsFromCaps = ((quint64) 1 << 7); |
quint64 PropertyWidget_FontFeatures::FeatureUnicaseCaps = ((quint64) 1 << 8); |
quint64 PropertyWidget_FontFeatures::FeatureTiltingCaps = ((quint64) 1 << 9); |
quint64 PropertyWidget_FontFeatures::FeatureLiningNumerals = ((quint64) 1 << 10); |
quint64 PropertyWidget_FontFeatures::FeatureOldStyleNumerals = ((quint64) 1 << 11); |
quint64 PropertyWidget_FontFeatures::FeatureProportionalNumeralWidth = ((quint64) 1 << 12); |
quint64 PropertyWidget_FontFeatures::FeatureTabularNumeralWidth = ((quint64) 1 << 13); |
quint64 PropertyWidget_FontFeatures::FeatureDiagonalFractions = ((quint64) 1 << 14); |
quint64 PropertyWidget_FontFeatures::FeatureStackedFractions = ((quint64) 1 << 15); |
quint64 PropertyWidget_FontFeatures::FeatureSubscript = ((quint64) 1 << 16); |
quint64 PropertyWidget_FontFeatures::FeatureSuperscript = ((quint64) 1 << 17); |
quint64 PropertyWidget_FontFeatures::FeatureOrdinals = ((quint64) 1 << 18); |
quint64 PropertyWidget_FontFeatures::FeatureSlashedZero = ((quint64) 1 << 19); |
quint64 PropertyWidget_FontFeatures::FeatureStyleSet01 = ((quint64) 1 << 20); |
quint64 PropertyWidget_FontFeatures::FeatureStyleSet02 = ((quint64) 1 << 21); |
quint64 PropertyWidget_FontFeatures::FeatureStyleSet03 = ((quint64) 1 << 22); |
quint64 PropertyWidget_FontFeatures::FeatureStyleSet04 = ((quint64) 1 << 23); |
quint64 PropertyWidget_FontFeatures::FeatureStyleSet05 = ((quint64) 1 << 24); |
quint64 PropertyWidget_FontFeatures::FeatureStyleSet06 = ((quint64) 1 << 25); |
quint64 PropertyWidget_FontFeatures::FeatureStyleSet07 = ((quint64) 1 << 26); |
quint64 PropertyWidget_FontFeatures::FeatureStyleSet08 = ((quint64) 1 << 27); |
quint64 PropertyWidget_FontFeatures::FeatureStyleSet09 = ((quint64) 1 << 28); |
quint64 PropertyWidget_FontFeatures::FeatureStyleSet10 = ((quint64) 1 << 29); |
quint64 PropertyWidget_FontFeatures::FeatureStyleSet11 = ((quint64) 1 << 30); |
quint64 PropertyWidget_FontFeatures::FeatureStyleSet12 = ((quint64) 1 << 31); |
quint64 PropertyWidget_FontFeatures::FeatureStyleSet13 = ((quint64) 1 << 32); |
quint64 PropertyWidget_FontFeatures::FeatureStyleSet14 = ((quint64) 1 << 33); |
quint64 PropertyWidget_FontFeatures::FeatureStyleSet15 = ((quint64) 1 << 34); |
quint64 PropertyWidget_FontFeatures::FeatureStyleSet16 = ((quint64) 1 << 35); |
quint64 PropertyWidget_FontFeatures::FeatureStyleSet17 = ((quint64) 1 << 36); |
quint64 PropertyWidget_FontFeatures::FeatureStyleSet18 = ((quint64) 1 << 37); |
quint64 PropertyWidget_FontFeatures::FeatureStyleSet19 = ((quint64) 1 << 38); |
quint64 PropertyWidget_FontFeatures::FeatureStyleSet20 = ((quint64) 1 << 39); |
|
PropertyWidget_FontFeatures::PropertyWidget_FontFeatures(QWidget* parent) : QFrame(parent) |
{ |
447,75 → 486,94 |
void PropertyWidget_FontFeatures::enableFeatures(QStringList fontFeatures) |
{ |
quint64 oldFlags = featureFlags(); |
quint64 newFlags = FontFeatures::fontFlagsFromList(fontFeatures); |
quint64 newFlags = featureFlagsFromList(fontFeatures); |
|
disableAllFeatures(); |
|
CommonCheck->setVisible(newFlags & FontFeatures::CommonLigatures); |
ContextualCheck->setVisible(newFlags & FontFeatures::ContextualLigatures); |
DiscretionaryCheck->setVisible(newFlags & FontFeatures::DiscretionaryLigatures); |
HistoricalCheck->setVisible(newFlags & FontFeatures::HistoricalLigatures); |
CommonCheck->setVisible(newFlags & FeatureCommonLigatures); |
ContextualCheck->setVisible(newFlags & FeatureContextualLigatures); |
DiscretionaryCheck->setVisible(newFlags & FeatureDiscretionaryLigatures); |
HistoricalCheck->setVisible(newFlags & FeatureHistoricalLigatures); |
|
SmallRadio->setVisible(newFlags & FontFeatures::SmallCaps); |
SmallFromCRadio->setVisible(newFlags & FontFeatures::SmallCapsFromCaps); |
PetiteRadio->setVisible(newFlags & FontFeatures::PetiteCaps); |
PetiteCapRadio->setVisible(newFlags & FontFeatures::PetiteCapsFromCaps); |
UnicaseRadio->setVisible(newFlags & FontFeatures::UnicaseCaps); |
TiltingRadio->setVisible(newFlags & FontFeatures::TiltingCaps); |
SmallRadio->setVisible(newFlags & FeatureSmallCaps); |
SmallFromCRadio->setVisible(newFlags & FeatureSmallCapsFromCaps); |
PetiteRadio->setVisible(newFlags & FeaturePetiteCaps); |
PetiteCapRadio->setVisible(newFlags & FeaturePetiteCapsFromCaps); |
UnicaseRadio->setVisible(newFlags & FeatureUnicaseCaps); |
TiltingRadio->setVisible(newFlags & FeatureTiltingCaps); |
|
LiningRadio->setVisible(newFlags & FontFeatures::LiningNumerals); |
OldStyleRadio->setVisible(newFlags & FontFeatures::OldStyleNumerals); |
LiningRadio->setVisible(newFlags & FeatureLiningNumerals); |
OldStyleRadio->setVisible(newFlags & FeatureOldStyleNumerals); |
|
ProportionalRadio->setVisible(newFlags & FontFeatures::ProportionalNumeralWidth); |
TabularRadio->setVisible(newFlags & FontFeatures::TabularNumeralWidth); |
ProportionalRadio->setVisible(newFlags & FeatureProportionalNumeralWidth); |
TabularRadio->setVisible(newFlags & FeatureTabularNumeralWidth); |
|
DiagonalRadio->setVisible(newFlags & FontFeatures::DiagonalFractions); |
StackedRadio->setVisible(newFlags & FontFeatures::StackedFractions); |
DiagonalRadio->setVisible(newFlags & FeatureDiagonalFractions); |
StackedRadio->setVisible(newFlags & FeatureStackedFractions); |
|
SubscriptRadio->setVisible(newFlags & FontFeatures::Subscript); |
SuperscriptRadio->setVisible(newFlags & FontFeatures::Superscript); |
OrdinalCheck->setVisible(newFlags & FontFeatures::Ordinals); |
SubscriptRadio->setVisible(newFlags & FeatureSubscript); |
SuperscriptRadio->setVisible(newFlags & FeatureSuperscript); |
OrdinalCheck->setVisible(newFlags & FeatureOrdinals); |
|
SlashedZeroCheck->setVisible(newFlags & FontFeatures::SlashedZero); |
SlashedZeroCheck->setVisible(newFlags & FeatureSlashedZero); |
|
StyleSet01->setVisible(newFlags & FontFeatures::StyleSet01); |
StyleSet02->setVisible(newFlags & FontFeatures::StyleSet02); |
StyleSet03->setVisible(newFlags & FontFeatures::StyleSet03); |
StyleSet04->setVisible(newFlags & FontFeatures::StyleSet04); |
StyleSet05->setVisible(newFlags & FontFeatures::StyleSet05); |
StyleSet06->setVisible(newFlags & FontFeatures::StyleSet06); |
StyleSet07->setVisible(newFlags & FontFeatures::StyleSet07); |
StyleSet08->setVisible(newFlags & FontFeatures::StyleSet08); |
StyleSet09->setVisible(newFlags & FontFeatures::StyleSet09); |
StyleSet10->setVisible(newFlags & FontFeatures::StyleSet10); |
StyleSet11->setVisible(newFlags & FontFeatures::StyleSet11); |
StyleSet12->setVisible(newFlags & FontFeatures::StyleSet12); |
StyleSet13->setVisible(newFlags & FontFeatures::StyleSet13); |
StyleSet14->setVisible(newFlags & FontFeatures::StyleSet14); |
StyleSet15->setVisible(newFlags & FontFeatures::StyleSet15); |
StyleSet16->setVisible(newFlags & FontFeatures::StyleSet16); |
StyleSet17->setVisible(newFlags & FontFeatures::StyleSet17); |
StyleSet18->setVisible(newFlags & FontFeatures::StyleSet18); |
StyleSet19->setVisible(newFlags & FontFeatures::StyleSet19); |
StyleSet20->setVisible(newFlags & FontFeatures::StyleSet20); |
StyleSet01->setVisible(newFlags & FeatureStyleSet01); |
StyleSet02->setVisible(newFlags & FeatureStyleSet02); |
StyleSet03->setVisible(newFlags & FeatureStyleSet03); |
StyleSet04->setVisible(newFlags & FeatureStyleSet04); |
StyleSet05->setVisible(newFlags & FeatureStyleSet05); |
StyleSet06->setVisible(newFlags & FeatureStyleSet06); |
StyleSet07->setVisible(newFlags & FeatureStyleSet07); |
StyleSet08->setVisible(newFlags & FeatureStyleSet08); |
StyleSet09->setVisible(newFlags & FeatureStyleSet09); |
StyleSet10->setVisible(newFlags & FeatureStyleSet10); |
StyleSet11->setVisible(newFlags & FeatureStyleSet11); |
StyleSet12->setVisible(newFlags & FeatureStyleSet12); |
StyleSet13->setVisible(newFlags & FeatureStyleSet13); |
StyleSet14->setVisible(newFlags & FeatureStyleSet14); |
StyleSet15->setVisible(newFlags & FeatureStyleSet15); |
StyleSet16->setVisible(newFlags & FeatureStyleSet16); |
StyleSet17->setVisible(newFlags & FeatureStyleSet17); |
StyleSet18->setVisible(newFlags & FeatureStyleSet18); |
StyleSet19->setVisible(newFlags & FeatureStyleSet19); |
StyleSet20->setVisible(newFlags & FeatureStyleSet20); |
|
groupBox_7->setVisible(newFlags & FontFeatures::StyleSetsMask); |
quint64 featureStyleSetMask = 0; |
featureStyleSetMask += FeatureStyleSet01 + FeatureStyleSet02 + FeatureStyleSet03 + FeatureStyleSet04 + FeatureStyleSet05; |
featureStyleSetMask += FeatureStyleSet06 + FeatureStyleSet07 + FeatureStyleSet08 + FeatureStyleSet09 + FeatureStyleSet10; |
featureStyleSetMask += FeatureStyleSet11 + FeatureStyleSet12 + FeatureStyleSet13 + FeatureStyleSet14 + FeatureStyleSet15; |
featureStyleSetMask += FeatureStyleSet16 + FeatureStyleSet17 + FeatureStyleSet18 + FeatureStyleSet19 + FeatureStyleSet20; |
groupBox_7->setVisible(newFlags & featureStyleSetMask); |
|
// Hide Default features when their relative ones aren't found in the font. |
NormalCapRadio->setVisible(newFlags & FontFeatures::CapsMask); |
DefaultStyleRadio->setVisible(newFlags & FontFeatures::NumeralStyleMask); |
DefaultWidthRadio->setVisible(newFlags & FontFeatures::NumeralWidthMask); |
DefaultFractionsRadio->setVisible(newFlags & FontFeatures::NumeralFractionsMask); |
DefaultPosRadio->setVisible(newFlags & FontFeatures::GlyphPositionMask); |
quint64 featureCapsMask = 0; |
featureCapsMask += FeatureSmallCaps + FeatureSmallCapsFromCaps; |
featureCapsMask += FeaturePetiteCaps + FeaturePetiteCapsFromCaps; |
featureCapsMask += FeatureUnicaseCaps + FeatureTiltingCaps; |
NormalCapRadio->setVisible(newFlags & featureCapsMask); |
|
quint64 featureNumeralStyleMask = FeatureLiningNumerals + FeatureOldStyleNumerals; |
DefaultStyleRadio->setVisible(newFlags & featureNumeralStyleMask); |
|
quint64 featureNumeralWidthMask = FeatureProportionalNumeralWidth + FeatureTabularNumeralWidth; |
DefaultWidthRadio->setVisible(newFlags & featureNumeralWidthMask); |
|
quint64 featureFractionMask = FeatureDiagonalFractions + FeatureStackedFractions; |
DefaultFractionsRadio->setVisible(newFlags & featureFractionMask); |
|
quint64 featureGlyphPositionMask = FeatureSubscript + FeatureSuperscript + FeatureOrdinals; |
DefaultPosRadio->setVisible(newFlags & featureGlyphPositionMask); |
|
// Hide Lines |
line->setVisible(newFlags & FontFeatures::LigaturesMask); |
quint64 featureLigaturesMask = FeatureCommonLigatures + FeatureContextualLigatures; |
featureLigaturesMask += FeatureDiscretionaryLigatures + FeatureHistoricalLigatures; |
line->setVisible(newFlags & featureLigaturesMask); |
|
line_2->setVisible(newFlags & FontFeatures::CapsMask); |
line_3->setVisible(newFlags & FontFeatures::NumeralStyleMask); |
line_4->setVisible(newFlags & FontFeatures::NumeralWidthMask); |
line_5->setVisible(newFlags & FontFeatures::NumeralFractionsMask); |
line_6->setVisible(newFlags & FontFeatures::GlyphPositionMask); |
line_2->setVisible(newFlags & featureCapsMask); |
line_3->setVisible(newFlags & featureNumeralStyleMask); |
line_4->setVisible(newFlags & featureNumeralWidthMask); |
line_5->setVisible(newFlags & featureFractionMask); |
line_6->setVisible(newFlags & featureGlyphPositionMask); |
line_7->setVisible(SlashedZeroCheck->isVisible()); |
|
// Do not trigger item relayout unnecessarily, |
529,96 → 587,196 |
quint64 flags = 0; |
|
if (CommonCheck->isVisible()) |
flags |= FontFeatures::CommonLigatures; |
flags |= FeatureCommonLigatures; |
if (ContextualCheck->isVisible()) |
flags |= FontFeatures::ContextualLigatures; |
flags |= FeatureContextualLigatures; |
if (DiscretionaryCheck->isVisible()) |
flags |= FontFeatures::DiscretionaryLigatures; |
flags |= FeatureDiscretionaryLigatures; |
if (HistoricalCheck->isVisible()) |
flags |= FontFeatures::HistoricalLigatures; |
flags |= FeatureHistoricalLigatures; |
|
if (SmallRadio->isVisible()) |
flags |= FontFeatures::SmallCaps; |
flags |= FeatureSmallCaps; |
if (SmallFromCRadio->isVisible()) |
flags |= FontFeatures::SmallCapsFromCaps; |
flags |= FeatureSmallCapsFromCaps; |
if (PetiteRadio->isVisible()) |
flags |= FontFeatures::PetiteCaps; |
flags |= FeaturePetiteCaps; |
if (PetiteCapRadio->isVisible()) |
flags |= FontFeatures::PetiteCapsFromCaps; |
flags |= FeaturePetiteCapsFromCaps; |
if (UnicaseRadio->isVisible()) |
flags |= FontFeatures::UnicaseCaps; |
flags |= FeatureUnicaseCaps; |
if (TiltingRadio->isVisible()) |
flags |= FontFeatures::TiltingCaps; |
flags |= FeatureTiltingCaps; |
|
if (LiningRadio->isVisible()) |
flags |= FontFeatures::LiningNumerals; |
flags |= FeatureLiningNumerals; |
if (OldStyleRadio->isVisible()) |
flags |= FontFeatures::OldStyleNumerals; |
flags |= FeatureOldStyleNumerals; |
|
if (ProportionalRadio->isVisible()) |
flags |= FontFeatures::ProportionalNumeralWidth; |
flags |= FeatureProportionalNumeralWidth; |
if (TabularRadio->isVisible()) |
flags |= FontFeatures::TabularNumeralWidth; |
flags |= FeatureTabularNumeralWidth; |
|
if (DiagonalRadio->isVisible()) |
flags |= FontFeatures::DiagonalFractions; |
flags |= FeatureDiagonalFractions; |
if (StackedRadio->isVisible()) |
flags |= FontFeatures::StackedFractions; |
flags |= FeatureStackedFractions; |
|
if (SubscriptRadio->isVisible()) |
flags |= FontFeatures::Subscript; |
flags |= FeatureSubscript; |
if (SuperscriptRadio->isVisible()) |
flags |= FontFeatures::Superscript; |
flags |= FeatureSuperscript; |
if (OrdinalCheck->isVisible()) |
flags |= FontFeatures::Ordinals; |
flags |= FeatureOrdinals; |
|
if (SlashedZeroCheck->isVisible()) |
flags |= FontFeatures::SlashedZero; |
flags |= FeatureSlashedZero; |
|
if (StyleSet01->isVisible()) |
flags |= FontFeatures::StyleSet01; |
flags |= FeatureStyleSet01; |
if (StyleSet02->isVisible()) |
flags |= FontFeatures::StyleSet02; |
flags |= FeatureStyleSet02; |
if (StyleSet03->isVisible()) |
flags |= FontFeatures::StyleSet03; |
flags |= FeatureStyleSet03; |
if (StyleSet04->isVisible()) |
flags |= FontFeatures::StyleSet04; |
flags |= FeatureStyleSet04; |
if (StyleSet05->isVisible()) |
flags |= FontFeatures::StyleSet05; |
flags |= FeatureStyleSet05; |
if (StyleSet06->isVisible()) |
flags |= FontFeatures::StyleSet06; |
flags |= FeatureStyleSet06; |
if (StyleSet07->isVisible()) |
flags |= FontFeatures::StyleSet07; |
flags |= FeatureStyleSet07; |
if (StyleSet08->isVisible()) |
flags |= FontFeatures::StyleSet08; |
flags |= FeatureStyleSet08; |
if (StyleSet09->isVisible()) |
flags |= FontFeatures::StyleSet09; |
flags |= FeatureStyleSet09; |
if (StyleSet10->isVisible()) |
flags |= FontFeatures::StyleSet10; |
flags |= FeatureStyleSet10; |
if (StyleSet11->isVisible()) |
flags |= FontFeatures::StyleSet11; |
flags |= FeatureStyleSet11; |
if (StyleSet12->isVisible()) |
flags |= FontFeatures::StyleSet12; |
flags |= FeatureStyleSet12; |
if (StyleSet13->isVisible()) |
flags |= FontFeatures::StyleSet13; |
flags |= FeatureStyleSet13; |
if (StyleSet14->isVisible()) |
flags |= FontFeatures::StyleSet14; |
flags |= FeatureStyleSet14; |
if (StyleSet15->isVisible()) |
flags |= FontFeatures::StyleSet15; |
flags |= FeatureStyleSet15; |
if (StyleSet16->isVisible()) |
flags |= FontFeatures::StyleSet16; |
flags |= FeatureStyleSet16; |
if (StyleSet17->isVisible()) |
flags |= FontFeatures::StyleSet17; |
flags |= FeatureStyleSet17; |
if (StyleSet18->isVisible()) |
flags |= FontFeatures::StyleSet18; |
flags |= FeatureStyleSet18; |
if (StyleSet19->isVisible()) |
flags |= FontFeatures::StyleSet19; |
flags |= FeatureStyleSet19; |
if (StyleSet20->isVisible()) |
flags |= FontFeatures::StyleSet20; |
flags |= FeatureStyleSet20; |
|
return flags; |
} |
|
quint64 PropertyWidget_FontFeatures::featureFlagsFromList(QStringList features) |
{ |
quint64 flags = 0; |
|
for (int i = 0; i < features.count(); i++) |
{ |
const QString& feature = features.at(i); |
|
if (feature == "liga") |
flags |= FeatureCommonLigatures; |
else if (feature == "clig") |
flags |= FeatureContextualLigatures; |
else if (feature == "dlig") |
flags |= FeatureDiscretionaryLigatures; |
else if (feature == "hlig") |
flags |= FeatureHistoricalLigatures; |
|
else if (feature == "smcp") |
flags |= FeatureSmallCaps; |
else if (feature == "c2sc") |
flags |= FeatureSmallCapsFromCaps; |
else if (feature == "pcap") |
flags |= FeaturePetiteCaps; |
else if (feature == "c2pc") |
flags |= FeaturePetiteCapsFromCaps; |
else if (feature == "unic") |
flags |= FeatureUnicaseCaps; |
else if (feature == "titl") |
flags |= FeatureTiltingCaps; |
|
else if (feature == "lnum") |
flags |= FeatureLiningNumerals; |
else if (feature == "onum") |
flags |= FeatureOldStyleNumerals; |
|
else if (feature == "pnum") |
flags |= FeatureProportionalNumeralWidth; |
else if (feature == "tnum") |
flags |= FeatureTabularNumeralWidth; |
|
else if (feature == "frac") |
flags |= FeatureDiagonalFractions; |
else if (feature == "afrc") |
flags |= FeatureStackedFractions; |
|
else if (feature == "subs") |
flags |= FeatureSubscript; |
else if (feature == "sups") |
flags |= FeatureSuperscript; |
else if (feature == "ordn") |
flags |= FeatureOrdinals; |
|
else if (feature == "zero") |
flags |= FeatureSlashedZero; |
|
else if (feature == "ss01") |
flags |= FeatureStyleSet01; |
else if (feature == "ss02") |
flags |= FeatureStyleSet02; |
else if (feature == "ss03") |
flags |= FeatureStyleSet03; |
else if (feature == "ss04") |
flags |= FeatureStyleSet04; |
else if (feature == "ss05") |
flags |= FeatureStyleSet05; |
else if (feature == "ss06") |
flags |= FeatureStyleSet06; |
else if (feature == "ss07") |
flags |= FeatureStyleSet07; |
else if (feature == "ss08") |
flags |= FeatureStyleSet08; |
else if (feature == "ss09") |
flags |= FeatureStyleSet09; |
else if (feature == "ss10") |
flags |= FeatureStyleSet10; |
else if (feature == "ss11") |
flags |= FeatureStyleSet11; |
else if (feature == "ss12") |
flags |= FeatureStyleSet12; |
else if (feature == "ss13") |
flags |= FeatureStyleSet13; |
else if (feature == "ss14") |
flags |= FeatureStyleSet14; |
else if (feature == "ss15") |
flags |= FeatureStyleSet15; |
else if (feature == "ss16") |
flags |= FeatureStyleSet16; |
else if (feature == "ss17") |
flags |= FeatureStyleSet17; |
else if (feature == "ss18") |
flags |= FeatureStyleSet18; |
else if (feature == "ss19") |
flags |= FeatureStyleSet19; |
else if (feature == "ss20") |
flags |= FeatureStyleSet20; |
} |
|
return flags; |
} |
|
void PropertyWidget_FontFeatures::configureWidgets() |
{ |
bool enabled = false; |