зеркало из https://github.com/mozilla/gecko-dev.git
bug 107025 (part of bug 90813)
anti-aliased scaled bitmap font object code r=shanjian@netscape.com, sr=blizzard@mozilla.org
This commit is contained in:
Родитель
f2be5d0782
Коммит
cdd317c3b4
|
@ -0,0 +1,67 @@
|
|||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* ex: set tabstop=8 softtabstop=2 shiftwidth=2 expandtab: */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Netscape 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/NPL/
|
||||
*
|
||||
* 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) 2001
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Brian Stell <bstell@netscape.com>
|
||||
*
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either 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 NPL, 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 NPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
#ifndef nsXFont_h__
|
||||
#define nsXFont_h__
|
||||
|
||||
class nsXFont {
|
||||
public:
|
||||
virtual ~nsXFont() { };
|
||||
virtual void DrawText8(GdkDrawable *Drawable, GdkGC *GC, PRInt32,
|
||||
PRInt32, const char *, PRUint32) = 0;
|
||||
virtual void DrawText16(GdkDrawable *Drawable, GdkGC *GC, PRInt32,
|
||||
PRInt32, const XChar2b *, PRUint32) = 0;
|
||||
virtual PRBool GetXFontProperty(Atom, unsigned long *) = 0;
|
||||
virtual XFontStruct *GetXFontStruct() = 0;
|
||||
inline PRBool IsSingleByte() { return mIsSingleByte; };
|
||||
virtual PRBool LoadFont() = 0;
|
||||
virtual void TextExtents8(const char *, PRUint32, PRInt32*, PRInt32*,
|
||||
PRInt32*, PRInt32*, PRInt32*) = 0;
|
||||
virtual void TextExtents16(const XChar2b *, PRUint32, PRInt32*,
|
||||
PRInt32*, PRInt32*, PRInt32*, PRInt32*) =0;
|
||||
virtual PRInt32 TextWidth8(const char *, PRUint32) = 0;
|
||||
virtual PRInt32 TextWidth16(const XChar2b *, PRUint32) = 0;
|
||||
//protected:
|
||||
virtual void UnloadFont() = 0;
|
||||
protected:
|
||||
PRBool mIsSingleByte;
|
||||
};
|
||||
|
||||
#endif /* nsXFont_h__ */
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -0,0 +1,120 @@
|
|||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* ex: set tabstop=8 softtabstop=2 shiftwidth=2 expandtab: */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Netscape 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/NPL/
|
||||
*
|
||||
* 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) 2001
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Brian Stell <bstell@netscape.com>
|
||||
*
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either 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 NPL, 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 NPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
#ifndef nsXFontAAScaledBitmap_h__
|
||||
#define nsXFontAAScaledBitmap_h__
|
||||
|
||||
#include <gdk/gdk.h>
|
||||
#include <gdk/gdkx.h>
|
||||
|
||||
#include <X11/Xlib.h>
|
||||
#include "nspr.h"
|
||||
#include "nsXFont.h"
|
||||
#include "nsAntiAliasedGlyph.h"
|
||||
|
||||
extern PRUint8 gAASBDarkTextMinValue;
|
||||
extern double gAASBDarkTextGain;
|
||||
extern PRUint8 gAASBLightTextMinValue;
|
||||
extern double gAASBLightTextGain;
|
||||
|
||||
|
||||
#define SCALED_SIZE(x) (PRInt32)(rint(((double)(x))*mRatio))
|
||||
class nsHashtable;
|
||||
|
||||
class nsXFontAAScaledBitmap : public nsXFont {
|
||||
public:
|
||||
nsXFontAAScaledBitmap(Display *aDisplay, int aScreen, GdkFont *,
|
||||
PRUint32, PRUint32);
|
||||
~nsXFontAAScaledBitmap();
|
||||
|
||||
void DrawText8(GdkDrawable *Drawable, GdkGC *GC, PRInt32, PRInt32,
|
||||
const char *, PRUint32);
|
||||
void DrawText16(GdkDrawable *Drawable, GdkGC *GC, PRInt32, PRInt32,
|
||||
const XChar2b *, PRUint32);
|
||||
PRBool GetXFontProperty(Atom, unsigned long *);
|
||||
XFontStruct *GetXFontStruct();
|
||||
PRBool LoadFont();
|
||||
void TextExtents8(const char *, PRUint32, PRInt32*, PRInt32*,
|
||||
PRInt32*, PRInt32*, PRInt32*);
|
||||
void TextExtents16(const XChar2b *, PRUint32, PRInt32*, PRInt32*,
|
||||
PRInt32*, PRInt32*, PRInt32*);
|
||||
PRInt32 TextWidth8(const char *, PRUint32);
|
||||
PRInt32 TextWidth16(const XChar2b *, PRUint32);
|
||||
void UnloadFont();
|
||||
|
||||
public:
|
||||
static PRBool InitGlobals(Display *aDisplay, int aScreen);
|
||||
static void FreeGlobals();
|
||||
|
||||
protected:
|
||||
void DrawText8or16(GdkDrawable *Drawable, GdkGC *GC, PRInt32,
|
||||
PRInt32, void *, PRUint32);
|
||||
void TextExtents8or16(void *, PRUint32, PRInt32*, PRInt32*,
|
||||
PRInt32*, PRInt32*, PRInt32*);
|
||||
PRBool GetScaledGreyImage(const char *, nsAntiAliasedGlyph **);
|
||||
#ifdef DEBUG
|
||||
void dump_XImage_blue_data(XImage *ximage);
|
||||
#endif
|
||||
|
||||
protected:
|
||||
PRBool mAlreadyLoaded;
|
||||
Display *mDisplay;
|
||||
GC mForegroundGC;
|
||||
GdkFont *mGdkFont;
|
||||
nsHashtable* mGlyphHash;
|
||||
double mRatio;
|
||||
XFontStruct mScaledFontInfo;
|
||||
GlyphMetrics mScaledMax;
|
||||
int mScreen;
|
||||
Pixmap mUnscaledBitmap;
|
||||
XFontStruct *mUnscaledFontInfo;
|
||||
GlyphMetrics mUnscaledMax;
|
||||
PRUint16 mUnscaledSize;
|
||||
|
||||
// class globals
|
||||
protected:
|
||||
static Display *sDisplay;
|
||||
static GC sBackgroundGC; // used to clear the pixmaps
|
||||
// before drawing the glyph
|
||||
static PRUint8 sWeightedScaleDarkText[256];
|
||||
static PRUint8 sWeightedScaleLightText[256];
|
||||
};
|
||||
|
||||
#endif /* nsXFontAAScaledBitmap_h__ */
|
|
@ -0,0 +1,153 @@
|
|||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* ex: set tabstop=8 softtabstop=2 shiftwidth=2 expandtab: */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Netscape 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/NPL/
|
||||
*
|
||||
* 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) 2001
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Brian Stell <bstell@netscape.com>
|
||||
*
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either 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 NPL, 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 NPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
#include "nscore.h"
|
||||
#include "nsXFontNormal.h"
|
||||
#include "nsRenderingContextGTK.h"
|
||||
|
||||
void
|
||||
nsXFontNormal::DrawText8(GdkDrawable *aDrawable, GdkGC *aGC,
|
||||
PRInt32 aX, PRInt32 aY,
|
||||
const char *aString, PRUint32 aLength)
|
||||
{
|
||||
nsRenderingContextGTK::my_gdk_draw_text(aDrawable, mGdkFont, aGC,
|
||||
aX, aY, aString, aLength);
|
||||
}
|
||||
|
||||
void
|
||||
nsXFontNormal::DrawText16(GdkDrawable *aDrawable, GdkGC *aGC,
|
||||
PRInt32 aX, PRInt32 aY,
|
||||
const XChar2b *aString, PRUint32 aLength)
|
||||
{
|
||||
nsRenderingContextGTK::my_gdk_draw_text(aDrawable, mGdkFont, aGC,
|
||||
aX, aY,
|
||||
(const char *)aString, aLength*2);
|
||||
}
|
||||
|
||||
PRBool
|
||||
nsXFontNormal::GetXFontProperty(Atom aAtom, unsigned long *aValue)
|
||||
{
|
||||
NS_ASSERTION(mGdkFont, "GetXFontProperty called before font loaded");
|
||||
if (mGdkFont==nsnull)
|
||||
return PR_FALSE;
|
||||
|
||||
XFontStruct *fontInfo = (XFontStruct *)GDK_FONT_XFONT(mGdkFont);
|
||||
|
||||
return ::XGetFontProperty(fontInfo, aAtom, aValue);
|
||||
}
|
||||
|
||||
XFontStruct *
|
||||
nsXFontNormal::GetXFontStruct()
|
||||
{
|
||||
NS_ASSERTION(mGdkFont, "GetXFontStruct called before font loaded");
|
||||
if (mGdkFont==nsnull)
|
||||
return nsnull;
|
||||
|
||||
return (XFontStruct *)GDK_FONT_XFONT(mGdkFont);
|
||||
}
|
||||
|
||||
PRBool
|
||||
nsXFontNormal::LoadFont()
|
||||
{
|
||||
if (!mGdkFont)
|
||||
return PR_FALSE;
|
||||
XFontStruct *fontInfo = (XFontStruct *)GDK_FONT_XFONT(mGdkFont);
|
||||
mIsSingleByte = (fontInfo->min_byte1 == 0) && (fontInfo->max_byte1 == 0);
|
||||
return PR_TRUE;
|
||||
}
|
||||
|
||||
nsXFontNormal::nsXFontNormal(GdkFont *aGdkFont)
|
||||
{
|
||||
mGdkFont = ::gdk_font_ref(aGdkFont);
|
||||
}
|
||||
|
||||
void
|
||||
nsXFontNormal::TextExtents8(const char *aString, PRUint32 aLength,
|
||||
PRInt32* aLBearing, PRInt32* aRBearing,
|
||||
PRInt32* aWidth, PRInt32* aAscent,
|
||||
PRInt32* aDescent)
|
||||
{
|
||||
gdk_text_extents(mGdkFont, aString, aLength,
|
||||
aLBearing, aRBearing, aWidth, aAscent, aDescent);
|
||||
}
|
||||
|
||||
void
|
||||
nsXFontNormal::TextExtents16(const XChar2b *aString, PRUint32 aLength,
|
||||
PRInt32* aLBearing, PRInt32* aRBearing,
|
||||
PRInt32* aWidth, PRInt32* aAscent,
|
||||
PRInt32* aDescent)
|
||||
{
|
||||
gdk_text_extents(mGdkFont, (const char *)aString, aLength*2,
|
||||
aLBearing, aRBearing, aWidth, aAscent, aDescent);
|
||||
}
|
||||
|
||||
PRInt32
|
||||
nsXFontNormal::TextWidth8(const char *aString, PRUint32 aLength)
|
||||
{
|
||||
NS_ASSERTION(mGdkFont, "TextWidth8 called before font loaded");
|
||||
if (mGdkFont==nsnull)
|
||||
return 0;
|
||||
PRInt32 width = gdk_text_width(mGdkFont, aString, aLength);
|
||||
return width;
|
||||
}
|
||||
|
||||
PRInt32
|
||||
nsXFontNormal::TextWidth16(const XChar2b *aString, PRUint32 aLength)
|
||||
{
|
||||
NS_ASSERTION(mGdkFont, "TextWidth16 called before font loaded");
|
||||
if (mGdkFont==nsnull)
|
||||
return 0;
|
||||
PRInt32 width = gdk_text_width(mGdkFont, (const char *)aString, aLength*2);
|
||||
return width;
|
||||
}
|
||||
|
||||
void
|
||||
nsXFontNormal::UnloadFont()
|
||||
{
|
||||
delete this;
|
||||
}
|
||||
|
||||
nsXFontNormal::~nsXFontNormal()
|
||||
{
|
||||
if (mGdkFont) {
|
||||
::gdk_font_unref(mGdkFont);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* ex: set tabstop=8 softtabstop=2 shiftwidth=2 expandtab: */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Netscape 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/NPL/
|
||||
*
|
||||
* 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) 2001
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Brian Stell <bstell@netscape.com>
|
||||
*
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either 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 NPL, 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 NPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
#ifndef nsXFontNormal_h__
|
||||
#define nsXFontNormal_h__
|
||||
|
||||
#include <gdk/gdk.h>
|
||||
#include <gdk/gdkx.h>
|
||||
|
||||
#include <X11/Xlib.h>
|
||||
#include "nspr.h"
|
||||
#include "nsXFont.h"
|
||||
|
||||
class nsXFontNormal : public nsXFont {
|
||||
public:
|
||||
nsXFontNormal(GdkFont *);
|
||||
~nsXFontNormal();
|
||||
|
||||
void DrawText8(GdkDrawable *Drawable, GdkGC *GC, PRInt32, PRInt32,
|
||||
const char *, PRUint32);
|
||||
void DrawText16(GdkDrawable *Drawable, GdkGC *GC, PRInt32, PRInt32,
|
||||
const XChar2b *, PRUint32);
|
||||
PRBool GetXFontProperty(Atom, unsigned long *);
|
||||
XFontStruct *GetXFontStruct();
|
||||
PRBool LoadFont();
|
||||
void TextExtents8(const char *, PRUint32, PRInt32*, PRInt32*,
|
||||
PRInt32*, PRInt32*, PRInt32*);
|
||||
void TextExtents16(const XChar2b *, PRUint32, PRInt32*, PRInt32*,
|
||||
PRInt32*, PRInt32*, PRInt32*);
|
||||
PRInt32 TextWidth8(const char *, PRUint32);
|
||||
PRInt32 TextWidth16(const XChar2b *, PRUint32);
|
||||
void UnloadFont();
|
||||
protected:
|
||||
GdkFont *mGdkFont;
|
||||
};
|
||||
|
||||
#endif /* nsXFontNormal_h__ */
|
Загрузка…
Ссылка в новой задаче