… | |
… | |
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); |