Subversion Repositories Kolibri OS

Rev

Rev 4315 | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. /*
  2.  *
  3.  * Copyright © 2000 SuSE, Inc.
  4.  *
  5.  * Permission to use, copy, modify, distribute, and sell this software and its
  6.  * documentation for any purpose is hereby granted without fee, provided that
  7.  * the above copyright notice appear in all copies and that both that
  8.  * copyright notice and this permission notice appear in supporting
  9.  * documentation, and that the name of SuSE not be used in advertising or
  10.  * publicity pertaining to distribution of the software without specific,
  11.  * written prior permission.  SuSE makes no representations about the
  12.  * suitability of this software for any purpose.  It is provided "as is"
  13.  * without express or implied warranty.
  14.  *
  15.  * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
  16.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE
  17.  * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  18.  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
  19.  * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
  20.  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  21.  *
  22.  * Author:  Keith Packard, SuSE, Inc.
  23.  */
  24.  
  25. #ifndef _PICTURE_H_
  26. #define _PICTURE_H_
  27.  
  28. //#include "privates.h"
  29.  
  30. #include <pixman.h>
  31.  
  32. typedef unsigned long   Picture;
  33. typedef unsigned long   PictFormat;
  34.  
  35. typedef struct _Pixmap  *PixmapPtr;
  36. typedef struct _Picture *PicturePtr;
  37. typedef struct _Drawable *DrawablePtr;
  38. typedef struct _PictFormat *PictFormatPtr;
  39. typedef struct pixman_transform PictTransform, *PictTransformPtr;
  40. typedef struct _Private PrivateRec, *PrivatePtr;
  41. /*
  42.  * While the protocol is generous in format support, the
  43.  * sample implementation allows only packed RGB and GBR
  44.  * representations for data to simplify software rendering,
  45.  */
  46. #define PICT_FORMAT(bpp,type,a,r,g,b)   PIXMAN_FORMAT(bpp, type, a, r, g, b)
  47.  
  48. /*
  49.  * gray/color formats use a visual index instead of argb
  50.  */
  51. #define PICT_VISFORMAT(bpp,type,vi)     (((bpp) << 24) |  \
  52.                                          ((type) << 16) | \
  53.                                          ((vi)))
  54.  
  55. #define PICT_FORMAT_BPP(f)      PIXMAN_FORMAT_BPP(f)
  56. #define PICT_FORMAT_TYPE(f)     PIXMAN_FORMAT_TYPE(f)
  57. #define PICT_FORMAT_A(f)        PIXMAN_FORMAT_A(f)
  58. #define PICT_FORMAT_R(f)        PIXMAN_FORMAT_R(f)
  59. #define PICT_FORMAT_G(f)        PIXMAN_FORMAT_G(f)
  60. #define PICT_FORMAT_B(f)        PIXMAN_FORMAT_B(f)
  61. #define PICT_FORMAT_RGB(f)      PIXMAN_FORMAT_RGB(f)
  62. #define PICT_FORMAT_VIS(f)      PIXMAN_FORMAT_VIS(f)
  63.  
  64. #define PICT_TYPE_OTHER         PIXMAN_TYPE_OTHER
  65. #define PICT_TYPE_A             PIXMAN_TYPE_A
  66. #define PICT_TYPE_ARGB          PIXMAN_TYPE_ARGB
  67. #define PICT_TYPE_ABGR          PIXMAN_TYPE_ABGR
  68. #define PICT_TYPE_COLOR         PIXMAN_TYPE_COLOR
  69. #define PICT_TYPE_GRAY          PIXMAN_TYPE_GRAY
  70. #define PICT_TYPE_BGRA          PIXMAN_TYPE_BGRA
  71.  
  72. #define PICT_FORMAT_COLOR(f)    PIXMAN_FORMAT_COLOR(f)
  73.  
  74. /* 32bpp formats */
  75. typedef enum _PictFormatShort {
  76.     PICT_a2r10g10b10 = PIXMAN_a2r10g10b10,
  77.     PICT_x2r10g10b10 = PIXMAN_x2r10g10b10,
  78.     PICT_a2b10g10r10 = PIXMAN_a2b10g10r10,
  79.     PICT_x2b10g10r10 = PIXMAN_x2b10g10r10,
  80.  
  81.     PICT_a8r8g8b8 = PIXMAN_a8r8g8b8,
  82.     PICT_x8r8g8b8 = PIXMAN_x8r8g8b8,
  83.     PICT_a8b8g8r8 = PIXMAN_a8b8g8r8,
  84.     PICT_x8b8g8r8 = PIXMAN_x8b8g8r8,
  85.     PICT_b8g8r8a8 = PIXMAN_b8g8r8a8,
  86.     PICT_b8g8r8x8 = PIXMAN_b8g8r8x8,
  87.  
  88. /* 24bpp formats */
  89.     PICT_r8g8b8 = PIXMAN_r8g8b8,
  90.     PICT_b8g8r8 = PIXMAN_b8g8r8,
  91.  
  92. /* 16bpp formats */
  93.     PICT_r5g6b5 = PIXMAN_r5g6b5,
  94.     PICT_b5g6r5 = PIXMAN_b5g6r5,
  95.  
  96.     PICT_a1r5g5b5 = PIXMAN_a1r5g5b5,
  97.     PICT_x1r5g5b5 = PIXMAN_x1r5g5b5,
  98.     PICT_a1b5g5r5 = PIXMAN_a1b5g5r5,
  99.     PICT_x1b5g5r5 = PIXMAN_x1b5g5r5,
  100.     PICT_a4r4g4b4 = PIXMAN_a4r4g4b4,
  101.     PICT_x4r4g4b4 = PIXMAN_x4r4g4b4,
  102.     PICT_a4b4g4r4 = PIXMAN_a4b4g4r4,
  103.     PICT_x4b4g4r4 = PIXMAN_x4b4g4r4,
  104.  
  105. /* 8bpp formats */
  106.     PICT_a8 = PIXMAN_a8,
  107.     PICT_r3g3b2 = PIXMAN_r3g3b2,
  108.     PICT_b2g3r3 = PIXMAN_b2g3r3,
  109.     PICT_a2r2g2b2 = PIXMAN_a2r2g2b2,
  110.     PICT_a2b2g2r2 = PIXMAN_a2b2g2r2,
  111.  
  112.     PICT_c8 = PIXMAN_c8,
  113.     PICT_g8 = PIXMAN_g8,
  114.  
  115.     PICT_x4a4 = PIXMAN_x4a4,
  116.  
  117.     PICT_x4c4 = PIXMAN_x4c4,
  118.     PICT_x4g4 = PIXMAN_x4g4,
  119.  
  120. /* 4bpp formats */
  121.     PICT_a4 = PIXMAN_a4,
  122.     PICT_r1g2b1 = PIXMAN_r1g2b1,
  123.     PICT_b1g2r1 = PIXMAN_b1g2r1,
  124.     PICT_a1r1g1b1 = PIXMAN_a1r1g1b1,
  125.     PICT_a1b1g1r1 = PIXMAN_a1b1g1r1,
  126.  
  127.     PICT_c4 = PIXMAN_c4,
  128.     PICT_g4 = PIXMAN_g4,
  129.  
  130. /* 1bpp formats */
  131.     PICT_a1 = PIXMAN_a1,
  132.  
  133.     PICT_g1 = PIXMAN_g1
  134. } PictFormatShort;
  135.  
  136. /*
  137.  * For dynamic indexed visuals (GrayScale and PseudoColor), these control the
  138.  * selection of colors allocated for drawing to Pictures.  The default
  139.  * policy depends on the size of the colormap:
  140.  *
  141.  * Size         Default Policy
  142.  * ----------------------------
  143.  *  < 64        PolicyMono
  144.  *  < 256       PolicyGray
  145.  *  256         PolicyColor (only on PseudoColor)
  146.  *
  147.  * The actual allocation code lives in miindex.c, and so is
  148.  * austensibly server dependent, but that code does:
  149.  *
  150.  * PolicyMono       Allocate no additional colors, use black and white
  151.  * PolicyGray       Allocate 13 gray levels (11 cells used)
  152.  * PolicyColor      Allocate a 4x4x4 cube and 13 gray levels (71 cells used)
  153.  * PolicyAll        Allocate as big a cube as possible, fill with gray (all)
  154.  *
  155.  * Here's a picture to help understand how many colors are
  156.  * actually allocated (this is just the gray ramp):
  157.  *
  158.  *                 gray level
  159.  * all   0000 1555 2aaa 4000 5555 6aaa 8000 9555 aaaa bfff d555 eaaa ffff
  160.  * b/w   0000                                                        ffff
  161.  * 4x4x4                     5555                aaaa
  162.  * extra      1555 2aaa 4000      6aaa 8000 9555      bfff d555 eaaa
  163.  *
  164.  * The default colormap supplies two gray levels (black/white), the
  165.  * 4x4x4 cube allocates another two and nine more are allocated to fill
  166.  * in the 13 levels.  When the 4x4x4 cube is not allocated, a total of
  167.  * 11 cells are allocated.
  168.  */
  169.  
  170. #define PictureCmapPolicyInvalid    -1
  171. #define PictureCmapPolicyDefault    0
  172. #define PictureCmapPolicyMono       1
  173. #define PictureCmapPolicyGray       2
  174. #define PictureCmapPolicyColor      3
  175. #define PictureCmapPolicyAll        4
  176.  
  177. //extern _X_EXPORT int PictureCmapPolicy;
  178.  
  179. //extern _X_EXPORT int PictureParseCmapPolicy(const char *name);
  180.  
  181. //extern _X_EXPORT int RenderErrBase;
  182.  
  183. /* Fixed point updates from Carl Worth, USC, Information Sciences Institute */
  184.  
  185. typedef pixman_fixed_32_32_t xFixed_32_32;
  186.  
  187. typedef pixman_fixed_48_16_t xFixed_48_16;
  188.  
  189. #define MAX_FIXED_48_16         pixman_max_fixed_48_16
  190. #define MIN_FIXED_48_16         pixman_min_fixed_48_16
  191.  
  192. typedef pixman_fixed_1_31_t xFixed_1_31;
  193. typedef pixman_fixed_1_16_t xFixed_1_16;
  194. typedef pixman_fixed_16_16_t xFixed_16_16;
  195.  
  196. /*
  197.  * An unadorned "xFixed" is the same as xFixed_16_16,
  198.  * (since it's quite common in the code)
  199.  */
  200. typedef pixman_fixed_t xFixed;
  201.  
  202. #define XFIXED_BITS     16
  203.  
  204. #define xFixedToInt(f)      pixman_fixed_to_int(f)
  205. #define IntToxFixed(i)      pixman_int_to_fixed(i)
  206. #define xFixedE             pixman_fixed_e
  207. #define xFixed1             pixman_fixed_1
  208. #define xFixed1MinusE       pixman_fixed_1_minus_e
  209. #define xFixedFrac(f)       pixman_fixed_frac(f)
  210. #define xFixedFloor(f)      pixman_fixed_floor(f)
  211. #define xFixedCeil(f)       pixman_fixed_ceil(f)
  212.  
  213. #define xFixedFraction(f)       pixman_fixed_fraction(f)
  214. #define xFixedMod2(f)           pixman_fixed_mod2(f)
  215.  
  216. /* whether 't' is a well defined not obviously empty trapezoid */
  217. #define xTrapezoidValid(t)  ((t)->left.p1.y != (t)->left.p2.y && \
  218.                              (t)->right.p1.y != (t)->right.p2.y && \
  219.                              (int) ((t)->bottom - (t)->top) > 0)
  220.  
  221. /*
  222.  * Standard NTSC luminance conversions:
  223.  *
  224.  *  y = r * 0.299 + g * 0.587 + b * 0.114
  225.  *
  226.  * Approximate this for a bit more speed:
  227.  *
  228.  *  y = (r * 153 + g * 301 + b * 58) / 512
  229.  *
  230.  * This gives 17 bits of luminance; to get 15 bits, lop the low two
  231.  */
  232.  
  233. #define CvtR8G8B8toY15(s)       (((((s) >> 16) & 0xff) * 153 + \
  234.                                   (((s) >>  8) & 0xff) * 301 + \
  235.                                   (((s)      ) & 0xff) * 58) >> 2)
  236.  
  237. typedef struct _Drawable {
  238.     unsigned char type;         /* DRAWABLE_<type> */
  239.     unsigned char class;        /* specific to type */
  240.     unsigned char depth;
  241.     unsigned char bitsPerPixel;
  242.     unsigned int   id;           /* resource id */
  243.     short x;                    /* window: screen absolute, pixmap: 0 */
  244.     short y;                    /* window: screen absolute, pixmap: 0 */
  245.     unsigned short width;
  246.     unsigned short height;
  247. } DrawableRec;
  248.  
  249.  
  250. typedef struct _Pixmap {
  251.     DrawableRec drawable;
  252.     PrivateRec *devPrivates;
  253.     int refcnt;
  254.     int devKind;                /* This is the pitch of the pixmap, typically width*bpp/8. */
  255. //    DevUnion devPrivate;        /* When !NULL, devPrivate.ptr points to the raw pixel data. */
  256. #ifdef COMPOSITE
  257.     short screen_x;
  258.     short screen_y;
  259. #endif
  260.     struct intel_pixmap *private;
  261.  
  262.     unsigned usage_hint;        /* see CREATE_PIXMAP_USAGE_* */
  263.  
  264.     PixmapPtr master_pixmap;    /* pointer to master copy of pixmap for pixmap sharing */
  265. } PixmapRec;
  266.  
  267.  
  268. typedef struct _PictFormat {
  269.     uint32_t id;
  270.     uint32_t format;              /* except bpp */
  271.     unsigned char type;
  272.     unsigned char depth;
  273. //    DirectFormatRec direct;
  274. //   IndexFormatRec index;
  275. } PictFormatRec;
  276.  
  277. typedef struct _Picture {
  278.     DrawablePtr pDrawable;
  279.     PictFormatPtr pFormat;
  280.     PictFormatShort format;     /* PICT_FORMAT */
  281.     int refcnt;
  282.     uint32_t id;
  283.     unsigned int repeat:1;
  284.     unsigned int graphicsExposures:1;
  285.     unsigned int subWindowMode:1;
  286.     unsigned int polyEdge:1;
  287.     unsigned int polyMode:1;
  288.     unsigned int freeCompClip:1;
  289.     unsigned int clientClipType:2;
  290.     unsigned int componentAlpha:1;
  291.     unsigned int repeatType:2;
  292.     unsigned int filter:3;
  293. //    unsigned int stateChanges:CPLastBit;
  294. //    unsigned int unused:18 - CPLastBit;
  295.  
  296. //    PicturePtr alphaMap;
  297.  
  298.     PictTransform *transform;
  299.  
  300. //    SourcePictPtr pSourcePict;
  301. //    xFixed *filter_params;
  302. //    int filter_nparams;
  303. } PictureRec;
  304.  
  305. #define RepeatNone              0
  306. #define RepeatNormal            1
  307. #define RepeatPad               2
  308. #define RepeatReflect           3
  309.  
  310. #define PictFilterNearest           0
  311. #define PictFilterBilinear          1
  312.  
  313. #define PictFilterFast              2
  314. #define PictFilterGood              3
  315. #define PictFilterBest              4
  316.  
  317. #define PictFilterConvolution   5
  318.  
  319.  
  320. #endif                          /* _PICTURE_H_ */
  321.