Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
core
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
LibreOffice
core
Commits
e8ba02b1
Kaydet (Commit)
e8ba02b1
authored
Ara 09, 2017
tarafından
Ashod Nakashian
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
vcl-svp: add 24-bit (3-byte) RGB surface support to Cairo
Change-Id: I7707219eae4c2d6d40c8dc957207b63d3049a75f
üst
1168a112
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
157 additions
and
29 deletions
+157
-29
cairo-1.10.2.patch
external/cairo/cairo/cairo-1.10.2.patch
+122
-15
svpgdi.cxx
vcl/headless/svpgdi.cxx
+31
-11
svpgdi.hxx
vcl/inc/headless/svpgdi.hxx
+4
-3
No files found.
external/cairo/cairo/cairo-1.10.2.patch
Dosyayı görüntüle @
e8ba02b1
--- misc/cairo-1.10.2/build/Makefile.win32.features 2010-08-18 09:47:30.000000000 +0200
+++ misc/build/cairo-1.10.2/build/Makefile.win32.features 2011-12-20 09:57:06.428170146 +0100
diff -ruNw misc/cairo-1.10.2/build/Makefile.win32.features misc/build/cairo-1.10.2/build/Makefile.win32.features
--- misc/cairo-1.10.2/build/Makefile.win32.features 2015-10-27 17:04:21.000000000 -0400
+++ misc/build/cairo-1.10.2/build/Makefile.win32.features 2017-11-24 21:43:14.103524768 -0500
@@ -30,7 +30,7 @@
CAIRO_HAS_FC_FONT=0
CAIRO_HAS_PS_SURFACE=1
...
...
@@ -9,9 +10,10 @@
CAIRO_HAS_TEST_SURFACES=0
CAIRO_HAS_TEE_SURFACE=0
CAIRO_HAS_XML_SURFACE=0
--- misc/cairo-1.10.2/configure 2010-12-25 15:22:57.000000000 +0100
+++ misc/build/cairo-1.10.2/configure 2010-12-25 15:22:57.000000000 +0100
@@ -19259,59 +19259,10 @@
diff -ruNw misc/cairo-1.10.2/configure misc/build/cairo-1.10.2/configure
--- misc/cairo-1.10.2/configure 2015-12-09 15:41:45.000000000 -0500
+++ misc/build/cairo-1.10.2/configure 2017-11-24 21:43:14.103524768 -0500
@@ -20580,61 +20580,12 @@
rm -f confcache
...
...
@@ -58,8 +60,8 @@
have_libz=yes
$as_echo "#define HAVE_ZLIB 1" >>confdefs.h
-
-
-else
- have_libz="no (requires zlib http://www.gzip.org/zlib/)"
-fi
...
...
@@ -68,10 +70,12 @@
-else
- have_libz="no (requires zlib http://www.gzip.org/zlib/)"
-fi
-
-
save_LIBS="$LIBS"
@@ -29424,7 +29424,7 @@
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for lzo2a_decompress in -llzo2" >&5
$as_echo_n "checking for lzo2a_decompress in -llzo2... " >&6; }
@@ -30069,7 +30020,7 @@
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $FREETYPE_VERSION - OK" >&5
$as_echo "$FREETYPE_VERSION - OK" >&6; }
ft_NONPKGCONFIG_CFLAGS=`$FREETYPE_CONFIG --cflags`
...
...
@@ -80,7 +84,7 @@
else { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FREETYPE_VERSION - Too old" >&5
$as_echo "$FREETYPE_VERSION - Too old" >&6; }
use_ft="no ($FREETYPE_VERSION found; version $FREETYPE_MIN_VERSION from release $FREETYPE_MIN_RELEASE required)"
@@ -
29434,7 +29434
,7 @@
@@ -
30079,7 +30030
,7 @@
fi
ft_CFLAGS="$FREETYPE_CFLAGS"
...
...
@@ -89,7 +93,7 @@
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's FreeType font backend feature could be enabled" >&5
@@ -30
121,7 +30121
,7 @@
@@ -30
686,7 +30637
,7 @@
# The ps backend requires zlib.
use_ps=$have_libz
...
...
@@ -98,7 +102,7 @@
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's PostScript surface backend feature could be enabled" >&5
@@ -3
0549,7 +30549
,7 @@
@@ -3
1082,7 +31033
,7 @@
# The pdf backend requires zlib.
use_pdf=$have_libz
...
...
@@ -107,7 +111,7 @@
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's PDF surface backend feature could be enabled" >&5
@@ -32
296,7 +32296
,7 @@
@@ -32
973,7 +32924
,7 @@
use_xml=$have_libz
...
...
@@ -116,4 +120,107 @@
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cairo's xml surface backend feature could be enabled" >&5
$as_echo_n "checking whether cairo's xml surface backend feature could be enabled... " >&6; }
diff -ruNw misc/cairo-1.10.2/src/cairo.h misc/build/cairo-1.10.2/src/cairo.h
--- misc/cairo-1.10.2/src/cairo.h 2015-10-27 17:04:21.000000000 -0400
+++ misc/build/cairo-1.10.2/src/cairo.h 2017-12-10 18:26:56.584047695 -0500
@@ -397,6 +397,8 @@
* with red in the upper 5 bits, then green in the middle
* 6 bits, and blue in the lower 5 bits. (Since 1.2)
* @CAIRO_FORMAT_RGB30: like RGB24 but with 10bpc. (Since 1.12)
+ * @CAIRO_FORMAT_24BIT_RGB: each pixel is a 24-bit quantity,
+ * with Red, Green, Blue taking 8-bits each, in that order. (Since 1.1x)
*
* #cairo_format_t is used to identify the memory format of
* image data.
@@ -412,9 +414,16 @@
CAIRO_FORMAT_A8 = 2,
CAIRO_FORMAT_A1 = 3,
CAIRO_FORMAT_RGB16_565 = 4,
- CAIRO_FORMAT_RGB30 = 5
+ CAIRO_FORMAT_RGB30 = 5,
+ CAIRO_FORMAT_24BIT_RGB = 6
} cairo_format_t;
+/**
+ * Need this until CAIRO_FORMAT_24BIT_RGB is in some official release.
+ * Otherwise we can't reliably check if this is available or we should
+ * convert from 24-bit RGB to 32-bit RGB before passing to Cairo.
+ **/
+#define HAVE_CAIRO_FORMAT_24BIT_RGB
/**
* cairo_write_func_t:
diff -ruNw misc/cairo-1.10.2/src/cairo-image-source.c misc/build/cairo-1.10.2/src/cairo-image-source.c
--- misc/cairo-1.10.2/src/cairo-image-source.c 2015-10-27 17:04:30.000000000 -0400
+++ misc/build/cairo-1.10.2/src/cairo-image-source.c 2017-12-10 22:31:08.911151137 -0500
@@ -508,6 +508,19 @@
color.blue = expand_channel(pixel & 0x3fff, 10);
return pixman_image_create_solid_fill (&color);
+ case CAIRO_FORMAT_24BIT_RGB:
+ pixel = *(uint32_t *) (image->data + y * image->stride + 3 * x);
+ pixel &= 0x00ffffff; /* ignore next pixel bits */
+ if (pixel == 0)
+ return _pixman_black_image ();
+ if (pixel == 0x00ffffff)
+ return _pixman_white_image ();
+
+ color.red = (pixel >> 16 & 0xff) | (pixel >> 8 & 0xff00);
+ color.green = (pixel >> 8 & 0xff) | (pixel & 0xff00);
+ color.blue = (pixel & 0xff) | (pixel << 8 & 0xff00);
+ return pixman_image_create_solid_fill (&color);
+
case CAIRO_FORMAT_ARGB32:
case CAIRO_FORMAT_RGB24:
pixel = *(uint32_t *) (image->data + y * image->stride + 4 * x);
diff -ruNw misc/cairo-1.10.2/src/cairo-image-surface.c misc/build/cairo-1.10.2/src/cairo-image-surface.c
--- misc/cairo-1.10.2/src/cairo-image-surface.c 2015-10-27 17:04:30.000000000 -0400
+++ misc/build/cairo-1.10.2/src/cairo-image-surface.c 2017-12-09 16:23:41.702363265 -0500
@@ -104,13 +104,15 @@
return CAIRO_FORMAT_A1;
case PIXMAN_r5g6b5:
return CAIRO_FORMAT_RGB16_565;
+ case PIXMAN_r8g8b8:
+ return CAIRO_FORMAT_24BIT_RGB;
#if PIXMAN_VERSION >= PIXMAN_VERSION_ENCODE(0,22,0)
case PIXMAN_r8g8b8a8: case PIXMAN_r8g8b8x8:
#endif
#if PIXMAN_VERSION >= PIXMAN_VERSION_ENCODE(0,27,2)
case PIXMAN_a8r8g8b8_sRGB:
#endif
- case PIXMAN_a8b8g8r8: case PIXMAN_x8b8g8r8: case PIXMAN_r8g8b8:
+ case PIXMAN_a8b8g8r8: case PIXMAN_x8b8g8r8:
case PIXMAN_b8g8r8: case PIXMAN_b5g6r5:
case PIXMAN_a1r5g5b5: case PIXMAN_x1r5g5b5: case PIXMAN_a1b5g5r5:
case PIXMAN_x1b5g5r5: case PIXMAN_a4r4g4b4: case PIXMAN_x4r4g4b4:
@@ -320,6 +322,9 @@
case CAIRO_FORMAT_RGB16_565:
ret = PIXMAN_r5g6b5;
break;
+ case CAIRO_FORMAT_24BIT_RGB:
+ ret = PIXMAN_r8g8b8;
+ break;
case CAIRO_FORMAT_ARGB32:
case CAIRO_FORMAT_INVALID:
default:
@@ -718,6 +723,8 @@
case CAIRO_FORMAT_RGB30:
case CAIRO_FORMAT_RGB24:
return 32;
+ case CAIRO_FORMAT_24BIT_RGB:
+ return 24;
case CAIRO_FORMAT_RGB16_565:
return 16;
case CAIRO_FORMAT_A8:
diff -ruNw misc/cairo-1.10.2/src/cairoint.h misc/build/cairo-1.10.2/src/cairoint.h
--- misc/cairo-1.10.2/src/cairoint.h 2015-10-27 17:04:30.000000000 -0400
+++ misc/build/cairo-1.10.2/src/cairoint.h 2017-12-09 14:32:01.555523101 -0500
@@ -1486,7 +1486,7 @@
* in cairo-xlib-surface.c--again see -Wswitch-enum).
*/
#define CAIRO_FORMAT_VALID(format) ((format) >= CAIRO_FORMAT_ARGB32 && \
- (format) <= CAIRO_FORMAT_RGB30)
+ (format) <= CAIRO_FORMAT_24BIT_RGB)
/* pixman-required stride alignment in bytes. */
#define CAIRO_STRIDE_ALIGNMENT (sizeof (uint32_t))
vcl/headless/svpgdi.cxx
Dosyayı görüntüle @
e8ba02b1
...
...
@@ -37,9 +37,9 @@
#include <cairo.h>
#if ENABLE_CAIRO_CANVAS
#if defined CAIRO_VERSION && CAIRO_VERSION < CAIRO_VERSION_ENCODE(1, 10, 0)
# define CAIRO_OPERATOR_DIFFERENCE (static_cast<cairo_operator_t>(23))
#endif
#
if defined CAIRO_VERSION && CAIRO_VERSION < CAIRO_VERSION_ENCODE(1, 10, 0)
#
define CAIRO_OPERATOR_DIFFERENCE (static_cast<cairo_operator_t>(23))
#
endif
#endif
namespace
...
...
@@ -103,9 +103,18 @@ namespace
cairo_format_t
getCairoFormat
(
const
BitmapBuffer
&
rBuffer
)
{
cairo_format_t
nFormat
;
#ifdef HAVE_CAIRO_FORMAT_24BIT_RGB
assert
(
rBuffer
.
mnBitCount
==
32
||
rBuffer
.
mnBitCount
==
24
||
rBuffer
.
mnBitCount
==
1
);
#else
assert
(
rBuffer
.
mnBitCount
==
32
||
rBuffer
.
mnBitCount
==
1
);
#endif
if
(
rBuffer
.
mnBitCount
==
32
)
nFormat
=
CAIRO_FORMAT_ARGB32
;
#ifdef HAVE_CAIRO_FORMAT_24BIT_RGB
else
if
(
rBuffer
.
mnBitCount
==
24
)
nFormat
=
CAIRO_FORMAT_24BIT_RGB
;
#endif
else
nFormat
=
CAIRO_FORMAT_A1
;
return
nFormat
;
...
...
@@ -179,6 +188,15 @@ namespace
{
if
((
SVP_CAIRO_FORMAT
&
~
ScanlineFormat
::
TopDown
)
==
ScanlineFormat
::
N32BitTcRgba
)
{
assert
((
SVP_24BIT_FORMAT
&
~
ScanlineFormat
::
TopDown
)
==
ScanlineFormat
::
N32BitTcRgb
);
pD
[
0
]
=
pS
[
0
];
pD
[
1
]
=
pS
[
1
];
pD
[
2
]
=
pS
[
2
];
pD
[
3
]
=
0xff
;
// Alpha
}
else
if
((
SVP_CAIRO_FORMAT
&
~
ScanlineFormat
::
TopDown
)
==
ScanlineFormat
::
N32BitTcBgra
)
{
assert
((
SVP_24BIT_FORMAT
&
~
ScanlineFormat
::
TopDown
)
==
ScanlineFormat
::
N32BitTcBgr
);
pD
[
0
]
=
pS
[
0
];
pD
[
1
]
=
pS
[
1
];
pD
[
2
]
=
pS
[
2
];
...
...
@@ -186,18 +204,12 @@ namespace
}
else
if
((
SVP_CAIRO_FORMAT
&
~
ScanlineFormat
::
TopDown
)
==
ScanlineFormat
::
N32BitTcArgb
)
{
assert
((
SVP_24BIT_FORMAT
&
~
ScanlineFormat
::
TopDown
)
==
ScanlineFormat
::
N32BitTcRgb
);
pD
[
0
]
=
0xff
;
// Alpha
pD
[
1
]
=
pS
[
0
];
pD
[
2
]
=
pS
[
1
];
pD
[
3
]
=
pS
[
2
];
}
else
if
((
SVP_CAIRO_FORMAT
&
~
ScanlineFormat
::
TopDown
)
==
ScanlineFormat
::
N32BitTcBgra
)
{
pD
[
0
]
=
pS
[
2
];
pD
[
1
]
=
pS
[
1
];
pD
[
2
]
=
pS
[
0
];
pD
[
3
]
=
0xff
;
// Alpha
}
else
{
assert
(
!
"Unsupported SVP_CAIRO_FORMAT!"
);
...
...
@@ -217,7 +229,11 @@ namespace
explicit
SourceHelper
(
const
SalBitmap
&
rSourceBitmap
)
{
const
SvpSalBitmap
&
rSrcBmp
=
static_cast
<
const
SvpSalBitmap
&>
(
rSourceBitmap
);
#ifdef HAVE_CAIRO_FORMAT_24BIT_RGB
if
(
rSrcBmp
.
GetBitCount
()
!=
32
&&
rSrcBmp
.
GetBitCount
()
!=
24
)
#else
if
(
rSrcBmp
.
GetBitCount
()
!=
32
)
#endif
{
//big stupid copy here
static
bool
bWarnedOnce
=
false
;
...
...
@@ -1439,8 +1455,12 @@ namespace
if
(
!
pBuffer
)
return
false
;
// Cairo doesn't support 24-bit RGB; only ARGB with the alpha ignored.
// We use Cairo that supports 24-bit RGB.
#ifdef HAVE_CAIRO_FORMAT_24BIT_RGB
if
(
pBuffer
->
mnBitCount
!=
32
&&
pBuffer
->
mnBitCount
!=
24
&&
pBuffer
->
mnBitCount
!=
1
)
#else
if
(
pBuffer
->
mnBitCount
!=
32
&&
pBuffer
->
mnBitCount
!=
1
)
#endif
return
false
;
cairo_format_t
nFormat
=
getCairoFormat
(
*
pBuffer
);
...
...
vcl/inc/headless/svpgdi.hxx
Dosyayı görüntüle @
e8ba02b1
...
...
@@ -38,19 +38,23 @@
//which is internal in that case, to swap the rgb components so that
//cairo then matches the OpenGL GL_RGBA format so we can use it there
//where we don't have GL_BGRA support.
// SVP_24BIT_FORMAT is used to store 24-bit images in 3-byte pixels to conserve memory.
#if defined ANDROID
# define SVP_24BIT_FORMAT (ScanlineFormat::N24BitTcRgb | ScanlineFormat::TopDown)
# define SVP_CAIRO_FORMAT (ScanlineFormat::N32BitTcRgba | ScanlineFormat::TopDown)
# define SVP_CAIRO_BLUE 1
# define SVP_CAIRO_GREEN 2
# define SVP_CAIRO_RED 0
# define SVP_CAIRO_ALPHA 3
#elif defined OSL_BIGENDIAN
# define SVP_24BIT_FORMAT (ScanlineFormat::N24BitTcRgb | ScanlineFormat::TopDown)
# define SVP_CAIRO_FORMAT (ScanlineFormat::N32BitTcArgb | ScanlineFormat::TopDown)
# define SVP_CAIRO_BLUE 3
# define SVP_CAIRO_GREEN 2
# define SVP_CAIRO_RED 1
# define SVP_CAIRO_ALPHA 0
#else
# define SVP_24BIT_FORMAT (ScanlineFormat::N24BitTcBgr | ScanlineFormat::TopDown)
# define SVP_CAIRO_FORMAT (ScanlineFormat::N32BitTcBgra | ScanlineFormat::TopDown)
# define SVP_CAIRO_BLUE 0
# define SVP_CAIRO_GREEN 1
...
...
@@ -58,9 +62,6 @@
# define SVP_CAIRO_ALPHA 3
#endif
// Used to store 24-bit images in 3-byte pixels to conserve memory.
#define SVP_24BIT_FORMAT (ScanlineFormat::N24BitTcRgb | ScanlineFormat::TopDown)
struct
BitmapBuffer
;
class
GlyphCache
;
class
FreetypeFont
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment