draw.c 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #include "lib9.h"
  2. #include "draw.h"
  3. void
  4. _setdrawop(Display *d, Drawop op)
  5. {
  6. uchar *a;
  7. if(op != SoverD){
  8. a = bufimage(d, 1+1);
  9. if(a == 0)
  10. return;
  11. a[0] = 'O';
  12. a[1] = op;
  13. }
  14. }
  15. static void
  16. draw1(Image *dst, Rectangle *r, Image *src, Point *p0, Image *mask, Point *p1, Drawop op)
  17. {
  18. uchar *a;
  19. _setdrawop(dst->display, op);
  20. a = bufimage(dst->display, 1+4+4+4+4*4+2*4+2*4);
  21. if(a == 0)
  22. return;
  23. if(src == nil)
  24. src = dst->display->black;
  25. if(mask == nil)
  26. mask = dst->display->opaque;
  27. a[0] = 'd';
  28. BPLONG(a+1, dst->id);
  29. BPLONG(a+5, src->id);
  30. BPLONG(a+9, mask->id);
  31. BPLONG(a+13, r->min.x);
  32. BPLONG(a+17, r->min.y);
  33. BPLONG(a+21, r->max.x);
  34. BPLONG(a+25, r->max.y);
  35. BPLONG(a+29, p0->x);
  36. BPLONG(a+33, p0->y);
  37. BPLONG(a+37, p1->x);
  38. BPLONG(a+41, p1->y);
  39. }
  40. void
  41. draw(Image *dst, Rectangle r, Image *src, Image *mask, Point p1)
  42. {
  43. draw1(dst, &r, src, &p1, mask, &p1, SoverD);
  44. }
  45. void
  46. drawop(Image *dst, Rectangle r, Image *src, Image *mask, Point p1, Drawop op)
  47. {
  48. draw1(dst, &r, src, &p1, mask, &p1, op);
  49. }
  50. void
  51. gendraw(Image *dst, Rectangle r, Image *src, Point p0, Image *mask, Point p1)
  52. {
  53. draw1(dst, &r, src, &p0, mask, &p1, SoverD);
  54. }
  55. void
  56. gendrawop(Image *dst, Rectangle r, Image *src, Point p0, Image *mask, Point p1, Drawop op)
  57. {
  58. draw1(dst, &r, src, &p0, mask, &p1, op);
  59. }