Subversion Repositories Kolibri OS

Rev

Rev 1892 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1892 Rev 3959
Line 41... Line 41...
41
 
41
 
42
/* Provide definitions for standalone compilation */
42
/* Provide definitions for standalone compilation */
Line 43... Line 43...
43
#include "cairoint.h"
43
#include "cairoint.h"
44
 
44
 
45
#include "cairo-error-private.h"
45
#include "cairo-error-private.h"
46
#include "cairo-list-private.h"
46
#include "cairo-list-inline.h"
Line 47... Line 47...
47
#include "cairo-freelist-private.h"
47
#include "cairo-freelist-private.h"
Line 48... Line 48...
48
#include "cairo-combsort-private.h"
48
#include "cairo-combsort-inline.h"
49
 
49
 
Line 1070... Line 1070...
1070
    cells->count = 0;
1070
    cells->count = 0;
1071
    _cairo_freepool_reset (&cells->pool);
1071
    _cairo_freepool_reset (&cells->pool);
1072
    coverage_rewind (cells);
1072
    coverage_rewind (cells);
1073
}
1073
}
Line 1074... Line 1074...
1074
 
1074
 
1075
inline static struct cell *
1075
static struct cell *
1076
coverage_alloc (sweep_line_t *sweep_line,
1076
coverage_alloc (sweep_line_t *sweep_line,
1077
		struct cell *tail,
1077
		struct cell *tail,
1078
		int x)
1078
		int x)
1079
{
1079
{
Line 1395... Line 1395...
1395
	int x = cell->x;
1395
	int x = cell->x;
1396
	int area;
1396
	int area;
Line 1397... Line 1397...
1397
 
1397
 
1398
	if (x > prev_x) {
1398
	if (x > prev_x) {
-
 
1399
	    spans[num_spans].x = prev_x;
1399
	    spans[num_spans].x = prev_x;
1400
	    spans[num_spans].inverse = 0;
1400
	    spans[num_spans].coverage = AREA_TO_ALPHA (cover);
1401
	    spans[num_spans].coverage = AREA_TO_ALPHA (cover);
1401
	    ++num_spans;
1402
	    ++num_spans;
Line 1402... Line 1403...
1402
	}
1403
	}
Line 1411... Line 1412...
1411
	prev_x = x + 1;
1412
	prev_x = x + 1;
1412
    } while ((cell = cell->next) != &sweep_line->coverage.tail);
1413
    } while ((cell = cell->next) != &sweep_line->coverage.tail);
Line 1413... Line 1414...
1413
 
1414
 
1414
    if (prev_x <= self->xmax) {
1415
    if (prev_x <= self->xmax) {
-
 
1416
	spans[num_spans].x = prev_x;
1415
	spans[num_spans].x = prev_x;
1417
	spans[num_spans].inverse = 0;
1416
	spans[num_spans].coverage = AREA_TO_ALPHA (cover);
1418
	spans[num_spans].coverage = AREA_TO_ALPHA (cover);
1417
	++num_spans;
1419
	++num_spans;
Line 1418... Line 1420...
1418
    }
1420
    }
1419
 
1421
 
-
 
1422
    if (cover && prev_x < self->xmax) {
1420
    if (cover && prev_x < self->xmax) {
1423
	spans[num_spans].x = self->xmax;
1421
	spans[num_spans].x = self->xmax;
1424
	spans[num_spans].inverse = 1;
1422
	spans[num_spans].coverage = 0;
1425
	spans[num_spans].coverage = 0;
Line 1423... Line 1426...
1423
	++num_spans;
1426
	++num_spans;
Line 2123... Line 2126...
2123
    self->num_edges++;
2126
    self->num_edges++;
Line 2124... Line 2127...
2124
 
2127
 
2125
    return CAIRO_STATUS_SUCCESS;
2128
    return CAIRO_STATUS_SUCCESS;
Line 2126... Line -...
2126
}
-
 
2127
 
-
 
2128
static cairo_status_t
-
 
2129
_cairo_botor_scan_converter_add_edge (void		*converter,
-
 
2130
				      const cairo_point_t *p1,
-
 
2131
				      const cairo_point_t *p2,
-
 
2132
				      int top, int bottom,
-
 
2133
				      int dir)
-
 
2134
{
-
 
2135
    cairo_botor_scan_converter_t *self = converter;
-
 
2136
    cairo_edge_t edge;
-
 
2137
 
-
 
2138
    edge.line.p1 = *p1;
-
 
2139
    edge.line.p2 = *p2;
-
 
2140
    edge.top = top;
-
 
2141
    edge.bottom = bottom;
-
 
2142
    edge.dir = dir;
-
 
2143
 
-
 
2144
    return botor_add_edge (self, &edge);
-
 
2145
}
-
 
2146
 
-
 
2147
static cairo_status_t
-
 
2148
_cairo_botor_scan_converter_add_polygon (void		*converter,
-
 
2149
					 const cairo_polygon_t *polygon)
-
 
2150
{
-
 
2151
    cairo_botor_scan_converter_t *self = converter;
-
 
2152
    cairo_status_t status;
-
 
2153
    int i;
-
 
2154
 
-
 
2155
    for (i = 0; i < polygon->num_edges; i++) {
-
 
2156
	status = botor_add_edge (self, &polygon->edges[i]);
-
 
2157
	if (unlikely (status))
-
 
2158
	    return status;
-
 
2159
    }
-
 
2160
 
-
 
2161
    return CAIRO_STATUS_SUCCESS;
-
 
2162
}
2129
}
2163
 
2130
 
2164
static void
2131
static void
2165
_cairo_botor_scan_converter_destroy (void *converter)
2132
_cairo_botor_scan_converter_destroy (void *converter)
2166
{
2133
{
Line 2177... Line 2144...
2177
_cairo_botor_scan_converter_init (cairo_botor_scan_converter_t *self,
2144
_cairo_botor_scan_converter_init (cairo_botor_scan_converter_t *self,
2178
				  const cairo_box_t *extents,
2145
				  const cairo_box_t *extents,
2179
				  cairo_fill_rule_t fill_rule)
2146
				  cairo_fill_rule_t fill_rule)
2180
{
2147
{
2181
    self->base.destroy     = _cairo_botor_scan_converter_destroy;
2148
    self->base.destroy     = _cairo_botor_scan_converter_destroy;
2182
    self->base.add_edge    = _cairo_botor_scan_converter_add_edge;
-
 
2183
    self->base.add_polygon = _cairo_botor_scan_converter_add_polygon;
-
 
2184
    self->base.generate    = _cairo_botor_scan_converter_generate;
2149
    self->base.generate    = _cairo_botor_scan_converter_generate;
Line 2185... Line 2150...
2185
 
2150
 
2186
    self->extents   = *extents;
2151
    self->extents   = *extents;