зеркало из https://github.com/mozilla/pjs.git
Bug 598227 - Add support NPP_ImageDraw API for Maemo5. r=dougt a=blocking-fennec
This commit is contained in:
Родитель
05caed919c
Коммит
7c0aec4e9d
|
@ -142,6 +142,9 @@ PluginInstanceChild::PluginInstanceChild(const NPPluginFuncs* aPluginIface,
|
||||||
#ifdef MOZ_X11
|
#ifdef MOZ_X11
|
||||||
, mFlash10Quirks(PR_FALSE)
|
, mFlash10Quirks(PR_FALSE)
|
||||||
#endif
|
#endif
|
||||||
|
#if (MOZ_PLATFORM_MAEMO == 5)
|
||||||
|
, mMaemoImageRendering(PR_FALSE)
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
memset(&mWindow, 0, sizeof(mWindow));
|
memset(&mWindow, 0, sizeof(mWindow));
|
||||||
mData.ndata = (void*) this;
|
mData.ndata = (void*) this;
|
||||||
|
@ -300,6 +303,18 @@ PluginInstanceChild::NPN_GetValue(NPNVariable aVar,
|
||||||
#endif
|
#endif
|
||||||
return NPERR_NO_ERROR;
|
return NPERR_NO_ERROR;
|
||||||
|
|
||||||
|
#if (MOZ_PLATFORM_MAEMO == 5)
|
||||||
|
case NPNVSupportsWindowlessLocal: {
|
||||||
|
#ifdef MOZ_WIDGET_QT
|
||||||
|
const char *graphicsSystem = PR_GetEnv("MOZ_QT_GRAPHICSSYSTEM");
|
||||||
|
// we should set local rendering to false in order to render X-Plugin
|
||||||
|
// there is no possibility to change it later on maemo5 platform
|
||||||
|
mMaemoImageRendering = (!(graphicsSystem && !strcmp(graphicsSystem, "native")));
|
||||||
|
#endif
|
||||||
|
*((NPBool*)aValue) = mMaemoImageRendering;
|
||||||
|
return NPERR_NO_ERROR;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
#if defined(OS_LINUX)
|
#if defined(OS_LINUX)
|
||||||
case NPNVSupportsXEmbedBool:
|
case NPNVSupportsXEmbedBool:
|
||||||
*((NPBool*)aValue) = true;
|
*((NPBool*)aValue) = true;
|
||||||
|
@ -2037,6 +2052,17 @@ PluginInstanceChild::CreateOptSurface(void)
|
||||||
mIsTransparent ? gfxASurface::ImageFormatARGB32 :
|
mIsTransparent ? gfxASurface::ImageFormatARGB32 :
|
||||||
gfxASurface::ImageFormatRGB24;
|
gfxASurface::ImageFormatRGB24;
|
||||||
|
|
||||||
|
#if (MOZ_PLATFORM_MAEMO == 5)
|
||||||
|
// On Maemo 5, we must send the Visibility event to activate the plugin
|
||||||
|
if (mMaemoImageRendering) {
|
||||||
|
NPEvent pluginEvent;
|
||||||
|
XVisibilityEvent& visibilityEvent = pluginEvent.xvisibility;
|
||||||
|
visibilityEvent.type = VisibilityNotify;
|
||||||
|
visibilityEvent.display = 0;
|
||||||
|
visibilityEvent.state = VisibilityUnobscured;
|
||||||
|
mPluginIface->event(&mData, reinterpret_cast<void*>(&pluginEvent));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
#ifdef MOZ_X11
|
#ifdef MOZ_X11
|
||||||
Display* dpy = mWsInfo.display;
|
Display* dpy = mWsInfo.display;
|
||||||
Screen* screen = DefaultScreenOfDisplay(dpy);
|
Screen* screen = DefaultScreenOfDisplay(dpy);
|
||||||
|
@ -2102,6 +2128,14 @@ PluginInstanceChild::MaybeCreatePlatformHelperSurface(void)
|
||||||
mDoAlphaExtraction = mIsTransparent;
|
mDoAlphaExtraction = mIsTransparent;
|
||||||
}
|
}
|
||||||
} else if (mCurrentSurface->GetType() == gfxASurface::SurfaceTypeImage) {
|
} else if (mCurrentSurface->GetType() == gfxASurface::SurfaceTypeImage) {
|
||||||
|
#if (MOZ_PLATFORM_MAEMO == 5)
|
||||||
|
if (mMaemoImageRendering) {
|
||||||
|
// No helper surface needed, when mMaemoImageRendering is TRUE.
|
||||||
|
// we can rendering directly into image memory
|
||||||
|
// with NPImageExpose Maemo5 NPAPI
|
||||||
|
return PR_TRUE;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
// For image layer surface we should always create helper surface
|
// For image layer surface we should always create helper surface
|
||||||
createHelperSurface = PR_TRUE;
|
createHelperSurface = PR_TRUE;
|
||||||
// Check if we can create helper surface with non-default visual
|
// Check if we can create helper surface with non-default visual
|
||||||
|
@ -2172,6 +2206,22 @@ PluginInstanceChild::UpdateWindowAttributes(PRBool aForceSetWindow)
|
||||||
needWindowUpdate = PR_TRUE;
|
needWindowUpdate = PR_TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#if (MOZ_PLATFORM_MAEMO == 5)
|
||||||
|
else if (curSurface && curSurface->GetType() == gfxASurface::SurfaceTypeImage
|
||||||
|
&& mMaemoImageRendering) {
|
||||||
|
// For maemo5 we need to setup window/colormap to 0
|
||||||
|
// and specify depth of image surface
|
||||||
|
gfxImageSurface* img = static_cast<gfxImageSurface*>(curSurface.get());
|
||||||
|
if (mWindow.window ||
|
||||||
|
mWsInfo.depth != gfxUtils::ImageFormatToDepth(img->Format()) ||
|
||||||
|
mWsInfo.colormap) {
|
||||||
|
mWindow.window = nsnull;
|
||||||
|
mWsInfo.depth = gfxUtils::ImageFormatToDepth(img->Format());
|
||||||
|
mWsInfo.colormap = 0;
|
||||||
|
needWindowUpdate = PR_TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
if (!needWindowUpdate) {
|
if (!needWindowUpdate) {
|
||||||
return;
|
return;
|
||||||
|
@ -2204,6 +2254,47 @@ PluginInstanceChild::PaintRectToPlatformSurface(const nsIntRect& aRect,
|
||||||
{
|
{
|
||||||
UpdateWindowAttributes();
|
UpdateWindowAttributes();
|
||||||
#ifdef MOZ_X11
|
#ifdef MOZ_X11
|
||||||
|
#if (MOZ_PLATFORM_MAEMO == 5)
|
||||||
|
// On maemo5 we do support Image rendering NPAPI
|
||||||
|
if (mMaemoImageRendering &&
|
||||||
|
aSurface->GetType() == gfxASurface::SurfaceTypeImage) {
|
||||||
|
mPendingPluginCall = PR_TRUE;
|
||||||
|
gfxImageSurface* image = static_cast<gfxImageSurface*>(aSurface);
|
||||||
|
NPImageExpose imgExp;
|
||||||
|
imgExp.depth = gfxUtils::ImageFormatToDepth(image->Format());
|
||||||
|
imgExp.x = aRect.x;
|
||||||
|
imgExp.y = aRect.y;
|
||||||
|
imgExp.width = aRect.width;
|
||||||
|
imgExp.height = aRect.height;
|
||||||
|
imgExp.stride = image->Stride();
|
||||||
|
imgExp.data = (char *)image->Data();
|
||||||
|
imgExp.dataSize.width = image->Width();
|
||||||
|
imgExp.dataSize.height = image->Height();
|
||||||
|
imgExp.translateX = 0;
|
||||||
|
imgExp.translateY = 0;
|
||||||
|
imgExp.scaleX = 1;
|
||||||
|
imgExp.scaleY = 1;
|
||||||
|
NPEvent pluginEvent;
|
||||||
|
XGraphicsExposeEvent& exposeEvent = pluginEvent.xgraphicsexpose;
|
||||||
|
exposeEvent.type = GraphicsExpose;
|
||||||
|
exposeEvent.display = 0;
|
||||||
|
// Store imageExpose structure pointer as drawable member
|
||||||
|
exposeEvent.drawable = (Drawable)&imgExp;
|
||||||
|
exposeEvent.x = imgExp.x;
|
||||||
|
exposeEvent.y = imgExp.y;
|
||||||
|
exposeEvent.width = imgExp.width;
|
||||||
|
exposeEvent.height = imgExp.height;
|
||||||
|
exposeEvent.count = 0;
|
||||||
|
// information not set:
|
||||||
|
exposeEvent.serial = 0;
|
||||||
|
exposeEvent.send_event = False;
|
||||||
|
exposeEvent.major_code = 0;
|
||||||
|
exposeEvent.minor_code = 0;
|
||||||
|
mPluginIface->event(&mData, reinterpret_cast<void*>(&exposeEvent));
|
||||||
|
mPendingPluginCall = PR_FALSE;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
NS_ASSERTION(aSurface->GetType() == gfxASurface::SurfaceTypeXlib,
|
NS_ASSERTION(aSurface->GetType() == gfxASurface::SurfaceTypeXlib,
|
||||||
"Non supported platform surface type");
|
"Non supported platform surface type");
|
||||||
|
|
||||||
|
@ -2246,6 +2337,11 @@ PluginInstanceChild::PaintRectToSurface(const nsIntRect& aRect,
|
||||||
}
|
}
|
||||||
if (renderSurface->GetType() != gfxASurface::SurfaceTypeXlib) {
|
if (renderSurface->GetType() != gfxASurface::SurfaceTypeXlib) {
|
||||||
// On X11 we can paint to non Xlib surface only with HelperSurface
|
// On X11 we can paint to non Xlib surface only with HelperSurface
|
||||||
|
#if (MOZ_PLATFORM_MAEMO == 5)
|
||||||
|
// Don't use mHelperSurface if surface is image and mMaemoImageRendering is TRUE
|
||||||
|
if (!mMaemoImageRendering ||
|
||||||
|
renderSurface->GetType() != gfxASurface::SurfaceTypeImage)
|
||||||
|
#endif
|
||||||
renderSurface = mHelperSurface;
|
renderSurface = mHelperSurface;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -482,6 +482,11 @@ private:
|
||||||
// Used with windowless flash plugin only, see bug 574583
|
// Used with windowless flash plugin only, see bug 574583
|
||||||
PRPackedBool mFlash10Quirks;
|
PRPackedBool mFlash10Quirks;
|
||||||
#endif
|
#endif
|
||||||
|
#if (MOZ_PLATFORM_MAEMO == 5)
|
||||||
|
// Maemo5 Flash does not remember WindowlessLocal state
|
||||||
|
// we should listen for NPP values negotiation and remember it
|
||||||
|
PRPackedBool mMaemoImageRendering;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace plugins
|
} // namespace plugins
|
||||||
|
|
Загрузка…
Ссылка в новой задаче