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.87 by sf-exg, Mon Oct 18 11:00:38 2010 UTC vs.
Revision 1.90 by sf-exg, Mon Oct 18 16:02:48 2010 UTC

1007 flags &= ~blurNeeded; 1007 flags &= ~blurNeeded;
1008 else 1008 else
1009 flags |= blurNeeded; 1009 flags |= blurNeeded;
1010 1010
1011#if XFT 1011#if XFT
1012 XFilters *filters = XRenderQueryFilters (target->dpy, target->display->root); 1012 XFilters *filters = XRenderQueryFilters (target->dpy, target->display->root);
1013 if (filters) 1013 if (filters)
1014 { 1014 {
1015 for (int i = 0; i < filters->nfilter; i++) 1015 for (int i = 0; i < filters->nfilter; i++)
1016 if (!strcmp (filters->filter[i], FilterConvolution)) 1016 if (!strcmp (filters->filter[i], FilterConvolution))
1017 flags |= bgPixmap_t::blurServerSide; 1017 flags |= bgPixmap_t::blurServerSide;
1018 1018
1019 XFree (filters); 1019 XFree (filters);
1020 } 1020 }
1021#endif 1021#endif
1022 1022
1023 return (changed > 0); 1023 return (changed > 0);
1024} 1024}
1025 1025
1117 1117
1118#if XFT 1118#if XFT
1119static void 1119static void
1120get_gaussian_kernel (int radius, int width, double *kernel, XFixed *params) 1120get_gaussian_kernel (int radius, int width, double *kernel, XFixed *params)
1121{ 1121{
1122 double sigma = radius / 2.0; 1122 double sigma = radius / 2.0;
1123 double scale = sqrt (2.0 * M_PI) * sigma; 1123 double scale = sqrt (2.0 * M_PI) * sigma;
1124 double sum = 0.0; 1124 double sum = 0.0;
1125 1125
1126 for (int i = 0; i < width; i++) 1126 for (int i = 0; i < width; i++)
1127 { 1127 {
1128 double x = i - width / 2; 1128 double x = i - width / 2;
1129 kernel[i] = exp (-(x * x) / (2.0 * sigma * sigma)) / scale; 1129 kernel[i] = exp (-(x * x) / (2.0 * sigma * sigma)) / scale;
1130 sum += kernel[i]; 1130 sum += kernel[i];
1131 } 1131 }
1132 1132
1133 params[0] = XDoubleToFixed (width); 1133 params[0] = XDoubleToFixed (width);
1134 params[1] = XDoubleToFixed (1); 1134 params[1] = XDoubleToFixed (1);
1135 1135
1136 for (int i = 0; i < width; i++) 1136 for (int i = 0; i < width; i++)
1137 params[i+2] = XDoubleToFixed (kernel[i] / sum); 1137 params[i+2] = XDoubleToFixed (kernel[i] / sum);
1138} 1138}
1139#endif 1139#endif
1140 1140
1141bool 1141bool
1142bgPixmap_t::blur_pixmap (Pixmap pixmap, Visual *visual, int width, int height) 1142bgPixmap_t::blur_pixmap (Pixmap pixmap, Visual *visual, int width, int height)
1375 { 1375 {
1376 if (!need_client_side_rendering ()) 1376 if (!need_client_side_rendering ())
1377 { 1377 {
1378 if (flags & (blurNeeded | blurServerSide)) 1378 if (flags & (blurNeeded | blurServerSide))
1379 { 1379 {
1380 if (blur_pixmap (tiled_root_pmap, DefaultVisual (dpy, target->display->screen), window_width, window_height)) 1380 if (blur_pixmap (tiled_root_pmap, DefaultVisual (dpy, screen), window_width, window_height))
1381 result |= transpPmapBlurred; 1381 result |= transpPmapBlurred;
1382 } 1382 }
1383 if (flags & (tintNeeded | tintServerSide)) 1383 if (flags & (tintNeeded | tintServerSide))
1384 { 1384 {
1385 if (tint_pixmap (tiled_root_pmap, DefaultVisual (dpy, target->display->screen), window_width, window_height)) 1385 if (tint_pixmap (tiled_root_pmap, DefaultVisual (dpy, screen), window_width, window_height))
1386 result |= transpPmapTinted; 1386 result |= transpPmapTinted;
1387 } 1387 }
1388 } /* server side rendering completed */ 1388 } /* server side rendering completed */
1389 1389
1390 if (pixmap) 1390 if (pixmap)
1770 p = p1; 1770 p = p1;
1771 pl = p1 + srcImage->width; 1771 pl = p1 + srcImage->width;
1772 for (; p < pl; p++) 1772 for (; p < pl; p++)
1773 { 1773 {
1774 *p = lookup_r[(*p & 0x7c00)>>10] | 1774 *p = lookup_r[(*p & 0x7c00)>>10] |
1775 lookup_g[(*p & 0x03e0)>> 5] | 1775 lookup_g[(*p & 0x03e0)>> 5] |
1776 lookup_b[(*p & 0x001f)]; 1776 lookup_b[(*p & 0x001f)];
1777 } 1777 }
1778 p1 = (unsigned short *) ((char *) p1 + srcImage->bytes_per_line); 1778 p1 = (unsigned short *) ((char *) p1 + srcImage->bytes_per_line);
1779 } 1779 }
1780 break; 1780 break;
1781 } 1781 }
1789 p = p1; 1789 p = p1;
1790 pl = p1 + srcImage->width; 1790 pl = p1 + srcImage->width;
1791 for (; p < pl; p++) 1791 for (; p < pl; p++)
1792 { 1792 {
1793 *p = lookup_r[(*p & 0xf800)>>11] | 1793 *p = lookup_r[(*p & 0xf800)>>11] |
1794 lookup_g[(*p & 0x07e0)>> 5] | 1794 lookup_g[(*p & 0x07e0)>> 5] |
1795 lookup_b[(*p & 0x001f)]; 1795 lookup_b[(*p & 0x001f)];
1796 } 1796 }
1797 p1 = (unsigned short *) ((char *) p1 + srcImage->bytes_per_line); 1797 p1 = (unsigned short *) ((char *) p1 + srcImage->bytes_per_line);
1798 } 1798 }
1799 break; 1799 break;
1800 } 1800 }
1828 p = p1; 1828 p = p1;
1829 pl = p1 + srcImage->width; 1829 pl = p1 + srcImage->width;
1830 for (; p < pl; p++) 1830 for (; p < pl; p++)
1831 { 1831 {
1832 *p = lookup_r[(*p & 0xff0000)>>16] | 1832 *p = lookup_r[(*p & 0xff0000)>>16] |
1833 lookup_g[(*p & 0x00ff00)>> 8] | 1833 lookup_g[(*p & 0x00ff00)>> 8] |
1834 lookup_b[(*p & 0x0000ff)] | 1834 lookup_b[(*p & 0x0000ff)] |
1835 (*p & ~0xffffff); 1835 (*p & ~0xffffff);
1836 } 1836 }
1837 p1 = (RUINT32T *) ((char *) p1 + srcImage->bytes_per_line); 1837 p1 = (RUINT32T *) ((char *) p1 + srcImage->bytes_per_line);
1838 } 1838 }
1839 break; 1839 break;
1840 } 1840 }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines