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

Comparing rxvt-unicode/src/rxvttoolkit.C (file contents):
Revision 1.25 by root, Wed Jan 25 02:42:06 2006 UTC vs.
Revision 1.27 by root, Wed Jan 25 21:09:21 2006 UTC

177 177
178#endif 178#endif
179 179
180///////////////////////////////////////////////////////////////////////////// 180/////////////////////////////////////////////////////////////////////////////
181 181
182void
183rxvt_screen::set (rxvt_display *disp)
184{
185 display = disp;
186 xdisp = disp->display;
187
188 Screen *screen = ScreenOfDisplay (xdisp, disp->screen);
189
190 depth = DefaultDepthOfScreen (screen);
191 visual = DefaultVisualOfScreen (screen);
192 cmap = DefaultColormapOfScreen (screen);
193}
194
195void
196rxvt_screen::set (rxvt_display *disp, int depth)
197{
198 set (disp);
199
200 XVisualInfo vinfo;
201
202 if (XMatchVisualInfo (xdisp, display->screen, depth, TrueColor, &vinfo))
203 {
204 this->depth = depth;
205 this->visual = vinfo.visual;
206 this->cmap = XCreateColormap (xdisp, disp->root, visual, AllocNone);
207 }
208}
209
210void
211rxvt_screen::clear ()
212{
213 if (cmap != DefaultColormapOfScreen (ScreenOfDisplay (xdisp, display->screen)))
214 XFreeColormap (xdisp, cmap);
215}
216
217/////////////////////////////////////////////////////////////////////////////
218
182rxvt_display::rxvt_display (const char *id) 219rxvt_display::rxvt_display (const char *id)
183: refcounted (id) 220: refcounted (id)
184, x_ev (this, &rxvt_display::x_cb) 221, x_ev (this, &rxvt_display::x_cb)
185, selection_owner (0) 222, selection_owner (0)
186{ 223{
287 if (!display) 324 if (!display)
288 return false; 325 return false;
289 326
290 screen = DefaultScreen (display); 327 screen = DefaultScreen (display);
291 root = DefaultRootWindow (display); 328 root = DefaultRootWindow (display);
292 visual = DefaultVisual (display, screen);
293 cmap = DefaultColormap (display, screen);
294 depth = DefaultDepth (display, screen);
295 329
296 assert (sizeof (xa_names) / sizeof (char *) == NUM_XA); 330 assert (sizeof (xa_names) / sizeof (char *) == NUM_XA);
297 XInternAtoms (display, (char **)xa_names, NUM_XA, False, xa); 331 XInternAtoms (display, (char **)xa_names, NUM_XA, False, xa);
298 332
299 XrmSetDatabase (display, get_resources ()); 333 XrmSetDatabase (display, get_resources ());
307 blank_cursor = XCreateGlyphCursor (display, f, f, ' ', ' ', 341 blank_cursor = XCreateGlyphCursor (display, f, f, ' ', ' ',
308 &blackcolour, &blackcolour); 342 &blackcolour, &blackcolour);
309 XUnloadFont (display, f); 343 XUnloadFont (display, f);
310#endif 344#endif
311 345
312#ifdef PREFER_24BIT
313 /*
314 * If depth is not 24, look for a 24bit visual.
315 */
316 if (depth != 24)
317 {
318 XVisualInfo vinfo;
319
320 if (XMatchVisualInfo (display, screen, 24, TrueColor, &vinfo))
321 {
322 depth = 24;
323 visual = vinfo.visual;
324 cmap = XCreateColormap (display,
325 RootWindow (display, screen),
326 visual, AllocNone);
327 }
328 }
329#endif
330
331 int fd = XConnectionNumber (display); 346 int fd = XConnectionNumber (display);
332 347
333#ifndef NO_SLOW_LINK_SUPPORT 348#ifndef NO_SLOW_LINK_SUPPORT
334 // try to detect wether we have a local connection. 349 // try to detect wether we have a local connection.
335 // assume unix domains socket == local, everything else not 350 // assume unix domains socket == local, everything else not
519refcache<rxvt_display> displays; 534refcache<rxvt_display> displays;
520 535
521///////////////////////////////////////////////////////////////////////////// 536/////////////////////////////////////////////////////////////////////////////
522 537
523bool 538bool
524rxvt_color::set (rxvt_display *display, Pixel p) 539rxvt_color::set (rxvt_screen *screen, Pixel p)
525{ 540{
526#if XFT 541#if XFT
527 XColor xc; 542 XColor xc;
528 543
529 xc.pixel = p; 544 xc.pixel = p;
530 if (!XQueryColor (display->display, display->cmap, &xc)) 545 if (!XQueryColor (screen->xdisp, screen->cmap, &xc))
531 return false; 546 return false;
532 547
533 XRenderColor d; 548 XRenderColor d;
534 549
535 d.red = xc.red; 550 d.red = xc.red;
536 d.green = xc.green; 551 d.green = xc.green;
537 d.blue = xc.blue; 552 d.blue = xc.blue;
538 d.alpha = 0xffff; 553 d.alpha = 0xffff;
539 554
540 return 555 return
541 XftColorAllocValue (display->display, 556 XftColorAllocValue (screen->xdisp,
542 display->visual, 557 screen->visual,
543 display->cmap, 558 screen->cmap,
544 &d, &c); 559 &d, &c);
545#else 560#else
546 this->p = p; 561 this->p = p;
547#endif 562#endif
548 563
549 return true; 564 return true;
550} 565}
551 566
552bool 567bool
553rxvt_color::set (rxvt_display *display, const char *name) 568rxvt_color::set (rxvt_screen *screen, const char *name)
554{ 569{
555#if XFT 570#if XFT
556 return XftColorAllocName (display->display, display->visual, display->cmap, 571 return XftColorAllocName (screen->xdisp, screen->visual, screen->cmap, name, &c);
557 name, &c);
558#else 572#else
559 XColor xc; 573 XColor xc;
560 574
561 if (XParseColor (display->display, display->cmap, name, &xc)) 575 if (XParseColor (screen->xdisp, screen->cmap, name, &xc))
562 return set (display, xc.red, xc.green, xc.blue); 576 return set (screen, xc.red, xc.green, xc.blue);
563 577
564 return false; 578 return false;
565#endif 579#endif
566} 580}
567 581
568bool 582bool
569rxvt_color::set (rxvt_display *display, unsigned short cr, unsigned short cg, unsigned short cb) 583rxvt_color::set (rxvt_screen *screen, unsigned short cr, unsigned short cg, unsigned short cb)
570{ 584{
571 XColor xc; 585 XColor xc;
572 586
573 xc.red = cr; 587 xc.red = cr;
574 xc.green = cg; 588 xc.green = cg;
575 xc.blue = cb; 589 xc.blue = cb;
576 xc.flags = DoRed | DoGreen | DoBlue; 590 xc.flags = DoRed | DoGreen | DoBlue;
577 591
578 if (XAllocColor (display->display, display->cmap, &xc)) 592 if (XAllocColor (screen->xdisp, screen->cmap, &xc))
579 return set (display, xc.pixel); 593 return set (screen, xc.pixel);
580 594
581 return false; 595 return false;
582} 596}
583 597
584void 598void
585rxvt_color::get (rxvt_display *display, unsigned short &cr, unsigned short &cg, unsigned short &cb) 599rxvt_color::get (rxvt_screen *screen, unsigned short &cr, unsigned short &cg, unsigned short &cb)
586{ 600{
587#if XFT 601#if XFT
588 cr = c.color.red; 602 cr = c.color.red;
589 cg = c.color.green; 603 cg = c.color.green;
590 cb = c.color.blue; 604 cb = c.color.blue;
591#else 605#else
592 XColor c; 606 XColor c;
593 607
594 c.pixel = p; 608 c.pixel = p;
595 XQueryColor (display->display, display->cmap, &c); 609 XQueryColor (screen->xdisp, screen->cmap, &c);
596 610
597 cr = c.red; 611 cr = c.red;
598 cg = c.green; 612 cg = c.green;
599 cb = c.blue; 613 cb = c.blue;
600#endif 614#endif
601} 615}
602 616
603void 617void
604rxvt_color::free (rxvt_display *display) 618rxvt_color::free (rxvt_screen *screen)
605{ 619{
606#if XFT 620#if XFT
607 XftColorFree (display->display, display->visual, display->cmap, &c); 621 XftColorFree (screen->xdisp, screen->visual, screen->cmap, &c);
608#else 622#else
609 XFreeColors (display->display, display->cmap, &p, 1, AllPlanes); 623 XFreeColors (screen->xdisp, screen->cmap, &p, 1, AllPlanes);
610#endif 624#endif
611} 625}
612 626
613rxvt_color 627rxvt_color
614rxvt_color::fade (rxvt_display *display, int percent) 628rxvt_color::fade (rxvt_screen *screen, int percent)
615{ 629{
616 percent = 100 - percent; 630 percent = 100 - percent;
617 631
618 unsigned short cr, cg, cb; 632 unsigned short cr, cg, cb;
619 rxvt_color faded; 633 rxvt_color faded;
620 634
621 get (display, cr, cg, cb); 635 get (screen, cr, cg, cb);
622 636
623 faded.set ( 637 faded.set (
624 display, 638 screen,
625 cr * percent / 100, 639 cr * percent / 100,
626 cg * percent / 100, 640 cg * percent / 100,
627 cb * percent / 100 641 cb * percent / 100
628 ); 642 );
629 643
631} 645}
632 646
633#define LERP(a,b,p) (a * p + b * (100 - p)) / 100 647#define LERP(a,b,p) (a * p + b * (100 - p)) / 100
634 648
635rxvt_color 649rxvt_color
636rxvt_color::fade (rxvt_display *display, int percent, rxvt_color &fadeto) 650rxvt_color::fade (rxvt_screen *screen, int percent, rxvt_color &fadeto)
637{ 651{
638 percent = 100 - percent; 652 percent = 100 - percent;
639 653
640 unsigned short cr, cg, cb; 654 unsigned short cr, cg, cb;
641 unsigned short fcr, fcg, fcb; 655 unsigned short fcr, fcg, fcb;
642 rxvt_color faded; 656 rxvt_color faded;
643 657
644 get (display, cr, cg, cb); 658 get (screen, cr, cg, cb);
645 fadeto.get(display, fcr, fcg, fcb); 659 fadeto.get (screen, fcr, fcg, fcb);
646 660
647 faded.set ( 661 faded.set (
648 display, 662 screen,
649 LERP (cr, fcr, percent), 663 LERP (cr, fcr, percent),
650 LERP (cg, fcg, percent), 664 LERP (cg, fcg, percent),
651 LERP (cb, fcb, percent) 665 LERP (cb, fcb, percent)
652 ); 666 );
653 667

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines