зеркало из https://github.com/mozilla/gecko-dev.git
bug 719359 - Pageload thumbnails for sites with <meta viewport=width=n> do not cover entire thumbnail box in about:home r=mfinkle
This commit is contained in:
Родитель
c864aef084
Коммит
f3dfd1086f
|
@ -1011,13 +1011,9 @@ var BrowserApp = {
|
|||
},
|
||||
|
||||
// nsIAndroidBrowserApp
|
||||
getWindowForTab: function(tabId) {
|
||||
let tab = this.getTabForId(tabId);
|
||||
if (!tab.browser)
|
||||
return null;
|
||||
return tab.browser.contentWindow;
|
||||
getBrowserTab: function(tabId) {
|
||||
return this.getTabForId(tabId);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
var NativeWindow = {
|
||||
|
@ -2253,11 +2249,23 @@ Tab.prototype = {
|
|||
}
|
||||
},
|
||||
|
||||
// nsIBrowserTab
|
||||
get window() {
|
||||
if (!this.browser)
|
||||
return null;
|
||||
return this.browser.contentWindow;
|
||||
},
|
||||
|
||||
get scale() {
|
||||
return this.viewport.zoom;
|
||||
},
|
||||
|
||||
QueryInterface: XPCOMUtils.generateQI([
|
||||
Ci.nsIWebProgressListener,
|
||||
Ci.nsISHistoryListener,
|
||||
Ci.nsIObserver,
|
||||
Ci.nsISupportsWeakReference
|
||||
Ci.nsISupportsWeakReference,
|
||||
Ci.nsIBrowserTab
|
||||
])
|
||||
};
|
||||
|
||||
|
|
|
@ -1990,7 +1990,7 @@ jobject JNICALL
|
|||
Java_org_mozilla_gecko_GeckoAppShell_allocateDirectBuffer(JNIEnv *jenv, jclass, jlong size);
|
||||
|
||||
|
||||
nsresult AndroidBridge::TakeScreenshot(nsIDOMWindow *window, PRInt32 srcX, PRInt32 srcY, PRInt32 srcW, PRInt32 srcH, PRInt32 dstW, PRInt32 dstH, PRInt32 tabId)
|
||||
nsresult AndroidBridge::TakeScreenshot(nsIDOMWindow *window, PRInt32 srcX, PRInt32 srcY, PRInt32 srcW, PRInt32 srcH, PRInt32 dstW, PRInt32 dstH, PRInt32 tabId, float scale)
|
||||
{
|
||||
nsCOMPtr<nsPIDOMWindow> win = do_QueryInterface(window);
|
||||
if (!win)
|
||||
|
@ -2023,8 +2023,10 @@ nsresult AndroidBridge::TakeScreenshot(nsIDOMWindow *window, PRInt32 srcX, PRInt
|
|||
return NS_OK;
|
||||
|
||||
void* data = jenv->GetDirectBufferAddress(buffer);
|
||||
memset(data, 0, bufferSize);
|
||||
nsRefPtr<gfxImageSurface> surf = new gfxImageSurface(static_cast<unsigned char*>(data), nsIntSize(dstW, dstH), stride, gfxASurface::ImageFormatRGB16_565);
|
||||
nsRefPtr<gfxContext> context = new gfxContext(surf);
|
||||
context->Scale(scale * dstW / srcW, scale * dstH / srcH);
|
||||
nsresult rv = presShell->RenderDocument(r, renderDocFlags, bgColor, context);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
AndroidBridge::AutoLocalJNIFrame jniFrame(jenv, 1);
|
||||
|
|
|
@ -156,7 +156,7 @@ public:
|
|||
|
||||
static void NotifyIMEChange(const PRUnichar *aText, PRUint32 aTextLen, int aStart, int aEnd, int aNewEnd);
|
||||
|
||||
nsresult TakeScreenshot(nsIDOMWindow *window, PRInt32 srcX, PRInt32 srcY, PRInt32 srcW, PRInt32 srcH, PRInt32 dstW, PRInt32 dstH, PRInt32 tabId);
|
||||
nsresult TakeScreenshot(nsIDOMWindow *window, PRInt32 srcX, PRInt32 srcY, PRInt32 srcW, PRInt32 srcH, PRInt32 dstW, PRInt32 dstH, PRInt32 tabId, float scale);
|
||||
|
||||
void AcknowledgeEventSync();
|
||||
|
||||
|
|
|
@ -445,11 +445,22 @@ nsAppShell::ProcessNextNativeEvent(bool mayWait)
|
|||
break;
|
||||
|
||||
nsCOMPtr<nsIDOMWindow> domWindow;
|
||||
mBrowserApp->GetWindowForTab(curEvent->MetaState(), getter_AddRefs(domWindow));
|
||||
nsCOMPtr<nsIBrowserTab> tab;
|
||||
float scale;
|
||||
mBrowserApp->GetBrowserTab(curEvent->MetaState(), getter_AddRefs(tab));
|
||||
if (!tab)
|
||||
break;
|
||||
|
||||
tab->GetWindow(getter_AddRefs(domWindow));
|
||||
if (!domWindow)
|
||||
break;
|
||||
|
||||
if (NS_FAILED(tab->GetScale(&scale)))
|
||||
break;
|
||||
|
||||
nsTArray<nsIntPoint> points = curEvent->Points();
|
||||
NS_ASSERTION(points.Length() != 2, "Screenshot event does not have enough coordinates");
|
||||
if (domWindow)
|
||||
bridge->TakeScreenshot(domWindow, 0, 0, points[0].x, points[0].y, points[1].x, points[1].y, curEvent->MetaState());
|
||||
bridge->TakeScreenshot(domWindow, 0, 0, points[0].x, points[0].y, points[1].x, points[1].y, curEvent->MetaState(), scale);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -12,9 +12,15 @@ interface nsIAndroidDrawMetadataProvider : nsISupports {
|
|||
boolean paintingSuppressed();
|
||||
};
|
||||
|
||||
[scriptable, uuid(0843f3c1-043e-4c64-9d8c-091370548c05)]
|
||||
interface nsIBrowserTab : nsISupports {
|
||||
readonly attribute nsIDOMWindow window;
|
||||
readonly attribute float scale;
|
||||
};
|
||||
|
||||
[scriptable, uuid(d10377b4-1c90-493a-a532-63cb3f16ee2b)]
|
||||
interface nsIAndroidBrowserApp : nsISupports {
|
||||
nsIDOMWindow getWindowForTab(in PRInt32 tabId);
|
||||
nsIBrowserTab getBrowserTab(in PRInt32 tabId);
|
||||
};
|
||||
|
||||
[scriptable, uuid(7dd8441a-4f38-49b2-bd90-da69d02a96cf)]
|
||||
|
|
Загрузка…
Ссылка в новой задаче