ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/rxvt-unicode/src/background.C
(Generate patch)

Comparing rxvt-unicode/src/background.C (file contents):
Revision 1.189 by sf-exg, Thu Dec 29 16:45:22 2011 UTC vs.
Revision 1.193 by sf-exg, Sun Jan 1 14:31:29 2012 UTC

819 } 819 }
820 820
821#if XRENDER 821#if XRENDER
822 if (tr_flags) 822 if (tr_flags)
823 { 823 {
824 XRenderPictureAttributes pa;
825
826 XRenderPictFormat *src_format = XRenderFindVisualFormat (dpy, visual); 824 XRenderPictFormat *format = XRenderFindVisualFormat (dpy, visual);
825
827 Picture src = XRenderCreatePicture (dpy, root_pmap, src_format, 0, &pa); 826 Picture src = XRenderCreatePicture (dpy, root_pmap, format, 0, 0);
828 827
829 XRenderPictFormat *dst_format = XRenderFindVisualFormat (dpy, visual);
830 Picture dst = XRenderCreatePicture (dpy, bg_pixmap, dst_format, 0, &pa); 828 Picture dst = XRenderCreatePicture (dpy, bg_pixmap, format, 0, 0);
831 829
832 Picture mask = create_xrender_mask (dpy, vt, False, False); 830 Picture mask = create_xrender_mask (dpy, vt, False, False);
833 831
834 XRenderColor mask_c; 832 XRenderColor mask_c;
835 833
836 mask_c.alpha = 0x8000; 834 mask_c.alpha = 0x8000;
837 mask_c.red = 0; 835 mask_c.red =
838 mask_c.green = 0; 836 mask_c.green =
839 mask_c.blue = 0; 837 mask_c.blue = 0;
840 XRenderFillRectangle (dpy, PictOpSrc, mask, &mask_c, 0, 0, 1, 1); 838 XRenderFillRectangle (dpy, PictOpSrc, mask, &mask_c, 0, 0, 1, 1);
839
841 XRenderComposite (dpy, PictOpOver, src, mask, dst, 0, 0, 0, 0, 0, 0, target_width, target_height); 840 XRenderComposite (dpy, PictOpOver, src, mask, dst, 0, 0, 0, 0, 0, 0, target_width, target_height);
842 841
843 XRenderFreePicture (dpy, src); 842 XRenderFreePicture (dpy, src);
844 XRenderFreePicture (dpy, dst); 843 XRenderFreePicture (dpy, dst);
845 XRenderFreePicture (dpy, mask); 844 XRenderFreePicture (dpy, mask);
957 { 956 {
958 changed = true; 957 changed = true;
959 v_blurRadius = vr; 958 v_blurRadius = vr;
960 } 959 }
961 960
962 if (v_blurRadius == 0 && h_blurRadius == 0) 961 if (h_blurRadius == 0 || v_blurRadius == 0)
963 bg_flags &= ~BG_NEEDS_BLUR; 962 bg_flags &= ~BG_NEEDS_BLUR;
964 else 963 else
965 bg_flags |= BG_NEEDS_BLUR; 964 bg_flags |= BG_NEEDS_BLUR;
966 965
967 return changed; 966 return changed;
1055 1054
1056 int size = max (h_blurRadius, v_blurRadius) * 2 + 1; 1055 int size = max (h_blurRadius, v_blurRadius) * 2 + 1;
1057 double *kernel = (double *)malloc (size * sizeof (double)); 1056 double *kernel = (double *)malloc (size * sizeof (double));
1058 XFixed *params = (XFixed *)malloc ((size + 2) * sizeof (XFixed)); 1057 XFixed *params = (XFixed *)malloc ((size + 2) * sizeof (XFixed));
1059 1058
1060 XRenderPictureAttributes pa;
1061 XRenderPictFormat *format = XRenderFindVisualFormat (dpy, visual); 1059 XRenderPictFormat *format = XRenderFindVisualFormat (dpy, visual);
1062 1060
1063 Picture src = XRenderCreatePicture (dpy, pixmap, format, 0, &pa); 1061 Picture src = XRenderCreatePicture (dpy, pixmap, format, 0, 0);
1064 Picture dst = XRenderCreatePicture (dpy, pixmap, format, 0, &pa); 1062 Picture dst = XRenderCreatePicture (dpy, pixmap, format, 0, 0);
1065 1063
1066 if (kernel && params) 1064 if (kernel && params)
1067 { 1065 {
1068 if (h_blurRadius)
1069 {
1070 size = h_blurRadius * 2 + 1; 1066 size = h_blurRadius * 2 + 1;
1071 get_gaussian_kernel (h_blurRadius, size, kernel, params); 1067 get_gaussian_kernel (h_blurRadius, size, kernel, params);
1072 1068
1073 XRenderSetPictureFilter (dpy, src, FilterConvolution, params, size+2); 1069 XRenderSetPictureFilter (dpy, src, FilterConvolution, params, size+2);
1074 XRenderComposite (dpy, 1070 XRenderComposite (dpy,
1075 PictOpSrc, 1071 PictOpSrc,
1076 src, 1072 src,
1077 None, 1073 None,
1078 dst, 1074 dst,
1079 0, 0, 1075 0, 0,
1080 0, 0, 1076 0, 0,
1081 0, 0, 1077 0, 0,
1082 width, height); 1078 width, height);
1083 }
1084 1079
1085 if (v_blurRadius)
1086 {
1087 size = v_blurRadius * 2 + 1; 1080 size = v_blurRadius * 2 + 1;
1088 get_gaussian_kernel (v_blurRadius, size, kernel, params); 1081 get_gaussian_kernel (v_blurRadius, size, kernel, params);
1089 ::swap (params[0], params[1]); 1082 ::swap (params[0], params[1]);
1090 1083
1091 XRenderSetPictureFilter (dpy, src, FilterConvolution, params, size+2); 1084 XRenderSetPictureFilter (dpy, src, FilterConvolution, params, size+2);
1092 XRenderComposite (dpy, 1085 XRenderComposite (dpy,
1093 PictOpSrc, 1086 PictOpSrc,
1094 src, 1087 src,
1095 None, 1088 None,
1096 dst, 1089 dst,
1097 0, 0, 1090 0, 0,
1098 0, 0, 1091 0, 0,
1099 0, 0, 1092 0, 0,
1100 width, height); 1093 width, height);
1101 }
1102 1094
1103 ret = true; 1095 ret = true;
1104 } 1096 }
1105 1097
1106 free (kernel); 1098 free (kernel);
1154 c.g = c.g * (200 - shade) / 100; 1146 c.g = c.g * (200 - shade) / 100;
1155 c.b = c.b * (200 - shade) / 100; 1147 c.b = c.b * (200 - shade) / 100;
1156 } 1148 }
1157 1149
1158 XRenderPictFormat *format = XRenderFindVisualFormat (dpy, visual); 1150 XRenderPictFormat *format = XRenderFindVisualFormat (dpy, visual);
1159 XRenderPictureAttributes pa;
1160 1151
1161 Picture back_pic = XRenderCreatePicture (dpy, pixmap, format, 0, &pa); 1152 Picture back_pic = XRenderCreatePicture (dpy, pixmap, format, 0, 0);
1162 1153
1163 Picture overlay_pic = create_xrender_mask (dpy, pixmap, True, False); 1154 Picture overlay_pic = create_xrender_mask (dpy, pixmap, True, False);
1164 1155
1165 Picture mask_pic = create_xrender_mask (dpy, pixmap, True, True); 1156 Picture mask_pic = create_xrender_mask (dpy, pixmap, True, True);
1166 1157
1175 mask_c.alpha = 0; 1166 mask_c.alpha = 0;
1176 mask_c.red = 0xffff - c.r; 1167 mask_c.red = 0xffff - c.r;
1177 mask_c.green = 0xffff - c.g; 1168 mask_c.green = 0xffff - c.g;
1178 mask_c.blue = 0xffff - c.b; 1169 mask_c.blue = 0xffff - c.b;
1179 XRenderFillRectangle (dpy, PictOpSrc, mask_pic, &mask_c, 0, 0, 1, 1); 1170 XRenderFillRectangle (dpy, PictOpSrc, mask_pic, &mask_c, 0, 0, 1, 1);
1171
1180 XRenderComposite (dpy, PictOpOver, overlay_pic, mask_pic, back_pic, 0, 0, 0, 0, 0, 0, width, height); 1172 XRenderComposite (dpy, PictOpOver, overlay_pic, mask_pic, back_pic, 0, 0, 0, 0, 0, 0, width, height);
1181 1173
1182 if (shade > 100) 1174 if (shade > 100)
1183 { 1175 {
1184 mask_c.red = mask_c.green = mask_c.blue = 0xffff * (shade - 100) / 100;
1185 mask_c.alpha = 0; 1176 mask_c.alpha = 0;
1177 mask_c.red =
1178 mask_c.green =
1179 mask_c.blue = 0xffff * (shade - 100) / 100;
1186 XRenderFillRectangle (dpy, PictOpSrc, overlay_pic, &mask_c, 0, 0, 1, 1); 1180 XRenderFillRectangle (dpy, PictOpSrc, overlay_pic, &mask_c, 0, 0, 1, 1);
1187 1181
1188 XRenderComposite (dpy, PictOpOver, overlay_pic, None, back_pic, 0, 0, 0, 0, 0, 0, width, height); 1182 XRenderComposite (dpy, PictOpOver, overlay_pic, None, back_pic, 0, 0, 0, 0, 0, 0, width, height);
1189 } 1183 }
1190 1184
1253#if XRENDER 1247#if XRENDER
1254 if (bg_flags & BG_HAS_RENDER) 1248 if (bg_flags & BG_HAS_RENDER)
1255 { 1249 {
1256 recoded_root_pmap = XCreatePixmap (dpy, vt, root_pmap_width, root_pmap_height, depth); 1250 recoded_root_pmap = XCreatePixmap (dpy, vt, root_pmap_width, root_pmap_height, depth);
1257 1251
1258 XRenderPictureAttributes pa;
1259
1260 XRenderPictFormat *src_format = XRenderFindVisualFormat (dpy, DefaultVisual (dpy, screen)); 1252 XRenderPictFormat *src_format = XRenderFindVisualFormat (dpy, DefaultVisual (dpy, screen));
1261 Picture src = XRenderCreatePicture (dpy, root_pixmap, src_format, 0, &pa); 1253 Picture src = XRenderCreatePicture (dpy, root_pixmap, src_format, 0, 0);
1262 1254
1263 XRenderPictFormat *dst_format = XRenderFindVisualFormat (dpy, visual); 1255 XRenderPictFormat *dst_format = XRenderFindVisualFormat (dpy, visual);
1264 Picture dst = XRenderCreatePicture (dpy, recoded_root_pmap, dst_format, 0, &pa); 1256 Picture dst = XRenderCreatePicture (dpy, recoded_root_pmap, dst_format, 0, 0);
1265 1257
1266 XRenderComposite (dpy, PictOpSrc, src, None, dst, 0, 0, 0, 0, 0, 0, root_pmap_width, root_pmap_height); 1258 XRenderComposite (dpy, PictOpSrc, src, None, dst, 0, 0, 0, 0, 0, 0, root_pmap_width, root_pmap_height);
1267 1259
1268 XRenderFreePicture (dpy, src); 1260 XRenderFreePicture (dpy, src);
1269 XRenderFreePicture (dpy, dst); 1261 XRenderFreePicture (dpy, dst);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines