├── QCamera.natvis ├── QArrayData.natvis ├── Tesseract.natvis ├── LICENSE ├── QRegular.natvis ├── README.md ├── QUrl.natvis ├── std mutex.natvis ├── Endian.natvis ├── QImage.natvis ├── QMutex.natvis ├── QDir.natvis ├── JsonCpp.natvis ├── Leptonica.natvis ├── QMatrix.natvis ├── std containers.natvis ├── CppRest.natvis ├── OpenCV.natvis ├── PopplerCpp.natvis ├── QJson.natvis ├── PSD.natvis └── qt5.natvis /QCamera.natvis: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {*(Qt5Multimediad.dll!QCameraInfoPrivate*)(d.value)} 6 | 7 | *(Qt5Multimediad.dll!QCameraInfoPrivate*)(d.value) 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /QArrayData.natvis: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ref {ref.atomic._q_value}, size {size} 6 | 7 | 8 | reinterpret_cast<char *>(this) + offset, [size] 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /Tesseract.natvis: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | null 7 | {{{((const char *)data_) + sizeof(STRING_HEADER),[((STRING_HEADER*)data_)->used_]s}}} 8 | 9 | ((STRING_HEADER*)data_)->capacity_ 10 | ((STRING_HEADER*)data_)->used_ 11 | ((const char *)data_) + sizeof(STRING_HEADER),[((STRING_HEADER*)data_)->used_]s 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Alexey Nikolaev 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /QRegular.natvis: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {*(Qt5Cored.dll!QRegularExpressionPrivate*)(d.d)} 6 | 7 | *(Qt5Cored.dll!QRegularExpressionPrivate*)(d.d) 8 | 9 | 10 | 11 | 12 | {pattern} 13 | 14 | 15 | 16 | {*(Qt5Cored.dll!QRegularExpressionMatchPrivate*)(d.d)} 17 | 18 | *(Qt5Cored.dll!QRegularExpressionMatchPrivate*)(d.d) 19 | 20 | 21 | 22 | 23 | {matchType} 24 | 25 | 26 | capturedCount 27 | &subject[capturedOffsets[$i*2]],[capturedOffsets[$i*2+1]-capturedOffsets[$i*2]]sub 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # natvis-collection 2 | MSVS debug visualization 3 | Put all `*.natvis` files to the `%USERPROFILE%\My Documents\Visual Studio 2017\Visualizers\` 4 | 5 | _Note._ After I install MSVS 2019, there is no `Visual Studio 2019\Visualizers\` - I found `Visual Studio 2019` folder in my documents with only one subfolder `Code Snippets` in there. So, I created `Visualizers` subfolder manually and it works. 6 | 7 | _Note._ Due to [visual studio bug](https://developercommunity.visualstudio.com/idea/373046/using-natvis-files-from-subfolder-of-documentsvisu.html) you can't combine different git repositories in the `%USERPROFILE%\My Documents\Visual Studio 2017\Visualizers\`. Please vote for this [bug/feature](https://developercommunity.visualstudio.com/idea/373046/using-natvis-files-from-subfolder-of-documentsvisu.html) if you want to help. 8 | 9 | ### QImage 10 | I tried to extract image information for the "Image Watch" directly from QImage, but "Image Watch" ignores it. 11 | 12 | So, for now, I've found only one way to show an image of type QImage: show QImageData. In the Autos/Locals/Watch window, select the `image` item of the QImage object to display it with "Image Watch" 13 | 14 | ### STL containers 15 | 16 | I added an alternate view of some STL containers. To see the original representation without deleting the `stl containers.natvis`, place `,view(stl)` after your container name in the debug view window, for example `this->curves,view(stl)` -------------------------------------------------------------------------------- /QUrl.natvis: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {*(Qt5Cored.dll!QUrlPrivate*)(d)} 6 | null 7 | 8 | (Qt5Cored.dll!QUrlPrivate*)(d) 9 | 10 | 11 | 12 | 13 | 15 | empty 16 | 17 | 18 | {scheme}://{host}{path}?{query} 19 | 20 | 21 | {scheme}://{host}{path} 22 | 23 | 24 | {scheme}://{host}:{port}{path}?{query} 25 | 26 | 27 | {scheme}://{host}:{port}{path} 28 | 29 | {scheme}://{host}{path} 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /std mutex.natvis: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | *((int*)&_Mtx_storage) 8 | threadId() 9 | lockedCount() 10 | 11 | 12 | 13 | 14 | 15 | mutex unlocked 16 | mutex locked({lockedCount()}) by thread (id={threadId()}) 17 | 18 | (_Mutex_base*)this 19 | 20 | 21 | 22 | 23 | 24 | timed mutex unlocked 25 | recursive timed mutex locked({_My_locked}) by thread (id={_My_owner._Id}) 26 | timed mutex locked({-_My_locked}) 27 | 28 | _My_mutex 29 | (int)_My_locked 30 | _My_owner 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /Endian.natvis: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | {arrayView(),[sizeof($T1)]na} 19 | 20 | 21 | {native()} 22 | 23 | 24 | 25 | {value} {{{(utils::endian)$T2,en} {value,h} {*this,view(str)}}} 26 | 27 | 28 | 29 | {{{(utils::endian)$T2,en} {value,h} {*this,view(str)}}} 30 | 31 | 32 | {*this,view(native)} {{{(utils::endian)$T2,en} {value,h}}} 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /QImage.natvis: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 19 | 20 | 21 | UINT8 22 | 23 | 24 | BGRA 25 | RGB 26 | RGBA 27 | 1 28 | 29 | _this()->width 30 | _this()->height 31 | _this()->data 32 | _this()->bytes_per_line 33 | 34 | 35 | 36 | 37 | {d, view(recursive)} 38 | empty 39 | 40 | (QImageData*)d 41 | (Qt5Guid.dll!QImageData*)d, view(recursive) 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /QMutex.natvis: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | unlocked 7 | locked {{{d_ptr._q_value._My_val}}} 8 | 9 | d_ptr._q_value._My_val 10 | 11 | 12 | 13 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | {(Qt5Cored.dll!QRecursiveMutexPrivate*)atomicValue(),na} 28 | unlocked 29 | locked 30 | 31 | ((Qt5Cored.dll!QRecursiveMutexPrivate*)atomicValue())->count 32 | 33 | 34 | 35 | {mutex} {count} 36 | 37 | 38 | 39 | locked 40 | unlocked 41 | 42 | *(QMutex *)(val & ~quintptr(1u)) 43 | 44 | 45 | 46 | 47 | WriteLock 48 | ReadLock 49 | ReadWriteLock 50 | unlocked 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /QDir.natvis: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {*(Qt5Cored.dll!QDirPrivate*)(d_ptr.d)} 6 | 7 | (Qt5Cored.dll!QDirPrivate*)(d_ptr.d) 8 | 9 | 10 | 11 | 12 | {absoluteDirEntry.m_filePath} 13 | {dirEntry.m_filePath} 14 | 15 | 16 | 17 | {m_filePath} 18 | 19 | 20 | 21 | {*(Qt5Cored.dll!QFileInfoPrivate*)(d_ptr.d)} 22 | 23 | (Qt5Cored.dll!QFileInfoPrivate*)(d_ptr.d) 24 | 25 | 26 | 27 | 28 | {fileEntry.m_filePath} 29 | 30 | 31 | 32 | {*(Qt5Cored.dll!QFilePrivate*)(d_ptr.d)} 33 | 34 | (Qt5Cored.dll!QFilePrivate*)(d_ptr.d) 35 | 36 | 37 | 38 | 39 | {fileName} 40 | 41 | 42 | 43 | 44 | {(char*)(&m_string[m_offset]),[m_length]sub} 45 | 46 | 47 | 48 | 49 | 50 | 51 | {_buffer()->buffers[0].chunk,[_buffer()->bufferSize]}{xmlFile.d_ptr.d->writeBuffer} 52 | 53 | xmlFile 54 | 55 | 56 | 57 | 58 | 59 | {_buffer()->buffers[0].chunk,[_buffer()->bufferSize]}{d_ptr.d->writeBuffer} 60 | 61 | _buffer()->buffers[0].chunk,[_buffer()->bufferSize] 62 | d_ptr.d->writeBuffer 63 | 64 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /JsonCpp.natvis: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | _Mypair._Myval2._Myval2._Mysize 8 | _Mypair._Myval2._Myval2._Myhead->_Parent 9 | _Left 10 | _Right 11 | _Myval,view(jsoncpp) 12 | 13 | 14 | 15 | 16 | 17 | {first.cstr_,s8}: {second} 18 | {second} 19 | 20 | first.cstr_,s8 21 | second 22 | *(second.value_.map_),view(jsoncpp) 23 | 24 | 25 | 26 | 27 | {cstr_,s8} 28 | 29 | 30 | 31 | null 32 | {value_.int_} 33 | {value_.uint_} 34 | {value_.real_} 35 | 36 | {value_.string_ + sizeof(unsigned),s8} 37 | {value_.string_,s8} 38 | 39 | {value_.bool_} 40 | array ({value_.map_->_Mypair._Myval2._Myval2._Mysize}) 41 | object ({value_.map_->_Mypair._Myval2._Myval2._Mysize}) 42 | Unknown Value type! 43 | 44 | value_.string_ + sizeof(unsigned),s8 45 | value_.string_,s8 46 | 47 | 48 | *(value_.map_),view(jsoncpp) 49 | 50 | 51 | -------------------------------------------------------------------------------- /Leptonica.natvis: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | {{{spp}({(d+7)/8}) x {w} x {h}}} 14 | 15 | 33 | 34 | 35 | UINT8 36 | 37 | 38 | 1 39 | RGB 40 | {d/8} 41 | 42 | 43 | {(w * d + 7) / 8} 44 | {w} 45 | 46 | h 47 | wpl * 4 48 | data 49 | 50 | 51 | 52 | 53 | {{{n} blocks}} 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | pix[i] 62 | boxa[i] 63 | i++ 64 | 65 | 66 | 67 | 68 | 69 | -------------------------------------------------------------------------------- /QMatrix.natvis: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 19 | 26 | {ss()} {{ {&m[0][0],[4] nag}, {&m[1][0],[4] nag}, {&m[2][0],[4] nag}, {&m[3][0],[4] nag} }} 27 | Scale | Translation {{ {&m[0][0],[4] nag}, {&m[1][0],[4] nag}, {&m[2][0],[4] nag}, {&m[3][0],[4] nag} }} 28 | {{ ({flagBits}) }} {{ {&m[0][0],[4] nag}, {&m[1][0],[4] nag}, {&m[2][0],[4] nag}, {&m[3][0],[4] nag} }} 29 | 30 | 31 | FLOAT32 32 | FLOAT64 33 | 34 | 1 35 | 4 36 | 4 37 | sizeof(m[0]) 38 | (void*)m 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | {{{{{_m11,g}, {_m12,g}, {_dx,g}}}, {{{_m21,g}, {_m22,g}, {_dy,g}}}}} 50 | 51 | 52 | 53 | FLOAT32 54 | FLOAT64 55 | 56 | 1 57 | 2 58 | 3 59 | sizeof(_m11)*2 60 | (void*)this 61 | 62 | 63 | 64 | 65 | 66 | QOpenGLTexture (textureId = {the()->textureId}, format = {the()->format}) 67 | 68 | the() 69 | 70 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /std containers.natvis: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{empty}} 5 | {_Elems[0],g} 6 | ({_Elems[0],g}, {_Elems[1],g}) 7 | ({_Elems[0],g}, {_Elems[1],g}, {_Elems[2],g}) 8 | ({_Elems[0],g}) .. {{size={$T2-2}}} .. ({_Elems[$T2-1],g}) 9 | 10 | 11 | $T2 12 | _Elems 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | {{empty}} 23 | {pointer()[0],g} 24 | ({pointer()[0],g}), ({pointerLast()[-1],g}) 25 | ({pointer()[0],g}) .. {{size={size()-2}}} .. ({pointerLast()[-1],g}) 26 | 27 | 28 | size() 29 | pointer() 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | {{empty}} 39 | {head()->_Left->_Myval} 40 | ({head()->_Left->_Myval}), ({head()->_Right->_Myval}) 41 | ({head()->_Left->_Myval}) .. {{size={size()-2}}} .. ({head()->_Right->_Myval}) 42 | 43 | 44 | _Mypair._Myval2._Myval2._Mysize 45 | _Mypair._Myval2._Myval2._Myhead->_Parent 46 | _Left 47 | _Right 48 | _Myval 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | {{empty}} 58 | {head()->_Left->_Myval} 59 | ({head()->_Left->_Myval}), ({head()->_Right->_Myval}) 60 | ({head()->_Left->_Myval}) .. {{size={size()-2}}} .. ({head()->_Right->_Myval}) 61 | 62 | 63 | _Mypair._Myval2._Myval2._Mysize 64 | _Mypair._Myval2._Myval2._Myhead->_Parent 65 | _Left 66 | _Right 67 | _Myval,view(MapHelper) 68 | 69 | 70 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /CppRest.natvis: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ({m_uri}) 7 | 8 | 9 | 10 | {"default"} 11 | {"disabled"} 12 | {m_address} 13 | 14 | 15 | 16 | [{_m_impl._Ptr->m_method}] 17 | 18 | ((*((web::http::details::http_msg_base*)(&(*((web::http::details::_http_request*)((_m_impl)._Ptr)))))).m_headers).m_headers 19 | 20 | 21 | 22 | 23 | [{_m_impl._Ptr->m_status_code}, {_m_impl._Ptr->m_reason_phrase}] 24 | 25 | _m_impl._Ptr->m_status_code 26 | _m_impl._Ptr->m_reason_phrase 27 | ((*((web::http::details::http_msg_base*)(&(*((web::http::details::_http_request*)((_m_impl)._Ptr)))))).m_headers).m_headers 28 | 29 | 30 | 31 | 32 | 33 | Number {(*((web::json::details::_Number*)((m_value)._Myptr))).m_intval} 34 | 35 | 36 | Number {(*((web::json::details::_Number*)((m_value)._Myptr))).m_value} 37 | 38 | 39 | Boolean {(*((web::json::details::_Boolean*)(m_value._Myptr))).m_value} 40 | 41 | 42 | String {((((&((*((web::json::details::_String*)(m_value._Myptr))).m_wstring)))))->_Myptr} 43 | 44 | 45 | String {((((&((*((web::json::details::_String*)(m_value._Myptr))).m_string)))))->_Myptr} 46 | 47 | 48 | Object {(*((web::json::details::_Value*)(m_value._Myptr))).m_elements} 49 | 50 | 51 | Array {(*((web::json::details::_Value*)(m_value._Myptr))).m_elements} 52 | 53 | Null 54 | not initialized 55 | 56 | 57 | 58 | (*((web::json::details::_Value*)((m_value)._Myptr))).m_elements._Mylast - (*((web::json::details::_Value*)((m_value)._Myptr))).m_elements._Myfirst 59 | (*((web::json::details::_Value*)((m_value)._Myptr))).m_elements._Myfirst 60 | 61 | 62 | 63 | (*((web::json::details::_Value*)((m_value)._Myptr))).m_elements._Mylast - (*((web::json::details::_Value*)((m_value)._Myptr))).m_elements._Myfirst 64 | (*((web::json::details::_Value*)((m_value)._Myptr))).m_elements._Myfirst 65 | 66 | 67 | 68 | 69 | 70 | -------------------------------------------------------------------------------- /OpenCV.natvis: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | {($T1*)val,[$T2*$T3]nag} 11 | 12 | ($T1*)val,[$T2*$T3]nag 13 | 14 | FLOAT64 15 | FLOAT32 16 | INT32 17 | INT16 18 | UINT16 19 | INT8 20 | UINT8 21 | UINT8 22 | 23 | 1 24 | $T3 25 | $T2 26 | $T3 * sizeof($T1) 27 | (void*)val 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | null 43 | Mat {(cv::Mat*)obj} 44 | UMat {(cv::UMat*)obj} 45 | MatExpr {(cv::MatExpr*)obj} 46 | MATX { (cv::Scalar*)obj,na } 47 | vector {obj} 48 | array {obj} 49 | vector {obj} 50 | None 51 | 52 | 53 | obj 54 | (cv::Mat*)obj 55 | (cv::UMat*)obj 56 | (cv::MatExpr*)obj 57 | (cv::Scalar*)obj,na 58 | 59 | (cv::Mat*)((void**)obj)[2] - (cv::Mat*)((void**)obj)[1] 60 | (cv::Mat*)((void**)obj)[1] 61 | 62 | 63 | sz.height 64 | (cv::Mat*)obj 65 | 66 | 67 | (cv::UMat*)((void**)obj)[2] - (cv::UMat*)((void**)obj)[1] 68 | (cv::UMat*)((void**)obj)[1] 69 | 70 | 71 | 72 | 73 | 74 | {{{($T1*)val,[$T2]nag}}} 75 | 76 | 77 | 78 | {{{val,[4]g}}} 79 | 80 | 81 | 82 | {{x={x,g}, y={y,g}, width={width,g}, height={height,g}}} 83 | 84 | 85 | -------------------------------------------------------------------------------- /PopplerCpp.natvis: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | none 10 | null 11 | dead 12 | objError 13 | objEOF 14 | {booln} 15 | {intg} 16 | {real} 17 | {int64g} 18 | {cString} 19 | 20 | booln 21 | intg 22 | real 23 | string 24 | int64g 25 | array 26 | dict 27 | stream 28 | ref 29 | cString 30 | type 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | {{{bitsPerChannel} x {width} x {height}}} 40 | 41 | 42 | UINT8 43 | 44 | 45 | RGB 46 | {channels} 47 | 48 | width 49 | (width * bitsPerChannel + 7) / 8 50 | height 51 | &data[0] 52 | rowSize 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | {{{mode} x {width} x {height}}} 62 | 63 | 64 | UINT8 65 | 66 | 67 | 1 68 | RGB 69 | BGR 70 | BGRA 71 | BGRA 72 | 8 73 | 1 74 | 75 | width 76 | height 77 | data 78 | rowSize 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | {{({x}, {y}) {w} x {h}}} 88 | 89 | 90 | UINT8 91 | 92 | 1 93 | (w+7)/8 94 | h 95 | data 96 | (w+7)/8 97 | 98 | 99 | 100 | 101 | {{{length,d} points, no Current Point}} 102 | {{{length,d} points, start at {curSubpath}}} 103 | 104 | pts, [length] 105 | flags, [length] b 106 | 107 | 108 | 109 | 110 | 115 | {{{n} subpath, new subpath was just started ({firstX,g}, {firstY,g})}} 116 | {{{n} subpath, first point in new subpath ({firstX,g}, {firstY,g})}} 117 | 118 | 119 | n 120 | (GfxSubpath **)subpaths,g 121 | 122 | 123 | 124 | 125 | 126 | {{{flags,d} [({x0,g}, {y0,g}) ({x1,g}, {y1,g})] [{dxdy,g},{dydx,g}]}} 127 | 128 | 129 | 130 | {{{length,d} segments}} 131 | 132 | 133 | length 134 | segs 135 | 136 | 137 | 138 | 139 | 140 | 145 | {{{n} points, path is closed}} 146 | {{{n} points}} 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | curve[i] 155 | x[i] 156 | y[i] 157 | i++ 158 | 159 | 160 | 161 | 162 | 163 | 164 | StateSave 165 | 166 | 167 | StateRestore 168 | 169 | 170 | TextStart 171 | 172 | 173 | TextStop 174 | 175 | 176 | GlyphDraw clip "{&unicode,sub}" 177 | GlyphDraw "{&unicode,sub}" 178 | 179 | 180 | ({x,g}, {y,g}) first point 181 | ({x,g}, {y,g}) last point 182 | ({x,g}, {y,g}) Bezier control point 183 | ({x,g}, {y,g}) {firstPoint?1:0} {lastPoint?1:0} {pathClosed?1:0} {pathCurve?1:0} 184 | 185 | 186 | ContourDraw [{contourData->points}] 187 | 188 | 189 | ImageDraw 190 | 191 | 192 | SplashBitmapResult 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | {{{format} x {width} x {height}}} 203 | 204 | 205 | UINT8 206 | 207 | 208 | 1 209 | RGB 210 | RGBA 211 | RGBA 212 | {channels} 213 | 214 | rowSize/channels 215 | height 216 | &data[0] 217 | rowSize 218 | 219 | 220 | 221 | 222 | -------------------------------------------------------------------------------- /QJson.natvis: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | empty 6 | 7 | ((Qt5Cored.dll!QJsonDocumentPrivate*)(d._Mypair._Myval2))->value 8 | 9 | 10 | 11 | 12 | 13 | nullptr 14 | false 15 | true 16 | {n} 17 | {*(double*)&n} 18 | {cbor()->byteDataAt(n)->str(),[cbor()->byteDataAt(n)->len]na} 19 | 20 | cbor() 21 | cbor(),view(map) 22 | 23 | 24 | 25 | 26 | 27 | 28 | cbor() 29 | 30 | 31 | 32 | 33 | 34 | empty 35 | 36 | cbor(),view(map) 37 | 38 | 39 | 40 | 41 | nullptr 42 | false 43 | true 44 | {n} 45 | {*(double*)&n} 46 | {container->byteDataAt(n)->str(),[container->byteDataAt(n)->len]na} 47 | 48 | container,na 49 | container,view(map)na 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | byteDataAt(i)->str(),[byteDataAt(i)->len]na 66 | 67 | 68 | tt()->elements.at(i) 69 | 70 | 71 | 72 | 73 | tt()->elements.at(i).container,na 74 | 75 | 76 | tt()->elements.at(i).container,view(map)na 77 | 78 | 79 | 80 | tt()->elements.at(i) 81 | 82 | ++i 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | key = byteDataAt(i)->str() 94 | len = byteDataAt(i)->len 95 | 96 | 97 | 98 | 99 | byteDataAt(i)->str(),[byteDataAt(i)->len]na 100 | 101 | 102 | tt()->elements.at(i) 103 | 104 | 105 | 106 | 107 | tt()->elements.at(i).container,na 108 | 109 | 110 | tt()->elements.at(i).container,view(map)na 111 | 112 | 113 | 114 | tt()->elements.at(i) 115 | 116 | 117 | ++i 118 | 119 | 120 | 121 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | nullptr 133 | false 134 | true 135 | {value} 136 | {*(double*)&value} 137 | 138 | 139 | 140 | 141 | nullptr 142 | 143 | 144 | (Qt5Cored.dll!QJsonPrivate::Object*)(this->o) 145 | (void*)this->o 146 | 147 | 148 | 149 | 150 | 151 | 152 | nullptr 153 | 154 | 155 | 156 | (Qt5Cored.dll!QJsonPrivate::Array*)this->a 157 | (void*)this->a 158 | 159 | 160 | 161 | 162 | 163 | array 164 | object [{index,d}] 165 | 166 | 167 | a->a 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | pk = reinterpret_cast<void*>(base + tabl[index]) 178 | ((Qt5Cored.dll!QJsonPrivate::Entry *)pk)->value 179 | 180 | 181 | 0 182 | 183 | 184 | 185 | 186 | 187 | 188 | nullptr 189 | 190 | b 191 | dbl 192 | stringData 193 | (Qt5Cored.dll!QJsonPrivate::Array *)(base) 194 | (Qt5Cored.dll!QJsonPrivate::Object *)(base) 195 | 196 | 197 | 198 | 199 | 200 | {(val >> $T1) & ((1 << $T2) - 1)} 201 | 202 | (val >> $T1) & ((1 << $T2) - 1) 203 | 204 | 205 | 206 | 207 | {val} 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | entry=((char *)this + of[i]) 226 | stringdata=(entry + sizeof(Qt5Cored.dll!QJsonPrivate::Entry)) 227 | 228 | key=((Qt5Cored.dll!Latin1String::Data*)stringdata)->latin1 229 | ((Qt5Cored.dll!QJsonPrivate::Entry*)entry)->value 230 | 231 | 232 | key=(char*)((Qt5Cored.dll!String::Data*)stringdata)->utf16 233 | ((Qt5Cored.dll!QJsonPrivate::Entry*)entry)->value 234 | 235 | i++ 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | jval = reinterpret_cast<void*>(of + i) 260 | typ = ((Qt5Cored.dll!QJsonPrivate::Value *)jval)->type.val & 7 261 | lat = !!((((Qt5Cored.dll!QJsonPrivate::Value *)jval)->latinOrIntValue.val >> 3) & 1) 262 | val = ((Qt5Cored.dll!QJsonPrivate::Value *)jval)->value.val >> 5 263 | pk = base + val 264 | 265 | nullptr 266 | val != 0 267 | (double)(val) 268 | *(double*)(pk) 269 | *(Qt5Cored.dll!QJsonPrivate::Latin1String::Data*)(pk) 270 | *(Qt5Cored.dll!QJsonPrivate::String::Data*)(pk) 271 | *(Qt5Cored.dll!QJsonPrivate::Array*)(pk) 272 | *(Qt5Cored.dll!QJsonPrivate::Object*)(pk) 273 | 274 | i++ 275 | 276 | 277 | 278 | 279 | 280 | 281 | {latin1, [length.val] s8} 282 | 283 | 284 | 285 | {utf16, [length.val] su} 286 | 287 | 288 | 289 | 290 | value 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | pk += (sizeof(ushort) + i + 3) & ~3 306 | 307 | nullptr 308 | int_value.val != 0 309 | (double)(int_value.val >> 5) 310 | *(double*)(pk) 311 | *(QJsonPrivate::Latin1String::Data*)(pk) 312 | *(QJsonPrivate::String::Data*)(pk) 313 | (Qt5Cored.dll!QJsonPrivate::Array*)(pk) 314 | (Qt5Cored.dll!QJsonPrivate::Object*)(pk) 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | -------------------------------------------------------------------------------- /PSD.natvis: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | {{{width}, {height}, {depth}}} 12 | 13 | 14 | 15 | UINT8 16 | UINT8 17 | INT16 18 | FLOAT32 19 | UINT8 20 | 21 | 1 22 | 23 | {width>2000?2000:((width+7)/8)} 24 | {width>2000?2000:width} 25 | 26 | height>2000?2000:height 27 | &data[0] 28 | (width * depth + 7) / 8 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | {{ pos = ({rect.x}, {rect.y}), size = ({rect.width}, {rect.height}), {depth}, {channels.size()} }} 38 | 39 | 40 | 41 | UINT8 42 | UINT8 43 | UINT16 44 | FLOAT32 45 | UINT8 46 | 47 | (channels.size()<3?3:channels.size()) + (transparency.size()?1:0) 48 | 49 | {rect.width>2000?2000:((rect.width+7)/8)} 50 | {rect.width>2000?2000:rect.width} 51 | 52 | rect.height>2000?2000:rect.height 53 | (rect.width * depth + 7) / 8 54 | (channels.size()<3?3:channels.size()) + (transparency.size()?1:0) 55 | 56 | {(void*)&channels[0][0]}; {(void*)&channels[0][0]}; {(void*)&channels[0][0]}; {(void*)&transparency[0]} 57 | {(void*)&channels[1][0]}; {(void*)&channels[0][0]}; {(void*)&channels[0][0]}; {(void*)&transparency[0]} 58 | {(void*)&channels[2][0]}; {(void*)&channels[1][0]}; {(void*)&channels[0][0]}; {(void*)&transparency[0]} 59 | {(void*)&channels[3][0]}; {(void*)&channels[2][0]}; {(void*)&channels[1][0]}; {(void*)&channels[0][0]} 60 | {(void*)&channels[0][0]} 61 | 62 | 63 | {(void*)&channels[0][0]}; {(void*)&channels[0][0]}; {(void*)&channels[0][0]} 64 | {(void*)&channels[1][0]}; {(void*)&channels[0][0]}; {(void*)&channels[0][0]} 65 | {(void*)&channels[2][0]}; {(void*)&channels[1][0]}; {(void*)&channels[0][0]} 66 | {(void*)&channels[3][0]}; {(void*)&channels[2][0]}; {(void*)&channels[1][0]}; {(void*)&channels[0][0]} 67 | {(void*)&channels[0][0]} 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | {{{width}, {height}, {depth}}} 78 | 79 | 80 | 81 | UINT8 82 | UINT8 83 | UINT16 84 | FLOAT32 85 | UINT8 86 | 87 | channels 88 | 89 | {width>2000?2000:((width+7)/8)} 90 | {width>2000?2000:width} 91 | 92 | height>2000?2000:height 93 | (width * depth + 7) / 8 94 | channels 95 | 96 | {(void*)&image[0][0]} 97 | {(void*)&image[0][0]}; {(void*)&image[1][0]} 98 | {(void*)&image[2][0]}; {(void*)&image[1][0]}; {(void*)&image[0][0]} 99 | {(void*)&image[3][0]}; {(void*)&image[2][0]}; {(void*)&image[1][0]}; {(void*)&image[0][0]} 100 | {(void*)&image[0][0]} 101 | 102 | 103 | 104 | 105 | 106 | 107 | {name} {{blend: {blend->key,view(str)}, opacity: {(int)blend->opacity}}} {rectangle} 108 | 109 | 110 | 111 | 112 | 113 | {{top: {top,view(native)}, left: {left,view(native)}, bottom: {bottom,view(native)}, right: {right,view(native)}}} 114 | 115 | 116 | 117 | 118 | (Obsolete--Photoshop 2.0 only ) Contains five 2-byte values: number of channels, rows, columns, depth, and mode 119 | Macintosh print manager print info record 120 | Macintosh page format information. No longer read by Photoshop. (Obsolete) 121 | (Obsolete--Photoshop 2.0 only ) Indexed color table 122 | ResolutionInfo structure. See Appendix A in Photoshop API Guide.pdf. 123 | Names of the alpha channels as a series of Pascal strings. 124 | (Obsolete) See ID 1077DisplayInfo structure. See Appendix A in Photoshop API Guide.pdf. 125 | The caption as a Pascal string. 126 | Border information. Contains a fixed number (2 bytes real, 2 bytes fraction) for the border width, and 2 bytes for border units (1 = inches, 2 = cm, 3 = points, 4 = picas, 5 = columns). 127 | Background color. See See Color structure. 128 | Print flags. A series of one-byte boolean values (see Page Setup dialog): labels, crop marks, color bars, registration marks, negative, flip, interpolate, caption, print flags. 129 | Grayscale and multichannel halftoning information 130 | Color halftoning information 131 | Duotone halftoning information 132 | Grayscale and multichannel transfer function 133 | Color transfer functions 134 | Duotone transfer functions 135 | Duotone image information 136 | Two bytes for the effective black and white values for the dot range 137 | (Obsolete) 138 | EPS options 139 | Quick Mask information. 2 bytes containing Quick Mask channel ID; 1- byte boolean indicating whether the mask was initially empty. 140 | (Obsolete) 141 | Layer state information. 2 bytes containing the index of target layer (0 = bottom layer). 142 | Working path (not saved). See See Path resource format. 143 | Layers group information. 2 bytes per layer containing a group ID for the dragging groups. Layers in a group have the same group ID. 144 | (Obsolete) 145 | IPTC-NAA record. Contains the File Info... information. See the documentation in the IPTC folder of the Documentation folder. 146 | Image mode for raw format files 147 | JPEG quality. Private. 148 | (Photoshop 4.0) Grid and guides information. See See Grid and guides resource format. 149 | (Photoshop 4.0) Thumbnail resource for Photoshop 4.0 only. See See Thumbnail resource format. 150 | (Photoshop 4.0) Copyright flag. Boolean indicating whether image is copyrighted. Can be set via Property suite or by user in File Info... 151 | (Photoshop 4.0) URL. Handle of a text string with uniform resource locator. Can be set via Property suite or by user in File Info... 152 | (Photoshop 5.0) Thumbnail resource (supersedes resource 1033). See See Thumbnail resource format. 153 | (Photoshop 5.0) Global Angle. 4 bytes that contain an integer between 0 and 359, which is the global lighting angle for effects layer. If not present, assumed to be 30. 154 | (Obsolete) See ID 1073 below. (Photoshop 5.0) Color samplers resource. See See Color samplers resource format. 155 | (Photoshop 5.0) ICC Profile. The raw bytes of an ICC (International Color Consortium) format profile. See ICC1v42_2006-05.pdf in the Documentation folder and icProfileHeader.h in Sample Code\Common\Includes . 156 | (Photoshop 5.0) Watermark. One byte. 157 | (Photoshop 5.0) ICC Untagged Profile. 1 byte that disables any assumed profile handling when opening the file. 1 = intentionally untagged. 158 | (Photoshop 5.0) Effects visible. 1-byte global flag to show/hide all the effects layer. Only present when they are hidden. 159 | (Photoshop 5.0) Spot Halftone. 4 bytes for version, 4 bytes for length, and the variable length data. 160 | (Photoshop 5.0) Document-specific IDs seed number. 4 bytes: Base value, starting at which layer IDs will be generated (or a greater value if existing IDs already exceed it). Its purpose is to avoid the case where we add layers, flatten, save, open, and then add more layers that end up with the same IDs as the first set. 161 | (Photoshop 5.0) Unicode Alpha Names. Unicode string 162 | (Photoshop 6.0) Indexed Color Table Count. 2 bytes for the number of colors in table that are actually defined 163 | (Photoshop 6.0) Transparency Index. 2 bytes for the index of transparent color, if any. 164 | (Photoshop 6.0) Global Altitude. 4 byte entry for altitude 165 | (Photoshop 6.0) Slices. See See Slices resource format. 166 | (Photoshop 6.0) Workflow URL. Unicode string 167 | (Photoshop 6.0) Jump To XPEP. 2 bytes major version, 2 bytes minor version, 4 bytes count. Following is repeated for count: 4 bytes block size, 4 bytes key, if key = 'jtDd' , then next is a Boolean for the dirty flag; otherwise it's a 4 byte entry for the mod date. 168 | (Photoshop 6.0) Alpha Identifiers. 4 bytes of length, followed by 4 bytes each for every alpha identifier. 169 | (Photoshop 6.0) URL List. 4 byte count of URLs, followed by 4 byte long, 4 byte ID, and Unicode string for each count. 170 | (Photoshop 6.0) Version Info. 4 bytes version, 1 byte hasRealMergedData , Unicode string: writer name, Unicode string: reader name, 4 bytes file version. 171 | (Photoshop 7.0) EXIF data 1. See http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf 172 | (Photoshop 7.0) EXIF data 3. See http://www.kodak.com/global/plugins/acrobat/en/service/digCam/exifStandard2.pdf 173 | (Photoshop 7.0) XMP metadata. File info as XML description. See http://www.adobe.com/devnet/xmp/ 174 | (Photoshop 7.0) Caption digest. 16 bytes: RSA Data Security, MD5 message-digest algorithm 175 | (Photoshop 7.0) Print scale. 2 bytes style (0 = centered, 1 = size to fit, 2 = user defined). 4 bytes x location (floating point). 4 bytes y location (floating point). 4 bytes scale (floating point) 176 | (Photoshop CS) Pixel Aspect Ratio. 4 bytes (version = 1 or 2), 8 bytes double, x / y of a pixel. Version 2, attempting to correct values for NTSC and PAL, previously off by a factor of approx. 5%. 177 | (Photoshop CS) Layer Comps. 4 bytes (descriptor version = 16), Descriptor (see See Descriptor structure) 178 | (Photoshop CS) Alternate Duotone Colors. 2 bytes (version = 1), 2 bytes count, following is repeated for each count: [ Color: 2 bytes for space followed by 4 * 2 byte color component ], following this is another 2 byte count, usually 256, followed by Lab colors one byte each for L, a, b. This resource is not read or used by Photoshop. 179 | (Photoshop CS)Alternate Spot Colors. 2 bytes (version = 1), 2 bytes channel count, following is repeated for each count: 4 bytes channel ID, Color: 2 bytes for space followed by 4 * 2 byte color component. This resource is not read or used by Photoshop. 180 | (Photoshop CS2) Layer Selection ID(s). 2 bytes count, following is repeated for each count: 4 bytes layer ID 181 | (Photoshop CS2) HDR Toning information 182 | (Photoshop CS2) Print info 183 | (Photoshop CS2) Layer Group(s) Enabled ID. 1 byte for each layer in the document, repeated by length of the resource. NOTE: Layer groups have start and end markers 184 | (Photoshop CS3) Color samplers resource. Also see ID 1038 for old format. See See Color samplers resource format. 185 | (Photoshop CS3) Measurement Scale. 4 bytes (descriptor version = 16), Descriptor (see See Descriptor structure) 186 | (Photoshop CS3) Timeline Information. 4 bytes (descriptor version = 16), Descriptor (see See Descriptor structure) 187 | (Photoshop CS3) Sheet Disclosure. 4 bytes (descriptor version = 16), Descriptor (see See Descriptor structure) 188 | (Photoshop CS3) DisplayInfo structure to support floating point clors. Also see ID 1007. See Appendix A in Photoshop API Guide.pdf . 189 | (Photoshop CS3) Onion Skins. 4 bytes (descriptor version = 16), Descriptor (see See Descriptor structure) 190 | (Photoshop CS4) Count Information. 4 bytes (descriptor version = 16), Descriptor (see See Descriptor structure) Information about the count in the document. See the Count Tool. 191 | (Photoshop CS5) Print Information. 4 bytes (descriptor version = 16), Descriptor (see See Descriptor structure) Information about the current print settings in the document. The color management options. 192 | (Photoshop CS5) Print Style. 4 bytes (descriptor version = 16), Descriptor (see See Descriptor structure) Information about the current print style in the document. The printing marks, labels, ornaments, etc. 193 | (Photoshop CS5) Macintosh NSPrintInfo. Variable OS specific info for Macintosh. NSPrintInfo. It is recommened that you do not interpret or use this data. 194 | (Photoshop CS5) Windows DEVMODE. Variable OS specific info for Windows. DEVMODE. It is recommened that you do not interpret or use this data. 195 | (Photoshop CS6) Auto Save File Path. Unicode string. It is recommened that you do not interpret or use this data. 196 | (Photoshop CS6) Auto Save Format. Unicode string. It is recommened that you do not interpret or use this data. 197 | (Photoshop CC) Path Selection State. 4 bytes (descriptor version = 16), Descriptor (see See Descriptor structure) Information about the current path selection state. 198 | 199 | Path Information (saved paths). See See Path resource format." 200 | 201 | Name of clipping path. See See Path resource format. 202 | (Photoshop CC) Origin Path Info. 4 bytes (descriptor version = 16), Descriptor (see See Descriptor structure) Information about the origin path data. 203 | 204 | Plug-In resource(s). Resources added by a plug-in. See the plug-in API found in the SDK documentation 205 | 206 | Image Ready variables. XML representation of variables definition 207 | Image Ready data sets 208 | Image Ready default selected state 209 | Image Ready 7 rollover expanded state 210 | Image Ready rollover expanded state 211 | Image Ready save layer settings 212 | Image Ready version 213 | (Photoshop CS3) Lightroom workflow, if present the document is in the middle of a Lightroom workflow. 214 | Print flags information. 2 bytes version ( = 1), 1 byte center crop marks, 1 byte ( = 0), 4 bytes bleed width value, 2 bytes bleed width scale. 215 | {first.native()} 216 | 217 | 218 | 219 | Layer Info 220 | Some metadata 221 | 222 | Solid Color 223 | Gradient 224 | Pattern 225 | Brightness/Contrast 226 | Levels 227 | Curves 228 | Exposure 229 | Vibrance 230 | Old Hue/saturation, Photoshop 4.0 231 | New Hue/saturation, Photoshop 5.0 232 | Color Balance 233 | Black and White 234 | Photo Filter 235 | Channel Mixer 236 | Color Lookup 237 | Invert 238 | Posterize 239 | Threshold 240 | Gradient Map 241 | Selective color 242 | 243 | 257 | Effects Layer (Photoshop 5.0) 258 | Type Tool Info (Photoshop 5.0 and 5.5 only) Has been superseded in Photoshop 6.0 and beyond by a different structure with the key 'TySh' (see See Type tool object setting (Photoshop 6.0) See Type tool object setting ). 259 | Unicode layer name (Photoshop 5.0) 260 | Layer ID (Photoshop 5.0) 261 | Object-based effects layer info (Photoshop 6.0) 262 | Patterns (Photoshop 6.0 and CS (8.0)) 263 | Annotations (Photoshop 6.0) 264 | Blend clipping elements (Photoshop 6.0) 265 | Blend interior elements (Photoshop 6.0) 266 | Knockout setting (Photoshop 6.0) 267 | Protected setting (Photoshop 6.0) 268 | Sheet color setting (Photoshop 6.0) 269 | Reference point (Photoshop 6.0) 270 | Gradient settings (Photoshop 6.0) 271 | Section divider setting (Photoshop 6.0) 272 | Channel blending restrictions setting (Photoshop 6.0) 273 | Solid color sheet setting (Photoshop 6.0) 274 | Pattern fill setting (Photoshop 6.0) 275 | Gradient fill setting (Photoshop 6.0) 276 | Vector mask setting (Photoshop 6.0). If key is 'vsms' then we are writing for (Photoshop CS6) and the document will have a 'vscg' key 277 | Type tool object setting (Photoshop 6.0) This supersedes the type tool info in Photoshop 5.0 (see See Type tool Info). 278 | Foreign effect ID (Photoshop 6.0) 279 | Layer name source setting (Photoshop 6.0) 280 | Pattern data (Photoshop 6.0) 281 | Metadata setting (Photoshop 6.0) 282 | Layer version (Photoshop 7.0) 283 | Transparency shapes layer (Photoshop 7.0) 284 | Layer mask as global mask (Photoshop 7.0) 285 | Vector mask as global mask (Photoshop 7.0) 286 | Brightness and Contrast 287 | Channel Mixer 288 | Color Lookup (Photoshop CS6) 289 | Placed Layer (replaced by SoLd in Photoshop CS3) 290 | Linked Layer 291 | Photo Filter 292 | Black White (Photoshop CS3) 293 | Content Generator Extra Data (Photoshop CS5) 294 | Text Engine Data (Photoshop CS3) 295 | Vibrance (Photoshop CS3) 296 | Unicode Path Name (Photoshop CS6) 297 | Animation Effects (Photoshop CS6) 298 | Filter Mask (Photoshop CS3) 299 | Placed Layer Data (Photoshop CS3) 300 | Vector Stroke Data (Photoshop CS6) 301 | Vector Stroke Content Data (Photoshop CS6) 302 | Using Aligned Rendering (Photoshop CS6) 303 | Vector Origination Data (Photoshop CC) 304 | Pixel Source Data (Photoshop CC) 305 | Pixel Source Data (Photoshop CC 2015) 306 | Artboard Data (Photoshop CC 2015) 307 | Smart Object Layer Data (Photoshop CC 2015) 308 | Saving Merged Transparency 309 | User Mask 310 | Exposure 311 | Filter Effects 312 | 313 | 314 | -------------------------------------------------------------------------------- /qt5.natvis: -------------------------------------------------------------------------------- 1 | 2 | 41 | 42 | 43 | 44 | 45 | 46 | {{ x = {xp}, y = {yp} }} 47 | 48 | xp 49 | yp 50 | 51 | 52 | 53 | 54 | {{ x = {x1}, y = {y1}, width = {x2 - x1 + 1}, height = {y2 - y1 + 1} }} 55 | 56 | x1 57 | y1 58 | x2 - x1 + 1 59 | y2 - y1 + 1 60 | 61 | 62 | 63 | 64 | {{ x = {xp}, y = {yp}, width = {w}, height = {h} }} 65 | 66 | xp 67 | yp 68 | w 69 | h 70 | 71 | 72 | 73 | 74 | 75 | {{ width = {wd,g}, height = {ht,g} }} 76 | 77 | wd 78 | ht 79 | 80 | 81 | 82 | 83 | 84 | {{ start point = {pt1}, end point = {pt2} }} 85 | 86 | 87 | {pt1} 88 | 89 | pt1 90 | 91 | 92 | 93 | {pt2} 94 | 95 | pt2 96 | 97 | 98 | 99 | 100 | 101 | 102 | {{ size = {d->size} }} 103 | 104 | d->ref.atomic._q_value 105 | 106 | d->size 107 | (QPoint*)((reinterpret_cast<char*>(d)) + d->offset) 108 | 109 | 110 | 111 | 112 | 113 | {{ size = {d->size} }} 114 | 115 | 116 | d->size > 0 117 | && ((((QPointF*)((reinterpret_cast<char*>(d)) + d->offset)[0]).xp 118 | == (((QPointF*)((reinterpret_cast<char*>(d)) + d->offset)[d->size - 1]).xp) 119 | && ((((QPointF*)((reinterpret_cast<char*>(d)) + d->offset)[0]).yp 120 | == (((QPointF*)((reinterpret_cast<char*>(d)) + d->offset)[d->size - 1]).yp) 121 | 122 | d->ref.atomic._q_value 123 | 124 | d->size 125 | (QPointF*)((reinterpret_cast<char*>(d)) + d->offset) 126 | 127 | 128 | 129 | 130 | 131 | {{ x = {xp}, y = {yp} }} 132 | 133 | xp 134 | yp 135 | 136 | 137 | 138 | 139 | {{ x = {xp}, y = {yp}, z = {zp} }} 140 | 141 | xp 142 | yp 143 | zp 144 | 145 | 146 | 147 | 148 | {{ x = {xp}, y = {yp}, z = {zp}, w = {wp} }} 149 | 150 | xp 151 | yp 152 | zp 153 | wp 154 | 155 | 156 | 157 | 158 | 159 | 160 | v[0],g 161 | v[1],g 162 | 163 | 164 | 165 | 166 | 167 | v[0],g 168 | v[1],g 169 | v[2],g 170 | 171 | 172 | 173 | 174 | 175 | v[0],g 176 | v[1],g 177 | v[2],g 178 | v[3],g 179 | 180 | 181 | 182 | 183 | 184 | 185 | {{{{{_m11,g}, {_m12,g}, {_dx,g}}}, {{{_m21,g}, {_m22,g}, {_dy,g}}}}} 186 | 187 | 188 | _m11 189 | _m12 190 | _m21 191 | _m22 192 | _dx 193 | _dy 194 | 195 | 196 | 197 | 198 | 199 | {{ 200 | {{{affine._m11,g}, {affine._m12,g}, {m_13,g}}}, 201 | {{{affine._m21,g}, {affine._m22,g}, {m_23,g}}}, 202 | {{{affine._dx,g}, {affine._dy,g}, {m_33,g}}} 203 | }} 204 | 205 | 206 | {{ {{{affine._m11,g}, {affine._m21,g}, {affine._dx,g}}}, {{{affine._m12,g}, {affine._m22,g}, {affine._dy,g}}}, {{{m_13,g}, {m_23,g}, {m_33,g}}} }} 207 | 208 | 209 | 210 | 211 | 212 | {{ m11 = {m[0][0]}, m12 = {m[1][0]}, m13 = {m[2][0]}, m14 = {m[3][0]}, ... }} 213 | 214 | 215 | m[0][0] 216 | m[1][0] 217 | m[2][0] 218 | m[3][0] 219 | m[0][1] 220 | m[1][1] 221 | m[2][1] 222 | m[3][1] 223 | m[0][2] 224 | m[1][2] 225 | m[2][2] 226 | m[3][2] 227 | m[0][3] 228 | m[1][3] 229 | m[2][3] 230 | m[3][3] 231 | 232 | 233 | 234 | 235 | 236 | {{ horizontal = {static_cast<Policy>(bits.horPolicy)}, vertical = {static_cast<Policy>(bits.verPolicy)}, type = {ControlType(1 << bits.ctype)} }} 237 | 238 | 239 | 240 | QSizePolicy::Policy::{static_cast<Policy>(bits.verPolicy)} 241 | 242 | 243 | QSizePolicy::Policy::{static_cast<Policy>(bits.horPolicy)} 244 | 245 | 246 | QSizePolicy::ControlType::{ControlType(1 << bits.ctype)} 247 | 248 | 249 | 251 | Qt::Vertical (2) 252 | 253 | 255 | Qt::Horizontal (1) 256 | 257 | 258 | static_cast<int>(bits.verStretch) 259 | static_cast<int>(bits.horStretch) 260 | bits.hfw == 1 261 | bits.wfh == 1 262 | 263 | 264 | 265 | 266 | {ucs,c} 267 | ucs,c 268 | 269 | ucs > 0xff ? '\0' : char(ucs),c 270 | ucs,c 271 | 272 | 273 | 274 | 275 | {((unsigned short*)d) + d->offset / 2,[d->size]sub} 276 | ((unsigned short*)d) + d->offset / 2,[d->size]sub 277 | 278 | ((unsigned short*)d) + d->offset / 2,[d->size]sub 279 | d->ref.atomic._q_value 280 | d->size 281 | 282 | d->size 283 | ((unsigned short*)d) + d->offset / 2,c 284 | 285 | 286 | 287 | 288 | 289 | {&(*m_string)[m_position],[m_size]sub} 290 | &(*m_string)[m_position],[m_size]sub 291 | 292 | 293 | 294 | 295 | {data(),sb} 296 | data(),sb 297 | 298 | d->size 299 | d->ref.atomic._q_value 300 | 301 | d->size 302 | data(),c 303 | 304 | 305 | 306 | 307 | 308 | {{ size = {(d.d->size << 3) - *((reinterpret_cast<char*>(d.d)) + d.d->offset)} }} 309 | 310 | d.d->ref.atomic._q_value 311 | 312 | (d.d->size << 3) - *((reinterpret_cast<char*>(d.d)) + d.d->offset) 313 | 314 | (*(reinterpret_cast<const unsigned char*>((reinterpret_cast<char*>(d.d)) + d.d->offset) + 1 315 | + ($i >> 3)) & (1 << ($i & 7))) != 0 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | {{ size = {s} }} 324 | 325 | a 326 | 327 | s 328 | ptr 329 | 330 | 331 | 332 | 333 | 334 | {{ julian day = {jd} }} 335 | 336 | 337 | 338 | 339 | {{ millisecond = {mds} }} 341 | {{ milliseconds = {mds} }} 343 | 344 | mds / 3600000, d 346 | mds / 3600000, d 348 | (mds % 3600000) / 60000, d 350 | (mds % 3600000) / 60000, d 352 | (mds / 1000) % 60, d 354 | (mds / 1000) % 60, d 356 | mds % 1000, d 358 | mds % 1000, d 360 | 361 | 362 | 363 | 364 | {d.pattern} 365 | 366 | 367 | 368 | 369 | ref._q_value 370 | 371 | 372 | 373 | 374 | null 375 | {{s|w={d->strongref._q_value}|{d->weakref._q_value}}}, {*value} 376 | 377 | *value 378 | 379 | 380 | 381 | 387 | 388 | 389 | pointer to explicit shared object of type {"$T1"} 390 | 391 | d 392 | 393 | 394 | 395 | 396 | guarded pointer to subclass of QObject of type {"$T1"} 397 | 398 | wp.d == 0 || wp.d->strongref._q_value == 0 || wp.value == 0 399 | 400 | 401 | 402 | 403 | 404 | null 405 | {{s|w={d->strongref._q_value}|{d->weakref._q_value} {(void*)value}}} 406 | 407 | value 408 | 409 | 410 | 411 | 412 | 413 | null 414 | {*d} 415 | 416 | *d 417 | 418 | 419 | 420 | 426 | 427 | 428 | ({first}, {second}) 429 | 430 | first 431 | second 432 | 433 | 434 | 435 | 436 | 437 | 438 | 439 | 440 | 441 | 442 | {{ size = {d->size} }} 443 | empty 444 | 445 | d->ref.atomic._q_value 446 | 447 | d->size 448 | ($T1*)((char*)d + d->offset) 449 | 450 | 451 | 452 | 453 | 454 | 455 | 456 | *($T1*)v 457 | 458 | 459 | 460 | 461 | 462 | 463 | 464 | 465 | *($T1*)v 466 | 467 | 468 | *($T1*)this 469 | 470 | 471 | 472 | 473 | 474 | 475 | 476 | 477 | 478 | 479 | 480 | empty 481 | {{ size = {d->end - d->begin} }} 482 | 483 | d->ref.atomic._q_value 484 | 485 | length() 486 | *($T1*)(pointer($i)->v) 487 | *($T1*)pointer($i) 488 | 489 | 490 | 491 | 492 | 493 | 494 | 495 | 496 | 497 | 498 | 499 | empty 500 | {{ size = {length()} }} 501 | 502 | d->ref.atomic._q_value 503 | 504 | length() 505 | *($T1*)(pointer($i)->v) 506 | *($T1*)pointer($i) 507 | 508 | 509 | 510 | 511 | 512 | {{ size = {d->end - d->begin} }} 513 | 514 | 515 | *((QList<QString>*)this) 516 | 517 | 518 | 519 | 520 | 521 | {{ size = {d->size} }} 522 | 523 | d->ref.atomic._q_value 524 | 525 | d->size 526 | d->n 527 | n 528 | (*(QLinkedListNode<$T1>*)this).t 529 | 530 | 531 | 532 | 533 | 534 | ({key}, {value}) 535 | 536 | key 537 | value 538 | 539 | 540 | 541 | 542 | 543 | {{ size = {d->size} }} 544 | 545 | d->ref.atomic._q_value 546 | 547 | d->size 548 | d->header.left 549 | left 550 | right 551 | *((QMapNode<$T1,$T2>*)this) 552 | 553 | 554 | 555 | 556 | 557 | (empty) 558 | ({key}, {value}) 559 | 560 | key 561 | value 562 | 563 | 564 | 565 | 566 | 567 | {{ size = {d->size} }} 568 | 569 | d->ref.atomic._q_value 570 | 571 | 572 | 573 | 574 | 575 | i=0 576 | 577 | node = (QHashNode<$T1,$T2>*)(d->buckets[i]) 578 | 579 | *node 580 | j++ 581 | node = node->next 582 | 583 | i++ 584 | 585 | 586 | 587 | 588 | 589 | 590 | (empty) 591 | {key} 592 | 593 | key 594 | 595 | 596 | 597 | 598 | {{ size = {q_hash.d->size} }} 599 | 600 | q_hash 601 | 602 | 603 | 604 | 605 | ({*keyPtr}, {*t}) 606 | 607 | *keyPtr 608 | *t 609 | 610 | 611 | 612 | 613 | {{ size = {hash.d->size} }} 614 | 615 | mx 616 | total 617 | hash.d->ref.atomic._q_value 618 | 619 | hash.d->size 620 | f 621 | n 622 | *((Node*)this) 623 | 624 | 625 | 626 | 627 | 628 | 631 | 632 | 633 | Invalid 634 | {d.data.b} 635 | {d.data.i} 636 | {d.data.u} 637 | {d.data.ll} 638 | {d.data.ull} 639 | double {{{d.data.d,g}}} 640 | float {{{d.data.f,g}}} 641 | {d.data.c} 642 | 643 | {*((QMap<QString,QVariant>*)pointer())} 644 | {*((QList<QVariant>*)pointer())} 645 | {*((QString*)pointer())} 646 | {*((QStringList*)pointer())} 647 | {*((QByteArray*)pointer())} 648 | {*((QBitArray*)pointer())} 649 | {*((QDate*)pointer())} 650 | {*((QTime*)pointer())} 651 | DateTime {*((QDateTime*)pointer())} 652 | Url {*((QUrl*)pointer())} 653 | Locale {*((QLocale*)pointer())} 654 | {*((QRect*)pointer())} 655 | {*((QRectF*)pointer())} 656 | {*((QSize*)pointer())} 657 | {*((QSizeF*)pointer())} 658 | {*((QLine*)pointer())} 659 | {*((QLineF*)pointer())} 660 | {*((QPoint*)pointer())} 661 | {*((QPointF*)pointer())} 662 | RegExp {*((QRegExp*)pointer())} 663 | RegularExpression {*((QRegularExpression*)pointer())} 664 | {*((QHash<QString,QVariant>*)pointer())} 665 | EasingCurve {*((QEasingCurve*)pointer())} 666 | Uuid {*((QUuid*)pointer())} 667 | ModelIndex {*((QModelIndex*)pointer())} 668 | LastCoreType 669 | Font {*((QFont*)pointer())} 670 | Pixmap {*((QPixmap*)pointer())} 671 | Brush {*((QBrush*)pointer())} 672 | Color {*((QColor*)pointer())} 673 | Palette {*((QPalette*)pointer())} 674 | Image {*((QImage*)pointer())} 675 | Polygon {*((QPolygon*)pointer())} 676 | Region {*((QRegion*)pointer())} 677 | Bitmap {*((QBitmap*)pointer())} 678 | Cursor {*((QCursor*)pointer())} 679 | KeySequence {*((QKeySequence*)pointer())} 680 | Pen {*((QPen*)pointer())} 681 | TextLength {*((QTextLength*)pointer())} 682 | TextFormat {*((QTextFormat*)pointer())} 683 | Matrix {*((QMatrix*)pointer())} 684 | Transform {*((QTransform*)pointer())} 685 | Matrix4x4 {*(QMatrix4x4*)pointer()} 686 | Vector2D {*(QVector2D*)pointer()} 687 | Vector3D {*(QVector3D*)pointer()} 688 | Vector4D {*(QVector4D*)pointer()} 689 | Quaternion {*(QQuaternion*)pointer()} 690 | PolygonF {*((QPolygonF*)pointer())} 691 | Icon {*((QIcon*)pointer())} 692 | LastGuiType 693 | SizePolicy {*((QSizePolicy*)pointer())} 694 | UserType 695 | LastType 696 | 697 | 698 | 699 | 700 | 701 | d.data.c 702 | *((QString*)pointer()) 703 | *((QByteArray*)pointer()) 704 | 705 | 706 | 707 | 708 | 709 | 710 | *((QMap<QString,QVariant>*)pointer()) 711 | *((QList<QVariant>*)pointer()) 712 | *((QString*)pointer()) 713 | *((QStringList*)pointer()) 714 | *((QByteArray*)pointer()) 715 | *((QBitArray*)pointer()) 716 | *((QDate*)pointer()) 717 | *((QTime*)pointer()) 718 | *((QRect*)pointer()) 719 | *((QRectF*)pointer()) 720 | *((QSize*)pointer()) 721 | *((QSizeF*)pointer()) 722 | *((QLine*)pointer()) 723 | *((QLineF*)pointer()) 724 | *((QPoint*)pointer()) 725 | *((QPointF*)pointer()) 726 | *((QHash<QString,QVariant>*)pointer()) 727 | 728 | 729 | 730 | 731 | 732 | --------------------------------------------------------------------------------