humper@google.com | 75e3ca1 | 2013-04-08 21:44:11 +0000 | [diff] [blame] | 1 | /* |
| 2 | * Copyright 2013 Google Inc. |
| 3 | * |
| 4 | * Use of this source code is governed by a BSD-style license that can be |
| 5 | * found in the LICENSE file. |
| 6 | */ |
skia.committer@gmail.com | 3284017 | 2013-04-09 07:01:27 +0000 | [diff] [blame] | 7 | |
humper@google.com | 75e3ca1 | 2013-04-08 21:44:11 +0000 | [diff] [blame] | 8 | #ifndef SkError_DEFINED |
| 9 | #define SkError_DEFINED |
| 10 | |
| 11 | |
| 12 | /** \file SkError.h |
| 13 | */ |
| 14 | |
| 15 | enum SkError { |
| 16 | /** All is well |
| 17 | */ |
| 18 | kNoError_SkError=0, |
skia.committer@gmail.com | 3284017 | 2013-04-09 07:01:27 +0000 | [diff] [blame] | 19 | |
| 20 | /** User argument passed to Skia function was invalid: NULL when that’s |
| 21 | * not allowed, out of numeric range, bad enum, or violating some |
humper@google.com | 75e3ca1 | 2013-04-08 21:44:11 +0000 | [diff] [blame] | 22 | * other general precondition. |
| 23 | */ |
| 24 | kInvalidArgument_SkError, |
skia.committer@gmail.com | 3284017 | 2013-04-09 07:01:27 +0000 | [diff] [blame] | 25 | |
| 26 | /** User tried to perform some operation in a state when the operation |
| 27 | * was not legal, or the operands make no sense (e.g., asking for |
| 28 | * pixels from an SkPictureCanvas). Other examples might be |
humper@google.com | 75e3ca1 | 2013-04-08 21:44:11 +0000 | [diff] [blame] | 29 | * inset()’ing a rectangle to make it degenerate (negative width/height). |
| 30 | */ |
| 31 | kInvalidOperation_SkError, |
skia.committer@gmail.com | 3284017 | 2013-04-09 07:01:27 +0000 | [diff] [blame] | 32 | |
| 33 | /** Probably not needed right now, but in the future we could have opaque |
| 34 | * handles for SkPictures floating around, and it would be a good idea |
humper@google.com | 75e3ca1 | 2013-04-08 21:44:11 +0000 | [diff] [blame] | 35 | * to anticipate this kind of issue. |
| 36 | */ |
| 37 | kInvalidHandle_SkError, |
skia.committer@gmail.com | 3284017 | 2013-04-09 07:01:27 +0000 | [diff] [blame] | 38 | |
| 39 | /** This is probably not possible because paint surely has defaults for |
humper@google.com | 75e3ca1 | 2013-04-08 21:44:11 +0000 | [diff] [blame] | 40 | * everything, but perhaps a paint can get into a bad state somehow. |
| 41 | */ |
| 42 | kInvalidPaint_SkError, |
skia.committer@gmail.com | 3284017 | 2013-04-09 07:01:27 +0000 | [diff] [blame] | 43 | |
humper@google.com | 75e3ca1 | 2013-04-08 21:44:11 +0000 | [diff] [blame] | 44 | /** Skia was unable to allocate memory to perform some task. |
| 45 | */ |
| 46 | kOutOfMemory_SkError, |
skia.committer@gmail.com | 3284017 | 2013-04-09 07:01:27 +0000 | [diff] [blame] | 47 | |
humper@google.com | 75e3ca1 | 2013-04-08 21:44:11 +0000 | [diff] [blame] | 48 | /** Skia failed while trying to consume some external resource. |
| 49 | */ |
| 50 | kParseError_SkError |
| 51 | }; |
| 52 | |
| 53 | /** Return the current per-thread error code. Error codes are "sticky"; they |
| 54 | * are not not reset by subsequent successful operations. |
skia.committer@gmail.com | 3284017 | 2013-04-09 07:01:27 +0000 | [diff] [blame] | 55 | */ |
humper@google.com | 75e3ca1 | 2013-04-08 21:44:11 +0000 | [diff] [blame] | 56 | SkError SkGetLastError(); |
| 57 | |
| 58 | /** Clear the current per-thread error code back to kNoError_SkError. |
| 59 | */ |
| 60 | void SkClearLastError(); |
| 61 | |
| 62 | /** Type for callback functions to be invoked whenever an error is registered. |
skia.committer@gmail.com | 3284017 | 2013-04-09 07:01:27 +0000 | [diff] [blame] | 63 | * Callback functions take the error code being set, as well as a context |
humper@google.com | 75e3ca1 | 2013-04-08 21:44:11 +0000 | [diff] [blame] | 64 | * argument that is provided when the callback is registered. |
| 65 | */ |
| 66 | typedef void (*SkErrorCallbackFunction)(SkError, void *); |
| 67 | |
| 68 | /** Set the current per-thread error callback. |
skia.committer@gmail.com | 3284017 | 2013-04-09 07:01:27 +0000 | [diff] [blame] | 69 | * |
humper@google.com | 75e3ca1 | 2013-04-08 21:44:11 +0000 | [diff] [blame] | 70 | * @param cb The callback function to be invoked. Passing NULL |
| 71 | * for cb will revert to the default error callback which |
| 72 | * does nothing on release builds, but on debug builds will |
| 73 | * print an informative error message to the screen. |
skia.committer@gmail.com | 3284017 | 2013-04-09 07:01:27 +0000 | [diff] [blame] | 74 | * @param context An arbitrary pointer that will be passed to |
humper@google.com | 75e3ca1 | 2013-04-08 21:44:11 +0000 | [diff] [blame] | 75 | * the provided callback function. |
| 76 | */ |
| 77 | void SkSetErrorCallback(SkErrorCallbackFunction cb, void *context); |
| 78 | |
skia.committer@gmail.com | 3284017 | 2013-04-09 07:01:27 +0000 | [diff] [blame] | 79 | /** Get a human-readable description of the last (per-thread) error that |
| 80 | * occurred. The returned error message will include not only a human |
| 81 | * readable version of the error code, but also information about the |
humper@google.com | 75e3ca1 | 2013-04-08 21:44:11 +0000 | [diff] [blame] | 82 | * conditions that led to the error itself. |
| 83 | */ |
| 84 | const char *SkGetLastErrorString(); |
| 85 | |
| 86 | #endif /* SkError_DEFINED */ |