1package cairo 2 3// #include <stdlib.h> 4// #include <cairo.h> 5// #include <cairo-gobject.h> 6import "C" 7import ( 8 "errors" 9 "strings" 10 "unsafe" 11) 12 13// Status is a representation of Cairo's cairo_status_t. 14type Status int 15 16const ( 17 STATUS_SUCCESS Status = C.CAIRO_STATUS_SUCCESS 18 STATUS_NO_MEMORY Status = C.CAIRO_STATUS_NO_MEMORY 19 STATUS_INVALID_RESTORE Status = C.CAIRO_STATUS_INVALID_RESTORE 20 STATUS_INVALID_POP_GROUP Status = C.CAIRO_STATUS_INVALID_POP_GROUP 21 STATUS_NO_CURRENT_POINT Status = C.CAIRO_STATUS_NO_CURRENT_POINT 22 STATUS_INVALID_MATRIX Status = C.CAIRO_STATUS_INVALID_MATRIX 23 STATUS_INVALID_STATUS Status = C.CAIRO_STATUS_INVALID_STATUS 24 STATUS_NULL_POINTER Status = C.CAIRO_STATUS_NULL_POINTER 25 STATUS_INVALID_STRING Status = C.CAIRO_STATUS_INVALID_STRING 26 STATUS_INVALID_PATH_DATA Status = C.CAIRO_STATUS_INVALID_PATH_DATA 27 STATUS_READ_ERROR Status = C.CAIRO_STATUS_READ_ERROR 28 STATUS_WRITE_ERROR Status = C.CAIRO_STATUS_WRITE_ERROR 29 STATUS_SURFACE_FINISHED Status = C.CAIRO_STATUS_SURFACE_FINISHED 30 STATUS_SURFACE_TYPE_MISMATCH Status = C.CAIRO_STATUS_SURFACE_TYPE_MISMATCH 31 STATUS_PATTERN_TYPE_MISMATCH Status = C.CAIRO_STATUS_PATTERN_TYPE_MISMATCH 32 STATUS_INVALID_CONTENT Status = C.CAIRO_STATUS_INVALID_CONTENT 33 STATUS_INVALID_FORMAT Status = C.CAIRO_STATUS_INVALID_FORMAT 34 STATUS_INVALID_VISUAL Status = C.CAIRO_STATUS_INVALID_VISUAL 35 STATUS_FILE_NOT_FOUND Status = C.CAIRO_STATUS_FILE_NOT_FOUND 36 STATUS_INVALID_DASH Status = C.CAIRO_STATUS_INVALID_DASH 37 STATUS_INVALID_DSC_COMMENT Status = C.CAIRO_STATUS_INVALID_DSC_COMMENT 38 STATUS_INVALID_INDEX Status = C.CAIRO_STATUS_INVALID_INDEX 39 STATUS_CLIP_NOT_REPRESENTABLE Status = C.CAIRO_STATUS_CLIP_NOT_REPRESENTABLE 40 STATUS_TEMP_FILE_ERROR Status = C.CAIRO_STATUS_TEMP_FILE_ERROR 41 STATUS_INVALID_STRIDE Status = C.CAIRO_STATUS_INVALID_STRIDE 42 STATUS_FONT_TYPE_MISMATCH Status = C.CAIRO_STATUS_FONT_TYPE_MISMATCH 43 STATUS_USER_FONT_IMMUTABLE Status = C.CAIRO_STATUS_USER_FONT_IMMUTABLE 44 STATUS_USER_FONT_ERROR Status = C.CAIRO_STATUS_USER_FONT_ERROR 45 STATUS_NEGATIVE_COUNT Status = C.CAIRO_STATUS_NEGATIVE_COUNT 46 STATUS_INVALID_CLUSTERS Status = C.CAIRO_STATUS_INVALID_CLUSTERS 47 STATUS_INVALID_SLANT Status = C.CAIRO_STATUS_INVALID_SLANT 48 STATUS_INVALID_WEIGHT Status = C.CAIRO_STATUS_INVALID_WEIGHT 49 STATUS_INVALID_SIZE Status = C.CAIRO_STATUS_INVALID_SIZE 50 STATUS_USER_FONT_NOT_IMPLEMENTED Status = C.CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED 51 STATUS_DEVICE_TYPE_MISMATCH Status = C.CAIRO_STATUS_DEVICE_TYPE_MISMATCH 52 STATUS_DEVICE_ERROR Status = C.CAIRO_STATUS_DEVICE_ERROR 53 // STATUS_INVALID_MESH_CONSTRUCTION Status = C.CAIRO_STATUS_INVALID_MESH_CONSTRUCTION (since 1.12) 54 // STATUS_DEVICE_FINISHED Status = C.CAIRO_STATUS_DEVICE_FINISHED (since 1.12) 55) 56 57var key_Status = map[Status]string{ 58 59 STATUS_SUCCESS: "CAIRO_STATUS_SUCCESS", 60 STATUS_NO_MEMORY: "CAIRO_STATUS_NO_MEMORY", 61 STATUS_INVALID_RESTORE: "CAIRO_STATUS_INVALID_RESTORE", 62 STATUS_INVALID_POP_GROUP: "CAIRO_STATUS_INVALID_POP_GROUP", 63 STATUS_NO_CURRENT_POINT: "CAIRO_STATUS_NO_CURRENT_POINT", 64 STATUS_INVALID_MATRIX: "CAIRO_STATUS_INVALID_MATRIX", 65 STATUS_INVALID_STATUS: "CAIRO_STATUS_INVALID_STATUS", 66 STATUS_NULL_POINTER: "CAIRO_STATUS_NULL_POINTER", 67 STATUS_INVALID_STRING: "CAIRO_STATUS_INVALID_STRING", 68 STATUS_INVALID_PATH_DATA: "CAIRO_STATUS_INVALID_PATH_DATA", 69 STATUS_READ_ERROR: "CAIRO_STATUS_READ_ERROR", 70 STATUS_WRITE_ERROR: "CAIRO_STATUS_WRITE_ERROR", 71 STATUS_SURFACE_FINISHED: "CAIRO_STATUS_SURFACE_FINISHED", 72 STATUS_SURFACE_TYPE_MISMATCH: "CAIRO_STATUS_SURFACE_TYPE_MISMATCH", 73 STATUS_PATTERN_TYPE_MISMATCH: "CAIRO_STATUS_PATTERN_TYPE_MISMATCH", 74 STATUS_INVALID_CONTENT: "CAIRO_STATUS_INVALID_CONTENT", 75 STATUS_INVALID_FORMAT: "CAIRO_STATUS_INVALID_FORMAT", 76 STATUS_INVALID_VISUAL: "CAIRO_STATUS_INVALID_VISUAL", 77 STATUS_FILE_NOT_FOUND: "CAIRO_STATUS_FILE_NOT_FOUND", 78 STATUS_INVALID_DASH: "CAIRO_STATUS_INVALID_DASH", 79 STATUS_INVALID_DSC_COMMENT: "CAIRO_STATUS_INVALID_DSC_COMMENT", 80 STATUS_INVALID_INDEX: "CAIRO_STATUS_INVALID_INDEX", 81 STATUS_CLIP_NOT_REPRESENTABLE: "CAIRO_STATUS_CLIP_NOT_REPRESENTABLE", 82 STATUS_TEMP_FILE_ERROR: "CAIRO_STATUS_TEMP_FILE_ERROR", 83 STATUS_INVALID_STRIDE: "CAIRO_STATUS_INVALID_STRIDE", 84 STATUS_FONT_TYPE_MISMATCH: "CAIRO_STATUS_FONT_TYPE_MISMATCH", 85 STATUS_USER_FONT_IMMUTABLE: "CAIRO_STATUS_USER_FONT_IMMUTABLE", 86 STATUS_USER_FONT_ERROR: "CAIRO_STATUS_USER_FONT_ERROR", 87 STATUS_NEGATIVE_COUNT: "CAIRO_STATUS_NEGATIVE_COUNT", 88 STATUS_INVALID_CLUSTERS: "CAIRO_STATUS_INVALID_CLUSTERS", 89 STATUS_INVALID_SLANT: "CAIRO_STATUS_INVALID_SLANT", 90 STATUS_INVALID_WEIGHT: "CAIRO_STATUS_INVALID_WEIGHT", 91 STATUS_INVALID_SIZE: "CAIRO_STATUS_INVALID_SIZE", 92 STATUS_USER_FONT_NOT_IMPLEMENTED: "CAIRO_STATUS_USER_FONT_NOT_IMPLEMENTED", 93 STATUS_DEVICE_TYPE_MISMATCH: "CAIRO_STATUS_DEVICE_TYPE_MISMATCH", 94 STATUS_DEVICE_ERROR: "CAIRO_STATUS_DEVICE_ERROR", 95} 96 97func StatusToString(status Status) string { 98 s, ok := key_Status[status] 99 if !ok { 100 s = "CAIRO_STATUS_UNDEFINED" 101 } 102 return s 103} 104 105func marshalStatus(p uintptr) (interface{}, error) { 106 c := C.g_value_get_enum((*C.GValue)(unsafe.Pointer(p))) 107 return Status(c), nil 108} 109 110// String returns a readable status messsage usable in texts. 111func (s Status) String() string { 112 str := StatusToString(s) 113 str = strings.Replace(str, "CAIRO_STATUS_", "", 1) 114 str = strings.Replace(str, "_", " ", 0) 115 return strings.ToLower(str) 116} 117 118// ToError returns the error for the status. Returns nil if success. 119func (s Status) ToError() error { 120 if s == STATUS_SUCCESS { 121 return nil 122 } 123 return errors.New(s.String()) 124} 125