mii_emu/libmui/mui/c2_geometry_poly.h

120 lines
1.9 KiB
C

/*
* c2_geometry_poly.h
*
* Copyright (C) 2023 Michel Pollet <buserror@gmail.com>
*
* SPDX-License-Identifier: MIT
*/
#ifndef C2_GEOMETRY_POLY_H_
#define C2_GEOMETRY_POLY_H_
#include "c2_arrays.h"
typedef struct c2_polyline_t {
c2_pt_array_t pt;
c2_rect_t bounds;
} c2_polyline_t, *c2_polyline_p;
DECLARE_C_ARRAY(c2_polyline_p, c2_polyline_array, 16,
c2_polyline_p current; );
DECLARE_C_ARRAY(c2_coord_array_t, c2_scanline_array, 16,
c2_coord_t height; );
IMPLEMENT_C_ARRAY(c2_scanline_array);
IMPLEMENT_C_ARRAY(c2_polyline_array);
void
c2_polyline_clear(
c2_polyline_p pl);
int
c2_polyline_get_segment(
c2_polyline_p pl,
long ind,
c2_segment_p o );
void
c2_polyline_offset(
c2_polyline_p pl,
c2_coord_t inX,
c2_coord_t inY );
void
c2_polyline_scale(
c2_polyline_p pl,
double inFactor,
c2_rect_p inSkip /* = NULL */ );
void
c2_polyline_add_pt(
c2_polyline_p pl,
c2_pt_p p );
int
c2_polyline_array_clip(
c2_polyline_array_p pa,
c2_rect_p clip,
c2_polyline_array_p outPoly );
void
c2_polyline_array_break(
c2_polyline_array_p pa);
void
c2_polyline_array_add_pt(
c2_polyline_array_p pa,
c2_pt_p p );
void
c2_polyline_array_scale(
c2_polyline_array_p pa,
float inFactor,
c2_rect_p inSkip /* = NULL */ );
void
c2_polyline_array_offset(
c2_polyline_array_p pa,
c2_coord_t inX,
c2_coord_t inY );
void
c2_scanline_array_proper_alloc(
c2_scanline_array_p a,
c2_coord_t height);
void
c2_scanline_array_proper_clear(
c2_scanline_array_p a);
void
c2_scanline_array_add_coord(
c2_scanline_array_p a,
int inY,
c2_coord_t inX );
typedef c2_polyline_p c2_polygon_p;
int
c2_polygon_isempty(
c2_polygon_p pl);
c2_coord_t
c2_polygon_get_heigth(
c2_polygon_p pl);
void
c2_polygon_clip(
c2_polygon_p pl,
c2_rect_p clip,
c2_polygon_p outPoly );
void
c2_polygon_scanline(
c2_polygon_p pl,
c2_scanline_array_p ioList,
c2_coord_t ymin );
#endif /* C2_GEOMETRY_POLY_H_ */