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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines