~vcs-imports/qemu/git

« back to all changes in this revision

Viewing changes to vnchextile.h

  • Committer: Blue Swirl
  • Date: 2009-08-31 15:14:40 UTC
  • Revision ID: git-v1:528e93a9787ccfc59582a44035f5f342caf5b84f
Fix breakage due to __thread

Thread-local storage is not supported on all hosts.

Signed-off-by: Blue Swirl <blauwirbel@gmail.com>

Show diffs side-by-side

added added

removed removed

Lines of Context:
2
2
#define CONCAT(a, b) CONCAT_I(a, b)
3
3
#define pixel_t CONCAT(uint, CONCAT(BPP, _t))
4
4
#ifdef GENERIC
5
 
#define NAME generic
 
5
#define NAME CONCAT(generic_, BPP)
6
6
#else
7
7
#define NAME BPP
8
8
#endif
9
9
 
10
10
static void CONCAT(send_hextile_tile_, NAME)(VncState *vs,
11
11
                                             int x, int y, int w, int h,
12
 
                                             uint32_t *last_bg32,
13
 
                                             uint32_t *last_fg32,
 
12
                                             void *last_bg_,
 
13
                                             void *last_fg_,
14
14
                                             int *has_bg, int *has_fg)
15
15
{
16
 
    uint8_t *row = (vs->ds->data + y * vs->ds->linesize + x * vs->depth);
 
16
    VncDisplay *vd = vs->vd;
 
17
    uint8_t *row = vd->server->data + y * ds_get_linesize(vs->ds) + x * ds_get_bytes_per_pixel(vs->ds);
17
18
    pixel_t *irow = (pixel_t *)row;
18
19
    int j, i;
19
 
    pixel_t *last_bg = (pixel_t *)last_bg32;
20
 
    pixel_t *last_fg = (pixel_t *)last_fg32;
 
20
    pixel_t *last_bg = (pixel_t *)last_bg_;
 
21
    pixel_t *last_fg = (pixel_t *)last_fg_;
21
22
    pixel_t bg = 0;
22
23
    pixel_t fg = 0;
23
24
    int n_colors = 0;
24
25
    int bg_count = 0;
25
26
    int fg_count = 0;
26
27
    int flags = 0;
27
 
    uint8_t data[(sizeof(pixel_t) + 2) * 16 * 16];
 
28
    uint8_t data[(vs->clientds.pf.bytes_per_pixel + 2) * 16 * 16];
28
29
    int n_data = 0;
29
30
    int n_subtiles = 0;
30
31
 
57
58
        }
58
59
        if (n_colors > 2)
59
60
            break;
60
 
        irow += vs->ds->linesize / sizeof(pixel_t);
 
61
        irow += ds_get_linesize(vs->ds) / sizeof(pixel_t);
61
62
    }
62
63
 
63
64
    if (n_colors > 1 && fg_count > bg_count) {
105
106
                n_data += 2;
106
107
                n_subtiles++;
107
108
            }
108
 
            irow += vs->ds->linesize / sizeof(pixel_t);
 
109
            irow += ds_get_linesize(vs->ds) / sizeof(pixel_t);
109
110
        }
110
111
        break;
111
112
    case 3:
132
133
                    has_color = 0;
133
134
#ifdef GENERIC
134
135
                    vnc_convert_pixel(vs, data + n_data, color);
135
 
                    n_data += vs->pix_bpp;
 
136
                    n_data += vs->clientds.pf.bytes_per_pixel;
136
137
#else
137
138
                    memcpy(data + n_data, &color, sizeof(color));
138
139
                    n_data += sizeof(pixel_t);
152
153
            if (has_color) {
153
154
#ifdef GENERIC
154
155
                vnc_convert_pixel(vs, data + n_data, color);
155
 
                n_data += vs->pix_bpp;
 
156
                n_data += vs->clientds.pf.bytes_per_pixel;
156
157
#else
157
158
                memcpy(data + n_data, &color, sizeof(color));
158
159
                n_data += sizeof(pixel_t);
161
162
                n_data += 2;
162
163
                n_subtiles++;
163
164
            }
164
 
            irow += vs->ds->linesize / sizeof(pixel_t);
 
165
            irow += ds_get_linesize(vs->ds) / sizeof(pixel_t);
165
166
        }
166
167
 
167
168
        /* A SubrectsColoured subtile invalidates the foreground color */
197
198
        }
198
199
    } else {
199
200
        for (j = 0; j < h; j++) {
200
 
            vs->write_pixels(vs, row, w * vs->depth);
201
 
            row += vs->ds->linesize;
 
201
            vs->write_pixels(vs, row, w * ds_get_bytes_per_pixel(vs->ds));
 
202
            row += ds_get_linesize(vs->ds);
202
203
        }
203
204
    }
204
205
}