Back to index

lightning-sunbird  0.9+nobinonly
nsICairoFontMetrics.h
Go to the documentation of this file.
00001 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
00002 /* vim:expandtab:shiftwidth=4:tabstop=4:
00003  */
00004 /* ***** BEGIN LICENSE BLOCK *****
00005  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
00006  *
00007  * The contents of this file are subject to the Mozilla Public License Version
00008  * 1.1 (the "License"); you may not use this file except in compliance with
00009  * the License. You may obtain a copy of the License at
00010  * http://www.mozilla.org/MPL/
00011  *
00012  * Software distributed under the License is distributed on an "AS IS" basis,
00013  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
00014  * for the specific language governing rights and limitations under the
00015  * License.
00016  *
00017  * The Original Code is mozilla.org code.
00018  *
00019  * The Initial Developer of the Original Code is
00020  * Christopher Blizzard <blizzard@mozilla.org>.  
00021  * Portions created by the Initial Developer are Copyright (C) 2002
00022  * the Initial Developer. All Rights Reserved.
00023  *
00024  * Contributor(s):
00025  *
00026  * Alternatively, the contents of this file may be used under the terms of
00027  * either the GNU General Public License Version 2 or later (the "GPL"), or
00028  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
00029  * in which case the provisions of the GPL or the LGPL are applicable instead
00030  * of those above. If you wish to allow use of your version of this file only
00031  * under the terms of either the GPL or the LGPL, and not to allow others to
00032  * use your version of this file under the terms of the MPL, indicate your
00033  * decision by deleting the provisions above and replace them with the notice
00034  * and other provisions required by the GPL or the LGPL. If you do not delete
00035  * the provisions above, a recipient may use your version of this file under
00036  * the terms of any one of the MPL, the GPL or the LGPL.
00037  *
00038  * ***** END LICENSE BLOCK ***** */
00039 
00040 #ifndef __nsICairoFontMetrics_h
00041 #define __nsICairoFontMetrics_h
00042 
00043 #include "nsIFontMetrics.h"
00044 #include "nsIRenderingContext.h"
00045 
00046 class nsCairoDrawingSurface;
00047 class nsCairoRenderingContext;
00048 
00049 class nsICairoFontMetrics : public nsIFontMetrics {
00050 public:
00051     // Get the width for this string.  aWidth will be updated with the
00052     // width in points, not twips.  Callers must convert it if they
00053     // want it in another format.
00054     virtual nsresult GetWidth(const char* aString, PRUint32 aLength,
00055                               nscoord& aWidth) = 0;
00056     // aCachedOffset will be updated with a new offset.
00057     virtual nsresult GetWidth(const PRUnichar* aString, PRUint32 aLength,
00058                               nscoord& aWidth, PRInt32 *aFontID) = 0;
00059 
00060     // Get the text dimensions for this string
00061     virtual nsresult GetTextDimensions(const PRUnichar* aString,
00062                                        PRUint32 aLength,
00063                                        nsTextDimensions& aDimensions, 
00064                                        PRInt32* aFontID) = 0;
00065     virtual nsresult GetTextDimensions(const char*         aString,
00066                                        PRInt32             aLength,
00067                                        PRInt32             aAvailWidth,
00068                                        PRInt32*            aBreaks,
00069                                        PRInt32             aNumBreaks,
00070                                        nsTextDimensions&   aDimensions,
00071                                        PRInt32&            aNumCharsFit,
00072                                        nsTextDimensions&   aLastWordDimensions,
00073                                        PRInt32*            aFontID) = 0;
00074     virtual nsresult GetTextDimensions(const PRUnichar*    aString,
00075                                        PRInt32             aLength,
00076                                        PRInt32             aAvailWidth,
00077                                        PRInt32*            aBreaks,
00078                                        PRInt32             aNumBreaks,
00079                                        nsTextDimensions&   aDimensions,
00080                                        PRInt32&            aNumCharsFit,
00081                                        nsTextDimensions&   aLastWordDimensions,
00082                                        PRInt32*            aFontID) = 0;
00083 
00084     // Draw a string using this font handle on the surface passed in.  
00085     virtual nsresult DrawString(const char *aString, PRUint32 aLength,
00086                                 nscoord aX, nscoord aY,
00087                                 const nscoord* aSpacing,
00088                                 nsCairoRenderingContext *aContext,
00089                                 nsCairoDrawingSurface *aSurface) = 0;
00090     // aCachedOffset will be updated with a new offset.
00091     virtual nsresult DrawString(const PRUnichar* aString, PRUint32 aLength,
00092                                 nscoord aX, nscoord aY,
00093                                 PRInt32 aFontID,
00094                                 const nscoord* aSpacing,
00095                                 nsCairoRenderingContext *aContext,
00096                                 nsCairoDrawingSurface *aSurface) = 0;
00097 
00098 #ifdef MOZ_MATHML
00099     // These two functions get the bounding metrics for this handle,
00100     // updating the aBoundingMetrics in Points.  This means that the
00101     // caller will have to update them to twips before passing it
00102     // back.
00103     virtual nsresult GetBoundingMetrics(const char *aString, PRUint32 aLength,
00104                                         nsBoundingMetrics &aBoundingMetrics,
00105                                         nsCairoRenderingContext *aContext) = 0;
00106     // aCachedOffset will be updated with a new offset.
00107     virtual nsresult GetBoundingMetrics(const PRUnichar *aString,
00108                                         PRUint32 aLength,
00109                                         nsBoundingMetrics &aBoundingMetrics,
00110                                         PRInt32 *aFontID,
00111                                         nsCairoRenderingContext *aContext) = 0;
00112 #endif /* MOZ_MATHML */
00113 
00114     // Set the direction of the text rendering
00115     virtual nsresult SetRightToLeftText(PRBool aIsRTL) = 0;
00116 
00117 };
00118 
00119 #endif /* __nsICairoFontMetrics_h */