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.2 by sasha, Wed Sep 12 21:06:08 2007 UTC vs.
Revision 1.3 by sasha, Wed Sep 12 22:12:54 2007 UTC

668static inline unsigned long 668static inline unsigned long
669compute_tint_shade_flags (rxvt_color *tint, int shade) 669compute_tint_shade_flags (rxvt_color *tint, int shade)
670{ 670{
671 unsigned long flags = 0; 671 unsigned long flags = 0;
672 rgba c (rgba::MAX_CC,rgba::MAX_CC,rgba::MAX_CC); 672 rgba c (rgba::MAX_CC,rgba::MAX_CC,rgba::MAX_CC);
673 bool has_shade = (shade > 0 && shade < 100) || (shade > 100 && shade < 200);
673 674
674 if (tint) 675 if (tint)
675 { 676 {
676 tint->get (c); 677 tint->get (c);
677# define IS_COMPONENT_WHOLESOME(cmp) ((cmp) <= 0x000700 || (cmp) >= 0x00f700) 678# define IS_COMPONENT_WHOLESOME(cmp) ((cmp) <= 0x000700 || (cmp) >= 0x00f700)
678 if (IS_COMPONENT_WHOLESOME (c.r) 679 if (!has_shade && IS_COMPONENT_WHOLESOME (c.r)
679 && IS_COMPONENT_WHOLESOME (c.g) 680 && IS_COMPONENT_WHOLESOME (c.g)
680 && IS_COMPONENT_WHOLESOME (c.b)) 681 && IS_COMPONENT_WHOLESOME (c.b))
681 flags |= bgPixmap_t::tintWholesome; 682 flags |= bgPixmap_t::tintWholesome;
682# undef IS_COMPONENT_WHOLESOME 683# undef IS_COMPONENT_WHOLESOME
683 } 684 }
684 685
685 if ((shade > 0 && shade < 100) || (shade > 100 && shade < 200)) 686 if (has_shade)
686 flags |= bgPixmap_t::tintNeeded; 687 flags |= bgPixmap_t::tintNeeded;
687 else if (tint) 688 else if (tint)
688 { 689 {
689 if ((c.r > 0x000700 || c.g > 0x000700 || c.b > 0x000700) 690 if ((c.r > 0x000700 || c.g > 0x000700 || c.b > 0x000700)
690 && (c.r < 0x00f700 || c.g < 0x00f700 || c.b < 0x00f700)) 691 && (c.r < 0x00f700 || c.g < 0x00f700 || c.b < 0x00f700))
695 696
696 if (flags & bgPixmap_t::tintNeeded) 697 if (flags & bgPixmap_t::tintNeeded)
697 { 698 {
698 if (flags & bgPixmap_t::tintWholesome) 699 if (flags & bgPixmap_t::tintWholesome)
699 flags |= bgPixmap_t::tintServerSide; 700 flags |= bgPixmap_t::tintServerSide;
701 else
702 {
700#if XFT 703#if XFT
701 flags |= bgPixmap_t::tintServerSide; 704 flags |= bgPixmap_t::tintServerSide;
702#endif 705#endif
706 }
703 } 707 }
704 708
705 return flags; 709 return flags;
706} 710}
707 711
741 745
742 if (new_shade != shade) 746 if (new_shade != shade)
743 { 747 {
744 unsigned long new_flags = compute_tint_shade_flags ((flags & tintSet) ? &tint : NULL, new_shade); 748 unsigned long new_flags = compute_tint_shade_flags ((flags & tintSet) ? &tint : NULL, new_shade);
745 shade = new_shade; 749 shade = new_shade;
746 flags = (flags & ~tintFlags) | new_flags; 750 flags = (flags & (~tintFlags | tintSet)) | new_flags;
747 return true; 751 return true;
748 } 752 }
749 return false; 753 return false;
750} 754}
751 755
959 XRenderColor mask_c; 963 XRenderColor mask_c;
960 964
961 memset (&mask_c, (shade > 100) ? 0xFF : 0x0, sizeof (mask_c)); 965 memset (&mask_c, (shade > 100) ? 0xFF : 0x0, sizeof (mask_c));
962 mask_c.alpha = 0xffff; 966 mask_c.alpha = 0xffff;
963 XRenderFillRectangle (dpy, PictOpSrc, overlay_pic, &mask_c, 0, 0, 1, 1); 967 XRenderFillRectangle (dpy, PictOpSrc, overlay_pic, &mask_c, 0, 0, 1, 1);
964 memset (&mask_c, 0x0, sizeof (mask_c)); 968
965 mask_c.alpha = 0; 969 mask_c.alpha = 0;
966 970 mask_c.red = 0xffff - c.r;
967 if (c.r == c.b && c.b == c.g) /* pure shading */ 971 mask_c.green = 0xffff - c.g;
968 { 972 mask_c.blue = 0xffff - c.b;
969 mask_c.red = mask_c.green = mask_c.blue = 0xffff - c.r;
970 XRenderFillRectangle (dpy, PictOpSrc, mask_pic, &mask_c, 0, 0, 1, 1); 973 XRenderFillRectangle (dpy, PictOpSrc, mask_pic, &mask_c, 0, 0, 1, 1);
971 XRenderComposite (dpy, PictOpOver, overlay_pic, mask_pic, back_pic, 0, 0, 0, 0, 0, 0, window_width, window_height); 974 XRenderComposite (dpy, PictOpOver, overlay_pic, mask_pic, back_pic, 0, 0, 0, 0, 0, 0, window_width, window_height);
972 }
973 else
974 {
975 mask_c.red = 0xffff - c.r;
976 XRenderFillRectangle (dpy, PictOpSrc, mask_pic, &mask_c, 0, 0, 1, 1);
977 XRenderComposite (dpy, PictOpOver, overlay_pic, mask_pic, back_pic, 0, 0, 0, 0, 0, 0, window_width, window_height);
978 mask_c.red = 0;
979 mask_c.green = 0xffff - c.g;
980 XRenderFillRectangle (dpy, PictOpSrc, mask_pic, &mask_c, 0, 0, 1, 1);
981 XRenderComposite (dpy, PictOpOver, overlay_pic, mask_pic, back_pic, 0, 0, 0, 0, 0, 0, window_width, window_height);
982 mask_c.green = 0;
983 mask_c.blue = 0xffff - c.b;
984 XRenderFillRectangle (dpy, PictOpSrc, mask_pic, &mask_c, 0, 0, 1, 1);
985 XRenderComposite (dpy, PictOpOver, overlay_pic, mask_pic, back_pic, 0, 0, 0, 0, 0, 0, window_width, window_height);
986 }
987 result |= transpPmapTinted; 975 result |= transpPmapTinted;
988 } 976 }
989 XRenderFreePicture (dpy, mask_pic); 977 XRenderFreePicture (dpy, mask_pic);
990 XRenderFreePicture (dpy, overlay_pic); 978 XRenderFreePicture (dpy, overlay_pic);
991 XRenderFreePicture (dpy, back_pic); 979 XRenderFreePicture (dpy, back_pic);
992# if DO_TIMING_TEST 980# if DO_TIMING_TEST
1042{ 1030{
1043 unsigned long background_flags = 0; 1031 unsigned long background_flags = 0;
1044 1032
1045 if (target == NULL) 1033 if (target == NULL)
1046 return false; 1034 return false;
1035
1036 TIMING_TEST_START (tp);
1047 1037
1048 invalidate(); 1038 invalidate();
1049# ifdef ENABLE_TRANSPARENCY 1039# ifdef ENABLE_TRANSPARENCY
1050 if (flags & isTransparent) 1040 if (flags & isTransparent)
1051 { 1041 {
1164 pixmap = None; 1154 pixmap = None;
1165 } 1155 }
1166 } 1156 }
1167 1157
1168 apply (); 1158 apply ();
1159
1160 TIMING_TEST_PRINT_RESULT (tp);
1169 1161
1170 return true; 1162 return true;
1171} 1163}
1172 1164
1173bool 1165bool

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines