aboutsummaryrefslogtreecommitdiffstats
path: root/src/pgtkterm.c
diff options
context:
space:
mode:
authorYuuki Harano2019-07-29 21:31:42 +0900
committerJeff Walsh2020-11-22 14:46:56 +1100
commitfd61a86ea593fec0fc8967550f515596dc596601 (patch)
tree60033e01d952532fe7187ea400383ffb85f700bc /src/pgtkterm.c
parentae3bb140912827c38e7033c07851a94ba710428d (diff)
downloademacs-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.c35
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;