20 #ifndef AGG_DDA_LINE_INCLUDED 21 #define AGG_DDA_LINE_INCLUDED 24 #include "agg_basics.h" 39 m_inc(((y2 - y1) << FractionShift) /
int(count)),
57 void operator += (
unsigned n)
63 void operator -= (
unsigned n)
70 int y()
const {
return m_y + (m_dy >> (FractionShift-YShift)); }
71 int dy()
const {
return m_dy; }
88 typedef int save_data_type;
89 enum save_size_e { save_size = 2 };
96 m_cnt(count <= 0 ? 1 : count),
97 m_lft((y2 - y1) / m_cnt),
98 m_rem((y2 - y1) % m_cnt),
113 m_cnt(count <= 0 ? 1 : count),
114 m_lft((y2 - y1) / m_cnt),
115 m_rem((y2 - y1) % m_cnt),
129 m_cnt(count <= 0 ? 1 : count),
145 void save(save_data_type* data)
const 152 void load(
const save_data_type* data)
183 void adjust_forward()
189 void adjust_backward()
195 int mod()
const {
return m_mod; }
196 int rem()
const {
return m_rem; }
197 int lft()
const {
return m_lft; }
200 int y()
const {
return m_y; }
220 enum subpixel_scale_e
223 subpixel_scale = 1 << subpixel_shift,
224 subpixel_mask = subpixel_scale - 1
228 static int line_lr(
int v) {
return v >> subpixel_shift; }
232 m_x1_lr(line_lr(x1)),
233 m_y1_lr(line_lr(y1)),
234 m_x2_lr(line_lr(x2)),
235 m_y2_lr(line_lr(y2)),
236 m_ver(std::abs(m_x2_lr - m_x1_lr) < std::abs(m_y2_lr - m_y1_lr)),
237 m_len(m_ver ? std::abs(m_y2_lr - m_y1_lr) :
238 std::abs(m_x2_lr - m_x1_lr)),
239 m_inc(m_ver ? ((y2 > y1) ? 1 : -1) : ((x2 > x1) ? 1 : -1)),
240 m_interpolator(m_ver ? x1 : y1,
247 bool is_ver()
const {
return m_ver; }
248 unsigned len()
const {
return m_len; }
249 int inc()
const {
return m_inc; }
266 int x1()
const {
return m_x1_lr; }
267 int y1()
const {
return m_y1_lr; }
268 int x2()
const {
return line_lr(m_interpolator.y()); }
269 int y2()
const {
return line_lr(m_interpolator.y()); }
270 int x2_hr()
const {
return m_interpolator.y(); }
271 int y2_hr()
const {
return m_interpolator.y(); }