зеркало из https://github.com/mozilla/pjs.git
Fixed gfxQtFont according to changes in bug 437356 Set up unified font entry object
Added empty gfxQtNativeRenderer and fixed nsObjectFrame for MOZ_WIDGET_QT
This commit is contained in:
Родитель
48f2e8b505
Коммит
96da8bd697
|
@ -78,7 +78,7 @@ endif
|
||||||
|
|
||||||
ifeq ($(MOZ_WIDGET_TOOLKIT),qt)
|
ifeq ($(MOZ_WIDGET_TOOLKIT),qt)
|
||||||
EXPORTS += gfxQtPlatform.h gfxQPainterSurface.h
|
EXPORTS += gfxQtPlatform.h gfxQPainterSurface.h
|
||||||
EXPORTS += gfxXlibSurface.h gfxXlibNativeRenderer.h
|
EXPORTS += gfxXlibSurface.h gfxQtNativeRenderer.h
|
||||||
EXPORTS += gfxQtFonts.h
|
EXPORTS += gfxQtFonts.h
|
||||||
ifdef MOZ_ENABLE_GLITZ
|
ifdef MOZ_ENABLE_GLITZ
|
||||||
REQUIRES += glitzglx
|
REQUIRES += glitzglx
|
||||||
|
|
|
@ -53,29 +53,29 @@ typedef struct FT_FaceRec_* FT_Face;
|
||||||
* and character map info.
|
* and character map info.
|
||||||
*/
|
*/
|
||||||
class FontEntry;
|
class FontEntry;
|
||||||
class FontFamily
|
class FontFamily : public gfxFontFamily
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
THEBES_INLINE_DECL_REFCOUNTING(FontFamily)
|
|
||||||
|
|
||||||
FontFamily(const nsAString& aName) :
|
FontFamily(const nsAString& aName) :
|
||||||
mName(aName) { }
|
gfxFontFamily(aName) { }
|
||||||
|
|
||||||
FontEntry *FindFontEntry(const gfxFontStyle& aFontStyle);
|
FontEntry *FindFontEntry(const gfxFontStyle& aFontStyle);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
nsTArray<nsRefPtr<FontEntry> > mFaces;
|
nsTArray<nsRefPtr<FontEntry> > mFaces;
|
||||||
nsString mName;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class FontEntry
|
class FontEntry : public gfxFontEntry
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
THEBES_INLINE_DECL_REFCOUNTING(FontEntry)
|
FontEntry(const nsAString& aFaceName) :
|
||||||
|
gfxFontEntry(aFaceName)
|
||||||
FontEntry(const nsString& aFaceName) :
|
{
|
||||||
mFontFace(nsnull), mFaceName(aFaceName), mFTFontIndex(0), mUnicodeFont(PR_FALSE), mSymbolFont(PR_FALSE)
|
mFontFace = nsnull;
|
||||||
{ }
|
mFTFontIndex = 0;
|
||||||
|
mUnicodeFont = PR_FALSE;
|
||||||
|
mSymbolFont = PR_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
FontEntry(const FontEntry& aFontEntry);
|
FontEntry(const FontEntry& aFontEntry);
|
||||||
~FontEntry();
|
~FontEntry();
|
||||||
|
@ -92,14 +92,8 @@ public:
|
||||||
nsCString mFilename;
|
nsCString mFilename;
|
||||||
PRUint8 mFTFontIndex;
|
PRUint8 mFTFontIndex;
|
||||||
|
|
||||||
PRPackedBool mUnicodeFont : 1;
|
|
||||||
PRPackedBool mSymbolFont : 1;
|
|
||||||
PRPackedBool mTrueType : 1;
|
PRPackedBool mTrueType : 1;
|
||||||
PRPackedBool mIsType1 : 1;
|
PRPackedBool mIsType1 : 1;
|
||||||
PRPackedBool mItalic : 1;
|
|
||||||
PRUint16 mWeight;
|
|
||||||
|
|
||||||
gfxSparseBitSet mCharacterMap;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -119,7 +113,7 @@ public: // new functions
|
||||||
virtual nsString GetUniqueName();
|
virtual nsString GetUniqueName();
|
||||||
virtual PRUint32 GetSpaceGlyph();
|
virtual PRUint32 GetSpaceGlyph();
|
||||||
|
|
||||||
FontEntry *GetFontEntry() { return mFontEntry; }
|
FontEntry *GetFontEntry();
|
||||||
private:
|
private:
|
||||||
cairo_scaled_font_t *mScaledFont;
|
cairo_scaled_font_t *mScaledFont;
|
||||||
|
|
||||||
|
@ -129,7 +123,6 @@ private:
|
||||||
Metrics mMetrics;
|
Metrics mMetrics;
|
||||||
gfxFloat mAdjustedSize;
|
gfxFloat mAdjustedSize;
|
||||||
|
|
||||||
nsRefPtr<FontEntry> mFontEntry;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class THEBES_API gfxQtFontGroup : public gfxFontGroup {
|
class THEBES_API gfxQtFontGroup : public gfxFontGroup {
|
||||||
|
|
|
@ -0,0 +1,112 @@
|
||||||
|
/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||||
|
* ***** 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 Novell code.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is Novell.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2006
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
* rocallahan@novell.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 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 GFXQTNATIVERENDER_H_
|
||||||
|
#define GFXQTNATIVERENDER_H_
|
||||||
|
|
||||||
|
#include "gfxColor.h"
|
||||||
|
|
||||||
|
class gfxASurface;
|
||||||
|
class gfxContext;
|
||||||
|
|
||||||
|
class QWidget;
|
||||||
|
class QRect;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class lets us take code that draws into an Qt drawable and lets us
|
||||||
|
* use it to draw into any Thebes context. The user should subclass this class,
|
||||||
|
* override NativeDraw, and then call Draw(). The drawing will be subjected
|
||||||
|
* to all Thebes transformations, clipping etc.
|
||||||
|
*/
|
||||||
|
class THEBES_API gfxQtNativeRenderer {
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* Perform the native drawing.
|
||||||
|
* @param offsetX draw at this offset into the given drawable
|
||||||
|
* @param offsetY draw at this offset into the given drawable
|
||||||
|
* @param clipRects an array of rects; clip to the union
|
||||||
|
* @param numClipRects the number of rects in the array, or zero if
|
||||||
|
* no clipping is required
|
||||||
|
*/
|
||||||
|
virtual nsresult NativeDraw(QWidget * drawable, short offsetX,
|
||||||
|
short offsetY, QRect * clipRects, PRUint32 numClipRects) = 0;
|
||||||
|
|
||||||
|
enum {
|
||||||
|
// If set, then Draw() is opaque, i.e., every pixel in the intersection
|
||||||
|
// of the clipRect and (offset.x,offset.y,bounds.width,bounds.height)
|
||||||
|
// will be set and there is no dependence on what the existing pixels
|
||||||
|
// in the drawable are set to.
|
||||||
|
DRAW_IS_OPAQUE = 0x01,
|
||||||
|
// If set, then offset may be non-zero; if not set, then Draw() can
|
||||||
|
// only be called with offset==(0,0)
|
||||||
|
DRAW_SUPPORTS_OFFSET = 0x02,
|
||||||
|
// If set, then numClipRects can be zero or one
|
||||||
|
DRAW_SUPPORTS_CLIP_RECT = 0x04,
|
||||||
|
// If set, then numClipRects can be any value. If neither this
|
||||||
|
// nor CLIP_RECT are set, then numClipRects will be zero
|
||||||
|
DRAW_SUPPORTS_CLIP_LIST = 0x08,
|
||||||
|
// If set, then the visual passed in can be any visual, otherwise the
|
||||||
|
// visual passed in must be the default visual for dpy's default screen
|
||||||
|
DRAW_SUPPORTS_NONDEFAULT_VISUAL = 0x10,
|
||||||
|
// If set, then the Screen 'screen' in the callback can be different
|
||||||
|
// from the default Screen of the display passed to 'Draw' and can be
|
||||||
|
// on a different display.
|
||||||
|
DRAW_SUPPORTS_ALTERNATE_SCREEN = 0x20
|
||||||
|
};
|
||||||
|
|
||||||
|
struct DrawOutput {
|
||||||
|
nsRefPtr<gfxASurface> mSurface;
|
||||||
|
PRPackedBool mUniformAlpha;
|
||||||
|
PRPackedBool mUniformColor;
|
||||||
|
gfxRGBA mColor;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param flags see above
|
||||||
|
* @param bounds Draw()'s drawing is guaranteed to be restricted to
|
||||||
|
* the rectangle (offset.x,offset.y,bounds.width,bounds.height)
|
||||||
|
* @param dpy a display to use for the drawing if ctx doesn't have one
|
||||||
|
* @param resultSurface if non-null, we will try to capture a copy of the
|
||||||
|
* rendered image into a surface similar to the surface of ctx; if
|
||||||
|
* successful, a pointer to the new gfxASurface is stored in *resultSurface,
|
||||||
|
* otherwise *resultSurface is set to nsnull.
|
||||||
|
*/
|
||||||
|
nsresult Draw(gfxContext* ctx, int width, int height,
|
||||||
|
PRUint32 flags, DrawOutput* output);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /*GFXQTNATIVERENDER_H_*/
|
|
@ -113,11 +113,11 @@ endif
|
||||||
|
|
||||||
ifeq ($(MOZ_WIDGET_TOOLKIT),qt)
|
ifeq ($(MOZ_WIDGET_TOOLKIT),qt)
|
||||||
CPPSRCS += gfxQtPlatform.cpp gfxQPainterSurface.cpp
|
CPPSRCS += gfxQtPlatform.cpp gfxQPainterSurface.cpp
|
||||||
CPPSRCS += gfxXlibSurface.cpp gfxXlibNativeRenderer.cpp
|
CPPSRCS += gfxXlibSurface.cpp gfxQtNativeRenderer.cpp
|
||||||
CPPSRCS += gfxQtFonts.cpp
|
CPPSRCS += gfxQtFonts.cpp
|
||||||
CPPSRCS += gfxFontconfigUtils.cpp
|
CPPSRCS += gfxFontconfigUtils.cpp
|
||||||
CPPSRCS += nsUnicodeRange.cpp
|
CPPSRCS += nsUnicodeRange.cpp
|
||||||
CSRCS = cairo-xlib-utils.c
|
#CSRCS = cairo-xlib-utils.c
|
||||||
EXTRA_DSO_LDOPTS += $(ZLIB_LIBS) $(MOZ_XFT_LIBS) $(XLDFLAGS) $(XLIBS) $(CAIRO_FT_LIBS)
|
EXTRA_DSO_LDOPTS += $(ZLIB_LIBS) $(MOZ_XFT_LIBS) $(XLDFLAGS) $(XLIBS) $(CAIRO_FT_LIBS)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
|
@ -49,12 +49,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
FontEntry::FontEntry(const FontEntry& aFontEntry) :
|
FontEntry::FontEntry(const FontEntry& aFontEntry) :
|
||||||
mFaceName(aFontEntry.mFaceName),
|
gfxFontEntry(aFontEntry)
|
||||||
mUnicodeFont(aFontEntry.mUnicodeFont),
|
|
||||||
mSymbolFont(aFontEntry.mSymbolFont),
|
|
||||||
mItalic(aFontEntry.mItalic),
|
|
||||||
mWeight(aFontEntry.mWeight),
|
|
||||||
mCharacterMap(aFontEntry.mCharacterMap)
|
|
||||||
{
|
{
|
||||||
if (aFontEntry.mFontFace)
|
if (aFontEntry.mFontFace)
|
||||||
mFontFace = cairo_font_face_reference(aFontEntry.mFontFace);
|
mFontFace = cairo_font_face_reference(aFontEntry.mFontFace);
|
||||||
|
@ -707,14 +702,15 @@ gfxQtFontGroup::AddRange(gfxTextRun *aTextRun, gfxQtFont *font, const PRUnichar
|
||||||
*/
|
*/
|
||||||
gfxQtFont::gfxQtFont(FontEntry *aFontEntry,
|
gfxQtFont::gfxQtFont(FontEntry *aFontEntry,
|
||||||
const gfxFontStyle *aFontStyle)
|
const gfxFontStyle *aFontStyle)
|
||||||
: gfxFont(aFontEntry->GetName(), aFontStyle),
|
: gfxFont(aFontEntry, aFontStyle),
|
||||||
mScaledFont(nsnull),
|
mScaledFont(nsnull),
|
||||||
mHasSpaceGlyph(PR_FALSE),
|
mHasSpaceGlyph(PR_FALSE),
|
||||||
mSpaceGlyph(0),
|
mSpaceGlyph(0),
|
||||||
mHasMetrics(PR_FALSE),
|
mHasMetrics(PR_FALSE),
|
||||||
mAdjustedSize(0),
|
mAdjustedSize(0)
|
||||||
mFontEntry(aFontEntry)
|
|
||||||
{
|
{
|
||||||
|
mFontEntry = aFontEntry;
|
||||||
|
NS_ASSERTION(mFontEntry, "Unable to find font entry for font. Something is whack.");
|
||||||
}
|
}
|
||||||
|
|
||||||
gfxQtFont::~gfxQtFont()
|
gfxQtFont::~gfxQtFont()
|
||||||
|
@ -866,7 +862,7 @@ gfxQtFont::GetMetrics()
|
||||||
nsString
|
nsString
|
||||||
gfxQtFont::GetUniqueName()
|
gfxQtFont::GetUniqueName()
|
||||||
{
|
{
|
||||||
return mName;
|
return GetFontEntry()->Name();
|
||||||
}
|
}
|
||||||
|
|
||||||
PRUint32
|
PRUint32
|
||||||
|
@ -888,13 +884,19 @@ gfxQtFont::GetSpaceGlyph()
|
||||||
return mSpaceGlyph;
|
return mSpaceGlyph;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FontEntry*
|
||||||
|
gfxQtFont::GetFontEntry()
|
||||||
|
{
|
||||||
|
return static_cast<FontEntry*> (mFontEntry.get());
|
||||||
|
}
|
||||||
|
|
||||||
cairo_font_face_t *
|
cairo_font_face_t *
|
||||||
gfxQtFont::CairoFontFace()
|
gfxQtFont::CairoFontFace()
|
||||||
{
|
{
|
||||||
// XXX we need to handle fake bold here (or by having a sepaerate font entry)
|
// XXX we need to handle fake bold here (or by having a sepaerate font entry)
|
||||||
if (mStyle.weight >= 600 && mFontEntry->mWeight < 600)
|
if (mStyle.weight >= 600 && GetFontEntry()->mWeight < 600)
|
||||||
printf("** We want fake weight\n");
|
printf("** We want fake weight\n");
|
||||||
return mFontEntry->CairoFontFace();
|
return GetFontEntry()->CairoFontFace();
|
||||||
}
|
}
|
||||||
|
|
||||||
cairo_scaled_font_t *
|
cairo_scaled_font_t *
|
||||||
|
@ -909,7 +911,7 @@ gfxQtFont::CairoScaledFont()
|
||||||
cairo_matrix_init_identity(&identityMatrix);
|
cairo_matrix_init_identity(&identityMatrix);
|
||||||
|
|
||||||
// synthetic oblique by skewing via the font matrix
|
// synthetic oblique by skewing via the font matrix
|
||||||
PRBool needsOblique = (!mFontEntry->mItalic && (mStyle.style & (FONT_STYLE_ITALIC | FONT_STYLE_OBLIQUE)));
|
PRBool needsOblique = (!GetFontEntry()->mItalic && (mStyle.style & (FONT_STYLE_ITALIC | FONT_STYLE_OBLIQUE)));
|
||||||
|
|
||||||
if (needsOblique) {
|
if (needsOblique) {
|
||||||
const double kSkewFactor = 0.25;
|
const double kSkewFactor = 0.25;
|
||||||
|
|
|
@ -0,0 +1,135 @@
|
||||||
|
/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||||
|
* ***** 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 Novell code.
|
||||||
|
*
|
||||||
|
* The Initial Developer of the Original Code is Novell.
|
||||||
|
* Portions created by the Initial Developer are Copyright (C) 2006
|
||||||
|
* the Initial Developer. All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Contributor(s):
|
||||||
|
* romaxa@gmail.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 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 ***** */
|
||||||
|
|
||||||
|
#include "gfxQtNativeRenderer.h"
|
||||||
|
#include "gfxContext.h"
|
||||||
|
|
||||||
|
#include "gfxQtPlatform.h"
|
||||||
|
|
||||||
|
#include "cairo.h"
|
||||||
|
#include <QWidget>
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
gfxQtNativeRenderer* mRenderer;
|
||||||
|
nsresult mRV;
|
||||||
|
} NativeRenderingClosure;
|
||||||
|
|
||||||
|
|
||||||
|
static cairo_bool_t
|
||||||
|
NativeRendering(void *closure,
|
||||||
|
QWidget * drawable,
|
||||||
|
short offset_x, short offset_y,
|
||||||
|
QRect * rectangles, unsigned int num_rects)
|
||||||
|
{
|
||||||
|
NativeRenderingClosure* cl = (NativeRenderingClosure*)closure;
|
||||||
|
nsresult rv = cl->mRenderer->
|
||||||
|
NativeDraw(drawable, offset_x, offset_y,
|
||||||
|
rectangles, num_rects);
|
||||||
|
cl->mRV = rv;
|
||||||
|
return NS_SUCCEEDED(rv);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
nsresult
|
||||||
|
gfxQtNativeRenderer::Draw(gfxContext* ctx, int width, int height,
|
||||||
|
PRUint32 flags, DrawOutput* output)
|
||||||
|
{
|
||||||
|
NativeRenderingClosure closure = { this, NS_OK };
|
||||||
|
|
||||||
|
if (output) {
|
||||||
|
output->mSurface = NULL;
|
||||||
|
output->mUniformAlpha = PR_FALSE;
|
||||||
|
output->mUniformColor = PR_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if 0 // FIXME
|
||||||
|
|
||||||
|
cairo_gdk_drawing_result_t result;
|
||||||
|
// Make sure result.surface is null to start with; we rely on it
|
||||||
|
// being non-null meaning that a surface actually got allocated.
|
||||||
|
result.surface = NULL;
|
||||||
|
|
||||||
|
int cairoFlags = 0;
|
||||||
|
if (flags & DRAW_SUPPORTS_OFFSET) {
|
||||||
|
cairoFlags |= CAIRO_GDK_DRAWING_SUPPORTS_OFFSET;
|
||||||
|
}
|
||||||
|
if (flags & DRAW_SUPPORTS_CLIP_RECT) {
|
||||||
|
cairoFlags |= CAIRO_GDK_DRAWING_SUPPORTS_CLIP_RECT;
|
||||||
|
}
|
||||||
|
if (flags & DRAW_SUPPORTS_CLIP_LIST) {
|
||||||
|
cairoFlags |= CAIRO_GDK_DRAWING_SUPPORTS_CLIP_LIST;
|
||||||
|
}
|
||||||
|
if (flags & DRAW_SUPPORTS_ALTERNATE_SCREEN) {
|
||||||
|
cairoFlags |= CAIRO_GDK_DRAWING_SUPPORTS_ALTERNATE_SCREEN;
|
||||||
|
}
|
||||||
|
if (flags & DRAW_SUPPORTS_NONDEFAULT_VISUAL) {
|
||||||
|
cairoFlags |= CAIRO_GDK_DRAWING_SUPPORTS_NONDEFAULT_VISUAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
cairo_draw_with_gdk(ctx->GetCairo(),
|
||||||
|
gfxPlatformGtk::GetPlatform()->GetGdkDrawable(ctx->OriginalSurface()),
|
||||||
|
NativeRendering,
|
||||||
|
&closure, width, height,
|
||||||
|
(flags & DRAW_IS_OPAQUE) ? CAIRO_GDK_DRAWING_OPAQUE : CAIRO_GDK_DRAWING_TRANSPARENT,
|
||||||
|
(cairo_gdk_drawing_support_t)cairoFlags,
|
||||||
|
output ? &result : NULL);
|
||||||
|
|
||||||
|
if (NS_FAILED(closure.mRV)) {
|
||||||
|
if (result.surface) {
|
||||||
|
NS_ASSERTION(output, "How did that happen?");
|
||||||
|
cairo_surface_destroy (result.surface);
|
||||||
|
}
|
||||||
|
return closure.mRV;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (output) {
|
||||||
|
if (result.surface) {
|
||||||
|
output->mSurface = gfxASurface::Wrap(result.surface);
|
||||||
|
if (!output->mSurface) {
|
||||||
|
cairo_surface_destroy (result.surface);
|
||||||
|
return NS_ERROR_OUT_OF_MEMORY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
output->mUniformAlpha = result.uniform_alpha;
|
||||||
|
output->mUniformColor = result.uniform_color;
|
||||||
|
output->mColor = gfxRGBA(result.r, result.g, result.b, result.alpha);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return NS_OK;
|
||||||
|
}
|
|
@ -170,7 +170,7 @@ gfxQtPlatform::UpdateFontList()
|
||||||
gPlatformFonts->Put(key, ff);
|
gPlatformFonts->Put(key, ff);
|
||||||
}
|
}
|
||||||
|
|
||||||
nsRefPtr<FontEntry> fe = new FontEntry(ff->mName);
|
nsRefPtr<FontEntry> fe = new FontEntry(ff->Name());
|
||||||
ff->mFaces.AppendElement(fe);
|
ff->mFaces.AppendElement(fe);
|
||||||
|
|
||||||
if (FcPatternGetString(fs->fonts[i], FC_FILE, 0, (FcChar8 **) &str) == FcResultMatch) {
|
if (FcPatternGetString(fs->fonts[i], FC_FILE, 0, (FcChar8 **) &str) == FcResultMatch) {
|
||||||
|
@ -262,7 +262,7 @@ gfxQtPlatform::ResolveFontName(const nsAString& aFontName,
|
||||||
nsRefPtr<FontFamily> ff;
|
nsRefPtr<FontFamily> ff;
|
||||||
if (gPlatformFonts->Get(name, &ff) ||
|
if (gPlatformFonts->Get(name, &ff) ||
|
||||||
gPlatformFontAliases->Get(name, &ff)) {
|
gPlatformFontAliases->Get(name, &ff)) {
|
||||||
aAborted = !(*aCallback)(ff->mName, aClosure);
|
aAborted = !(*aCallback)(ff->Name(), aClosure);
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -241,6 +241,11 @@ EXTRA_DSO_LDOPTS += $(MOZ_GTK2_LIBS) \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifdef MOZ_ENABLE_QT
|
||||||
|
EXTRA_DSO_LDOPTS += $(MOZ_QT_LIBS) \
|
||||||
|
$(NULL)
|
||||||
|
endif
|
||||||
|
|
||||||
ifneq (,$(filter mac cocoa,$(MOZ_WIDGET_TOOLKIT)))
|
ifneq (,$(filter mac cocoa,$(MOZ_WIDGET_TOOLKIT)))
|
||||||
EXTRA_DSO_LDOPTS += \
|
EXTRA_DSO_LDOPTS += \
|
||||||
$(TK_LIBS) \
|
$(TK_LIBS) \
|
||||||
|
|
|
@ -201,6 +201,10 @@ ifdef MOZ_ENABLE_GTK2
|
||||||
CXXFLAGS += $(MOZ_GTK2_CFLAGS)
|
CXXFLAGS += $(MOZ_GTK2_CFLAGS)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifdef MOZ_ENABLE_QT
|
||||||
|
CXXFLAGS += $(MOZ_QT_CFLAGS)
|
||||||
|
endif
|
||||||
|
|
||||||
libs::
|
libs::
|
||||||
$(INSTALL) $(RESOURCES_HTML) $(DIST)/bin/res/html
|
$(INSTALL) $(RESOURCES_HTML) $(DIST)/bin/res/html
|
||||||
$(INSTALL) $(RESOURCES) $(DIST)/bin/res
|
$(INSTALL) $(RESOURCES) $(DIST)/bin/res
|
||||||
|
|
|
@ -54,6 +54,12 @@
|
||||||
#include "nsIView.h"
|
#include "nsIView.h"
|
||||||
#include "nsIViewManager.h"
|
#include "nsIViewManager.h"
|
||||||
#include "nsIDOMKeyListener.h"
|
#include "nsIDOMKeyListener.h"
|
||||||
|
#ifdef MOZ_X11
|
||||||
|
#ifdef MOZ_WIDGET_QT
|
||||||
|
#include <QWidget>
|
||||||
|
#include <QX11Info>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
#include "nsIPluginHost.h"
|
#include "nsIPluginHost.h"
|
||||||
#include "nsplugin.h"
|
#include "nsplugin.h"
|
||||||
#include "nsString.h"
|
#include "nsString.h"
|
||||||
|
@ -169,6 +175,10 @@ enum { XKeyPress = KeyPress };
|
||||||
#include "gfxGdkNativeRenderer.h"
|
#include "gfxGdkNativeRenderer.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef MOZ_WIDGET_QT
|
||||||
|
#include "gfxQtNativeRenderer.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef XP_WIN
|
#ifdef XP_WIN
|
||||||
#include <wtypes.h>
|
#include <wtypes.h>
|
||||||
#include <winuser.h>
|
#include <winuser.h>
|
||||||
|
@ -480,7 +490,7 @@ private:
|
||||||
|
|
||||||
nsresult EnsureCachedAttrParamArrays();
|
nsresult EnsureCachedAttrParamArrays();
|
||||||
|
|
||||||
#ifdef MOZ_WIDGET_GTK2
|
#if defined(MOZ_WIDGET_GTK2)
|
||||||
class Renderer : public gfxGdkNativeRenderer {
|
class Renderer : public gfxGdkNativeRenderer {
|
||||||
public:
|
public:
|
||||||
Renderer(nsPluginWindow* aWindow, nsIPluginInstance* aInstance,
|
Renderer(nsPluginWindow* aWindow, nsIPluginInstance* aInstance,
|
||||||
|
@ -496,6 +506,22 @@ private:
|
||||||
const nsIntSize& mPluginSize;
|
const nsIntSize& mPluginSize;
|
||||||
const nsIntRect& mDirtyRect;
|
const nsIntRect& mDirtyRect;
|
||||||
};
|
};
|
||||||
|
#elif defined(MOZ_WIDGET_QT)
|
||||||
|
class Renderer : public gfxQtNativeRenderer {
|
||||||
|
public:
|
||||||
|
Renderer(nsPluginWindow* aWindow, nsIPluginInstance* aInstance,
|
||||||
|
const nsIntSize& aPluginSize, const nsIntRect& aDirtyRect)
|
||||||
|
: mWindow(aWindow), mInstance(aInstance),
|
||||||
|
mPluginSize(aPluginSize), mDirtyRect(aDirtyRect)
|
||||||
|
{}
|
||||||
|
virtual nsresult NativeDraw(QWidget * drawable, short offsetX,
|
||||||
|
short offsetY, QRect * clipRects, PRUint32 numClipRects);
|
||||||
|
private:
|
||||||
|
nsPluginWindow* mWindow;
|
||||||
|
nsIPluginInstance* mInstance;
|
||||||
|
const nsIntSize& mPluginSize;
|
||||||
|
const nsIntRect& mDirtyRect;
|
||||||
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -4129,6 +4155,7 @@ DepthOfVisual(const Screen* screen, const Visual* visual)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(MOZ_WIDGET_GTK2)
|
||||||
nsresult
|
nsresult
|
||||||
nsPluginInstanceOwner::Renderer::NativeDraw(GdkDrawable * drawable,
|
nsPluginInstanceOwner::Renderer::NativeDraw(GdkDrawable * drawable,
|
||||||
short offsetX, short offsetY,
|
short offsetX, short offsetY,
|
||||||
|
@ -4140,6 +4167,20 @@ nsPluginInstanceOwner::Renderer::NativeDraw(GdkDrawable * drawable,
|
||||||
Visual * visual = GDK_VISUAL_XVISUAL(gdk_drawable_get_visual(drawable));
|
Visual * visual = GDK_VISUAL_XVISUAL(gdk_drawable_get_visual(drawable));
|
||||||
Colormap colormap = GDK_COLORMAP_XCOLORMAP(gdk_drawable_get_colormap(drawable));
|
Colormap colormap = GDK_COLORMAP_XCOLORMAP(gdk_drawable_get_colormap(drawable));
|
||||||
Screen * screen = GDK_SCREEN_XSCREEN (gdk_drawable_get_screen(drawable));
|
Screen * screen = GDK_SCREEN_XSCREEN (gdk_drawable_get_screen(drawable));
|
||||||
|
#endif
|
||||||
|
#elif defined(MOZ_WIDGET_QT)
|
||||||
|
nsresult
|
||||||
|
nsPluginInstanceOwner::Renderer::NativeDraw(QWidget * drawable,
|
||||||
|
short offsetX, short offsetY,
|
||||||
|
QRect * clipRects,
|
||||||
|
PRUint32 numClipRects)
|
||||||
|
{
|
||||||
|
#ifdef MOZ_X11
|
||||||
|
QX11Info xinfo = drawable->x11Info();
|
||||||
|
Visual * visual = (Visual*) xinfo.visual();
|
||||||
|
Colormap colormap = xinfo.colormap();
|
||||||
|
Screen * screen = (Screen*) xinfo.screen();
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
// See if the plugin must be notified of new window parameters.
|
// See if the plugin must be notified of new window parameters.
|
||||||
PRBool doupdatewindow = PR_FALSE;
|
PRBool doupdatewindow = PR_FALSE;
|
||||||
|
@ -4160,10 +4201,17 @@ nsPluginInstanceOwner::Renderer::NativeDraw(GdkDrawable * drawable,
|
||||||
NS_ASSERTION(numClipRects <= 1, "We don't support multiple clip rectangles!");
|
NS_ASSERTION(numClipRects <= 1, "We don't support multiple clip rectangles!");
|
||||||
nsIntRect clipRect;
|
nsIntRect clipRect;
|
||||||
if (numClipRects) {
|
if (numClipRects) {
|
||||||
|
#if defined(MOZ_WIDGET_GTK2)
|
||||||
clipRect.x = clipRects[0].x;
|
clipRect.x = clipRects[0].x;
|
||||||
clipRect.y = clipRects[0].y;
|
clipRect.y = clipRects[0].y;
|
||||||
clipRect.width = clipRects[0].width;
|
clipRect.width = clipRects[0].width;
|
||||||
clipRect.height = clipRects[0].height;
|
clipRect.height = clipRects[0].height;
|
||||||
|
#elif defined(MOZ_WIDGET_QT)
|
||||||
|
clipRect.x = clipRects[0].x();
|
||||||
|
clipRect.y = clipRects[0].y();
|
||||||
|
clipRect.width = clipRects[0].width();
|
||||||
|
clipRect.height = clipRects[0].height();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// nsPluginRect members are unsigned, but
|
// nsPluginRect members are unsigned, but
|
||||||
|
@ -4216,7 +4264,12 @@ nsPluginInstanceOwner::Renderer::NativeDraw(GdkDrawable * drawable,
|
||||||
// set the drawing info
|
// set the drawing info
|
||||||
exposeEvent.type = GraphicsExpose;
|
exposeEvent.type = GraphicsExpose;
|
||||||
exposeEvent.display = DisplayOfScreen(screen);
|
exposeEvent.display = DisplayOfScreen(screen);
|
||||||
exposeEvent.drawable = GDK_DRAWABLE_XID(drawable);
|
exposeEvent.drawable =
|
||||||
|
#if defined(MOZ_WIDGET_GTK2)
|
||||||
|
GDK_DRAWABLE_XID(drawable);
|
||||||
|
#elif defined(MOZ_WIDGET_QT)
|
||||||
|
drawable->x11PictureHandle();
|
||||||
|
#endif
|
||||||
exposeEvent.x = mDirtyRect.x + offsetX;
|
exposeEvent.x = mDirtyRect.x + offsetX;
|
||||||
exposeEvent.y = mDirtyRect.y + offsetY;
|
exposeEvent.y = mDirtyRect.y + offsetY;
|
||||||
exposeEvent.width = mDirtyRect.width;
|
exposeEvent.width = mDirtyRect.width;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче