/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is mozilla.org code. * * The Initial Developer of the Original Code is * Netscape Communications Corporation. * Portions created by the Initial Developer are Copyright (C) 1998 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * Alternatively, the contents of this file may be used under the terms of * either of the GNU General Public License Version 2 or later (the "GPL"), * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ #ifndef nsFontMetricsPh_h__ #define nsFontMetricsPh_h__ #include #include "nsIFontMetrics.h" #include "nsIFontEnumerator.h" #include "nsFont.h" #include "nsString.h" #include "nsIDeviceContext.h" #include "nsCRT.h" #include "nsDeviceContextPh.h" #include "nsCOMPtr.h" class nsFontMetricsPh : public nsIFontMetrics { public: nsFontMetricsPh(); virtual ~nsFontMetricsPh(); NS_DECL_AND_IMPL_ZEROING_OPERATOR_NEW NS_DECL_ISUPPORTS NS_IMETHOD Init(const nsFont& aFont, nsIAtom* aLangGroup, nsIDeviceContext* aContext); inline NS_IMETHODIMP GetLangGroup(nsIAtom** aLangGroup) { if( !aLangGroup ) return NS_ERROR_NULL_POINTER; *aLangGroup = mLangGroup; NS_IF_ADDREF(*aLangGroup); return NS_OK; } NS_IMETHODIMP Destroy() { mDeviceContext = nsnull; return NS_OK; } inline NS_IMETHODIMP GetXHeight(nscoord& aResult) { aResult = mXHeight; return NS_OK; } inline NS_IMETHODIMP GetSuperscriptOffset(nscoord& aResult) { aResult = mSuperscriptOffset; return NS_OK; } inline NS_IMETHOD GetSubscriptOffset(nscoord& aResult) { aResult = mSubscriptOffset; return NS_OK; } inline NS_IMETHOD GetStrikeout(nscoord& aOffset, nscoord& aSize) { aOffset = mStrikeoutOffset; aSize = mStrikeoutSize; return NS_OK; } inline NS_IMETHOD GetUnderline(nscoord& aOffset, nscoord& aSize) { aOffset = mUnderlineOffset; aSize = mUnderlineSize; return NS_OK; } inline NS_IMETHODIMP GetHeight(nscoord &aHeight) { aHeight = mHeight; return NS_OK; } inline NS_IMETHODIMP GetNormalLineHeight(nscoord &aHeight) { aHeight = mEmHeight + mLeading; return NS_OK; } inline NS_IMETHODIMP GetLeading(nscoord &aLeading) { aLeading = mLeading; return NS_OK; } inline NS_IMETHODIMP GetEmHeight(nscoord &aHeight) { aHeight = mEmHeight; return NS_OK; } inline NS_IMETHODIMP GetEmAscent(nscoord &aAscent) { aAscent = mEmAscent; return NS_OK; } inline NS_IMETHODIMP GetEmDescent(nscoord &aDescent) { aDescent = mEmDescent; return NS_OK; } inline NS_IMETHODIMP GetMaxHeight(nscoord &aHeight) { aHeight = mMaxHeight; return NS_OK; } inline NS_IMETHODIMP GetMaxAscent(nscoord &aAscent) { aAscent = mMaxAscent; return NS_OK; } inline NS_IMETHODIMP GetMaxDescent(nscoord &aDescent) { aDescent = mMaxDescent; return NS_OK; } inline NS_IMETHODIMP GetMaxAdvance(nscoord &aAdvance) { aAdvance = mMaxAdvance; return NS_OK; } inline NS_IMETHODIMP GetAveCharWidth(nscoord &aAveCharWidth) { aAveCharWidth = mAveCharWidth; return NS_OK; } inline NS_IMETHODIMP GetFontHandle(nsFontHandle &aHandle) { aHandle = (nsFontHandle) mFontHandle; return NS_OK; } inline NS_IMETHODIMP GetSpaceWidth(nscoord &aSpaceWidth) { aSpaceWidth = mSpaceWidth; return NS_OK; } // No known string length limits on Photon virtual PRInt32 GetMaxStringLength() { return PR_INT32_MAX; } protected: void RealizeFont(); nsIDeviceContext *mDeviceContext; char *mFontHandle; /* Photon Fonts are just a string */ nscoord mHeight; nscoord mAscent; nscoord mDescent; nscoord mLeading; nscoord mEmHeight; nscoord mEmAscent; nscoord mEmDescent; nscoord mMaxHeight; nscoord mMaxAscent; nscoord mMaxDescent; nscoord mMaxAdvance; nscoord mXHeight; nscoord mSuperscriptOffset; nscoord mSubscriptOffset; nscoord mStrikeoutSize; nscoord mStrikeoutOffset; nscoord mUnderlineSize; nscoord mUnderlineOffset; nscoord mSpaceWidth; nscoord mAveCharWidth; // No known string length limits on Photon virtual PRInt32 GetMaxStringLength() { return PR_INT32_MAX; } nsCOMPtr mLangGroup; }; class nsFontEnumeratorPh : public nsIFontEnumerator { public: nsFontEnumeratorPh(); NS_DECL_ISUPPORTS // NS_DECL_NSIFONTENUMERATOR inline NS_IMETHODIMP HaveFontFor(const char* aLangGroup, PRBool* aResult) { NS_ENSURE_ARG_POINTER(aResult); *aResult = PR_TRUE; // always return true for now. return NS_OK; } inline NS_IMETHODIMP GetDefaultFont(const char *aLangGroup, const char *aGeneric, PRUnichar **aResult) { // aLangGroup=null or "" means any (i.e., don't care) // aGeneric=null or "" means any (i.e, don't care) NS_ENSURE_ARG_POINTER(aResult); *aResult = nsnull; return NS_OK; } inline NS_IMETHODIMP UpdateFontList(PRBool *updateFontList) { *updateFontList = PR_FALSE; // always return false for now return NS_OK; } inline NS_IMETHODIMP EnumerateAllFonts(PRUint32* aCount, PRUnichar*** aResult) { return EnumerateFonts( nsnull, nsnull, aCount, aResult ); } NS_IMETHOD EnumerateFonts( const char* aLangGroup, const char* aGeneric, PRUint32* aCount, PRUnichar*** aResult ); }; #endif