diff options
| author | Yuuki Harano | 2019-07-29 21:31:42 +0900 |
|---|---|---|
| committer | Jeff Walsh | 2020-11-22 14:46:56 +1100 |
| commit | fd61a86ea593fec0fc8967550f515596dc596601 (patch) | |
| tree | 60033e01d952532fe7187ea400383ffb85f700bc /src/pgtkterm.c | |
| parent | ae3bb140912827c38e7033c07851a94ba710428d (diff) | |
| download | emacs-fd61a86ea593fec0fc8967550f515596dc596601.tar.gz emacs-fd61a86ea593fec0fc8967550f515596dc596601.zip | |
improve some efficiency - simplify draws
* src/pgtkterm.h (struct pgtk_bitmap_record):
* src/pgtkterm.c (create_background_surface_by_face):
* src/image.c (image_create_pattern_from_pixbuf)
(image_create_bitmap_from_data, image_create_bitmap_from_file):
少し効率化。
Diffstat (limited to 'src/pgtkterm.c')
| -rw-r--r-- | src/pgtkterm.c | 35 |
1 files changed, 8 insertions, 27 deletions
diff --git a/src/pgtkterm.c b/src/pgtkterm.c index 4665a934718..3e8357e7749 100644 --- a/src/pgtkterm.c +++ b/src/pgtkterm.c | |||
| @@ -1024,34 +1024,15 @@ create_background_surface_by_face (struct frame *f, struct face *face, int x, in | |||
| 1024 | } | 1024 | } |
| 1025 | 1025 | ||
| 1026 | if (face->stipple != 0) { | 1026 | if (face->stipple != 0) { |
| 1027 | GdkPixbuf *pixbuf = FRAME_DISPLAY_INFO (f)->bitmaps[face->stipple - 1].img; | 1027 | cairo_pattern_t *mask = FRAME_DISPLAY_INFO (f)->bitmaps[face->stipple - 1].pattern; |
| 1028 | GdkPixbuf *pb = gdk_pixbuf_add_alpha (pixbuf, TRUE, 255, 255, 255); | ||
| 1029 | cairo_surface_t *mask = cairo_surface_create_similar_image (FRAME_CR_SURFACE (f), | ||
| 1030 | CAIRO_FORMAT_A1, | ||
| 1031 | width, | ||
| 1032 | height); | ||
| 1033 | 1028 | ||
| 1034 | { | 1029 | cairo_t *cr = cairo_create (surface); |
| 1035 | cairo_t *cr = cairo_create (mask); | 1030 | double r = ((face->foreground >> 16) & 0xff) / 255.0; |
| 1036 | gdk_cairo_set_source_pixbuf (cr, pb, 0, 0); | 1031 | double g = ((face->foreground >> 8) & 0xff) / 255.0; |
| 1037 | cairo_pattern_set_extend (cairo_get_source (cr), CAIRO_EXTEND_REPEAT); | 1032 | double b = ((face->foreground >> 0) & 0xff) / 255.0; |
| 1038 | cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE); | 1033 | cairo_set_source_rgb (cr, r, g, b); |
| 1039 | cairo_paint (cr); | 1034 | cairo_mask (cr, mask); |
| 1040 | cairo_destroy (cr); | 1035 | cairo_destroy (cr); |
| 1041 | } | ||
| 1042 | |||
| 1043 | { | ||
| 1044 | cairo_t *cr = cairo_create (surface); | ||
| 1045 | double r = ((face->foreground >> 16) & 0xff) / 255.0; | ||
| 1046 | double g = ((face->foreground >> 8) & 0xff) / 255.0; | ||
| 1047 | double b = ((face->foreground >> 0) & 0xff) / 255.0; | ||
| 1048 | cairo_set_source_rgb (cr, r, g, b); | ||
| 1049 | cairo_mask_surface (cr, mask, 0, 0); | ||
| 1050 | cairo_destroy (cr); | ||
| 1051 | } | ||
| 1052 | |||
| 1053 | cairo_surface_destroy (mask); | ||
| 1054 | g_object_unref (pb); | ||
| 1055 | } | 1036 | } |
| 1056 | 1037 | ||
| 1057 | return surface; | 1038 | return surface; |