1 #Topic IPoint 2 #Alias IPoints ## 3 #Alias IPoint_Reference ## 4 5 #Struct SkIPoint 6 7 #Code 8 #Populate 9 ## 10 11 SkIPoint holds two 32-bit integer coordinates. 12 13 #Member int32_t fX 14 #Line # x-axis value ## 15 x-axis value used by IPoint. 16 ## 17 18 #Member int32_t fY 19 #Line # y-axis value ## 20 y-axis value used by IPoint. 21 ## 22 23 # ------------------------------------------------------------------------------ 24 25 #Method static constexpr SkIPoint Make(int32_t x, int32_t y) 26 27 #In Constructors 28 #Line # constructs from integer inputs ## 29 #Populate 30 31 #Example 32 SkIPoint pt1 = {45, 66}; 33 SkIPoint pt2 = SkIPoint::Make(45, 66); 34 SkDebugf("pt1 %c= pt2\n", pt1 == pt2 ? '=' : '!'); 35 #StdOut 36 pt1 == pt2 37 ## 38 ## 39 40 #SeeAlso set() SkPoint::iset() SkPoint::Make 41 42 #Method ## 43 44 45 # ------------------------------------------------------------------------------ 46 47 #Subtopic Property 48 #Line # member values ## 49 #Subtopic Property ## 50 51 #Method int32_t x() const 52 #In Property 53 #Line # returns fX ## 54 #Populate 55 56 #Example 57 SkIPoint pt1 = {45, 66}; 58 SkDebugf("pt1.fX %c= pt1.x()\n", pt1.fX == pt1.x() ? '=' : '!'); 59 #StdOut 60 pt1.fX == pt1.x() 61 ## 62 ## 63 64 #SeeAlso y() SkPoint::x() 65 66 #Method ## 67 68 # ------------------------------------------------------------------------------ 69 70 #Method int32_t y() const 71 #In Property 72 #Line # returns fY ## 73 #Populate 74 75 #Example 76 SkIPoint pt1 = {45, 66}; 77 SkDebugf("pt1.fY %c= pt1.y()\n", pt1.fY == pt1.y() ? '=' : '!'); 78 #StdOut 79 pt1.fY == pt1.y() 80 ## 81 ## 82 83 #SeeAlso x() SkPoint::y() 84 85 #Method ## 86 87 # ------------------------------------------------------------------------------ 88 89 #Method bool isZero() const 90 #In Property 91 #Line # returns true if both members equal zero ## 92 #Populate 93 94 #Example 95 SkIPoint pt = { 0, -0}; 96 SkDebugf("pt.isZero() == %s\n", pt.isZero() ? "true" : "false"); 97 #StdOut 98 pt.isZero() == true 99 ## 100 ## 101 102 #SeeAlso SkPoint::isZero 103 104 #Method ## 105 106 # ------------------------------------------------------------------------------ 107 108 #Subtopic Set 109 #Line # replaces all values ## 110 ## 111 112 #Method void set(int32_t x, int32_t y) 113 #In Set 114 #Line # sets to integer input ## 115 #Populate 116 117 #Example 118 SkIPoint pt1, pt2 = { SK_MinS32, SK_MaxS32 }; 119 pt1.set(SK_MinS32, SK_MaxS32); 120 SkDebugf("pt1 %c= pt2\n", pt1 == pt2 ? '=' : '!'); 121 #StdOut 122 pt1 == pt2 123 ## 124 ## 125 126 #SeeAlso Make 127 128 #Method ## 129 130 # ------------------------------------------------------------------------------ 131 132 #Method SkIPoint operator-() const 133 134 #Line # reverses sign of IPoint ## 135 #Populate 136 137 #Example 138 SkIPoint test[] = { {0, -0}, {-1, -2}, 139 { SK_MaxS32, SK_MinS32 }, 140 { SK_NaN32, SK_NaN32 } }; 141 for (const SkIPoint& pt : test) { 142 SkIPoint negPt = -pt; 143 SkDebugf("pt: %d, %d negate: %d, %d\n", pt.fX, pt.fY, negPt.fX, negPt.fY); 144 } 145 #StdOut 146 pt: 0, 0 negate: 0, 0 147 pt: -1, -2 negate: 1, 2 148 pt: 2147483647, -2147483647 negate: -2147483647, 2147483647 149 pt: -2147483648, -2147483648 negate: -2147483648, -2147483648 150 ## 151 ## 152 153 #SeeAlso operator-(const SkIPoint& a, const SkIPoint& b) operator-=(const SkIVector& v) SkPoint::operator-() const 154 155 #Method ## 156 157 # ------------------------------------------------------------------------------ 158 159 #Method void operator+=(const SkIVector& v) 160 161 #Line # adds IVector to IPoint ## 162 Offsets IPoint by IVector v. Sets IPoint to #Formula # (fX + v.fX, fY + v.fY) ##. 163 164 #Param v IVector to add ## 165 166 #Example 167 #Height 64 168 auto draw_lines = [=](const SkIPoint pts[], size_t count, SkPaint& paint) -> void { 169 for (size_t i = 0; i < count - 1; ++i) { 170 SkPoint p0, p1; 171 p0.iset(pts[i]); 172 p1.iset(pts[i + 1]); 173 canvas->drawLine(p0, p1, paint); 174 } 175 }; 176 SkIPoint points[] = { { 3, 1 }, { 4, 2 }, { 5, 1 }, { 7, 3 } }; 177 SkPaint paint; 178 paint.setAntiAlias(true); 179 paint.setStyle(SkPaint::kStroke_Style); 180 canvas->scale(30, 15); 181 draw_lines(points, SK_ARRAY_COUNT(points), paint); 182 points[1] += {1, 1}; 183 points[2] += {-1, -1}; 184 paint.setColor(SK_ColorRED); 185 draw_lines(points, SK_ARRAY_COUNT(points), paint); 186 ## 187 188 #SeeAlso operator+(const SkIPoint& a, const SkIVector& b) SkPoint::operator+=(const SkVector& v) 189 190 #Method ## 191 192 # ------------------------------------------------------------------------------ 193 194 #Method void operator-=(const SkIVector& v) 195 196 #Line # subtracts IVector from IPoint ## 197 Subtracts IVector v from IPoint. Sets IPoint to: #Formula # (fX - v.fX, fY - v.fY) ##. 198 199 #Param v IVector to subtract ## 200 201 #Example 202 #Height 64 203 auto draw_lines = [=](const SkIPoint pts[], size_t count, SkPaint& paint) -> void { 204 for (size_t i = 0; i < count - 1; ++i) { 205 SkPoint p0, p1; 206 p0.iset(pts[i]); 207 p1.iset(pts[i + 1]); 208 canvas->drawLine(p0, p1, paint); 209 } 210 }; 211 SkIPoint points[] = { { 3, 1 }, { 4, 2 }, { 5, 1 }, { 7, 3 } }; 212 SkPaint paint; 213 paint.setAntiAlias(true); 214 paint.setStyle(SkPaint::kStroke_Style); 215 canvas->scale(30, 15); 216 draw_lines(points, SK_ARRAY_COUNT(points), paint); 217 points[1] -= {1, 1}; 218 points[2] -= {-1, -1}; 219 paint.setColor(SK_ColorRED); 220 draw_lines(points, SK_ARRAY_COUNT(points), paint); 221 ## 222 223 #SeeAlso operator-(const SkIPoint& a, const SkIPoint& b) SkPoint::operator-=(const SkVector& v) 224 225 #Method ## 226 227 # ------------------------------------------------------------------------------ 228 229 #Method bool equals(int32_t x, int32_t y) const 230 #In Operators 231 #Line # returns true if members are equal ## 232 #Populate 233 234 #Example 235 SkIPoint test[] = { {0, -0}, {-1, -2}, {SK_MaxS32, -1}, {SK_NaN32, -1} }; 236 for (const SkIPoint& pt : test) { 237 SkDebugf("pt: %d, %d %c= pt\n", pt.fX, pt.fY, pt.equals(pt.fX, pt.fY) ? '=' : '!'); 238 } 239 #StdOut 240 pt: 0, 0 == pt 241 pt: -1, -2 == pt 242 pt: 2147483647, -1 == pt 243 pt: -2147483648, -1 == pt 244 ## 245 ## 246 247 #SeeAlso operator==(const SkIPoint& a, const SkIPoint& b) 248 249 #Method ## 250 251 # ------------------------------------------------------------------------------ 252 253 #Method bool operator==(const SkIPoint& a, const SkIPoint& b) 254 255 #Line # returns true if IPoints are equal ## 256 #Populate 257 258 #Example 259 SkIPoint test[] = { {0, -0}, {-1, -2}, {SK_MaxS32, -1}, {SK_NaN32, -1} }; 260 for (const SkIPoint& pt : test) { 261 SkDebugf("pt: %d, %d %c= pt\n", pt.fX, pt.fY, pt == pt ? '=' : '!'); 262 } 263 #StdOut 264 pt: 0, 0 == pt 265 pt: -1, -2 == pt 266 pt: 2147483647, -1 == pt 267 pt: -2147483648, -1 == pt 268 ## 269 ## 270 271 #SeeAlso equals() operator!=(const SkIPoint& a, const SkIPoint& b) 272 273 #Method ## 274 275 # ------------------------------------------------------------------------------ 276 277 #Method bool operator!=(const SkIPoint& a, const SkIPoint& b) 278 279 #Line # returns true if IPoints are unequal ## 280 #Populate 281 282 #Example 283 SkIPoint test[] = { {0, -0}, {-1, -2}, {SK_MaxS32, -1}, {SK_NaN32, -1} }; 284 for (const SkIPoint& pt : test) { 285 SkDebugf("pt: %d, %d %c= pt\n", pt.fX, pt.fY, pt != pt ? '!' : '='); 286 } 287 #StdOut 288 pt: 0, 0 == pt 289 pt: -1, -2 == pt 290 pt: 2147483647, -1 == pt 291 pt: -2147483648, -1 == pt 292 ## 293 ## 294 295 #SeeAlso operator==(const SkIPoint& a, const SkIPoint& b) equals() 296 297 #Method ## 298 299 # ------------------------------------------------------------------------------ 300 301 #Method SkIVector operator-(const SkIPoint& a, const SkIPoint& b) 302 303 #Line # returns IVector between IPoints ## 304 Returns IVector from b to a; computed as #Formula # (a.fX - b.fX, a.fY - b.fY) ##. 305 306 Can also be used to subtract IVector from IVector, returning IVector. 307 308 #Param a IPoint or IVector to subtract from ## 309 #Param b IVector to subtract ## 310 311 #Return IVector from b to a ## 312 313 #Example 314 #Height 64 315 auto draw_lines = [=](const SkIPoint pts[], size_t count, SkPaint& paint) -> void { 316 for (size_t i = 0; i < count - 1; ++i) { 317 SkPoint p0, p1; 318 p0.iset(pts[i]); 319 p1.iset(pts[i + 1]); 320 canvas->drawLine(p0, p1, paint); 321 } 322 }; 323 SkIPoint points[] = { { 3, 1 }, { 4, 2 }, { 5, 1 }, { 7, 3 } }; 324 SkPaint paint; 325 paint.setAntiAlias(true); 326 paint.setStyle(SkPaint::kStroke_Style); 327 canvas->scale(30, 15); 328 draw_lines(points, SK_ARRAY_COUNT(points), paint); 329 points[1] += points[0] - points[3]; 330 points[2] -= points[1] - points[0]; 331 paint.setColor(SK_ColorRED); 332 draw_lines(points, SK_ARRAY_COUNT(points), paint); 333 ## 334 335 #SeeAlso operator-=(const SkIVector& v) 336 337 #Method ## 338 339 # ------------------------------------------------------------------------------ 340 341 #Method SkIPoint operator+(const SkIPoint& a, const SkIVector& b) 342 343 #Line # returns IPoint offset by IVector ## 344 Returns IPoint resulting from IPoint a offset by IVector b, computed as: 345 #Formula # (a.fX + b.fX, a.fY + b.fY) ##. 346 347 Can also be used to offset IPoint b by IVector a, returning IPoint. 348 Can also be used to add IVector to IVector, returning IVector. 349 350 #Param a IPoint or IVector to add to ## 351 #Param b IPoint or IVector to add ## 352 353 #Return IPoint equal to a offset by b ## 354 355 #Example 356 #Height 128 357 auto draw_lines = [=](const SkIPoint pts[], size_t count, SkPaint& paint) -> void { 358 for (size_t i = 0; i < count - 1; ++i) { 359 SkPoint p0, p1; 360 p0.iset(pts[i]); 361 p1.iset(pts[i + 1]); 362 canvas->drawLine(p0, p1, paint); 363 } 364 }; 365 SkIPoint points[] = { { 3, 1 }, { 4, 2 }, { 5, 1 }, { 7, 3 } }; 366 SkPaint paint; 367 paint.setAntiAlias(true); 368 paint.setStyle(SkPaint::kStroke_Style); 369 canvas->scale(30, 15); 370 draw_lines(points, SK_ARRAY_COUNT(points), paint); 371 SkIPoint mod = {4, 1}; 372 for (auto& point : points) { 373 point = point + mod; 374 mod.fX -= 1; 375 mod.fY += 1; 376 } 377 paint.setColor(SK_ColorRED); 378 draw_lines(points, SK_ARRAY_COUNT(points), paint); 379 ## 380 381 #SeeAlso operator+=(const SkIVector& v) 382 383 #Method ## 384 385 #Struct SkIPoint ## 386 387 388 #Subtopic IVector 389 #Line # alias for IPoint ## 390 #Alias IVector ## 391 #Alias IVectors ## 392 #Typedef SkIPoint SkIVector 393 #Line # alias for IPoint ## 394 #Code 395 typedef SkIPoint SkIVector; 396 ## 397 SkIVector provides an alternative name for SkIPoint. SkIVector and SkIPoint 398 can be used interchangeably for all purposes. 399 #Typedef ## 400 ## 401 402 #Topic IPoint ## 403