… | |
… | |
78 | xi.width = width; |
78 | xi.width = width; |
79 | xi.height = height; |
79 | xi.height = height; |
80 | xi.xoffset = 0; |
80 | xi.xoffset = 0; |
81 | xi.format = ZPixmap; |
81 | xi.format = ZPixmap; |
82 | xi.byte_order = LSBFirst; // maybe go for host byte order, because servers are usually local? |
82 | xi.byte_order = LSBFirst; // maybe go for host byte order, because servers are usually local? |
83 | xi.bitmap_unit = 32; |
83 | xi.bitmap_unit = 32; //XY only, unused |
84 | xi.bitmap_bit_order = LSBFirst; |
84 | xi.bitmap_bit_order = LSBFirst; //XY only, unused |
85 | xi.bitmap_pad = BitmapPad (dpy); |
85 | xi.bitmap_pad = BitmapPad (dpy); |
86 | xi.depth = depth; |
86 | xi.depth = depth; |
87 | xi.bytes_per_line = 0; |
87 | xi.bytes_per_line = 0; |
88 | xi.bits_per_pixel = 32; |
88 | xi.bits_per_pixel = 32; //Z only |
89 | xi.red_mask = 0x000000ff; |
89 | xi.red_mask = 0x000000ff; //Z only |
90 | xi.green_mask = 0x0000ff00; |
90 | xi.green_mask = 0x0000ff00; //Z only |
91 | xi.blue_mask = 0x00ff0000; |
91 | xi.blue_mask = 0x00ff0000; //Z only |
|
|
92 | xi.obdata = 0; // probbaly unused |
92 | |
93 | |
93 | if (!XInitImage (&xi)) |
94 | if (!XInitImage (&xi)) |
94 | rxvt_fatal ("unable to initialise ximage, please report.\n"); |
95 | rxvt_fatal ("unable to initialise ximage, please report.\n"); |
95 | |
96 | |
96 | if (height > INT_MAX / xi.bytes_per_line) |
97 | if (height > INT_MAX / xi.bytes_per_line) |
… | |
… | |
119 | uint32_t v = r | (g << 8) | (b << 16); |
120 | uint32_t v = r | (g << 8) | (b << 16); |
120 | |
121 | |
121 | if (ecb_big_endian ()) |
122 | if (ecb_big_endian ()) |
122 | v = ecb_bswap32 (v); |
123 | v = ecb_bswap32 (v); |
123 | |
124 | |
124 | *dst++ = x; |
125 | *dst++ = v; |
125 | } |
126 | } |
126 | else |
127 | else |
127 | for (int x = 0; x < width; x++) |
128 | for (int x = 0; x < width; x++) |
128 | { |
129 | { |
129 | uint32_t v = *(uint32_t *)src; src += 4; |
130 | uint32_t v = *(uint32_t *)src; src += 4; |
130 | v = ecb_big_endian () ? ecb_rotr32 (v, 8) : ecb_rotl32 (v, 8); |
131 | |
|
|
132 | if (ecb_big_endian ()) |
131 | *dst++ = ecb_bswap32 (v); |
133 | v = ecb_bswap32 (v); |
|
|
134 | |
|
|
135 | *dst++ = v; |
132 | } |
136 | } |
133 | |
137 | |
134 | row += rowstride; |
138 | row += rowstride; |
135 | line += xi.bytes_per_line; |
139 | line += xi.bytes_per_line; |
136 | } |
140 | } |