diff --git a/docs/SkBitmap_Reference.bmh b/docs/SkBitmap_Reference.bmh index 35f4de6dcb..27580233da 100644 --- a/docs/SkBitmap_Reference.bmh +++ b/docs/SkBitmap_Reference.bmh @@ -223,6 +223,7 @@ or setPixelRef was called. SkDebugf("pixel address = %p\n", bitmap.getPixels()); } #StdOut +#Volatile pixel address = (nil) pixel address = 0x560ddd0ac670 ## diff --git a/docs/SkCanvas_Reference.bmh b/docs/SkCanvas_Reference.bmh index 3e7369176e..486fe46d71 100644 --- a/docs/SkCanvas_Reference.bmh +++ b/docs/SkCanvas_Reference.bmh @@ -6104,4 +6104,55 @@ Returns false if the clip is empty, or if it is not Rect. ## #Class SkCanvas ## + +#Class SkAutoCanvasRestore + +Stack helper class calls SkCanvas::restoreToCount() when SkAutoCanvasRestore +goes out of scope. Use this to guarantee that the canvas is restored to a known +state. + +#Method SkAutoCanvasRestore(SkCanvas* canvas, bool doSave) + +Preserves Canvas save count. Optionally saves Canvas Clip and Matrix. + +#Param canvas Canvas to guard ## +#Param doSave call SkCanvas::save() ## + +#Return utility to restore Canvas state on destructor ## + +#Example +// incomplete +## + +#SeeAlso SkCanvas::save SkCanvas::restore + +## + +#Method ~SkAutoCanvasRestore() + +Restores Canvas to saved state. + +#Example +// incomplete +## + +#SeeAlso SkCanvas::save SkCanvas::restore + +## + +#Method void restore() + +Restores Canvas to saved state immediately. Subsequent calls and class +destructor have no effect. + +#Example +// incomplete +## + +#SeeAlso SkCanvas::save SkCanvas::restore + +## + +#Class SkAutoCanvasRestore ## + #Topic Canvas ## diff --git a/docs/SkIRect_Reference.bmh b/docs/SkIRect_Reference.bmh index 0a9ddf8bf4..d92c08715d 100644 --- a/docs/SkIRect_Reference.bmh +++ b/docs/SkIRect_Reference.bmh @@ -23,10 +23,10 @@ its top, it is considered empty. #Subtopic Operators #Table #Legend -# description # function ## +# description # function ## #Legend ## -# friend bool operator!=(const SkIRect& a, const SkIRect& b) # Returns true if members are unequal. ## -# friend bool operator==(const SkIRect& a, const SkIRect& b) # Returns true if members are equal. ## +# bool operator!=(const SkIRect& a, const SkIRect& b) # Returns true if members are unequal. ## +# bool operator==(const SkIRect& a, const SkIRect& b) # Returns true if members are equal. ## #Table ## #Subtopic ## @@ -106,7 +106,7 @@ When equal to or less than fTop, IRect is empty. # ------------------------------------------------------------------------------ -#Method static SkIRect SK_WARN_UNUSED_RESULT MakeEmpty() +#Method static constexpr SkIRect SK_WARN_UNUSED_RESULT MakeEmpty() Returns constructed IRect set to (0, 0, 0, 0). Many other rectangles are empty; if left is equal to or greater than right, @@ -166,7 +166,7 @@ outset isEmpty: true # ------------------------------------------------------------------------------ -#Method static SkIRect SK_WARN_UNUSED_RESULT MakeWH(int32_t w, int32_t h) +#Method static constexpr SkIRect SK_WARN_UNUSED_RESULT MakeWH(int32_t w, int32_t h) Returns constructed IRect set to (0, 0, w, h). Does not validate input; w or h may be negative. @@ -194,7 +194,7 @@ all equal # ------------------------------------------------------------------------------ -#Method static SkIRect SK_WARN_UNUSED_RESULT MakeSize(const SkISize& size) +#Method static constexpr SkIRect SK_WARN_UNUSED_RESULT MakeSize(const SkISize& size) Returns constructed IRect set to (0, 0, size.width(), size.height()). Does not validate input; size.width() or size.height() may be negative. @@ -221,7 +221,7 @@ floor width: 25 height: 35 # ------------------------------------------------------------------------------ -#Method static SkIRect SK_WARN_UNUSED_RESULT MakeLTRB(int32_t l, int32_t t, int32_t r, int32_t b) +#Method static constexpr SkIRect SK_WARN_UNUSED_RESULT MakeLTRB(int32_t l, int32_t t, int32_t r, int32_t b) Returns constructed IRect set to (l, t, r, b). Does not sort input; Rect may result in fLeft greater than fRight, or fTop greater than fBottom. @@ -252,7 +252,7 @@ rect: 5, 25, 15, 35 isEmpty: false # ------------------------------------------------------------------------------ -#Method static SkIRect SK_WARN_UNUSED_RESULT MakeXYWH(int32_t x, int32_t y, int32_t w, int32_t h) +#Method static constexpr SkIRect SK_WARN_UNUSED_RESULT MakeXYWH(int32_t x, int32_t y, int32_t w, int32_t h) Returns constructed IRect set to #Formula @@ -266,7 +266,7 @@ w or h may be negative. #Param w added to x and stored in fRight ## #Param h added to y and stored in fBottom ## -#Return bounds (x, y, x + w, y + h) ## +#Return bounds at (x, y) with width w and height h ## #Example SkIRect rect = SkIRect::MakeXYWH(5, 35, -15, 25); @@ -627,7 +627,7 @@ large is empty: false # ------------------------------------------------------------------------------ -#Method friend bool operator==(const SkIRect& a, const SkIRect& b) +#Method bool operator==(const SkIRect& a, const SkIRect& b) Returns true if all members in a: fLeft, fTop, fRight, and fBottom; are identical to corresponding members in b. @@ -652,7 +652,7 @@ test == sorted # ------------------------------------------------------------------------------ -#Method friend bool operator!=(const SkIRect& a, const SkIRect& b) +#Method bool operator!=(const SkIRect& a, const SkIRect& b) Returns true if any member in a: fLeft, fTop, fRight, and fBottom; is not identical to the corresponding member in b. diff --git a/docs/SkMatrix_Reference.bmh b/docs/SkMatrix_Reference.bmh index db7e7c3c73..0db0fa881e 100644 --- a/docs/SkMatrix_Reference.bmh +++ b/docs/SkMatrix_Reference.bmh @@ -3,10 +3,13 @@ #Class SkMatrix -The SkMatrix class holds a 3x3 matrix for transforming coordinates. +Matrix holds a 3x3 matrix for transforming coordinates. +Matrix elements are in column major order. + SkMatrix does not have a constructor, so it must be explicitly initialized using either reset() - to construct an identity matrix, or one of the set functions (e.g. setTranslate, setRotate, etc.). + SkMatrix is not thread safe unless getType is called first. #Topic Overview @@ -25,8 +28,10 @@ SkMatrix is not thread safe unless getType is called first. #Legend # description # function ## #Legend ## -# friend SK_API bool operator!=(const SkMatrix& a, const SkMatrix& b) # ## -# friend SK_API bool operator==(const SkMatrix& a, const SkMatrix& b) # ## +# friend SK_API bool operator!=(const SkMatrix& a, const SkMatrix& b) # Returns true if members are unequal. ## +# friend SK_API bool operator==(const SkMatrix& a, const SkMatrix& b) # Returns true if members are equal. ## +# SkScalar operator[](int index) const # Returns one of nine Matrix values. ## +# SkScalar& operator[](int index) # Returns a writable reference to one of nine Matrix values. ## #Table ## #Subtopic ## @@ -35,46 +40,45 @@ SkMatrix is not thread safe unless getType is called first. #Legend # description # function ## #Legend ## -# Concat # ## -# GetMapPtsProc # ## -# GetMapXYProc # ## -# I # ## -# InvalidMatrix # ## -# MakeRectToRect # ## -# MakeScale # ## -# MakeTrans # ## -# SetAffineIdentity # ## -# [ # ## -# asAffine # ## -# cheapEqualTo # ## -# decomposeScale # ## -# dirtyMatrixTypeCache # ## -# dump # ## -# fixedStepInX # ## -# get # ## -# get9 # ## -# getMapPtsProc # ## -# getMapXYProc # ## -# getMaxScale # ## -# getMinMaxScales # ## -# getMinScale # ## -# getPerspX # ## -# getPerspY # ## -# getScaleX # ## -# getScaleY # ## -# getSkewX # ## -# getSkewY # ## -# getTranslateX # ## -# getTranslateY # ## -# getType # ## -# hasPerspective # ## -# invert # ## -# isFinite # ## -# isFixedStepInX # ## -# isIdentity # ## -# isScaleTranslate # ## -# isSimilarity # ## -# isTranslate # ## +# Concat # Returns the concatenation of Matrix pair. ## +# GetMapPtsProc # Returns optimal function to map Point array. ## +# GetMapXYProc # Returns optimal function to map one Point. ## +# I # Returns a reference to a const identity Matrix. ## +# InvalidMatrix # Returns a reference to a const invalid Matrix. ## +# MakeRectToRect # Constructs from source Rect to destination Rect. ## +# MakeScale # Constructs from scale in x and y. ## +# MakeTrans # Constructs from translate in x and y. ## +# SetAffineIdentity # Sets 2x3 array to identity. ## +# asAffine # Copies to 2x3 array. ## +# cheapEqualTo # Compares Matrix pair using memcmp(). ## +# decomposeScale # Separates scale if possible. ## +# dirtyMatrixTypeCache # Private; used by testing. ## +# dump # Sends text representation using floats to standard output. ## +# fixedStepInX # Returns step in x for a position in y. ## +# get # Returns one of nine Matrix values. ## +# get9 # Returns all nine Matrix values. ## +# getMapPtsProc # Returns optimal function to map Point array. ## +# getMapXYProc # Returns optimal function to map one Point. ## +# getMaxScale # Returns maximum scaling, if possible. ## +# getMinMaxScales # Returns minimum and maximum scaling, if possible. ## +# getMinScale # Returns minimum scaling, if possible. ## +# getPerspX # Returns horizontal perspective factor. ## +# getPerspY # Returns vertical perspective factor. ## +# getScaleX # Returns horizontal scale factor. ## +# getScaleY # Returns vertical scale factor.## +# getSkewX # Returns horizontal skew factor. ## +# getSkewY # Returns vertical skew factor. ## +# getTranslateX # Returns horizontal translation factor. ## +# getTranslateY # Returns vertical translation factor. ## +# getType # Returns transform complexity. ## +# hasPerspective # Returns if transform includes perspective. ## +# invert # Returns inverse, if possible. ## +# isFinite # Returns if all Matrix values are not infinity, NaN. ## +# isFixedStepInX # Returns if transformation supports fixed step in x. ## +# isIdentity # Returns if matrix equals the identity Matrix .## +# isScaleTranslate # Returns if transform is limited to scale and translate. ## +# isSimilarity # Returns if transform is limited to square scale and rotation. ## +# isTranslate # Returns if transform is limited to translate. ## # mapHomogeneousPoints # ## # mapPoints # ## # mapPointsWithStride # ## diff --git a/docs/SkPath_Reference.bmh b/docs/SkPath_Reference.bmh index 8eb00777b7..e38b30da77 100644 --- a/docs/SkPath_Reference.bmh +++ b/docs/SkPath_Reference.bmh @@ -1025,7 +1025,7 @@ canvas->drawPath(path, paint); #Enum Convexity #Code - enum Convexity { + enum Convexity : uint8_t { kUnknown_Convexity, kConvex_Convexity, kConcave_Convexity, diff --git a/docs/SkRect_Reference.bmh b/docs/SkRect_Reference.bmh index 57f3ec6b98..7dc1e3776a 100644 --- a/docs/SkRect_Reference.bmh +++ b/docs/SkRect_Reference.bmh @@ -28,10 +28,10 @@ integer input cannot convert to SkScalar without loss of precision. #Subtopic Operators #Table #Legend -# description # function ## +# description # function ## #Legend ## -# friend bool operator!=(const SkRect& a, const SkRect& b) # Returns true if member bits are unequal. ## -# friend bool operator==(const SkRect& a, const SkRect& b) # Returns true if member bits are equal. ## +# bool operator!=(const SkRect& a, const SkRect& b) # Returns true if member bits are unequal. ## +# bool operator==(const SkRect& a, const SkRect& b) # Returns true if member bits are equal. ## #Table ## #Subtopic ## @@ -47,6 +47,7 @@ integer input cannot convert to SkScalar without loss of precision. # MakeIWH # Constructs from int input returning (0, 0, width, height). ## # MakeLTRB # Constructs from SkScalar left, top, right, bottom. ## # MakeLargest # Constructs (SK_ScalarMin, SK_ScalarMin, SK_ScalarMax, SK_ScalarMax). ## +# MakeLargestS32 # Constructs largest signed integers that fit in 32-bit float. ## # MakeSize # Constructs from Size returning (0, 0, width, height). ## # MakeWH # Constructs from SkScalar input returning (0, 0, width, height). ## # MakeXYWH # Constructs from SkScalar input returning (x, y, width, height). ## @@ -184,13 +185,42 @@ outset a little more isFinite: false ## ## -#SeeAlso isLargest setLargest SkIRect::MakeLargest +#SeeAlso MakeLargestS32 isLargest setLargest SkIRect::MakeLargest ## # ------------------------------------------------------------------------------ -#Method static SkRect SK_WARN_UNUSED_RESULT MakeWH(SkScalar w, SkScalar h) +#Method static SkRect SK_WARN_UNUSED_RESULT MakeLargestS32() + +Returns constructed Rect that can be represented exactly with IRect. The left +and top are set to the most negative integer value that fits in a 32-bit float, +and the right and bottom are set to the most positive finite value that fits in +a 32-bit float. + +These are the largest values for which round() is well defined. + +#Return bounds (SK_MinS32FitsInFloat, SK_MinS32FitsInFloat, + SK_MaxS32FitsInFloat, SK_MaxS32FitsInFloat) +## + +#Example + SkRect f_rect = SkRect::MakeLargestS32(); + SkIRect i_rect = f_rect.round(); + SkRect r_rect = SkRect::Make(i_rect); + SkDebugf("f_rect %c= r_rect\n", f_rect == r_rect ? '=' : '!'); +#StdOut +f_rect == r_rect +## +## + +#SeeAlso MakeLargest isLargest setLargest SkIRect::MakeLargest + +## + +# ------------------------------------------------------------------------------ + +#Method static constexpr SkRect SK_WARN_UNUSED_RESULT MakeWH(SkScalar w, SkScalar h) Returns constructed Rect set to SkScalar values (0, 0, w, h). Does not validate input; w or h may be negative. @@ -253,7 +283,7 @@ i_rect width: 125000111 f_rect width:125000112 # ------------------------------------------------------------------------------ -#Method static SkRect SK_WARN_UNUSED_RESULT MakeSize(const SkSize& size) +#Method static constexpr SkRect SK_WARN_UNUSED_RESULT MakeSize(const SkSize& size) Returns constructed Rect set to (0, 0, size.width(), size.height()). Does not validate input; size.width() or size.height() may be negative. @@ -313,7 +343,7 @@ rect: 5, 25, 15, 35 isEmpty: false # ------------------------------------------------------------------------------ -#Method static SkRect SK_WARN_UNUSED_RESULT MakeXYWH(SkScalar x, SkScalar y, SkScalar w, SkScalar h) +#Method static constexpr SkRect SK_WARN_UNUSED_RESULT MakeXYWH(SkScalar x, SkScalar y, SkScalar w, SkScalar h) Returns constructed Rect set to #Formula @@ -327,7 +357,7 @@ w or h may be negative. #Param w added to x and stored in fRight ## #Param h added to y and stored in fBottom ## -#Return bounds (x, y, x + w, y + h) ## +#Return bounds at (x, y) with width w and height h ## #Example SkRect rect = SkRect::MakeXYWH(5, 35, -15, 25); @@ -784,7 +814,7 @@ left: 2e+38 right: 3e+38 centerX: inf safe mid x: 2.5e+38 # ------------------------------------------------------------------------------ -#Method friend bool operator==(const SkRect& a, const SkRect& b) +#Method bool operator==(const SkRect& a, const SkRect& b) Returns true if all members in a: fLeft, fTop, fRight, and fBottom; are equal to the corresponding members in b. @@ -827,7 +857,7 @@ tests are equal # ------------------------------------------------------------------------------ -#Method friend bool operator!=(const SkRect& a, const SkRect& b) +#Method bool operator!=(const SkRect& a, const SkRect& b) Returns true if any in a: fLeft, fTop, fRight, and fBottom; does not equal the corresponding members in b. @@ -1962,7 +1992,7 @@ rect: 30, 50, 40, 60 # ------------------------------------------------------------------------------ -#Method bool contains(const SkRect& r) const { +#Method bool contains(const SkRect& r) const Returns true if Rect contains r. Returns false if Rect is empty or r is empty. diff --git a/docs/undocumented.bmh b/docs/undocumented.bmh index d6a77b9743..0239034eec 100644 --- a/docs/undocumented.bmh +++ b/docs/undocumented.bmh @@ -443,6 +443,12 @@ FT_Load_Glyph #Typedef SkScalar #Typedef ## ## + #Const SK_MinS32FitsInFloat + to be written + ## + #Const SK_MaxS32FitsInFloat + to be written + ## #Const SK_ScalarMin to be written ## diff --git a/site/user/api/SkBitmap_Reference.md b/site/user/api/SkBitmap_Reference.md index 076cebac50..abff9ffbb1 100644 --- a/site/user/api/SkBitmap_Reference.md +++ b/site/user/api/SkBitmap_Reference.md @@ -211,6 +211,7 @@ true if pixels are allocated #### Example Output ~~~~ +#Volatile pixel address = (nil) pixel address = 0x560ddd0ac670 ~~~~ diff --git a/site/user/api/SkCanvas_Reference.md b/site/user/api/SkCanvas_Reference.md index 1c5d804692..8d39ac47ed 100644 --- a/site/user/api/SkCanvas_Reference.md +++ b/site/user/api/SkCanvas_Reference.md @@ -5245,3 +5245,77 @@ clip is not rect --- +# Class SkAutoCanvasRestore +Stack helper class calls + + +## SkAutoCanvasRestore + +
+SkAutoCanvasRestore(SkCanvas* canvas, bool doSave)
+
+ +Preserves Canvas save count. Optionally saves Canvas Clip and Matrix. + +### Parameters + + + + +
canvas +Canvas to guard
doSave +call SkCanvas::save()
+ +### Return Value + +utility to restore Canvas state on destructor + +### Example + +
+ +### See Also + +SkCanvas::save SkCanvas::restore + +--- + + +## ~SkAutoCanvasRestore + +
+~SkAutoCanvasRestore()
+
+ +Restores Canvas to saved state. + +### Example + +
+ +### See Also + +SkCanvas::save SkCanvas::restore + +--- + + +## restore + +
+void restore()
+
+ +Restores Canvas to saved state immediately. Subsequent calls and class +destructor have no effect. + +### Example + +
+ +### See Also + +SkCanvas::save SkCanvas::restore + +--- + diff --git a/site/user/api/SkIRect_Reference.md b/site/user/api/SkIRect_Reference.md index c7c643103b..1982c5094d 100644 --- a/site/user/api/SkIRect_Reference.md +++ b/site/user/api/SkIRect_Reference.md @@ -21,8 +21,8 @@ its top, it is considered empty. | description | function | | --- | --- | -| friend bool operator!=(const SkIRect& a, const SkIRect& b) | Returns true if members are unequal. | -| friend bool operator==(const SkIRect& a, const SkIRect& b) | Returns true if members are equal. | +| bool operator!=(const SkIRect& a, const SkIRect& b) | Returns true if members are unequal. | +| bool operator==(const SkIRect& a, const SkIRect& b) | Returns true if members are equal. | ## Member Functions @@ -97,7 +97,7 @@ When equal to or less than fTop, IR ## MakeEmpty
-static SkIRect SK_WARN_UNUSED_RESULT MakeEmpty()
+static constexpr SkIRect SK_WARN_UNUSED_RESULT MakeEmpty()
 
Returns constructed
IRect set to (0, 0, 0, 0). @@ -169,7 +169,7 @@ outset isEmpty: true ## MakeWH
-static SkIRect SK_WARN_UNUSED_RESULT MakeWH(int32_t w, int32_t h)
+static constexpr SkIRect SK_WARN_UNUSED_RESULT MakeWH(int32_t w, int32_t h)
 
Returns constructed IRect set to (0, 0, w, h). Does not validate input; w or h @@ -210,7 +210,7 @@ all equal ## MakeSize
-static SkIRect SK_WARN_UNUSED_RESULT MakeSize(const SkISize& size)
+static constexpr SkIRect SK_WARN_UNUSED_RESULT MakeSize(const SkISize& size)
 
Returns constructed IRect set to (0, 0, size.width, size.height). @@ -250,8 +250,8 @@ floor width: 25 height: 35 ## MakeLTRB
-static SkIRect SK_WARN_UNUSED_RESULT MakeLTRB(int32_t l, int32_t t, int32_t r,
-                                              int32_t b)
+static constexpr SkIRect SK_WARN_UNUSED_RESULT MakeLTRB(int32_t l, int32_t t,
+                                                        int32_t r, int32_t b)
 
Returns constructed IRect set to (l, t, r, b). Does not sort input; Rect may @@ -297,8 +297,8 @@ rect: 5, 25, 15, 35 isEmpty: false ## MakeXYWH
-static SkIRect SK_WARN_UNUSED_RESULT MakeXYWH(int32_t x, int32_t y, int32_t w,
-                                              int32_t h)
+static constexpr SkIRect SK_WARN_UNUSED_RESULT MakeXYWH(int32_t x, int32_t y,
+                                                        int32_t w, int32_t h)
 
Returns constructed IRect set to(x, y, x + w, y + h). @@ -320,7 +320,7 @@ added to y and stored in fBo ### Return Value -bounds (x, y, x + w, y + h) +bounds at (x, y) with width w and height h ### Example @@ -783,7 +783,7 @@ large is empty: false ## operator==
-friend bool operator==(const SkIRect& a, const SkIRect& b)
+bool operator==(const SkIRect& a, const SkIRect& b)
 
Returns true if all members in a: fLeft, fTop, fRight, and fBottom; are @@ -824,7 +824,7 @@ test == sorted ## operator!=
-friend bool operator!=(const SkIRect& a, const SkIRect& b)
+bool operator!=(const SkIRect& a, const SkIRect& b)
 
Returns true if any member in a: fLeft, fTop, fRight, and fBottom; is not @@ -1019,9 +1019,9 @@ rect2: {3, 4, 1, 2} void setXYWH(int32_t x, int32_t y, int32_t width, int32_t height) -Sets IRect to(x, y, x + w, y + h). +Sets IRect to(x, y, x + width, y + height). Does not validate input; -w or h may be negative. +width or height may be negative. ### Parameters @@ -1174,7 +1174,7 @@ If dy is positive, IRectRect inset symetrically left and right, top and bottom +Rect inset symmetrically left and right, top and bottom ### Example @@ -1220,7 +1220,7 @@ If dy is positive, IRectRect outset symetrically left and right, top and bottom +Rect outset symmetrically left and right, top and bottom ### Example diff --git a/site/user/api/SkPath_Reference.md b/site/user/api/SkPath_Reference.md index 791dc17213..bb3634e373 100644 --- a/site/user/api/SkPath_Reference.md +++ b/site/user/api/SkPath_Reference.md @@ -843,7 +843,7 @@ unmodified by the original FillType. ## Enum SkPath::Convexity
-enum Convexity {
+enum Convexity : uint8_t {
 kUnknown Convexity, 
 kConvex Convexity,
 kConcave Convexity, 
diff --git a/site/user/api/SkRect_Reference.md b/site/user/api/SkRect_Reference.md
index e067bf379c..4dd16b897e 100644
--- a/site/user/api/SkRect_Reference.md
+++ b/site/user/api/SkRect_Reference.md
@@ -24,8 +24,8 @@ integer input cannot convert to SkScalar wit
 
 | description | function |
 | --- | ---  |
-| friend bool operator!=(const SkRect& a, const SkRect& b) | Returns true if member bits are unequal. |
-| friend bool operator==(const SkRect& a, const SkRect& b) | Returns true if member bits are equal. |
+| bool operator!=(const SkRect& a, const SkRect& b) | Returns true if member bits are unequal. |
+| bool operator==(const SkRect& a, const SkRect& b) | Returns true if member bits are equal. |
 
 ##  Member Functions
 
@@ -38,6 +38,7 @@ integer input cannot convert to SkScalar wit
 | MakeIWH | Constructs from int input returning (0, 0, width, height). |
 | MakeLTRB | Constructs from SkScalar left, top, right, bottom. |
 | MakeLargest | Constructs (SK ScalarMin, SK ScalarMin, SK ScalarMax, SK ScalarMax). |
+| MakeLargestS32 | Constructs largest signed integers that fit in 32-bit float. |
 | MakeSize | Constructs from Size returning (0, 0, width, height). |
 | MakeWH | Constructs from SkScalar input returning (0, 0, width, height). |
 | MakeXYWH | Constructs from SkScalar input returning (x, y, width, height). |
@@ -180,7 +181,44 @@ outset a little more isFinite: false
 
 ### See Also
 
-isLargest setLargest SkIRect::MakeLargest
+MakeLargestS32 isLargest setLargest SkIRect::MakeLargest
+
+---
+
+
+## MakeLargestS32
+
+
+static SkRect SK_WARN_UNUSED_RESULT MakeLargestS32()
+
+ +Returns constructed Rect that can be represented exactly with IRect. The left +and top are set to the most negative integer value that fits in a 32-bit float, +and the right and bottom are set to the most positive finite value that fits in +a 32-bit float. + +These are the largest values for which round is well defined. + +### Return Value + +bounds (SK MinS32FitsInFloat, SK MinS32FitsInFloat, +SK MaxS32FitsInFloat, SK MaxS32FitsInFloat) + +### Example + +
+ +#### Example Output + +~~~~ +f_rect == r_rect +~~~~ + +
+ +### See Also + +MakeLargest isLargest setLargest SkIRect::MakeLargest --- @@ -188,7 +226,7 @@ outset a little more isFinite: false ## MakeWH
-static SkRect SK_WARN_UNUSED_RESULT MakeWH(SkScalar w, SkScalar h)
+static constexpr SkRect SK_WARN_UNUSED_RESULT MakeWH(SkScalar w, SkScalar h)
 
Returns constructed Rect set to SkScalar values (0, 0, w, h). Does not @@ -277,7 +315,7 @@ i_rect width: 125000111 f_rect width:125000112 ## MakeSize
-static SkRect SK_WARN_UNUSED_RESULT MakeSize(const SkSize& size)
+static constexpr SkRect SK_WARN_UNUSED_RESULT MakeSize(const SkSize& size)
 
Returns constructed Rect set to (0, 0, size.width, size.height). Does not @@ -364,8 +402,8 @@ rect: 5, 25, 15, 35 isEmpty: false ## MakeXYWH
-static SkRect SK_WARN_UNUSED_RESULT MakeXYWH(SkScalar x, SkScalar y, SkScalar w,
-                                             SkScalar h)
+static constexpr SkRect SK_WARN_UNUSED_RESULT MakeXYWH(SkScalar x, SkScalar y,
+                                                       SkScalar w, SkScalar h)
 
Returns constructed Rect set to(x, y, x + w, y + h). @@ -387,7 +425,7 @@ added to y and stored in fBott ### Return Value -bounds (x, y, x + w, y + h) +bounds at (x, y) with width w and height h ### Example @@ -978,7 +1016,7 @@ left: 2e+38 right: 3e+38 centerX: inf safe mid x: 2.5e+38 ## operator==
-friend bool operator==(const SkRect& a, const SkRect& b)
+bool operator==(const SkRect& a, const SkRect& b)
 
Returns true if all members in a: fLeft, fTop, fRight, and fBottom; are @@ -1025,7 +1063,7 @@ tests are equal ## operator!=
-friend bool operator!=(const SkRect& a, const SkRect& b)
+bool operator!=(const SkRect& a, const SkRect& b)
 
Returns true if any in a: fLeft, fTop, fRight, and fBottom; does not @@ -1502,9 +1540,9 @@ corner to include void setXYWH(SkScalar x, SkScalar y, SkScalar width, SkScalar height)
-Sets Rect to(x, y, x + w, y + h). +Sets Rect to(x, y, x + width, y + height). Does not validate input; -w or h may be negative. +width or height may be negative. ### Parameters @@ -1545,8 +1583,8 @@ rect: -10, 35, 5, 60 isEmpty: false void setWH(SkScalar width, SkScalar height) -Sets Rect to (0, 0, w, h). Does not validate input; -w or h may be negative. +Sets Rect to (0, 0, width, height). Does not validate input; +width or height may be negative. ### Parameters @@ -1711,7 +1749,7 @@ added to fTop and subtracted from Rect inset symetrically left and right, top and bottom +Rect inset symmetrically left and right, top and bottom ### Example @@ -1757,7 +1795,7 @@ subtracted to fTop and added from Rect outset symetrically left and right, top and bottom +Rect outset symmetrically left and right, top and bottom ### Example @@ -2330,7 +2368,7 @@ void joinNonEmptyArg(const SkRect& r) Sets Rect to the union of itself and r. Asserts if r is empty and SK DEBUG is defined. -If Rect is empty, sets rect to r. +If Rect is empty, sets Rect to r. May produce incorrect results if r is empty. @@ -2343,7 +2381,7 @@ expansion Rect ### Example -
Since rect is not sorted, first result is copy of toJoin.
+
Since Rect is not sorted, first result is copy of toJoin.
#### Example Output @@ -2380,7 +2418,7 @@ expansion Rect ### Example -
Since rect is not sorted, first result is not useful.
+
Since Rect is not sorted, first result is not useful.
#### Example Output @@ -2521,7 +2559,7 @@ rect: 30, 50, 40, 60 ## contains
-bool contains(const SkRect& r) const {
+bool contains(const SkRect& r) const
 
Returns true if Rect contains r. diff --git a/site/user/api/undocumented.md b/site/user/api/undocumented.md index 721283cdd1..cd6cb5fbd1 100644 --- a/site/user/api/undocumented.md +++ b/site/user/api/undocumented.md @@ -736,6 +736,12 @@ template <typename D, typename S> inline bool SkTFitsIn(S s) ### Constants + + + + + + diff --git a/tools/bookmaker/bookmaker.cpp b/tools/bookmaker/bookmaker.cpp index 33feda5a35..cc454982fd 100644 --- a/tools/bookmaker/bookmaker.cpp +++ b/tools/bookmaker/bookmaker.cpp @@ -21,7 +21,7 @@ DEFINE_string2(ref, r, "", "Resolve refs and write bmh_*.md files to path. (Requ DEFINE_string2(spellcheck, s, "", "Spell-check [once, all, mispelling]. (Requires -b)"); DEFINE_string2(tokens, t, "", "Directory to write bmh from include. (Requires -i)"); DEFINE_bool2(crosscheck, x, false, "Check bmh against includes. (Requires -b -i)"); -DEFINE_bool2(skip, z, false, "Skip missing example error."); +DEFINE_bool2(skip, z, false, "Skip degenerate missed in legacy preprocessor."); /* recipe for generating timestamps for existing doxygen comments find include/core -type f -name '*.h' -print -exec git blame {} \; > ~/all.blame.txt @@ -390,9 +390,6 @@ bool Definition::checkMethod() const { string paramName; methodParser.fChar = nextEnd + 1; methodParser.skipSpace(); - if (1494 == methodParser.fLineCount) { - SkDebugf(""); - } if (!this->nextMethodParam(&methodParser, &nextEnd, ¶mName)) { continue; } @@ -823,11 +820,12 @@ bool RootDefinition::dumpUnVisited() { for (auto& leaf : fLeaves) { if (!leaf.second.fVisited) { // TODO: parse embedded struct in includeParser phase, then remove this condition - size_t firstColon = leaf.first.find("::"); - size_t lastColon = leaf.first.rfind("::"); - if (firstColon != lastColon) { // struct, two sets - allStructElementsFound = false; - continue; + if (FLAGS_skip) { + const Definition& def = leaf.second; + if (def.fChildren.size() > 0 && + MarkType::kDeprecated == def.fChildren[0]->fMarkType) { + continue; + } } SkDebugf("defined in bmh but missing in include: %s\n", leaf.first.c_str()); } @@ -1120,9 +1118,7 @@ bool BmhParser::addDefinition(const char* defStart, bool hasEnd, MarkType markTy if (definition->fChildren.size() == 0) { TextParser emptyCheck(definition); if (emptyCheck.eof() || !emptyCheck.skipWhiteSpace()) { - if (!FLAGS_skip) { - return this->reportError("missing example body"); - } + return this->reportError("missing example body"); } } } diff --git a/tools/bookmaker/bookmaker.h b/tools/bookmaker/bookmaker.h index 3954c6eaad..857caf4c10 100644 --- a/tools/bookmaker/bookmaker.h +++ b/tools/bookmaker/bookmaker.h @@ -1099,9 +1099,6 @@ public: } writePending(); if (fDebugOut) { - if (!strncmp("SK_SUPPORT", data, 10)) { - SkDebugf(""); - } string check(data, size); SkDebugf("%s", check.c_str()); } @@ -1874,7 +1871,7 @@ public: Definition* structMemberOut(const Definition* memberStart, const Definition& child); void structOut(const Definition* root, const Definition& child, const char* commentStart, const char* commentEnd); - void structSizeMembers(Definition& child); + void structSizeMembers(const Definition& child); private: BmhParser* fBmhParser; diff --git a/tools/bookmaker/includeParser.cpp b/tools/bookmaker/includeParser.cpp index 1e055db17f..4ad83d8aa7 100644 --- a/tools/bookmaker/includeParser.cpp +++ b/tools/bookmaker/includeParser.cpp @@ -199,16 +199,48 @@ string IncludeParser::className() const { return result; } +#include +#include + bool IncludeParser::crossCheck(BmhParser& bmhParser) { - string className = this->className(); - string classPrefix = className + "::"; - RootDefinition* root = &bmhParser.fClassMap[className]; - root->clearVisited(); for (auto& classMapper : fIClassMap) { - if (className != classMapper.first - && classPrefix != classMapper.first.substr(0, classPrefix.length())) { + string className = classMapper.first; + auto finder = bmhParser.fClassMap.find(className); + if (bmhParser.fClassMap.end() == finder) { + SkASSERT(string::npos != className.find("::")); continue; } + RootDefinition* root = &finder->second; + root->clearVisited(); + } + for (auto& classMapper : fIClassMap) { + string className = classMapper.first; + std::istringstream iss(className); + string classStr; + string classBase; + RootDefinition* root = nullptr; + while (std::getline(iss, classStr, ':')) { + if (root) { + if (!classStr.length()) { + continue; + } + classBase += "::" + classStr; + auto finder = root->fBranches.find(classBase); + if (root->fBranches.end() != finder) { + root = finder->second; + } else { + SkASSERT(0); + } + } else { + classBase = classStr; + auto finder = bmhParser.fClassMap.find(classBase); + if (bmhParser.fClassMap.end() != finder) { + root = &finder->second; + } else { + SkASSERT(0); + } + } + } auto& classMap = classMapper.second; auto& tokens = classMap.fTokens; for (const auto& token : tokens) { @@ -399,10 +431,18 @@ bool IncludeParser::crossCheck(BmhParser& bmhParser) { } } } - if (!root->dumpUnVisited()) { - SkDebugf("some struct elements not found; struct finding in includeParser is missing\n"); + for (auto& classMapper : fIClassMap) { + string className = classMapper.first; + auto finder = bmhParser.fClassMap.find(className); + if (bmhParser.fClassMap.end() == finder) { + continue; + } + RootDefinition* root = &finder->second; + if (!root->dumpUnVisited()) { + SkDebugf("some struct elements not found; struct finding in includeParser is missing\n"); + } + SkDebugf("cross-checked %s\n", className.c_str()); } - SkDebugf("cross-checked %s\n", className.c_str()); bmhParser.fWroteOut = true; return true; } @@ -1044,32 +1084,45 @@ bool IncludeParser::parseClass(Definition* includeDef, IsStruct isStruct) { (*childIter)->fPrivate = true; childIter = std::next(childIter); } - int lastPublic = publicIndex; + int keyIndex = publicIndex; + KeyWord currentKey = KeyWord::kPublic; + const char* publicName = kKeyWords[(int) KeyWord::kPublic].fName; + size_t publicLen = strlen(publicName); const char* protectedName = kKeyWords[(int) KeyWord::kProtected].fName; size_t protectedLen = strlen(protectedName); const char* privateName = kKeyWords[(int) KeyWord::kPrivate].fName; size_t privateLen = strlen(privateName); - while (iter != includeDef->fTokens.end() - && (protectedLen != (size_t) (iter->fContentEnd - iter->fStart) - || strncmp(iter->fStart, protectedName, protectedLen)) - && (privateLen != (size_t) (iter->fContentEnd - iter->fStart) - || strncmp(iter->fStart, privateName, privateLen))) { - iter = std::next(iter); - ++lastPublic; - } - fLastObject = nullptr; - while (childIter != includeDef->fChildren.end() && (*childIter)->fParentIndex < lastPublic) { + while (childIter != includeDef->fChildren.end()) { Definition* child = *childIter; - if (!this->parseObject(child, markupDef)) { - return false; + while (child->fParentIndex > keyIndex && iter != includeDef->fTokens.end()) { + const char* testStart = iter->fStart; + size_t testLen = (size_t) (iter->fContentEnd - testStart); + iter = std::next(iter); + ++keyIndex; + if (publicLen == testLen && !strncmp(testStart, publicName, testLen)) { + currentKey = KeyWord::kPublic; + break; + } + if (protectedLen == testLen && !strncmp(testStart, protectedName, testLen)) { + currentKey = KeyWord::kProtected; + break; + } + if (privateLen == testLen && !strncmp(testStart, privateName, testLen)) { + currentKey = KeyWord::kPrivate; + break; + } + } + fLastObject = nullptr; + if (KeyWord::kPublic == currentKey) { + if (!this->parseObject(child, markupDef)) { + return false; + } + } else { + child->fPrivate = true; } fLastObject = child; childIter = std::next(childIter); } - while (childIter != includeDef->fChildren.end()) { - (*childIter)->fPrivate = true; - childIter = std::next(childIter); - } SkASSERT(fParent->fParent); fParent = fParent->fParent; return true; @@ -1242,6 +1295,23 @@ bool IncludeParser::parseEnum(Definition* child, Definition* markupDef) { } markupChild->fChildren.push_back(member); } while (true); + for (auto count : child->fChildren) { + if (Definition::Type::kBracket == count->fType) { + continue; + } + SkASSERT(Definition::Type::kKeyWord == count->fType); + if (KeyWord::kClass == count->fKeyWord) { + continue; + } + SkASSERT(KeyWord::kStatic == count->fKeyWord); + markupChild->fTokens.emplace_back(MarkType::kMember, count->fContentStart, + count->fContentEnd, count->fLineCount, markupChild); + Definition* member = &markupChild->fTokens.back(); + member->fName = count->fName; + // FIXME: ? add comment as well ? + markupChild->fChildren.push_back(member); + break; + } IClassDefinition& classDef = fIClassMap[markupDef->fName]; SkASSERT(classDef.fStart); string uniqueName = this->uniqueName(classDef.fEnums, nameStr); @@ -1320,9 +1390,6 @@ bool IncludeParser::parseMethod(Definition* child, Definition* markupDef) { std::advance(tokenIter, child->fParentIndex); tokenIter = std::prev(tokenIter); string nameStr(tokenIter->fStart, tokenIter->fContentEnd - tokenIter->fStart); - if (0 == nameStr.find("SK_ATTR_DEPRECATED")) { - SkDebugf(""); - } while (tokenIter != child->fParent->fTokens.begin()) { auto testIter = std::prev(tokenIter); switch (testIter->fType) { @@ -1355,9 +1422,14 @@ bool IncludeParser::parseMethod(Definition* child, Definition* markupDef) { } tokenIter->fName = nameStr; tokenIter->fMarkType = MarkType::kMethod; + tokenIter->fPrivate = string::npos != nameStr.find("::"); auto testIter = child->fParent->fTokens.begin(); SkASSERT(child->fParentIndex > 0); std::advance(testIter, child->fParentIndex - 1); + if (tokenIter->fParent && KeyWord::kIfdef == tokenIter->fParent->fKeyWord && + 0 == tokenIter->fParentIndex) { + tokenIter = std::next(tokenIter); + } const char* start = tokenIter->fContentStart; const char* end = tokenIter->fContentEnd; const char kDebugCodeStr[] = "SkDEBUGCODE"; diff --git a/tools/bookmaker/includeWriter.cpp b/tools/bookmaker/includeWriter.cpp index 38213618c5..ff7c0e3c56 100644 --- a/tools/bookmaker/includeWriter.cpp +++ b/tools/bookmaker/includeWriter.cpp @@ -673,7 +673,7 @@ Definition* IncludeWriter::structMemberOut(const Definition* memberStart, const return valueEnd; } -void IncludeWriter::structSizeMembers(Definition& child) { +void IncludeWriter::structSizeMembers(const Definition& child) { int longestType = 0; Definition* typeStart = nullptr; int longestName = 0; @@ -815,6 +815,7 @@ bool IncludeWriter::populate(Definition* def, ParentPair* prevPair, RootDefiniti fContinuation = nullptr; bool inStruct = false; bool inConstructor = false; + bool inInline = false; for (auto& child : def->fTokens) { if (memberEnd) { if (memberEnd != &child) { @@ -824,8 +825,34 @@ bool IncludeWriter::populate(Definition* def, ParentPair* prevPair, RootDefiniti memberEnd = nullptr; } if (child.fPrivate) { + if (MarkType::kMethod == child.fMarkType) { + inInline = true; + } continue; } + if (inInline) { + if (Definition::Type::kKeyWord == child.fType) { + SkASSERT(MarkType::kMethod != child.fMarkType); + continue; + } + if (Definition::Type::kPunctuation == child.fType) { + if (Punctuation::kLeftBrace == child.fPunctuation) { + inInline = false; + } else { + SkASSERT(Punctuation::kAsterisk == child.fPunctuation); + } + continue; + } + if (Definition::Type::kWord == child.fType) { + string name(child.fContentStart, child.fContentEnd - child.fContentStart); + SkASSERT(string::npos != name.find("::")); + continue; + } + if (Definition::Type::kBracket == child.fType) { + SkASSERT(Bracket::kParen == child.fBracket); + continue; + } + } if (fContinuation) { if (Definition::Type::kKeyWord == child.fType) { if (KeyWord::kFriend == child.fKeyWord || @@ -1131,6 +1158,16 @@ bool IncludeWriter::populate(Definition* def, ParentPair* prevPair, RootDefiniti } if (Definition::Type::kWord == child.fType) { if (MarkType::kMember == child.fMarkType) { + if (!memberStart) { + auto iter = def->fTokens.begin(); + std::advance(iter, child.fParentIndex - 1); + memberStart = &*iter; + if (!fStructDef) { + SkASSERT(KeyWord::kStruct == def->fParent->fKeyWord); + fStructDef = def->fParent; + this->structSizeMembers(*fStructDef); + } + } memberEnd = this->structMemberOut(memberStart, child); fStart = child.fContentEnd + 1; fDeferComment = nullptr; diff --git a/tools/bookmaker/spellCheck.cpp b/tools/bookmaker/spellCheck.cpp index b2091640d0..3a32f37bc4 100644 --- a/tools/bookmaker/spellCheck.cpp +++ b/tools/bookmaker/spellCheck.cpp @@ -595,7 +595,6 @@ void SpellCheck::wordCheck(const string& str) { sawSpecial = true; continue; } - SkDebugf(""); SkASSERT(0); } if (sawSpecial && !hasParen) {
SK_MinS32FitsInFloat to be written
SK_MaxS32FitsInFloat to be written
SK_ScalarMin to be written