/[rdesktop]/sourceforge.net/trunk/rdesktop/xwin.c
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /sourceforge.net/trunk/rdesktop/xwin.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 10 by matty, Tue Aug 15 10:23:24 2000 UTC revision 21 by matty, Mon Oct 16 08:44:48 2000 UTC
# Line 41  BOOL ui_create_window(char *title) Line 41  BOOL ui_create_window(char *title)
41    
42          display = XOpenDisplay(NULL);          display = XOpenDisplay(NULL);
43          if (display == NULL)          if (display == NULL)
44            {
45                    ERROR("Failed to open display\n");
46                  return False;                  return False;
47            }
48    
49          /* Check the screen supports 8-bit depth. */          /* Check the screen supports 8-bit depth. */
50          screen = DefaultScreenOfDisplay(display);          screen = DefaultScreenOfDisplay(display);
# Line 419  void ui_triblt(uint8 opcode, Line 422  void ui_triblt(uint8 opcode,
422    
423          switch (opcode)          switch (opcode)
424          {          {
425                    case 0x69: /* PDSxxn */
426                            ui_memblt(ROP2_XOR, x, y, cx, cy, src, srcx, srcy);
427                            ui_patblt(ROP2_NXOR, x, y, cx, cy,
428                                            brush, bgcolour, fgcolour);
429                            break;
430    
431                  case 0xb8: /* PSDPxax */                  case 0xb8: /* PSDPxax */
432                          ui_patblt(ROP2_XOR, x, y, cx, cy,                          ui_patblt(ROP2_XOR, x, y, cx, cy,
433                                          brush, bgcolour, fgcolour);                                          brush, bgcolour, fgcolour);
434                          ui_memblt(ROP2_AND, x, y, cx, cy,                          ui_memblt(ROP2_AND, x, y, cx, cy, src, srcx, srcy);
                                         src, srcx, srcy);  
435                          ui_patblt(ROP2_XOR, x, y, cx, cy,                          ui_patblt(ROP2_XOR, x, y, cx, cy,
436                                          brush, bgcolour, fgcolour);                                          brush, bgcolour, fgcolour);
437                          break;                          break;
438    
439                  default:                  default:
440                          NOTIMP("triblt 0x%x\n", opcode);                          NOTIMP("triblt 0x%x\n", opcode);
441                          ui_memblt(ROP2_COPY, x, y, cx, cy,                          ui_memblt(ROP2_COPY, x, y, cx, cy, src, srcx, srcy);
                                         brush, bgcolour, fgcolour);  
442          }          }
443  }  }
444    
# Line 487  void ui_draw_glyph(int mixmode, Line 494  void ui_draw_glyph(int mixmode,
494          }          }
495  }  }
496    
497  void ui_draw_text(uint8 font, uint8 flags, int mixmode, int x,  void ui_draw_text(uint8 font, uint8 flags, int mixmode, int x, int y,
498                          int y, int boxx, int boxy, int boxcx, int boxcy,                          int clipx, int clipy, int clipcx, int clipcy,
499                            int boxx, int boxy, int boxcx, int boxcy,
500                          int bgcolour, int fgcolour, uint8 *text, uint8 length)                          int bgcolour, int fgcolour, uint8 *text, uint8 length)
501  {  {
502          FONTGLYPH *glyph;          FONTGLYPH *glyph;
# Line 498  void ui_draw_text(uint8 font, uint8 flag Line 506  void ui_draw_text(uint8 font, uint8 flag
506          {          {
507                  ui_rect(boxx, boxy, boxcx, boxcy, bgcolour);                  ui_rect(boxx, boxy, boxcx, boxcy, bgcolour);
508          }          }
509            else if (mixmode == MIX_OPAQUE)
510            {
511                    ui_rect(clipx, clipy, clipcx, clipcy, bgcolour);
512            }
513    
514          /* Paint text, character by character */          /* Paint text, character by character */
515          for (i = 0; i < length; i++)          for (i = 0; i < length; i++)
516          {          {
517                  glyph = cache_get_font(font, text[i]);                  glyph = cache_get_font(font, text[i]);
518    
519                    if (!(flags & TEXT2_IMPLICIT_X))
520                            x += text[++i];
521    
522                  if (glyph != NULL)                  if (glyph != NULL)
523                  {                  {
524                          ui_draw_glyph(mixmode, x,                          ui_draw_glyph(mixmode, x + (short)glyph->offset,
525                                          y + (short)glyph->baseline,                                          y + (short)glyph->baseline,
526                                          glyph->width, glyph->height,                                          glyph->width, glyph->height,
527                                          glyph->pixmap, 0, 0,                                          glyph->pixmap, 0, 0,
# Line 514  void ui_draw_text(uint8 font, uint8 flag Line 529  void ui_draw_text(uint8 font, uint8 flag
529    
530                          if (flags & TEXT2_IMPLICIT_X)                          if (flags & TEXT2_IMPLICIT_X)
531                                  x += glyph->width;                                  x += glyph->width;
                         else  
                                 x += text[++i];  
532                  }                  }
533          }          }
534  }  }
# Line 523  void ui_draw_text(uint8 font, uint8 flag Line 536  void ui_draw_text(uint8 font, uint8 flag
536  void ui_desktop_save(uint32 offset, int x, int y, int cx, int cy)  void ui_desktop_save(uint32 offset, int x, int y, int cx, int cy)
537  {  {
538          XImage *image;          XImage *image;
         int scanline;  
539    
         scanline = (cx + 3) & ~3;  
         STATUS("XGetImage(%p,%x,%d,%d,%d,%d,%x,%d)\n", display, wnd, x, y,  
                 cx, cy, 0xffffffff, ZPixmap);  
540          image = XGetImage(display, wnd, x, y, cx, cy, 0xffffffff, ZPixmap);          image = XGetImage(display, wnd, x, y, cx, cy, 0xffffffff, ZPixmap);
541          cache_put_desktop(offset, scanline*cy, image->data);          cache_put_desktop(offset, cx, cy, image->bytes_per_line, image->data);
542          XFree(image->data);          XFree(image->data);
543          XFree(image);          XFree(image);
544  }  }
# Line 537  void ui_desktop_save(uint32 offset, int Line 546  void ui_desktop_save(uint32 offset, int
546  void ui_desktop_restore(uint32 offset, int x, int y, int cx, int cy)  void ui_desktop_restore(uint32 offset, int x, int y, int cx, int cy)
547  {  {
548          XImage *image;          XImage *image;
         int scanline;  
549          uint8 *data;          uint8 *data;
550    
551          scanline = (cx + 3) & ~3;          data = cache_get_desktop(offset, cx, cy);
         data = cache_get_desktop(offset, scanline*cy);  
552          if (data == NULL)          if (data == NULL)
553                  return;                  return;
554    
555          image = XCreateImage(display, visual, 8, ZPixmap, 0,          image = XCreateImage(display, visual, 8, ZPixmap, 0,
556                                  data, cx, cy, 32, scanline);                                  data, cx, cy, 32, cx);
557          XSetFunction(display, gc, GXcopy);          XSetFunction(display, gc, GXcopy);
558          XPutImage(display, wnd, gc, image, 0, 0, x, y, cx, cy);          XPutImage(display, wnd, gc, image, 0, 0, x, y, cx, cy);
559          XFree(image);          XFree(image);

Legend:
Removed from v.10  
changed lines
  Added in v.21

  ViewVC Help
Powered by ViewVC 1.1.26