sl@0: /* sl@0: * Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: * All rights reserved. sl@0: * This component and the accompanying materials are made available sl@0: * under the terms of "Eclipse Public License v1.0" sl@0: * which accompanies this distribution, and is available sl@0: * at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: * sl@0: * Initial Contributors: sl@0: * Nokia Corporation - initial contribution. sl@0: * sl@0: * Contributors: sl@0: * sl@0: * Description: sl@0: * sl@0: */ sl@0: sl@0: sl@0: #include sl@0: #include sl@0: #include "FNTSTORE.H" sl@0: #include "OPENFONT.H" sl@0: #include "FNTBODY.H" sl@0: #include "FNTSTD.H" sl@0: #include sl@0: #include "linkedfonts.h" sl@0: #include "linkedfontsprivate.h" sl@0: #include "openfontsprivate.h" sl@0: #include "fbs.h" sl@0: #include sl@0: #include sl@0: sl@0: EXPORT_C CLinkedTypefaceSpecification* CLinkedTypefaceSpecification::NewLC(const TDesC& aTypefaceName) sl@0: { sl@0: CLinkedTypefaceSpecification* self = new (ELeave) CLinkedTypefaceSpecification(); sl@0: CleanupStack::PushL(self); sl@0: self->ConstructL(aTypefaceName); sl@0: return self; sl@0: } sl@0: sl@0: CLinkedTypefaceSpecification::CLinkedTypefaceSpecification() sl@0: { sl@0: } sl@0: sl@0: void CLinkedTypefaceSpecification::ConstructL(const TDesC &aTypefaceName) sl@0: { sl@0: iBody = new (ELeave) CLinkedTypefaceSpecificationBody(); sl@0: sl@0: TInt length = aTypefaceName.Length(); sl@0: if ((length > KMaxTypefaceNameLength) || (length == 0)) sl@0: User::Leave(KErrArgument); sl@0: sl@0: iBody->iLinkedTypefaceName = aTypefaceName.AllocL(); sl@0: } sl@0: sl@0: EXPORT_C void CLinkedTypefaceSpecification::AddTypefaceAtIndexL(CLinkedTypefaceElementSpec& aElementSpec, TInt aIndex) sl@0: { sl@0: DoAddTypefaceL(aElementSpec, aIndex); sl@0: } sl@0: sl@0: EXPORT_C void CLinkedTypefaceSpecification::AddTypefaceAtBackL(CLinkedTypefaceElementSpec& aElementSpec) sl@0: { sl@0: DoAddTypefaceL(aElementSpec, iBody->iTypefaces.Count()); sl@0: } sl@0: sl@0: EXPORT_C TInt CLinkedTypefaceSpecification::RemoveTypeface(TInt aIndex) sl@0: { sl@0: if ( (aIndex < iBody->iTypefaces.Count()) && (aIndex >= 0) ) sl@0: { sl@0: CLinkedTypefaceElementSpec* elementSpec = iBody->iTypefaces[aIndex]; sl@0: iBody->iTypefaces.Remove(aIndex); sl@0: delete elementSpec; sl@0: return KErrNone; sl@0: } sl@0: else sl@0: return KErrNotFound; sl@0: } sl@0: sl@0: EXPORT_C void CLinkedTypefaceSpecification::RegisterLinkedTypefaceL(CFbsTypefaceStore& aStore) sl@0: { sl@0: //Leave if there is no canonical element, or there are multiples. sl@0: //The remaining validation must be performed in fntstore. sl@0: User::LeaveIfError(CanonicalIndex()); sl@0: User::LeaveIfError(aStore.RegisterLinkedTypeface(*this)); sl@0: } sl@0: sl@0: EXPORT_C void CLinkedTypefaceSpecification::FetchLinkedTypefaceSpecificationL(CFbsTypefaceStore& aStore) sl@0: { sl@0: aStore.GetLinkedTypefaceL(*this); sl@0: } sl@0: sl@0: EXPORT_C TInt CLinkedTypefaceSpecification::TypefaceCount() const sl@0: { sl@0: return iBody->iTypefaces.Count(); sl@0: } sl@0: sl@0: EXPORT_C TPtrC CLinkedTypefaceSpecification::Name() const sl@0: { sl@0: return *iBody->iLinkedTypefaceName; sl@0: } sl@0: sl@0: EXPORT_C CLinkedTypefaceSpecification::~CLinkedTypefaceSpecification() sl@0: { sl@0: delete iBody; sl@0: } sl@0: sl@0: EXPORT_C TInt CLinkedTypefaceSpecification::CanonicalIndex() sl@0: { sl@0: TInt index = KErrNotFound; sl@0: for (TInt i = iBody->iTypefaces.Count()-1 ; i >= 0; i--) sl@0: { sl@0: if (iBody->iTypefaces[i]->Canonical()) sl@0: { sl@0: if (index == KErrNotFound) sl@0: index = i; sl@0: else sl@0: return KErrOverflow; sl@0: } sl@0: } sl@0: return index; sl@0: } sl@0: sl@0: EXPORT_C CLinkedTypefaceElementSpec* CLinkedTypefaceSpecification::Typeface(TInt aIndex) const sl@0: { sl@0: if ((aIndex >= iBody->iTypefaces.Count()) || (aIndex < 0)) sl@0: { sl@0: return NULL; sl@0: } sl@0: else sl@0: { sl@0: return iBody->iTypefaces[aIndex]; sl@0: } sl@0: } sl@0: sl@0: void CLinkedTypefaceSpecification::DoAddTypefaceL(CLinkedTypefaceElementSpec& aElementSpec, TInt aPos) sl@0: { sl@0: if (iBody->iTypefaces.Count() == KMaxLinkedTypefaces) sl@0: User::Leave(KErrOverflow); sl@0: sl@0: TInt err = iBody->iTypefaces.Find(&aElementSpec); sl@0: sl@0: if (err != KErrNotFound) sl@0: User::Leave(KErrAlreadyExists); sl@0: sl@0: if (aElementSpec.Canonical() && CanonicalIndex() != KErrNotFound) sl@0: User::Leave(KErrArgument); sl@0: sl@0: if (GroupById(aElementSpec.GroupId()) == NULL) sl@0: User::Leave(KErrArgument); sl@0: sl@0: err = iBody->iTypefaces.Insert(&aElementSpec, aPos); sl@0: sl@0: User::LeaveIfError(err); sl@0: } sl@0: sl@0: EXPORT_C void CLinkedTypefaceSpecification::AddLinkedTypefaceGroupL(CLinkedTypefaceGroup& aGroup) sl@0: { sl@0: if (iBody->iGroups.Count() == KMaxLinkedTypefaceGroups) sl@0: User::Leave(KErrOverflow); sl@0: sl@0: for (TInt i = iBody->iGroups.Count()-1 ; i >= 0 ; i--) sl@0: { sl@0: if (iBody->iGroups[i]->GroupId() == aGroup.GroupId()) sl@0: User::Leave(KErrAlreadyExists); sl@0: } sl@0: iBody->iGroups.AppendL(&aGroup); sl@0: } sl@0: sl@0: EXPORT_C TInt CLinkedTypefaceSpecification::RemoveLinkedTypefaceGroup(TInt aGroupId) sl@0: { sl@0: //Search for & remove the group if it exists sl@0: CLinkedTypefaceGroup* remove = GroupById(aGroupId); sl@0: //If the group has been found & removed remove all associated typefaces sl@0: if (remove) sl@0: { sl@0: CLinkedTypefaceElementSpec* elementSpec; sl@0: for (TInt i = iBody->iTypefaces.Count()-1 ; i >= 0 ; i--) sl@0: { sl@0: elementSpec = iBody->iTypefaces[i]; sl@0: if (elementSpec->GroupId() == aGroupId) sl@0: RemoveTypeface(i); sl@0: } sl@0: iBody->iGroups.Remove(iBody->iGroups.Find(remove)); sl@0: delete remove; sl@0: return KErrNone; sl@0: } sl@0: return KErrNotFound; sl@0: } sl@0: sl@0: EXPORT_C CLinkedTypefaceGroup* CLinkedTypefaceSpecification::GroupById(TInt aGroupId) const sl@0: { sl@0: TInt index; sl@0: TBool found = EFalse; sl@0: for (index = iBody->iGroups.Count()-1; index != -1 ; index--) sl@0: { sl@0: if (iBody->iGroups[index]->GroupId() == aGroupId) sl@0: { sl@0: found = ETrue; sl@0: break; sl@0: } sl@0: } sl@0: sl@0: if (found) sl@0: return iBody->iGroups[index]; sl@0: else sl@0: return NULL; sl@0: } sl@0: sl@0: EXPORT_C CLinkedTypefaceGroup* CLinkedTypefaceSpecification::Group(TInt aGroupIndex) const sl@0: { sl@0: if ( (aGroupIndex >= 0) && (aGroupIndex < iBody->iGroups.Count()) ) sl@0: return iBody->iGroups[aGroupIndex]; sl@0: else sl@0: return NULL; sl@0: } sl@0: sl@0: EXPORT_C TInt CLinkedTypefaceSpecification::GroupCount() const sl@0: { sl@0: return iBody->iGroups.Count(); sl@0: } sl@0: sl@0: EXPORT_C void CLinkedTypefaceSpecification::Clear() sl@0: { sl@0: iBody->iGroups.ResetAndDestroy(); sl@0: iBody->iTypefaces.ResetAndDestroy(); sl@0: } sl@0: sl@0: EXPORT_C void CLinkedTypefaceSpecification::UpdateLinkedTypefaceL(CFbsTypefaceStore& aStore) sl@0: { sl@0: User::LeaveIfError(aStore.UpdateLinkedTypeface(*this)); sl@0: } sl@0: sl@0: CLinkedTypefaceSpecificationBody::CLinkedTypefaceSpecificationBody() sl@0: { sl@0: } sl@0: sl@0: CLinkedTypefaceSpecificationBody::~CLinkedTypefaceSpecificationBody() sl@0: { sl@0: delete iLinkedTypefaceName; sl@0: iTypefaces.ResetAndDestroy(); sl@0: iGroups.ResetAndDestroy(); sl@0: } sl@0: sl@0: EXPORT_C CLinkedTypefaceElementSpec* CLinkedTypefaceElementSpec::NewLC(const TDesC& aElementName, TInt aGroupId) sl@0: { sl@0: CLinkedTypefaceElementSpec* self = new(ELeave)CLinkedTypefaceElementSpec(aGroupId); sl@0: CleanupStack::PushL(self); sl@0: self->ConstructL(aElementName); sl@0: return self; sl@0: } sl@0: sl@0: EXPORT_C CLinkedTypefaceElementSpec::~CLinkedTypefaceElementSpec() sl@0: { sl@0: delete iElementName; sl@0: } sl@0: sl@0: EXPORT_C TPtrC CLinkedTypefaceElementSpec::ElementName() const sl@0: { sl@0: return *iElementName; sl@0: } sl@0: sl@0: EXPORT_C void CLinkedTypefaceElementSpec::SetCanonical(TBool aIsCanonical) sl@0: { sl@0: iIsCanonical = aIsCanonical; sl@0: } sl@0: sl@0: EXPORT_C TBool CLinkedTypefaceElementSpec::Canonical() const sl@0: { sl@0: return iIsCanonical; sl@0: } sl@0: sl@0: CLinkedTypefaceElementSpec::CLinkedTypefaceElementSpec(TInt aGroupId) sl@0: { sl@0: iGroupId = aGroupId; sl@0: iIsCanonical = EFalse; sl@0: } sl@0: sl@0: EXPORT_C TInt CLinkedTypefaceElementSpec::GroupId() const sl@0: { sl@0: return iGroupId; sl@0: } sl@0: sl@0: EXPORT_C COpenFontLinkedTypefaceSpecification* COpenFontLinkedTypefaceSpecification::NewLC(const TDesC& aTypefaceName) sl@0: { sl@0: COpenFontLinkedTypefaceSpecification* self = new (ELeave) COpenFontLinkedTypefaceSpecification(); sl@0: CleanupStack::PushL(self); sl@0: self->ConstructL(aTypefaceName); sl@0: return self; sl@0: } sl@0: sl@0: EXPORT_C COpenFontLinkedTypefaceSpecification* COpenFontLinkedTypefaceSpecification::NewLC(const TLinkedTypefaceSpecificationArgs& aSpecArgs) sl@0: { sl@0: COpenFontLinkedTypefaceSpecification* self = new (ELeave) COpenFontLinkedTypefaceSpecification(); sl@0: CleanupStack::PushL(self); sl@0: self->ConstructL(aSpecArgs); sl@0: return self; sl@0: } sl@0: sl@0: COpenFontLinkedTypefaceSpecification::COpenFontLinkedTypefaceSpecification() sl@0: { sl@0: } sl@0: sl@0: void COpenFontLinkedTypefaceSpecification::ConstructL(const TDesC &aTypefaceName) sl@0: { sl@0: TInt length = aTypefaceName.Length(); sl@0: if ((length > KMaxTypefaceNameLength) || (length == 0)) sl@0: User::Leave(KErrArgument); sl@0: sl@0: iLinkedTypefaceName = aTypefaceName.AllocL(); sl@0: } sl@0: sl@0: void COpenFontLinkedTypefaceSpecification::ConstructL(const TLinkedTypefaceSpecificationArgs& aSpecArgs) sl@0: { sl@0: iLinkedTypefaceName = aSpecArgs.iName.AllocL(); sl@0: sl@0: TInt i; sl@0: sl@0: for (i = 0; i != aSpecArgs.iGroupSize ; i++) sl@0: { sl@0: CLinkedTypefaceGroup* grp = CLinkedTypefaceGroup::NewLC(aSpecArgs.iGroups[i].iGroupId); sl@0: grp->SetBaselineShift(aSpecArgs.iGroups[i].iBaselineShift); sl@0: grp->SetBoldnessPercentage(aSpecArgs.iGroups[i].iBoldnessPercentage); sl@0: grp->SetItalicAngle(aSpecArgs.iGroups[i].iItalicAngle); sl@0: grp->SetScalingOption(aSpecArgs.iGroups[i].iScalingOption); sl@0: AddLinkedTypefaceGroupL(*grp); sl@0: CleanupStack::Pop(grp); sl@0: } sl@0: sl@0: for (i = 0 ; i != aSpecArgs.iSize ; i++) sl@0: { sl@0: COpenFontLinkedTypefaceElementSpec* es = COpenFontLinkedTypefaceElementSpec::NewLC(aSpecArgs.iTypefaces[i].iName, aSpecArgs.iTypefaces[i].iGroupId); sl@0: es->SetCanonical(aSpecArgs.iTypefaces[i].iIsCanonical); sl@0: AddTypefaceAtBackL(*es); sl@0: CleanupStack::Pop(es); sl@0: } sl@0: sl@0: //ASSERT Can. Indexs match. sl@0: } sl@0: sl@0: EXPORT_C COpenFontLinkedTypefaceSpecification::~COpenFontLinkedTypefaceSpecification() sl@0: { sl@0: delete iLinkedTypefaceName; sl@0: iTypefaces.ResetAndDestroy(); sl@0: iTypefaces.Close(); sl@0: iGroups.ResetAndDestroy(); sl@0: iGroups.Close(); sl@0: } sl@0: sl@0: EXPORT_C void COpenFontLinkedTypefaceSpecification::AddTypefaceAtIndexL(COpenFontLinkedTypefaceElementSpec& aElementSpec, TInt aIndex) sl@0: { sl@0: DoAddTypefaceL(aElementSpec, aIndex); sl@0: } sl@0: sl@0: EXPORT_C void COpenFontLinkedTypefaceSpecification::AddTypefaceAtBackL(COpenFontLinkedTypefaceElementSpec& aElementSpec) sl@0: { sl@0: DoAddTypefaceL(aElementSpec, iTypefaces.Count()); sl@0: } sl@0: sl@0: EXPORT_C TInt COpenFontLinkedTypefaceSpecification::RemoveTypeface(TInt aIndex) sl@0: { sl@0: if ( (aIndex < iTypefaces.Count()) && (aIndex >= 0) ) sl@0: { sl@0: COpenFontLinkedTypefaceElementSpec* elementSpec = iTypefaces[aIndex]; sl@0: iTypefaces.Remove(aIndex); sl@0: sl@0: delete elementSpec; sl@0: return KErrNone; sl@0: } sl@0: else sl@0: return KErrNotFound; sl@0: } sl@0: sl@0: EXPORT_C TInt COpenFontLinkedTypefaceSpecification::TypefaceCount() const sl@0: { sl@0: return iTypefaces.Count(); sl@0: } sl@0: sl@0: EXPORT_C TPtrC COpenFontLinkedTypefaceSpecification::Name() const sl@0: { sl@0: return *iLinkedTypefaceName; sl@0: } sl@0: sl@0: EXPORT_C TInt COpenFontLinkedTypefaceSpecification::CanonicalIndex() const sl@0: { sl@0: TInt index = KErrNotFound; sl@0: for (TInt i = iTypefaces.Count()-1 ; i >= 0; i--) sl@0: { sl@0: if (iTypefaces[i]->Canonical()) sl@0: { sl@0: if (index == KErrNotFound) sl@0: index = i; sl@0: else sl@0: return KErrOverflow; sl@0: } sl@0: } sl@0: return index; sl@0: } sl@0: sl@0: EXPORT_C COpenFontLinkedTypefaceElementSpec* COpenFontLinkedTypefaceSpecification::Typeface(TInt aIndex) const sl@0: { sl@0: if ((aIndex >= iTypefaces.Count()) || (aIndex < 0)) sl@0: { sl@0: return NULL; sl@0: } sl@0: else sl@0: { sl@0: return iTypefaces[aIndex]; sl@0: } sl@0: } sl@0: sl@0: void COpenFontLinkedTypefaceSpecification::DoAddTypefaceL(COpenFontLinkedTypefaceElementSpec& aElementSpec, TInt aPos) sl@0: { sl@0: if (iTypefaces.Count() == KMaxLinkedTypefaces) sl@0: User::Leave(KErrOverflow); sl@0: sl@0: TInt err = iTypefaces.Find(&aElementSpec); sl@0: sl@0: if (err != KErrNotFound) sl@0: User::Leave(KErrAlreadyExists); sl@0: sl@0: if (aElementSpec.Canonical() && CanonicalIndex() >= 0) sl@0: User::Leave(KErrArgument); sl@0: sl@0: if (GroupById(aElementSpec.GroupId()) == NULL) sl@0: User::Leave(KErrArgument); sl@0: sl@0: err = iTypefaces.Insert(&aElementSpec, aPos); sl@0: sl@0: User::LeaveIfError(err); sl@0: } sl@0: sl@0: EXPORT_C void COpenFontLinkedTypefaceSpecification::AddLinkedTypefaceGroupL(CLinkedTypefaceGroup& aGroup) sl@0: { sl@0: if (iGroups.Count() == KMaxLinkedTypefaceGroups) sl@0: User::Leave(KErrOverflow); sl@0: sl@0: for (TInt i = iGroups.Count()-1 ; i >= 0 ; i--) sl@0: { sl@0: if (iGroups[i]->GroupId() == aGroup.GroupId()) sl@0: User::Leave(KErrAlreadyExists); sl@0: } sl@0: iGroups.AppendL(&aGroup); sl@0: } sl@0: sl@0: EXPORT_C TInt COpenFontLinkedTypefaceSpecification::RemoveLinkedTypefaceGroup(TInt aGroupId) sl@0: { sl@0: //Search for & remove the group if it exists sl@0: CLinkedTypefaceGroup* remove = GroupById(aGroupId); sl@0: //If the group has been found & removed remove all associated typefaces sl@0: if (remove) sl@0: { sl@0: COpenFontLinkedTypefaceElementSpec* elementSpec; sl@0: for (TInt i = iTypefaces.Count()-1 ; i >= 0 ; i--) sl@0: { sl@0: elementSpec = iTypefaces[i]; sl@0: if (elementSpec->GroupId() == aGroupId) sl@0: RemoveTypeface(i); sl@0: } sl@0: iGroups.Remove(iGroups.Find(remove)); sl@0: delete remove; sl@0: return KErrNone; sl@0: } sl@0: return KErrNotFound; sl@0: } sl@0: sl@0: EXPORT_C CLinkedTypefaceGroup* COpenFontLinkedTypefaceSpecification::GroupById(TInt aGroupId) const sl@0: { sl@0: TInt index; sl@0: TBool found = EFalse; sl@0: for (index = iGroups.Count()-1; index != -1 ; index--) sl@0: { sl@0: if (iGroups[index]->GroupId() == aGroupId) sl@0: { sl@0: found = ETrue; sl@0: break; sl@0: } sl@0: } sl@0: sl@0: if (found) sl@0: return iGroups[index]; sl@0: else sl@0: return NULL; sl@0: } sl@0: sl@0: EXPORT_C const CLinkedTypefaceGroup* COpenFontLinkedTypefaceSpecification::Group(TInt aGroupIndex) const sl@0: { sl@0: if ( (aGroupIndex >= 0) && (aGroupIndex < iGroups.Count()) ) sl@0: return iGroups[aGroupIndex]; sl@0: else sl@0: return NULL; sl@0: } sl@0: sl@0: EXPORT_C TInt COpenFontLinkedTypefaceSpecification::GroupCount() const sl@0: { sl@0: return iGroups.Count(); sl@0: } sl@0: sl@0: COpenFontLinkedTypefaceSpecificationBody::COpenFontLinkedTypefaceSpecificationBody() sl@0: { sl@0: } sl@0: sl@0: // destructor sl@0: COpenFontLinkedTypefaceSpecificationBody::~COpenFontLinkedTypefaceSpecificationBody() sl@0: { sl@0: delete iLinkedTypefaceName; sl@0: iTypefaces.Reset(); sl@0: } sl@0: sl@0: EXPORT_C COpenFontLinkedTypefaceElementSpec* COpenFontLinkedTypefaceElementSpec::NewLC(const TDesC& aElementName, TInt aGroupId) sl@0: { sl@0: COpenFontLinkedTypefaceElementSpec* self = new(ELeave)COpenFontLinkedTypefaceElementSpec(aGroupId); sl@0: CleanupStack::PushL(self); sl@0: self->ConstructL(aElementName); sl@0: return self; sl@0: } sl@0: sl@0: EXPORT_C COpenFontLinkedTypefaceElementSpec::~COpenFontLinkedTypefaceElementSpec() sl@0: { sl@0: delete iElementName; sl@0: delete iFileName; sl@0: } sl@0: sl@0: EXPORT_C TPtrC COpenFontLinkedTypefaceElementSpec::ElementName() const sl@0: { sl@0: return *iElementName; sl@0: } sl@0: sl@0: EXPORT_C void COpenFontLinkedTypefaceElementSpec::SetCanonical(TBool aIsCanonical) sl@0: { sl@0: iIsCanonical = aIsCanonical; sl@0: } sl@0: sl@0: EXPORT_C TBool COpenFontLinkedTypefaceElementSpec::Canonical() const sl@0: { sl@0: return iIsCanonical; sl@0: } sl@0: sl@0: EXPORT_C TInt COpenFontLinkedTypefaceElementSpec::GroupId() const sl@0: { sl@0: return iGroupId; sl@0: } sl@0: sl@0: EXPORT_C TPtrC COpenFontLinkedTypefaceElementSpec::FileName() const sl@0: { sl@0: return *iFileName; sl@0: } sl@0: sl@0: EXPORT_C void COpenFontLinkedTypefaceElementSpec::SetFileNameL(const TDesC& aFileName) sl@0: { sl@0: iFileName = aFileName.AllocL(); sl@0: } sl@0: sl@0: COpenFontLinkedTypefaceElementSpec::COpenFontLinkedTypefaceElementSpec(TInt aGroupId) sl@0: { sl@0: iGroupId = aGroupId; sl@0: } sl@0: sl@0: void COpenFontLinkedTypefaceElementSpec::ConstructL(const TDesC& aName) sl@0: { sl@0: TInt length = aName.Length(); sl@0: if ((length == 0) || (length > KMaxTypefaceNameLength)) sl@0: User::Leave(KErrArgument); sl@0: iElementName = aName.AllocL(); sl@0: } sl@0: sl@0: void CLinkedTypefaceElementSpec::ConstructL(const TDesC& aName) sl@0: { sl@0: TInt length = aName.Length(); sl@0: if ((length == 0) || (length > KMaxTypefaceNameLength)) sl@0: User::Leave(KErrArgument); sl@0: iElementName = aName.AllocL(); sl@0: } sl@0: sl@0: EXPORT_C CLinkedTypefaceGroup* CLinkedTypefaceGroup::NewLC(TInt aGroupId) sl@0: { sl@0: CLinkedTypefaceGroup* self = new (ELeave) CLinkedTypefaceGroup(aGroupId); sl@0: CleanupStack::PushL(self); sl@0: return self; sl@0: } sl@0: sl@0: CLinkedTypefaceGroup::CLinkedTypefaceGroup(TInt aGroupId) sl@0: { sl@0: iGroupId = aGroupId; sl@0: iScalingOption = EScalingNone; sl@0: iBaselineShift = ENoBaselineShift; sl@0: iBoldnessPercentage = -1; sl@0: iItalicAngle = -1; sl@0: } sl@0: sl@0: CLinkedTypefaceGroup::~CLinkedTypefaceGroup() sl@0: { sl@0: } sl@0: sl@0: EXPORT_C void CLinkedTypefaceGroup::SetScalingOption(CLinkedTypefaceGroup::TScalingOption aOption) sl@0: { sl@0: iScalingOption = aOption; sl@0: } sl@0: sl@0: EXPORT_C CLinkedTypefaceGroup::TScalingOption CLinkedTypefaceGroup::ScalingOption() const sl@0: { sl@0: return iScalingOption; sl@0: } sl@0: sl@0: EXPORT_C void CLinkedTypefaceGroup::SetBaselineShift(CLinkedTypefaceGroup::TBaselineShift aShift) sl@0: { sl@0: iBaselineShift = aShift; sl@0: } sl@0: sl@0: EXPORT_C CLinkedTypefaceGroup::TBaselineShift CLinkedTypefaceGroup::BaselineShift() const sl@0: { sl@0: return iBaselineShift; sl@0: } sl@0: sl@0: EXPORT_C void CLinkedTypefaceGroup::SetBoldnessPercentage(TInt aPercentage) sl@0: { sl@0: iBoldnessPercentage = aPercentage; sl@0: } sl@0: sl@0: EXPORT_C TInt CLinkedTypefaceGroup::BoldnessPercentage() const sl@0: { sl@0: return iBoldnessPercentage; sl@0: } sl@0: sl@0: EXPORT_C TInt CLinkedTypefaceGroup::GroupId() const sl@0: { sl@0: return iGroupId; sl@0: } sl@0: sl@0: EXPORT_C TInt CLinkedTypefaceGroup::ItalicAngle() const sl@0: { sl@0: return iItalicAngle; sl@0: } sl@0: sl@0: EXPORT_C void CLinkedTypefaceGroup::SetItalicAngle(TInt aAngle) sl@0: { sl@0: iItalicAngle = aAngle; sl@0: } sl@0: sl@0: EXPORT_C void TLinkedTypefaceSpecificationArgs::operator =(const CLinkedTypefaceSpecification& aRhs) sl@0: { sl@0: iSize = aRhs.TypefaceCount(); sl@0: iGroupSize = aRhs.GroupCount(); sl@0: iName = aRhs.Name(); sl@0: sl@0: TInt i; sl@0: for (i = 0 ; i != iSize ; i++) sl@0: iTypefaces[i] = aRhs.Typeface(i); sl@0: sl@0: for (i = 0 ; i != iGroupSize ; i++) sl@0: iGroups[i] = aRhs.Group(i); sl@0: } sl@0: sl@0: EXPORT_C void TLinkedTypefaceSpecificationArgs::operator =(const COpenFontLinkedTypefaceSpecification &aRhs) sl@0: { sl@0: iSize = aRhs.TypefaceCount(); sl@0: iGroupSize = aRhs.GroupCount(); sl@0: iName = aRhs.Name(); sl@0: sl@0: TInt i; sl@0: for (i = 0 ; i != iSize ; i++) sl@0: iTypefaces[i] = aRhs.Typeface(i); sl@0: sl@0: for (i = 0 ; i != iGroupSize ; i++) sl@0: iGroups[i] = aRhs.Group(i); sl@0: } sl@0: sl@0: void TLinkedTypefaceElementSpecArgs::operator = (const CLinkedTypefaceElementSpec* aRhs) sl@0: { sl@0: iIsCanonical = aRhs->Canonical(); sl@0: iGroupId = aRhs->GroupId(); sl@0: iName = aRhs->ElementName(); sl@0: } sl@0: sl@0: void TLinkedTypefaceElementSpecArgs::operator = (const COpenFontLinkedTypefaceElementSpec* aRhs) sl@0: { sl@0: iIsCanonical = aRhs->Canonical(); sl@0: iGroupId = aRhs->GroupId(); sl@0: iName = aRhs->ElementName(); sl@0: } sl@0: sl@0: void TLinkedTypefaceGroupArgs::operator =(const CLinkedTypefaceGroup* aRhs) sl@0: { sl@0: iGroupId = aRhs->GroupId(); sl@0: iScalingOption = aRhs->ScalingOption(); sl@0: iBaselineShift = aRhs->BaselineShift(); sl@0: iBoldnessPercentage = aRhs->BoldnessPercentage(); sl@0: iItalicAngle = aRhs->ItalicAngle(); sl@0: }