mirror of
https://github.com/archlinuxarm/PKGBUILDs.git
synced 2024-11-08 22:45:43 +00:00
extra/firefox fix
This commit is contained in:
parent
93ed792189
commit
8795448e48
2 changed files with 3 additions and 384 deletions
|
@ -1,375 +0,0 @@
|
|||
|
||||
# HG changeset patch
|
||||
# User Mike Hommey <mh@glandium.org>
|
||||
# Date 1425858139 -32400
|
||||
# Node ID 48e130d698364f246d9ab870044617fbf9e21f20
|
||||
# Parent 08d7c1951e618f91863d34bddfdffe880bf78bf6
|
||||
Bug 1136958 - Reintroduce pixman code path removed in bug 1097776 for --disable-skia builds. r=jmuizelaar, a=sledru
|
||||
|
||||
diff --git a/gfx/layers/basic/BasicCompositor.cpp b/gfx/layers/basic/BasicCompositor.cpp
|
||||
--- a/gfx/layers/basic/BasicCompositor.cpp
|
||||
+++ b/gfx/layers/basic/BasicCompositor.cpp
|
||||
@@ -12,18 +12,23 @@
|
||||
#include "gfx2DGlue.h"
|
||||
#include "mozilla/gfx/2D.h"
|
||||
#include "mozilla/gfx/Helpers.h"
|
||||
#include "gfxUtils.h"
|
||||
#include "YCbCrUtils.h"
|
||||
#include <algorithm>
|
||||
#include "ImageContainer.h"
|
||||
#include "gfxPrefs.h"
|
||||
+#ifdef MOZ_ENABLE_SKIA
|
||||
#include "skia/SkCanvas.h" // for SkCanvas
|
||||
#include "skia/SkBitmapDevice.h" // for SkBitmapDevice
|
||||
+#else
|
||||
+#define PIXMAN_DONT_DEFINE_STDINT
|
||||
+#include "pixman.h" // for pixman_f_transform, etc
|
||||
+#endif
|
||||
|
||||
namespace mozilla {
|
||||
using namespace mozilla::gfx;
|
||||
|
||||
namespace layers {
|
||||
|
||||
class DataTextureSourceBasic : public DataTextureSource
|
||||
, public TextureSourceBasic
|
||||
@@ -172,16 +177,17 @@ DrawSurfaceWithTextureCoords(DrawTarget
|
||||
// Only use REPEAT if aTextureCoords is outside (0, 0, 1, 1).
|
||||
gfx::Rect unitRect(0, 0, 1, 1);
|
||||
ExtendMode mode = unitRect.Contains(aTextureCoords) ? ExtendMode::CLAMP : ExtendMode::REPEAT;
|
||||
|
||||
FillRectWithMask(aDest, aDestRect, aSource, aFilter, DrawOptions(aOpacity),
|
||||
mode, aMask, aMaskTransform, &matrix);
|
||||
}
|
||||
|
||||
+#ifdef MOZ_ENABLE_SKIA
|
||||
static SkMatrix
|
||||
Matrix3DToSkia(const gfx3DMatrix& aMatrix)
|
||||
{
|
||||
SkMatrix transform;
|
||||
transform.setAll(aMatrix._11,
|
||||
aMatrix._21,
|
||||
aMatrix._41,
|
||||
aMatrix._12,
|
||||
@@ -190,20 +196,20 @@ Matrix3DToSkia(const gfx3DMatrix& aMatri
|
||||
aMatrix._14,
|
||||
aMatrix._24,
|
||||
aMatrix._44);
|
||||
|
||||
return transform;
|
||||
}
|
||||
|
||||
static void
|
||||
-SkiaTransform(DataSourceSurface* aDest,
|
||||
- DataSourceSurface* aSource,
|
||||
- const gfx3DMatrix& aTransform,
|
||||
- const Point& aDestOffset)
|
||||
+Transform(DataSourceSurface* aDest,
|
||||
+ DataSourceSurface* aSource,
|
||||
+ const gfx3DMatrix& aTransform,
|
||||
+ const Point& aDestOffset)
|
||||
{
|
||||
if (aTransform.IsSingular()) {
|
||||
return;
|
||||
}
|
||||
|
||||
IntSize destSize = aDest->GetSize();
|
||||
SkImageInfo destInfo = SkImageInfo::Make(destSize.width,
|
||||
destSize.height,
|
||||
@@ -229,16 +235,88 @@ SkiaTransform(DataSourceSurface* aDest,
|
||||
|
||||
SkPaint paint;
|
||||
paint.setXfermodeMode(SkXfermode::kSrc_Mode);
|
||||
paint.setAntiAlias(true);
|
||||
paint.setFilterLevel(SkPaint::kLow_FilterLevel);
|
||||
SkRect destRect = SkRect::MakeXYWH(0, 0, srcSize.width, srcSize.height);
|
||||
destCanvas.drawBitmapRectToRect(src, nullptr, destRect, &paint);
|
||||
}
|
||||
+#else
|
||||
+static pixman_transform
|
||||
+Matrix3DToPixman(const gfx3DMatrix& aMatrix)
|
||||
+{
|
||||
+ pixman_f_transform transform;
|
||||
+
|
||||
+ transform.m[0][0] = aMatrix._11;
|
||||
+ transform.m[0][1] = aMatrix._21;
|
||||
+ transform.m[0][2] = aMatrix._41;
|
||||
+ transform.m[1][0] = aMatrix._12;
|
||||
+ transform.m[1][1] = aMatrix._22;
|
||||
+ transform.m[1][2] = aMatrix._42;
|
||||
+ transform.m[2][0] = aMatrix._14;
|
||||
+ transform.m[2][1] = aMatrix._24;
|
||||
+ transform.m[2][2] = aMatrix._44;
|
||||
+
|
||||
+ pixman_transform result;
|
||||
+ pixman_transform_from_pixman_f_transform(&result, &transform);
|
||||
+
|
||||
+ return result;
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+Transform(DataSourceSurface* aDest,
|
||||
+ DataSourceSurface* aSource,
|
||||
+ const gfx3DMatrix& aTransform,
|
||||
+ const Point& aDestOffset)
|
||||
+{
|
||||
+ IntSize destSize = aDest->GetSize();
|
||||
+ pixman_image_t* dest = pixman_image_create_bits(PIXMAN_a8r8g8b8,
|
||||
+ destSize.width,
|
||||
+ destSize.height,
|
||||
+ (uint32_t*)aDest->GetData(),
|
||||
+ aDest->Stride());
|
||||
+
|
||||
+ IntSize srcSize = aSource->GetSize();
|
||||
+ pixman_image_t* src = pixman_image_create_bits(PIXMAN_a8r8g8b8,
|
||||
+ srcSize.width,
|
||||
+ srcSize.height,
|
||||
+ (uint32_t*)aSource->GetData(),
|
||||
+ aSource->Stride());
|
||||
+
|
||||
+ NS_ABORT_IF_FALSE(src && dest, "Failed to create pixman images?");
|
||||
+
|
||||
+ pixman_transform pixTransform = Matrix3DToPixman(aTransform);
|
||||
+ pixman_transform pixTransformInverted;
|
||||
+
|
||||
+ // If the transform is singular then nothing would be drawn anyway, return here
|
||||
+ if (!pixman_transform_invert(&pixTransformInverted, &pixTransform)) {
|
||||
+ pixman_image_unref(dest);
|
||||
+ pixman_image_unref(src);
|
||||
+ return;
|
||||
+ }
|
||||
+ pixman_image_set_transform(src, &pixTransformInverted);
|
||||
+
|
||||
+ pixman_image_composite32(PIXMAN_OP_SRC,
|
||||
+ src,
|
||||
+ nullptr,
|
||||
+ dest,
|
||||
+ aDestOffset.x,
|
||||
+ aDestOffset.y,
|
||||
+ 0,
|
||||
+ 0,
|
||||
+ 0,
|
||||
+ 0,
|
||||
+ destSize.width,
|
||||
+ destSize.height);
|
||||
+
|
||||
+ pixman_image_unref(dest);
|
||||
+ pixman_image_unref(src);
|
||||
+}
|
||||
+#endif
|
||||
|
||||
static inline IntRect
|
||||
RoundOut(Rect r)
|
||||
{
|
||||
r.RoundOut();
|
||||
return IntRect(r.x, r.y, r.width, r.height);
|
||||
}
|
||||
|
||||
@@ -368,22 +446,26 @@ BasicCompositor::DrawQuad(const gfx::Rec
|
||||
}
|
||||
|
||||
if (!aTransform.Is2D()) {
|
||||
dest->Flush();
|
||||
|
||||
RefPtr<SourceSurface> snapshot = dest->Snapshot();
|
||||
RefPtr<DataSourceSurface> source = snapshot->GetDataSurface();
|
||||
RefPtr<DataSourceSurface> temp =
|
||||
- Factory::CreateDataSourceSurface(RoundOut(transformBounds).Size(), SurfaceFormat::B8G8R8A8, true);
|
||||
+ Factory::CreateDataSourceSurface(RoundOut(transformBounds).Size(), SurfaceFormat::B8G8R8A8
|
||||
+#ifdef MOZ_ENABLE_SKIA
|
||||
+ , true
|
||||
+#endif
|
||||
+ );
|
||||
if (NS_WARN_IF(!temp)) {
|
||||
return;
|
||||
}
|
||||
|
||||
- SkiaTransform(temp, source, new3DTransform, transformBounds.TopLeft());
|
||||
+ Transform(temp, source, new3DTransform, transformBounds.TopLeft());
|
||||
|
||||
transformBounds.MoveTo(0, 0);
|
||||
buffer->DrawSurface(temp, transformBounds, transformBounds);
|
||||
}
|
||||
|
||||
buffer->PopClip();
|
||||
}
|
||||
|
||||
diff --git a/gfx/layers/basic/BasicLayerManager.cpp b/gfx/layers/basic/BasicLayerManager.cpp
|
||||
--- a/gfx/layers/basic/BasicLayerManager.cpp
|
||||
+++ b/gfx/layers/basic/BasicLayerManager.cpp
|
||||
@@ -41,18 +41,23 @@
|
||||
#include "nsAutoPtr.h" // for nsRefPtr
|
||||
#include "nsCOMPtr.h" // for already_AddRefed
|
||||
#include "nsDebug.h" // for NS_ASSERTION, etc
|
||||
#include "nsISupportsImpl.h" // for gfxContext::Release, etc
|
||||
#include "nsPoint.h" // for nsIntPoint
|
||||
#include "nsRect.h" // for nsIntRect
|
||||
#include "nsRegion.h" // for nsIntRegion, etc
|
||||
#include "nsTArray.h" // for nsAutoTArray
|
||||
+#ifdef MOZ_ENABLE_SKIA
|
||||
#include "skia/SkCanvas.h" // for SkCanvas
|
||||
#include "skia/SkBitmapDevice.h" // for SkBitmapDevice
|
||||
+#else
|
||||
+#define PIXMAN_DONT_DEFINE_STDINT
|
||||
+#include "pixman.h" // for pixman_f_transform, etc
|
||||
+#endif
|
||||
class nsIWidget;
|
||||
|
||||
namespace mozilla {
|
||||
namespace layers {
|
||||
|
||||
using namespace mozilla::gfx;
|
||||
|
||||
/**
|
||||
@@ -601,16 +606,17 @@ void
|
||||
BasicLayerManager::SetRoot(Layer* aLayer)
|
||||
{
|
||||
NS_ASSERTION(aLayer, "Root can't be null");
|
||||
NS_ASSERTION(aLayer->Manager() == this, "Wrong manager");
|
||||
NS_ASSERTION(InConstruction(), "Only allowed in construction phase");
|
||||
mRoot = aLayer;
|
||||
}
|
||||
|
||||
+#ifdef MOZ_ENABLE_SKIA
|
||||
static SkMatrix
|
||||
BasicLayerManager_Matrix3DToSkia(const gfx3DMatrix& aMatrix)
|
||||
{
|
||||
SkMatrix transform;
|
||||
transform.setAll(aMatrix._11,
|
||||
aMatrix._21,
|
||||
aMatrix._41,
|
||||
aMatrix._12,
|
||||
@@ -619,20 +625,20 @@ BasicLayerManager_Matrix3DToSkia(const g
|
||||
aMatrix._14,
|
||||
aMatrix._24,
|
||||
aMatrix._44);
|
||||
|
||||
return transform;
|
||||
}
|
||||
|
||||
static void
|
||||
-SkiaTransform(const gfxImageSurface* aDest,
|
||||
- RefPtr<DataSourceSurface> aSrc,
|
||||
- const gfx3DMatrix& aTransform,
|
||||
- gfxPoint aDestOffset)
|
||||
+Transform(const gfxImageSurface* aDest,
|
||||
+ RefPtr<DataSourceSurface> aSrc,
|
||||
+ const gfx3DMatrix& aTransform,
|
||||
+ gfxPoint aDestOffset)
|
||||
{
|
||||
if (aTransform.IsSingular()) {
|
||||
return;
|
||||
}
|
||||
|
||||
IntSize destSize = ToIntSize(aDest->GetSize());
|
||||
SkImageInfo destInfo = SkImageInfo::Make(destSize.width,
|
||||
destSize.height,
|
||||
@@ -658,16 +664,88 @@ SkiaTransform(const gfxImageSurface* aDe
|
||||
|
||||
SkPaint paint;
|
||||
paint.setXfermodeMode(SkXfermode::kSrc_Mode);
|
||||
paint.setAntiAlias(true);
|
||||
paint.setFilterLevel(SkPaint::kLow_FilterLevel);
|
||||
SkRect destRect = SkRect::MakeXYWH(0, 0, srcSize.width, srcSize.height);
|
||||
destCanvas.drawBitmapRectToRect(src, nullptr, destRect, &paint);
|
||||
}
|
||||
+#else
|
||||
+static pixman_transform
|
||||
+BasicLayerManager_Matrix3DToPixman(const gfx3DMatrix& aMatrix)
|
||||
+{
|
||||
+ pixman_f_transform transform;
|
||||
+
|
||||
+ transform.m[0][0] = aMatrix._11;
|
||||
+ transform.m[0][1] = aMatrix._21;
|
||||
+ transform.m[0][2] = aMatrix._41;
|
||||
+ transform.m[1][0] = aMatrix._12;
|
||||
+ transform.m[1][1] = aMatrix._22;
|
||||
+ transform.m[1][2] = aMatrix._42;
|
||||
+ transform.m[2][0] = aMatrix._14;
|
||||
+ transform.m[2][1] = aMatrix._24;
|
||||
+ transform.m[2][2] = aMatrix._44;
|
||||
+
|
||||
+ pixman_transform result;
|
||||
+ pixman_transform_from_pixman_f_transform(&result, &transform);
|
||||
+
|
||||
+ return result;
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+Transform(const gfxImageSurface* aDest,
|
||||
+ RefPtr<DataSourceSurface> aSrc,
|
||||
+ const gfx3DMatrix& aTransform,
|
||||
+ gfxPoint aDestOffset)
|
||||
+{
|
||||
+ IntSize destSize = ToIntSize(aDest->GetSize());
|
||||
+ pixman_image_t* dest = pixman_image_create_bits(aDest->Format() == gfxImageFormat::ARGB32 ? PIXMAN_a8r8g8b8 : PIXMAN_x8r8g8b8,
|
||||
+ destSize.width,
|
||||
+ destSize.height,
|
||||
+ (uint32_t*)aDest->Data(),
|
||||
+ aDest->Stride());
|
||||
+
|
||||
+ IntSize srcSize = aSrc->GetSize();
|
||||
+ pixman_image_t* src = pixman_image_create_bits(aSrc->GetFormat() == SurfaceFormat::B8G8R8A8 ? PIXMAN_a8r8g8b8 : PIXMAN_x8r8g8b8,
|
||||
+ srcSize.width,
|
||||
+ srcSize.height,
|
||||
+ (uint32_t*)aSrc->GetData(),
|
||||
+ aSrc->Stride());
|
||||
+
|
||||
+ NS_ABORT_IF_FALSE(src && dest, "Failed to create pixman images?");
|
||||
+
|
||||
+ pixman_transform pixTransform = BasicLayerManager_Matrix3DToPixman(aTransform);
|
||||
+ pixman_transform pixTransformInverted;
|
||||
+
|
||||
+ // If the transform is singular then nothing would be drawn anyway, return here
|
||||
+ if (!pixman_transform_invert(&pixTransformInverted, &pixTransform)) {
|
||||
+ pixman_image_unref(dest);
|
||||
+ pixman_image_unref(src);
|
||||
+ return;
|
||||
+ }
|
||||
+ pixman_image_set_transform(src, &pixTransformInverted);
|
||||
+
|
||||
+ pixman_image_composite32(PIXMAN_OP_SRC,
|
||||
+ src,
|
||||
+ nullptr,
|
||||
+ dest,
|
||||
+ aDestOffset.x,
|
||||
+ aDestOffset.y,
|
||||
+ 0,
|
||||
+ 0,
|
||||
+ 0,
|
||||
+ 0,
|
||||
+ destSize.width,
|
||||
+ destSize.height);
|
||||
+
|
||||
+ pixman_image_unref(dest);
|
||||
+ pixman_image_unref(src);
|
||||
+}
|
||||
+#endif
|
||||
|
||||
/**
|
||||
* Transform a surface using a gfx3DMatrix and blit to the destination if
|
||||
* it is efficient to do so.
|
||||
*
|
||||
* @param aSource Source surface.
|
||||
* @param aDest Desintation context.
|
||||
* @param aBounds Area represented by aSource.
|
||||
@@ -699,17 +777,17 @@ Transform3D(RefPtr<SourceSurface> aSourc
|
||||
aDestRect.height),
|
||||
gfxImageFormat::ARGB32);
|
||||
gfxPoint offset = aDestRect.TopLeft();
|
||||
|
||||
// Include a translation to the correct origin.
|
||||
gfx3DMatrix translation = gfx3DMatrix::Translation(aBounds.x, aBounds.y, 0);
|
||||
|
||||
// Transform the content and offset it such that the content begins at the origin.
|
||||
- SkiaTransform(destImage, aSource->GetDataSurface(), translation * aTransform, offset);
|
||||
+ Transform(destImage, aSource->GetDataSurface(), translation * aTransform, offset);
|
||||
|
||||
// If we haven't actually drawn to aDest then return our temporary image so
|
||||
// that the caller can do this.
|
||||
return destImage.forget();
|
||||
}
|
||||
|
||||
void
|
||||
BasicLayerManager::PaintSelfOrChildren(PaintLayerContext& aPaintContext,
|
||||
|
|
@ -2,8 +2,7 @@
|
|||
# Maintainer : Ionut Biru <ibiru@archlinux.org>
|
||||
# Contributor: Jakub Schmidtke <sjakub@gmail.com>
|
||||
|
||||
# ALARM: Kevin Mihelich <kevin@archlinuxarm.org>
|
||||
# - patch for skia FTBFS on ARM
|
||||
# remove when bumped upstream
|
||||
|
||||
pkgname=firefox
|
||||
pkgver=38.0
|
||||
|
@ -26,15 +25,13 @@ install=firefox.install
|
|||
options=('!emptydirs' '!makeflags')
|
||||
source=(https://ftp.mozilla.org/pub/mozilla.org/firefox/releases/$pkgver/source/firefox-$pkgver.source.tar.bz2
|
||||
mozconfig firefox.desktop firefox-install-dir.patch vendor.js
|
||||
firefox-fixed-loading-icon.png
|
||||
48e130d69836.patch)
|
||||
firefox-fixed-loading-icon.png)
|
||||
sha256sums=('0f2877fe4528a91c19e89249c19b13bac846d7b9f9f6528abb7d8387197c31f3'
|
||||
'ffcb2a0ba2ed08f74931a11043717391ef380234cadccc6f0c13f1186ad80e8b'
|
||||
'c202e5e18da1eeddd2e1d81cb3436813f11e44585ca7357c4c5f1bddd4bec826'
|
||||
'd86e41d87363656ee62e12543e2f5181aadcff448e406ef3218e91865ae775cd'
|
||||
'4b50e9aec03432e21b44d18c4c97b2630bace606b033f7d556c9d3e3eb0f4fa4'
|
||||
'68e3a5b47c6d175cc95b98b069a15205f027cab83af9e075818d38610feb6213'
|
||||
'ab2d45b70d2006b539af3ea6e6f119d8aa62ef26f9b0d9813b728f22bf7af1de')
|
||||
'68e3a5b47c6d175cc95b98b069a15205f027cab83af9e075818d38610feb6213')
|
||||
validpgpkeys=('2B90598A745E992F315E22C58AB132963A06537A')
|
||||
|
||||
# Google API keys (see http://www.chromium.org/developers/how-tos/api-keys)
|
||||
|
@ -49,9 +46,6 @@ prepare() {
|
|||
cp ../mozconfig .mozconfig
|
||||
patch -Np1 -i ../firefox-install-dir.patch
|
||||
|
||||
# https://bugzilla.mozilla.org/show_bug.cgi?id=1136958
|
||||
patch -p1 -i ../48e130d69836.patch
|
||||
|
||||
echo -n "$_google_api_key" >google-api-key
|
||||
echo "ac_add_options --with-google-api-keyfile=\"$PWD/google-api-key\"" >>.mozconfig
|
||||
|
||||
|
|
Loading…
Reference in a new issue