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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines