diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000000000000000000000000000000000000..1ff0c423042b46cb1d617b81efb715defbe8054d --- /dev/null +++ b/.gitattributes @@ -0,0 +1,63 @@ +############################################################################### +# Set default behavior to automatically normalize line endings. +############################################################################### +* text=auto + +############################################################################### +# Set default behavior for command prompt diff. +# +# This is need for earlier builds of msysgit that does not have it on by +# default for csharp files. +# Note: This is only used by command line +############################################################################### +#*.cs diff=csharp + +############################################################################### +# Set the merge driver for project and solution files +# +# Merging from the command prompt will add diff markers to the files if there +# are conflicts (Merging from VS is not affected by the settings below, in VS +# the diff markers are never inserted). Diff markers may cause the following +# file extensions to fail to load in VS. An alternative would be to treat +# these files as binary and thus will always conflict and require user +# intervention with every merge. To do so, just uncomment the entries below +############################################################################### +#*.sln merge=binary +#*.csproj merge=binary +#*.vbproj merge=binary +#*.vcxproj merge=binary +#*.vcproj merge=binary +#*.dbproj merge=binary +#*.fsproj merge=binary +#*.lsproj merge=binary +#*.wixproj merge=binary +#*.modelproj merge=binary +#*.sqlproj merge=binary +#*.wwaproj merge=binary + +############################################################################### +# behavior for image files +# +# image files are treated as binary by default. +############################################################################### +#*.jpg binary +#*.png binary +#*.gif binary + +############################################################################### +# diff behavior for common document formats +# +# Convert binary document formats to text before diffing them. This feature +# is only available from the command line. Turn it on by uncommenting the +# entries below. +############################################################################### +#*.doc diff=astextplain +#*.DOC diff=astextplain +#*.docx diff=astextplain +#*.DOCX diff=astextplain +#*.dot diff=astextplain +#*.DOT diff=astextplain +#*.pdf diff=astextplain +#*.PDF diff=astextplain +#*.rtf diff=astextplain +#*.RTF diff=astextplain diff --git a/.gitignore b/.gitignore index 84bffec74db3273565f4c9b3e9ffcc216cec1611..b90ccd652d67841828533f5123dbc5b85c1f8794 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,13 @@ ehthumbs_vista.db # Dump file *.stackdump +.vs +/Source/GTKSystem.Windows.Forms/bin/ +/Source/GTKSystem.Windows.Forms/obj/ +/Samples/GTKWinFormsApp/bin/ + +/Samples/GTKSystemWinFormsApp11/bin/ + # Folder config file [Dd]esktop.ini @@ -22,3 +29,14 @@ $RECYCLE.BIN/ # Windows shortcuts *.lnk + +/Samples/GTKWinFormsApp/bin/Debug/net8.0/*.* +/Samples/GTKWinFormsApp/obj/Debug/net8.0/*.* +/Samples/GTKWinFormsApp/obj/Debug/net8.0/TempPE/*.* + +/Source/GTKSystem.Windows.Forms/bin/Debug/net6.0/*.* +/Source/GTKSystem.Windows.Forms/obj/Debug/net6.0/ref/*.* +/Source/GTKSystem.Windows.Forms/bin/Debug/*.* +/Source/GTKSystem.Windows.Forms/obj/Debug/ref/*.* +/Source/GTKSystem.Windows.Forms/obj/Debug/net6.0/ref/*.* +/Source/GTKSystem.Windows.Forms/obj/Debug/net6.0/refint/*.* diff --git a/.vs/GTKWinFormsApp/DesignTimeBuild/.dtbcache.v2 b/.vs/GTKWinFormsApp/DesignTimeBuild/.dtbcache.v2 index a84ffc4077d0dafc45ac17efe5f06a334559f9de..d352ad0277bc680762b0ed326e6133ea8015173a 100644 Binary files a/.vs/GTKWinFormsApp/DesignTimeBuild/.dtbcache.v2 and b/.vs/GTKWinFormsApp/DesignTimeBuild/.dtbcache.v2 differ diff --git a/.vs/GTKWinFormsApp/v16/.suo b/.vs/GTKWinFormsApp/v16/.suo index c767096e71360ad08a1b083cc017caac81801176..2dd9c05401c892cbe4d7be210dc19a6da9939d29 100644 Binary files a/.vs/GTKWinFormsApp/v16/.suo and b/.vs/GTKWinFormsApp/v16/.suo differ diff --git a/GTKWinFormsApp.sln b/GTKWinFormsApp.sln index 2743a4a7eec1bb1998e63d43e56f9f8ed7f177a3..b05dba5108dcce235f433e93f78b9f42d93803a5 100644 --- a/GTKWinFormsApp.sln +++ b/GTKWinFormsApp.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.30907.101 +# Visual Studio Version 17 +VisualStudioVersion = 17.8.34330.188 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Source", "Source", "{3BF22CCD-4FE4-42BD-960A-EAD8617880B9}" EndProject @@ -19,6 +19,18 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "readme", "readme", "{7674FD README.md = README.md EndProjectSection EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "解决方案项", "解决方案项", "{56631C54-2CE5-44E4-A931-4788557760B4}" + ProjectSection(SolutionItems) = preProject + licenses\LICENSE.txt = licenses\LICENSE.txt + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "licenses", "licenses", "{FA74C15D-95F5-4B11-A721-308659F09D90}" + ProjectSection(SolutionItems) = preProject + Source\licenses\LICENSE.txt = Source\licenses\LICENSE.txt + EndProjectSection +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GTKSystemWinFormsApp11", "Samples\GTKSystemWinFormsApp11\GTKSystemWinFormsApp11.csproj", "{ED029673-302D-4E58-B33E-1472BD96B19C}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -37,6 +49,10 @@ Global {A963833A-1053-4321-9BCF-3FB7C58F0601}.Debug|Any CPU.Build.0 = Debug|Any CPU {A963833A-1053-4321-9BCF-3FB7C58F0601}.Release|Any CPU.ActiveCfg = Release|Any CPU {A963833A-1053-4321-9BCF-3FB7C58F0601}.Release|Any CPU.Build.0 = Release|Any CPU + {ED029673-302D-4E58-B33E-1472BD96B19C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {ED029673-302D-4E58-B33E-1472BD96B19C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {ED029673-302D-4E58-B33E-1472BD96B19C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {ED029673-302D-4E58-B33E-1472BD96B19C}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -45,6 +61,7 @@ Global {99043664-0431-4398-92A6-55A45736D2F6} = {3BF22CCD-4FE4-42BD-960A-EAD8617880B9} {1154F095-54D8-48FA-A61E-1E4587E2CF6C} = {3BF22CCD-4FE4-42BD-960A-EAD8617880B9} {A963833A-1053-4321-9BCF-3FB7C58F0601} = {F6BAC321-6965-4B7A-8C35-34B3F226C1AE} + {ED029673-302D-4E58-B33E-1472BD96B19C} = {F6BAC321-6965-4B7A-8C35-34B3F226C1AE} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {8B2528BB-EDE2-4992-83A6-3C0C3FDA43DE} diff --git a/LICENSE b/LICENSE index c980691f9aa6b3b6ba87632593d42d8439a788cd..65c5ca88a67c30becee01c5a8816d964b03862f9 100644 --- a/LICENSE +++ b/LICENSE @@ -1,29 +1,165 @@ -BSD 3-Clause License - -Copyright (c) 2023, chenhongjin -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/Samples/GTKWinFormsApp/bin/Debug/netcoreapp3.1/AtkSharp.dll b/Libs/AtkSharp.dll similarity index 100% rename from Samples/GTKWinFormsApp/bin/Debug/netcoreapp3.1/AtkSharp.dll rename to Libs/AtkSharp.dll diff --git a/Samples/GTKWinFormsApp/bin/Debug/netcoreapp3.1/CairoSharp.dll b/Libs/CairoSharp.dll similarity index 100% rename from Samples/GTKWinFormsApp/bin/Debug/netcoreapp3.1/CairoSharp.dll rename to Libs/CairoSharp.dll diff --git a/Samples/GTKWinFormsApp/bin/Debug/netcoreapp3.1/GLibSharp.dll b/Libs/GLibSharp.dll similarity index 100% rename from Samples/GTKWinFormsApp/bin/Debug/netcoreapp3.1/GLibSharp.dll rename to Libs/GLibSharp.dll diff --git a/Libs/GTKSystem.Windows.Forms.0.3.24.1.nupkg b/Libs/GTKSystem.Windows.Forms.0.3.24.1.nupkg deleted file mode 100644 index e22c32c2877909ec5fcfe514656a26d2f182d76a..0000000000000000000000000000000000000000 Binary files a/Libs/GTKSystem.Windows.Forms.0.3.24.1.nupkg and /dev/null differ diff --git a/Libs/GTKSystem.Windows.Forms.1.3.24.6.nupkg b/Libs/GTKSystem.Windows.Forms.1.3.24.6.nupkg new file mode 100644 index 0000000000000000000000000000000000000000..4d9b7220c55cbbc9f1b387e7098d738742e60fb8 Binary files /dev/null and b/Libs/GTKSystem.Windows.Forms.1.3.24.6.nupkg differ diff --git a/Libs/GTKSystem.Windows.Forms.deps.json b/Libs/GTKSystem.Windows.Forms.deps.json index 4b693b1bbd77aa83a892b13ecf884b64b5f866dc..c074023643874e1360df54f560a739291be919c7 100644 --- a/Libs/GTKSystem.Windows.Forms.deps.json +++ b/Libs/GTKSystem.Windows.Forms.deps.json @@ -1,155 +1,189 @@ { "runtimeTarget": { - "name": ".NETCoreApp,Version=v3.1", + "name": ".NETCoreApp,Version=v6.0", "signature": "" }, "compilationOptions": {}, "targets": { - ".NETCoreApp,Version=v3.1": { - "GTKSystem.Windows.Forms/0.3.24.1": { + ".NETCoreApp,Version=v6.0": { + "GTKSystem.Windows.Forms/1.3.24.11": { "dependencies": { - "GtkSharp": "3.24.24.34" + "GtkSharp": "3.24.24.95", + "Microsoft.NET.ILLink.Analyzers": "7.0.100-1.23211.1", + "Microsoft.NET.ILLink.Tasks": "7.0.100-1.23211.1", + "System.Resources.Extensions": "8.0.0" }, "runtime": { "GTKSystem.Windows.Forms.dll": {} } }, - "AtkSharp/3.24.24.34": { + "AtkSharp/3.24.24.95": { "dependencies": { - "GLibSharp": "3.24.24.34" + "GLibSharp": "3.24.24.95" }, "runtime": { - "lib/netstandard2.0/AtkSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" + "lib/net6.0/AtkSharp.dll": { + "assemblyVersion": "3.24.24.95", + "fileVersion": "3.24.24.95" } } }, - "CairoSharp/3.24.24.34": { + "CairoSharp/3.24.24.95": { "runtime": { - "lib/netstandard2.0/CairoSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" + "lib/net6.0/CairoSharp.dll": { + "assemblyVersion": "3.24.24.95", + "fileVersion": "3.24.24.95" } } }, - "GdkSharp/3.24.24.34": { + "GdkSharp/3.24.24.95": { "dependencies": { - "CairoSharp": "3.24.24.34", - "GLibSharp": "3.24.24.34", - "GioSharp": "3.24.24.34", - "PangoSharp": "3.24.24.34" + "CairoSharp": "3.24.24.95", + "GLibSharp": "3.24.24.95", + "GioSharp": "3.24.24.95", + "PangoSharp": "3.24.24.95" }, "runtime": { - "lib/netstandard2.0/GdkSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" + "lib/net6.0/GdkSharp.dll": { + "assemblyVersion": "3.24.24.95", + "fileVersion": "3.24.24.95" } } }, - "GioSharp/3.24.24.34": { + "GioSharp/3.24.24.95": { "dependencies": { - "GLibSharp": "3.24.24.34" + "GLibSharp": "3.24.24.95" }, "runtime": { - "lib/netstandard2.0/GioSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" + "lib/net6.0/GioSharp.dll": { + "assemblyVersion": "3.24.24.95", + "fileVersion": "3.24.24.95" } } }, - "GLibSharp/3.24.24.34": { + "GLibSharp/3.24.24.95": { "runtime": { - "lib/netstandard2.0/GLibSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" + "lib/net6.0/GLibSharp.dll": { + "assemblyVersion": "3.24.24.95", + "fileVersion": "3.24.24.95" } } }, - "GtkSharp/3.24.24.34": { + "GtkSharp/3.24.24.95": { "dependencies": { - "AtkSharp": "3.24.24.34", - "CairoSharp": "3.24.24.34", - "GLibSharp": "3.24.24.34", - "GdkSharp": "3.24.24.34", - "GioSharp": "3.24.24.34", - "PangoSharp": "3.24.24.34" + "AtkSharp": "3.24.24.95", + "CairoSharp": "3.24.24.95", + "GLibSharp": "3.24.24.95", + "GdkSharp": "3.24.24.95", + "GioSharp": "3.24.24.95", + "PangoSharp": "3.24.24.95" }, "runtime": { - "lib/netstandard2.0/GtkSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" + "lib/net6.0/GtkSharp.dll": { + "assemblyVersion": "3.24.24.95", + "fileVersion": "3.24.24.95" } } }, - "PangoSharp/3.24.24.34": { + "Microsoft.NET.ILLink.Analyzers/7.0.100-1.23211.1": {}, + "Microsoft.NET.ILLink.Tasks/7.0.100-1.23211.1": {}, + "PangoSharp/3.24.24.95": { "dependencies": { - "CairoSharp": "3.24.24.34", - "GLibSharp": "3.24.24.34" + "CairoSharp": "3.24.24.95", + "GLibSharp": "3.24.24.95" }, "runtime": { - "lib/netstandard2.0/PangoSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" + "lib/net6.0/PangoSharp.dll": { + "assemblyVersion": "3.24.24.95", + "fileVersion": "3.24.24.95" + } + } + }, + "System.Resources.Extensions/8.0.0": { + "runtime": { + "lib/net6.0/System.Resources.Extensions.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" } } } } }, "libraries": { - "GTKSystem.Windows.Forms/0.3.24.1": { + "GTKSystem.Windows.Forms/1.3.24.11": { "type": "project", "serviceable": false, "sha512": "" }, - "AtkSharp/3.24.24.34": { + "AtkSharp/3.24.24.95": { + "type": "package", + "serviceable": true, + "sha512": "sha512-LnSfsc0y11gfzczZj5bnpwcFkXFZuVTSSd92ML/FcHIM7FU+cAfm1UkAonv5BdwTRhzDbNDE39vihao/k75sUA==", + "path": "atksharp/3.24.24.95", + "hashPath": "atksharp.3.24.24.95.nupkg.sha512" + }, + "CairoSharp/3.24.24.95": { + "type": "package", + "serviceable": true, + "sha512": "sha512-EZ9KT3pwVAol35XbZW0Uwdg2LqhDvPnWdhqIrsedhDx+Omnu56hLzxh8mZGqmQvEwJE8Opbda4w9CqDtXbX6Vw==", + "path": "cairosharp/3.24.24.95", + "hashPath": "cairosharp.3.24.24.95.nupkg.sha512" + }, + "GdkSharp/3.24.24.95": { + "type": "package", + "serviceable": true, + "sha512": "sha512-rABpIGkxr8lOdyhEmrKXzjih3z3932kjqUmm5qaQhWVSvu9YepEk3J1FApgnKCW/EWEzlerzxnJArsyOlgMsZQ==", + "path": "gdksharp/3.24.24.95", + "hashPath": "gdksharp.3.24.24.95.nupkg.sha512" + }, + "GioSharp/3.24.24.95": { "type": "package", "serviceable": true, - "sha512": "sha512-CNfTGhGDxcnow5e/u0THtOJeNWaZNDeeFmzYTMdC1tdUkmAtTFDareTGesLx+Gfj75m3415AKJSC9wQ6VyacYQ==", - "path": "atksharp/3.24.24.34", - "hashPath": "atksharp.3.24.24.34.nupkg.sha512" + "sha512": "sha512-avYEDFlYgbogb+Y7ZhIXQpyJfL83bnPpBKY642YEW9PQ+pRK3qf2k0opvd5oHccXfByj6kAQjmRUSIS0pj19Fg==", + "path": "giosharp/3.24.24.95", + "hashPath": "giosharp.3.24.24.95.nupkg.sha512" }, - "CairoSharp/3.24.24.34": { + "GLibSharp/3.24.24.95": { "type": "package", "serviceable": true, - "sha512": "sha512-hr75uYPGFlmB3RvpL3/6ZJtb+UiKsrpkyjb5VGI+8y1/lkY405FMBhPZKlxFqoEH0iIZ9gAMPBqKzT1lSVaDqA==", - "path": "cairosharp/3.24.24.34", - "hashPath": "cairosharp.3.24.24.34.nupkg.sha512" + "sha512": "sha512-1viZRMVjddf2HUCW7WDXT47rHssteHkAOimXQ2/pI8oGrPGNFuuw5MbX8BOIy73hCWVqo7JEMONv3z32OrCoCQ==", + "path": "glibsharp/3.24.24.95", + "hashPath": "glibsharp.3.24.24.95.nupkg.sha512" }, - "GdkSharp/3.24.24.34": { + "GtkSharp/3.24.24.95": { "type": "package", "serviceable": true, - "sha512": "sha512-COORB6Qd4yu6HWRbzVZXrkzr1T96Gy0wO7ckJfpYxWLbDUDnZVd/g2PICp9T05a0ZvLvkE++vsSjAWobwQeS0g==", - "path": "gdksharp/3.24.24.34", - "hashPath": "gdksharp.3.24.24.34.nupkg.sha512" + "sha512": "sha512-RRUY45hAa5gsMcadvVjcLUzMjVtmuHSYTcIwM6j8LNgKhzFFHk69qM1D5ULfGxaWmVjicqNWiFtOtk8WsvPqaQ==", + "path": "gtksharp/3.24.24.95", + "hashPath": "gtksharp.3.24.24.95.nupkg.sha512" }, - "GioSharp/3.24.24.34": { + "Microsoft.NET.ILLink.Analyzers/7.0.100-1.23211.1": { "type": "package", "serviceable": true, - "sha512": "sha512-Qyz8bhKjLMTWoxXu6cdNEtTLNUuw7Y1sPdXlyTfyWMP/JmsUE9smCsCC0kyQNSFW17flxdSoeDpG8l6zzJF0vQ==", - "path": "giosharp/3.24.24.34", - "hashPath": "giosharp.3.24.24.34.nupkg.sha512" + "sha512": "sha512-0GvbEgDGcUQA9KuWcQU1WwYHXt1tBzNr1Nls/M57rM7NA/AndFwCaCEoJpJkmxRY7xLlPDBnmGp8h5+FNqUngg==", + "path": "microsoft.net.illink.analyzers/7.0.100-1.23211.1", + "hashPath": "microsoft.net.illink.analyzers.7.0.100-1.23211.1.nupkg.sha512" }, - "GLibSharp/3.24.24.34": { + "Microsoft.NET.ILLink.Tasks/7.0.100-1.23211.1": { "type": "package", "serviceable": true, - "sha512": "sha512-PSA7YJbxpnpeltjekoUk93FI9HWUMc2NtkxNIaWzHz7BavkkZDFmx8EKTKtuBrqbZZmEhlv5472NwGdiycSfxw==", - "path": "glibsharp/3.24.24.34", - "hashPath": "glibsharp.3.24.24.34.nupkg.sha512" + "sha512": "sha512-tvG8XZYLjT0o3WicCyKBZysVWo1jC9HdCFmNRmddx3WbAz0UCsd0qKZqpiEo99VLA8Re+FzWK51OcRldQPbt2Q==", + "path": "microsoft.net.illink.tasks/7.0.100-1.23211.1", + "hashPath": "microsoft.net.illink.tasks.7.0.100-1.23211.1.nupkg.sha512" }, - "GtkSharp/3.24.24.34": { + "PangoSharp/3.24.24.95": { "type": "package", "serviceable": true, - "sha512": "sha512-CVAz7ACMxW9xPhlrrg4Xe+v3jUnpN+emQl78aaXHtoiE7pf0tR8mP8mw0/eBHxMObrmg6DsLxbEFqE/7Yo4Uow==", - "path": "gtksharp/3.24.24.34", - "hashPath": "gtksharp.3.24.24.34.nupkg.sha512" + "sha512": "sha512-H7JeyEvLsgvsbamGpRgoNtdvzPiGwwsUuoeTobN1C/JRjw1J8Snw0yf2WBr7CKx5GLwbrwpQYOb7N/HD17ME8A==", + "path": "pangosharp/3.24.24.95", + "hashPath": "pangosharp.3.24.24.95.nupkg.sha512" }, - "PangoSharp/3.24.24.34": { + "System.Resources.Extensions/8.0.0": { "type": "package", "serviceable": true, - "sha512": "sha512-QpBEIiE29sxkewdW7l7rVRJR1p3SGoPauHrjm0A3yxpYxj+St5x45weHI8jquMJAZBUdVQuXYHSZDW1lQeJ+PQ==", - "path": "pangosharp/3.24.24.34", - "hashPath": "pangosharp.3.24.24.34.nupkg.sha512" + "sha512": "sha512-psnQ6GRQOvt+evda5C4nD5EuV49mz2Tv0DD2JDVDEbE/TKoMukxSkGJcsBJ0pajpPuFRr67syFYlkJ4Wj6A5Zw==", + "path": "system.resources.extensions/8.0.0", + "hashPath": "system.resources.extensions.8.0.0.nupkg.sha512" } } } \ No newline at end of file diff --git a/Libs/GTKSystem.Windows.Forms.dll b/Libs/GTKSystem.Windows.Forms.dll index cc27a9d7f5df2d19a8c7a7df13ea49abb3c2bdae..21d970e6dd0283b79fd779ede9bdab1ec1b595f8 100644 Binary files a/Libs/GTKSystem.Windows.Forms.dll and b/Libs/GTKSystem.Windows.Forms.dll differ diff --git a/Libs/GTKSystem.Windows.Forms.pdb b/Libs/GTKSystem.Windows.Forms.pdb index e256c98466be8b309486b8876c224f2ee5f7d6f6..94ff040a015a53ac06815a9c26aeb9409456f26b 100644 Binary files a/Libs/GTKSystem.Windows.Forms.pdb and b/Libs/GTKSystem.Windows.Forms.pdb differ diff --git a/Samples/GTKWinFormsApp/bin/Debug/netcoreapp3.1/GdkSharp.dll b/Libs/GdkSharp.dll similarity index 100% rename from Samples/GTKWinFormsApp/bin/Debug/netcoreapp3.1/GdkSharp.dll rename to Libs/GdkSharp.dll diff --git a/Samples/GTKWinFormsApp/bin/Debug/netcoreapp3.1/GioSharp.dll b/Libs/GioSharp.dll similarity index 100% rename from Samples/GTKWinFormsApp/bin/Debug/netcoreapp3.1/GioSharp.dll rename to Libs/GioSharp.dll diff --git a/Samples/GTKWinFormsApp/bin/Debug/netcoreapp3.1/GtkSharp.dll b/Libs/GtkSharp.dll similarity index 100% rename from Samples/GTKWinFormsApp/bin/Debug/netcoreapp3.1/GtkSharp.dll rename to Libs/GtkSharp.dll diff --git a/Samples/GTKWinFormsApp/bin/Debug/netcoreapp3.1/PangoSharp.dll b/Libs/PangoSharp.dll similarity index 100% rename from Samples/GTKWinFormsApp/bin/Debug/netcoreapp3.1/PangoSharp.dll rename to Libs/PangoSharp.dll diff --git a/Libs/System.Resources.Extensions.deps.json b/Libs/System.Resources.Extensions.deps.json index 46f42fed53d7456b1ba24c542cfd0a80eab3557b..c5929874ee4b34b65a656e03e970ed02817cf470 100644 --- a/Libs/System.Resources.Extensions.deps.json +++ b/Libs/System.Resources.Extensions.deps.json @@ -1,11 +1,11 @@ { "runtimeTarget": { - "name": ".NETCoreApp,Version=v3.1", + "name": ".NETCoreApp,Version=v6.0", "signature": "" }, "compilationOptions": {}, "targets": { - ".NETCoreApp,Version=v3.1": { + ".NETCoreApp,Version=v6.0": { "System.Resources.Extensions/1.0.0": { "runtime": { "System.Resources.Extensions.dll": {} diff --git a/Libs/System.Resources.Extensions.dll b/Libs/System.Resources.Extensions.dll index b299d9d0ff10ca1c11a4e565a9d8594f58fa941c..7f721dbdc4c0299cf7487a496cd885d3eab8a237 100644 Binary files a/Libs/System.Resources.Extensions.dll and b/Libs/System.Resources.Extensions.dll differ diff --git a/Libs/System.Resources.Extensions.pdb b/Libs/System.Resources.Extensions.pdb index c41fe38fe5e278a51f6138b191f791ccf3d0acf6..2f69878a49964b74c3a129ccf7c4380fd5a656b6 100644 Binary files a/Libs/System.Resources.Extensions.pdb and b/Libs/System.Resources.Extensions.pdb differ diff --git a/README.md b/README.md index 223c6d9ba744178b3614306a5eef7cb1746e5b58..912e4b8a77754c91380896db794d9c9240c660f5 100644 --- a/README.md +++ b/README.md @@ -2,21 +2,53 @@ #### 介绍 **Visual Studio原生开发,无需学习,一次编译,跨平台运行**. -这是基于GTK3.24.24框架组件开发的跨平台(windows、linux、macos)C#桌面应用程序表单界面组件,该组件的核心优势是使用C#的原生表单控件和属性方法,C#原生开发即可,无需学习。 +C#桌面应用程序跨平台(windows、linux、macos)界面开发组件,基于GTK组件开发,该组件的核心优势是使用C#的原生winform表单控件窗体设计器,相同的属性方法,C#原生开发即可,无需学习。一次编译,跨平台运行。 +便于开发跨平台winform软件,便于将C#升级为跨平台软件。 作者博客请看 [https://www.cnblogs.com/easywebfactory/p/17803567.html](https://www.cnblogs.com/easywebfactory/p/17803567.html) +目前功能持续更新中,将优先完善常用功能。 + #### 软件架构 -使用GTK3.24.24作为GDI,重写C#的System.Windows.Forms组件,在应用时,兼容原生C#程序组件。 +使用GTK3.24.24.95作为表单UI重写C#的System.Windows.Forms组件,在应用时,兼容原生C#程序组件。 #### 安装教程 +1. 项目工程框架选择“window应用程序”改配置UseWindowsForms为false或“控制台应用程序”,框架.netcore3.1或.net6及以上版本 +2. NulGet安装GtkSharp(3.24.24.95)、GTKSystem.Windows.Forms、GTKSystem.Windows.FormsDesigner +3. 检查form表单是否有使用图像资源,如使用需新建System.Resources.ResourceManager和System.ComponentModel.ComponentResourceManager,具体请看下面内容。 +4. 按默认配置编译发布测试运行 +5. linux和macos上执行命令:dotnet demo_app.dll +6. 编译工程,执行本项目的开发插件菜单“修复窗体设计器”,或者手动在obj目录下创建.designer.runtimeconfig.json,请看下面第5点。 + +注意:安装GtkSharp后,编译你的工程项目时,会自动下载$(LOCALAPPDATA)\Gtk\3.24.24\gtk.zip配置Gtk环境,目前国内网络限制,可能会出现无法下载的错误,可以尝试安装fastgithub软件解决,或者其它vpn软件。 +如果无法自动下载,也可以自行解决网络限制后下载https://github.com/GtkSharp/Dependencies/raw/master/gtk-3.24.24.zip,把文件解压后放到$(LOCALAPPDATA)\Gtk\3.24.24\gtk.zip目录即可。 + +ps:$(LOCALAPPDATA)为电脑的AppData\Local文件夹,如:C:\Users\chj\AppData\Local\Gtk\3.24.24 +. +linux安装gtk环境: +``` + sudo apt install libgtk-3-dev + 或 + sudo apt-get install libgtk3* +``` +linux安装dotnet环境: +``` + 安装方法可以查看微软官网教程:https://learn.microsoft.com/zh-cn/dotnet/core/install/linux-scripted-manual +``` +#### VisualStudio插件安装 + +工具一、从NuGet上安装GTKSystem.Windows.FormsDesigner类库,此类库可以在编译工程时修正窗体设计器。 -首先必须是.net core3.1及以上版本的项目工程。 -1. 把项目工程改为“控制台应用程序”或者配置UseWindowsForms为false -2. NulGet安装GtkSharp(3.24.24.34) -3. 引用Libs目录下的GTKSystem.Windows.Forms.dll和System.Resources.Extensions.dll -4. 编译发布测试运行 +工具二、下载本插件工具,关闭visual studio,直接双击GTKWinformVSIXProject.vsix文件安装(建议用工具一即可) + +插件会安装两个功能,都是在右键菜单和工具菜单上添加: + +1、新建项的Form窗体模板 + +2、菜单增加设置/修复窗体设计器 + +![输入图片说明](pic/vs_vsix.jpeg) #### 使用说明 @@ -33,37 +65,132 @@ GTKSystem.ComponentModel.ComponentResourceManager实现了项目资源文件和 如果项目里没有使用资源图像文件,可以不用新建此文件。 3、GTKWinFormsApp.csproj
-配置UseWindowsForms为false,或者使用控制台应用程序 +配置UseWindowsForms为false,目标OS设置为“(空)”,或者使用控制台应用程序(在控制台框架下会显示控制台窗口,不建议这种方式) ``` -false + + + WinExe + net8.0 + false ``` 4、引用GTKSystem.Windows.Forms、System.Resources.Extensions
-System.Resources.Extensions是空程序dll,VS加载Form界面时验证需要此dll. +GTKSystem.Windows.Forms是必须引用
+System.Resources.Extensions是空程序dll,不是必须引用,只有VS在窗体设计器出现相关异常提示时使用 -5、GTKWinFormsApp\obj\Debug\netcoreapp3.1\GTKWinFormsApp.designer.runtimeconfig.json -GTKWinFormsApp\obj\Release\netcoreapp3.1\GTKWinFormsApp.designer.runtimeconfig.json +5、GTKWinFormsApp\obj\Debug\net8.0\GTKWinFormsApp.designer.runtimeconfig.json +GTKWinFormsApp\obj\Debug\net8.0\GTKWinFormsApp.runtimeconfig.json 将name设置为Microsoft.WindowsDesktop.App, **用于VS支持可视化窗体设计器,重新加载工程或重启VS** - +如以下配置: +GTKWinFormsApp.designer.runtimeconfig.json ``` - "runtimeOptions": { - "framework": { - "name": "Microsoft.WindowsDesktop.App" +{ + "runtimeOptions": { + "tfm": "net8.0", + "framework": { + "name":"Microsoft.WindowsDesktop.App", + "version": "8.0.0" }, + "additionalProbingPaths": [ + "C:\\Users\\chj\\.dotnet\\store\\|arch|\\|tfm|", + "C:\\Users\\chj\\.nuget\\packages", + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages", + "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder" + ], + "configProperties": { + "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false, + "Microsoft.NETCore.DotNetHostPolicy.SetAppPaths": true + } + } +} +``` +GTKWinFormsApp.runtimeconfig.json +``` +{ + "runtimeOptions": { + "tfm": "net8.0", + "framework": { + "name": "Microsoft.WindowsDesktop.App", + "version": "8.0.0" + }, + "configProperties": { + "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false + } + } +} ``` + #### demo效果 -![输入图片说明](pic/2023-11-06%20072903.jpg) -#### mac运行效果 -![输入图片说明](pic/mac.png) -#### 颜色主题 -![输入图片说明](pic/theme.jpg) +![输入图片说明](/pic/run.png) + +#### 工具栏菜单 +![输入图片说明](/pic/toolstrip.jpeg) + +#### 图文窗口 +![输入图片说明](/pic/listview.png) -#### 交流 +#### 交流/合作/商务/赞助 QQ群:236066073 +邮箱:438865652@qq.com
+![交流qq群](/pic/qqchat.png) -#### 参与贡献 +#### 支持作者,获取技术服务 + ![支持作者](/pic/love_reward_qrcode_.png) + +#### 添加作者微信,更多服务帮助 + ![联系作者](/pic/contact_weixin.png) + +#### 常见问题 +1、为什么Form窗体设计器打不开? +答:检查runtimeconfig的确保配置正确,NuGet安装GTKSystem.Windows.FormsDesigner,然后按以下流程操作: + 1、编译一下 + 3、打开Form窗体 + (如果不能打开窗体,执行下面流程) + 4、关闭Form窗体,编译一下 + 5、重启vs + 6、打开Form窗体设计器 -1. https://gitee.com/easywebfactory/ +#### 参与贡献 + +1. https://gitee.com/easywebfactory +2. https://github.com/easywebfactory + +#### 更新日志 + ## 2024/5/11 + 1. 修正form启动时窗口大小异常 + 2. button增加image属性图片 + 3. 修正控件背景位置 + ## 2024/5/6 + 1. 完善treeview、listview功能 + 2. 新增开发工具GTKSystem.Windows.FormsDesigner.dll(NuGet安装),编译时自动检查并修正窗体设计器配置 + 3. 修正datagridview的取数错误 + ## 2024/5/1 + 1. 重大更新!重构控件的结构程序,优化了很多控件功能和性能,修正一些错误 + 2. 优化了绘图、控件背景功能程序,绘制背景图不再覆盖子控件 + 3. 特别优化Form界面程序和性能 + + ## 2024/4/20 + 1. 修正graphic绘图的位置 + 2. 实现graphicpath绘图、渐变色 + 3. 实现控件的BeginInvoke和EndInvoke方法 + 4. 修改DataGridView、ListBox的数据加载程序,修正不能在窗口启动加载数据的问题 + ## 2024/3/27 + 1. 改正usercontrol在窗体设计器上打开出现异常的问题(还无法显示控件) + 2. 实现graphics上的椭圆绘画 + ## 2024/3/19 + 1. panel内容溢出显示滚动条,窗口缩放程序优化 + ## 2024/3/14 + 1. 修正TreeView数据程序加载 + ## 2024/3/6 + 1. 修正一些窗口配置问题、binding + ## 2024/3/2 + 1. 修正label文本的字体大小问题、增加对齐属性 + 2. 实现imagelist兼容使用窗体设计器 + ## 2024/2/29 + 1. grahpics增加曲线和多边形绘图,优化文字绘图程序 + 2. 修正一些隐性异常 + ## 2024/2/23 + 1. 实现和修正DataGridView单元控件数据编辑、取数功能 diff --git a/Samples/GTKSystemWinFormsApp11/Form1.Designer.cs b/Samples/GTKSystemWinFormsApp11/Form1.Designer.cs new file mode 100644 index 0000000000000000000000000000000000000000..e39b485cfee9158c3f711c8ec23aaebd7dd8ecbb --- /dev/null +++ b/Samples/GTKSystemWinFormsApp11/Form1.Designer.cs @@ -0,0 +1,457 @@ +namespace GTKSystemWinFormsApp11 +{ + partial class Form1 + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); + menuStrip1 = new MenuStrip(); + toolStripMenuItem1 = new ToolStripMenuItem(); + ddddToolStripMenuItem = new ToolStripMenuItem(); + ssssToolStripMenuItem = new ToolStripMenuItem(); + bb菜单ToolStripMenuItem = new ToolStripMenuItem(); + bb菜单2ToolStripMenuItem = new ToolStripMenuItem(); + ssssToolStripMenuItem1 = new ToolStripMenuItem(); + toolStrip2 = new ToolStrip(); + toolStripButton1 = new ToolStripButton(); + toolStripLabel1 = new ToolStripLabel(); + toolStripSeparator1 = new ToolStripSeparator(); + toolStripDropDownButton1 = new ToolStripDropDownButton(); + memnuToolStripMenuItem = new ToolStripMenuItem(); + fffffffToolStripMenuItem = new ToolStripMenuItem(); + toolStripSplitButton1 = new ToolStripSplitButton(); + menuToolStripMenuItem = new ToolStripMenuItem(); + toolStripSeparator2 = new ToolStripSeparator(); + toolStripComboBox1 = new ToolStripComboBox(); + toolStripTextBox1 = new ToolStripTextBox(); + toolStripProgressBar1 = new ToolStripProgressBar(); + button1 = new Button(); + contextMenuStrip1 = new ContextMenuStrip(components); + ddddToolStripMenuItem1 = new ToolStripMenuItem(); + ffffToolStripMenuItem = new ToolStripMenuItem(); + statusStrip1 = new StatusStrip(); + toolStripStatusLabel1 = new ToolStripStatusLabel(); + toolStripProgressBar2 = new ToolStripProgressBar(); + toolStripDropDownButton2 = new ToolStripDropDownButton(); + toolStripMenuItem4 = new ToolStripMenuItem(); + toolStripMenuItem3 = new ToolStripMenuItem(); + toolStripSplitButton2 = new ToolStripSplitButton(); + toolStripMenuItem6 = new ToolStripMenuItem(); + toolStripMenuItem5 = new ToolStripMenuItem(); + label1 = new Label(); + linkLabel1 = new LinkLabel(); + trackBar1 = new TrackBar(); + panel1 = new Panel(); + button3 = new Button(); + button2 = new Button(); + menuStrip1.SuspendLayout(); + toolStrip2.SuspendLayout(); + contextMenuStrip1.SuspendLayout(); + statusStrip1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)trackBar1).BeginInit(); + panel1.SuspendLayout(); + SuspendLayout(); + // + // menuStrip1 + // + menuStrip1.ImageScalingSize = new System.Drawing.Size(20, 20); + menuStrip1.Items.AddRange(new ToolStripItem[] { toolStripMenuItem1, ssssToolStripMenuItem1 }); + menuStrip1.Location = new System.Drawing.Point(0, 0); + menuStrip1.Name = "menuStrip1"; + menuStrip1.Size = new System.Drawing.Size(800, 28); + menuStrip1.TabIndex = 1; + menuStrip1.Text = "menuStrip1"; + // + // toolStripMenuItem1 + // + toolStripMenuItem1.DropDownItems.AddRange(new ToolStripItem[] { ddddToolStripMenuItem, ssssToolStripMenuItem }); + toolStripMenuItem1.Name = "toolStripMenuItem1"; + toolStripMenuItem1.Size = new System.Drawing.Size(62, 24); + toolStripMenuItem1.Text = "菜单1"; + // + // ddddToolStripMenuItem + // + ddddToolStripMenuItem.Checked = true; + ddddToolStripMenuItem.CheckState = CheckState.Checked; + ddddToolStripMenuItem.Name = "ddddToolStripMenuItem"; + ddddToolStripMenuItem.Size = new System.Drawing.Size(132, 26); + ddddToolStripMenuItem.Text = "a菜单"; + // + // ssssToolStripMenuItem + // + ssssToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { bb菜单ToolStripMenuItem, bb菜单2ToolStripMenuItem }); + ssssToolStripMenuItem.Name = "ssssToolStripMenuItem"; + ssssToolStripMenuItem.Size = new System.Drawing.Size(132, 26); + ssssToolStripMenuItem.Text = "b菜单"; + // + // bb菜单ToolStripMenuItem + // + bb菜单ToolStripMenuItem.Name = "bb菜单ToolStripMenuItem"; + bb菜单ToolStripMenuItem.Size = new System.Drawing.Size(151, 26); + bb菜单ToolStripMenuItem.Text = "bb菜单"; + // + // bb菜单2ToolStripMenuItem + // + bb菜单2ToolStripMenuItem.Name = "bb菜单2ToolStripMenuItem"; + bb菜单2ToolStripMenuItem.Size = new System.Drawing.Size(151, 26); + bb菜单2ToolStripMenuItem.Text = "bb菜单2"; + // + // ssssToolStripMenuItem1 + // + ssssToolStripMenuItem1.Name = "ssssToolStripMenuItem1"; + ssssToolStripMenuItem1.Size = new System.Drawing.Size(62, 24); + ssssToolStripMenuItem1.Text = "菜单2"; + // + // toolStrip2 + // + toolStrip2.ImageScalingSize = new System.Drawing.Size(20, 20); + toolStrip2.Items.AddRange(new ToolStripItem[] { toolStripButton1, toolStripLabel1, toolStripSeparator1, toolStripDropDownButton1, toolStripSplitButton1, toolStripSeparator2, toolStripComboBox1, toolStripTextBox1, toolStripProgressBar1 }); + toolStrip2.Location = new System.Drawing.Point(0, 28); + toolStrip2.Name = "toolStrip2"; + toolStrip2.Size = new System.Drawing.Size(800, 28); + toolStrip2.TabIndex = 2; + toolStrip2.Text = "toolStrip2"; + // + // toolStripButton1 + // + toolStripButton1.DisplayStyle = ToolStripItemDisplayStyle.Image; + toolStripButton1.Image = (System.Drawing.Image)resources.GetObject("toolStripButton1.Image"); + toolStripButton1.ImageTransparentColor = System.Drawing.Color.Magenta; + toolStripButton1.Name = "toolStripButton1"; + toolStripButton1.Size = new System.Drawing.Size(29, 25); + toolStripButton1.Text = "toolStripButton1"; + // + // toolStripLabel1 + // + toolStripLabel1.Name = "toolStripLabel1"; + toolStripLabel1.Size = new System.Drawing.Size(57, 25); + toolStripLabel1.Text = "Label1"; + // + // toolStripSeparator1 + // + toolStripSeparator1.Name = "toolStripSeparator1"; + toolStripSeparator1.Size = new System.Drawing.Size(6, 28); + // + // toolStripDropDownButton1 + // + toolStripDropDownButton1.DropDownItems.AddRange(new ToolStripItem[] { memnuToolStripMenuItem, fffffffToolStripMenuItem }); + toolStripDropDownButton1.Image = (System.Drawing.Image)resources.GetObject("toolStripDropDownButton1.Image"); + toolStripDropDownButton1.ImageTransparentColor = System.Drawing.Color.Magenta; + toolStripDropDownButton1.Name = "toolStripDropDownButton1"; + toolStripDropDownButton1.Size = new System.Drawing.Size(112, 25); + toolStripDropDownButton1.Text = "下拉列表1"; + // + // memnuToolStripMenuItem + // + memnuToolStripMenuItem.Checked = true; + memnuToolStripMenuItem.CheckState = CheckState.Checked; + memnuToolStripMenuItem.Name = "memnuToolStripMenuItem"; + memnuToolStripMenuItem.Size = new System.Drawing.Size(116, 26); + memnuToolStripMenuItem.Text = "项1"; + // + // fffffffToolStripMenuItem + // + fffffffToolStripMenuItem.Name = "fffffffToolStripMenuItem"; + fffffffToolStripMenuItem.Size = new System.Drawing.Size(116, 26); + fffffffToolStripMenuItem.Text = "项2"; + // + // toolStripSplitButton1 + // + toolStripSplitButton1.DropDownItems.AddRange(new ToolStripItem[] { menuToolStripMenuItem }); + toolStripSplitButton1.Image = (System.Drawing.Image)resources.GetObject("toolStripSplitButton1.Image"); + toolStripSplitButton1.ImageTransparentColor = System.Drawing.Color.Magenta; + toolStripSplitButton1.Name = "toolStripSplitButton1"; + toolStripSplitButton1.Size = new System.Drawing.Size(139, 25); + toolStripSplitButton1.Text = "SplitButton1"; + // + // menuToolStripMenuItem + // + menuToolStripMenuItem.Name = "menuToolStripMenuItem"; + menuToolStripMenuItem.Size = new System.Drawing.Size(142, 26); + menuToolStripMenuItem.Text = "2menu"; + // + // toolStripSeparator2 + // + toolStripSeparator2.Name = "toolStripSeparator2"; + toolStripSeparator2.Size = new System.Drawing.Size(6, 28); + // + // toolStripComboBox1 + // + toolStripComboBox1.Items.AddRange(new object[] { "1testitem", "2testitem", "3testitem" }); + toolStripComboBox1.Name = "toolStripComboBox1"; + toolStripComboBox1.Size = new System.Drawing.Size(121, 28); + // + // toolStripTextBox1 + // + toolStripTextBox1.Name = "toolStripTextBox1"; + toolStripTextBox1.Size = new System.Drawing.Size(100, 28); + // + // toolStripProgressBar1 + // + toolStripProgressBar1.Name = "toolStripProgressBar1"; + toolStripProgressBar1.Size = new System.Drawing.Size(90, 25); + toolStripProgressBar1.Value = 35; + // + // button1 + // + button1.Font = new System.Drawing.Font("Microsoft Sans Serif", 15F, System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, 0); + button1.Location = new System.Drawing.Point(437, 128); + button1.Name = "button1"; + button1.Size = new System.Drawing.Size(275, 52); + button1.TabIndex = 3; + button1.Text = "打开主窗口"; + button1.UseVisualStyleBackColor = false; + button1.Click += button1_Click; + button1.Paint += button1_Paint; + // + // contextMenuStrip1 + // + contextMenuStrip1.ImageScalingSize = new System.Drawing.Size(20, 20); + contextMenuStrip1.Items.AddRange(new ToolStripItem[] { ddddToolStripMenuItem1, ffffToolStripMenuItem }); + contextMenuStrip1.Name = "contextMenuStrip1"; + contextMenuStrip1.Size = new System.Drawing.Size(119, 52); + // + // ddddToolStripMenuItem1 + // + ddddToolStripMenuItem1.Name = "ddddToolStripMenuItem1"; + ddddToolStripMenuItem1.Size = new System.Drawing.Size(118, 24); + ddddToolStripMenuItem1.Text = "dddd"; + // + // ffffToolStripMenuItem + // + ffffToolStripMenuItem.Name = "ffffToolStripMenuItem"; + ffffToolStripMenuItem.Size = new System.Drawing.Size(118, 24); + ffffToolStripMenuItem.Text = "ffff"; + // + // statusStrip1 + // + statusStrip1.ImageScalingSize = new System.Drawing.Size(20, 20); + statusStrip1.Items.AddRange(new ToolStripItem[] { toolStripStatusLabel1, toolStripProgressBar2, toolStripDropDownButton2, toolStripSplitButton2 }); + statusStrip1.Location = new System.Drawing.Point(0, 424); + statusStrip1.Name = "statusStrip1"; + statusStrip1.Size = new System.Drawing.Size(800, 26); + statusStrip1.TabIndex = 4; + statusStrip1.Text = "statusStrip1"; + // + // toolStripStatusLabel1 + // + toolStripStatusLabel1.BackColor = System.Drawing.SystemColors.ActiveCaption; + toolStripStatusLabel1.Name = "toolStripStatusLabel1"; + toolStripStatusLabel1.Size = new System.Drawing.Size(69, 20); + toolStripStatusLabel1.Text = "状态文本"; + // + // toolStripProgressBar2 + // + toolStripProgressBar2.Name = "toolStripProgressBar2"; + toolStripProgressBar2.Size = new System.Drawing.Size(100, 18); + // + // toolStripDropDownButton2 + // + toolStripDropDownButton2.DisplayStyle = ToolStripItemDisplayStyle.Image; + toolStripDropDownButton2.DropDownItems.AddRange(new ToolStripItem[] { toolStripMenuItem4, toolStripMenuItem3 }); + toolStripDropDownButton2.Image = (System.Drawing.Image)resources.GetObject("toolStripDropDownButton2.Image"); + toolStripDropDownButton2.ImageTransparentColor = System.Drawing.Color.Magenta; + toolStripDropDownButton2.Name = "toolStripDropDownButton2"; + toolStripDropDownButton2.Size = new System.Drawing.Size(34, 24); + toolStripDropDownButton2.Text = "toolStripDropDownButton2"; + // + // toolStripMenuItem4 + // + toolStripMenuItem4.Name = "toolStripMenuItem4"; + toolStripMenuItem4.Size = new System.Drawing.Size(173, 26); + toolStripMenuItem4.Text = "222222222"; + // + // toolStripMenuItem3 + // + toolStripMenuItem3.Name = "toolStripMenuItem3"; + toolStripMenuItem3.Size = new System.Drawing.Size(173, 26); + toolStripMenuItem3.Text = "111111"; + // + // toolStripSplitButton2 + // + toolStripSplitButton2.DropDownItems.AddRange(new ToolStripItem[] { toolStripMenuItem6, toolStripMenuItem5 }); + toolStripSplitButton2.Image = (System.Drawing.Image)resources.GetObject("toolStripSplitButton2.Image"); + toolStripSplitButton2.ImageTransparentColor = System.Drawing.Color.Magenta; + toolStripSplitButton2.Name = "toolStripSplitButton2"; + toolStripSplitButton2.Size = new System.Drawing.Size(108, 24); + toolStripSplitButton2.Text = "下拉菜单"; + // + // toolStripMenuItem6 + // + toolStripMenuItem6.Name = "toolStripMenuItem6"; + toolStripMenuItem6.Size = new System.Drawing.Size(137, 26); + toolStripMenuItem6.Text = "22222"; + // + // toolStripMenuItem5 + // + toolStripMenuItem5.Name = "toolStripMenuItem5"; + toolStripMenuItem5.Size = new System.Drawing.Size(137, 26); + toolStripMenuItem5.Text = "11111"; + // + // label1 + // + label1.AutoSize = true; + label1.BackColor = System.Drawing.Color.IndianRed; + label1.Font = new System.Drawing.Font("Tahoma", 15F, System.Drawing.FontStyle.Underline | System.Drawing.FontStyle.Strikeout); + label1.Location = new System.Drawing.Point(181, 247); + label1.Name = "label1"; + label1.Size = new System.Drawing.Size(79, 30); + label1.TabIndex = 5; + label1.Text = "label1"; + // + // linkLabel1 + // + linkLabel1.AutoSize = true; + linkLabel1.Font = new System.Drawing.Font("Microsoft YaHei UI", 9F, System.Drawing.FontStyle.Strikeout); + linkLabel1.Location = new System.Drawing.Point(437, 247); + linkLabel1.Name = "linkLabel1"; + linkLabel1.Size = new System.Drawing.Size(82, 20); + linkLabel1.TabIndex = 6; + linkLabel1.TabStop = true; + linkLabel1.Text = "linkLabel1"; + linkLabel1.LinkClicked += linkLabel1_LinkClicked; + // + // trackBar1 + // + trackBar1.BackColor = System.Drawing.SystemColors.ControlLight; + trackBar1.LargeChange = 6; + trackBar1.Location = new System.Drawing.Point(300, 102); + trackBar1.Maximum = 100; + trackBar1.Name = "trackBar1"; + trackBar1.Orientation = Orientation.Vertical; + trackBar1.Size = new System.Drawing.Size(56, 291); + trackBar1.TabIndex = 7; + trackBar1.TickFrequency = 2; + trackBar1.TickStyle = TickStyle.Both; + trackBar1.Value = 10; + trackBar1.Scroll += trackBar1_Scroll; + // + // panel1 + // + panel1.AutoScroll = true; + panel1.Controls.Add(button3); + panel1.Controls.Add(button2); + panel1.Location = new System.Drawing.Point(547, 225); + panel1.Name = "panel1"; + panel1.Size = new System.Drawing.Size(216, 144); + panel1.TabIndex = 8; + // + // button3 + // + button3.Location = new System.Drawing.Point(94, 126); + button3.Name = "button3"; + button3.Size = new System.Drawing.Size(94, 29); + button3.TabIndex = 1; + button3.Text = "button3"; + button3.UseVisualStyleBackColor = true; + // + // button2 + // + button2.Location = new System.Drawing.Point(43, 18); + button2.Name = "button2"; + button2.Size = new System.Drawing.Size(94, 29); + button2.TabIndex = 0; + button2.Text = "button2"; + button2.UseVisualStyleBackColor = true; + // + // Form1 + // + AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F); + AutoScaleMode = AutoScaleMode.Font; + BackColor = System.Drawing.SystemColors.ActiveCaption; + ClientSize = new System.Drawing.Size(800, 450); + ContextMenuStrip = contextMenuStrip1; + Controls.Add(panel1); + Controls.Add(trackBar1); + Controls.Add(linkLabel1); + Controls.Add(label1); + Controls.Add(statusStrip1); + Controls.Add(button1); + Controls.Add(toolStrip2); + Controls.Add(menuStrip1); + Icon = (System.Drawing.Icon)resources.GetObject("$this.Icon"); + MainMenuStrip = menuStrip1; + MaximizeBox = false; + Name = "Form1"; + ShowInTaskbar = false; + Text = "Form3"; + menuStrip1.ResumeLayout(false); + menuStrip1.PerformLayout(); + toolStrip2.ResumeLayout(false); + toolStrip2.PerformLayout(); + contextMenuStrip1.ResumeLayout(false); + statusStrip1.ResumeLayout(false); + statusStrip1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)trackBar1).EndInit(); + panel1.ResumeLayout(false); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + private System.Windows.Forms.MenuStrip menuStrip1; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem1; + private System.Windows.Forms.ToolStrip toolStrip2; + private System.Windows.Forms.ToolStripButton toolStripButton1; + private System.Windows.Forms.ToolStripLabel toolStripLabel1; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ToolStripDropDownButton toolStripDropDownButton1; + private System.Windows.Forms.ToolStripSplitButton toolStripSplitButton1; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; + private System.Windows.Forms.ToolStripComboBox toolStripComboBox1; + private System.Windows.Forms.ToolStripTextBox toolStripTextBox1; + private System.Windows.Forms.ToolStripMenuItem memnuToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem menuToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem ddddToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem ssssToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem fffffffToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem ssssToolStripMenuItem1; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.ToolStripMenuItem bb菜单ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem bb菜单2ToolStripMenuItem; + private System.Windows.Forms.ToolStripProgressBar toolStripProgressBar1; + private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; + private System.Windows.Forms.ToolStripMenuItem ddddToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem ffffToolStripMenuItem; + private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1; + private System.Windows.Forms.ToolStripProgressBar toolStripProgressBar2; + private System.Windows.Forms.ToolStripDropDownButton toolStripDropDownButton2; + private System.Windows.Forms.ToolStripSplitButton toolStripSplitButton2; + private System.Windows.Forms.StatusStrip statusStrip1; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem3; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem4; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem5; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem6; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.LinkLabel linkLabel1; + private System.Windows.Forms.TrackBar trackBar1; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.Button button2; + } +} \ No newline at end of file diff --git a/Samples/GTKSystemWinFormsApp11/Form1.cs b/Samples/GTKSystemWinFormsApp11/Form1.cs new file mode 100644 index 0000000000000000000000000000000000000000..98946c794889cbf1acf117d2b764123abe3e185d --- /dev/null +++ b/Samples/GTKSystemWinFormsApp11/Form1.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace GTKSystemWinFormsApp11 +{ + public partial class Form1 : Form + { + public Form1() + { + InitializeComponent(); + } + + private void button1_Click(object sender, EventArgs e) + { + + } + + private void trackBar1_Scroll(object sender, EventArgs e) + { + label1.Text = trackBar1.Value.ToString(); + } + + private void button1_Paint(object sender, PaintEventArgs e) + { + var g = e.Graphics; + g.DrawEllipse(new Pen(new SolidBrush(Color.Red), 2), 80, 25, 30, 20); + //g.FillEllipse(new SolidBrush(Color.Red), 40, 25, 30, 20); + // g.DrawEllipse(new Pen(new SolidBrush(Color.Red), 0), 40, 25, 40, 40); + + } + + private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + MessageBox.Show(linkLabel1.Text); + } + } +} diff --git a/Samples/GTKSystemWinFormsApp11/Form1.resx b/Samples/GTKSystemWinFormsApp11/Form1.resx new file mode 100644 index 0000000000000000000000000000000000000000..cb969af09b446183a3c852f4e34d3abd9577936d --- /dev/null +++ b/Samples/GTKSystemWinFormsApp11/Form1.resx @@ -0,0 +1,214 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 122, 17 + + + 267, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAEKSURBVEhL3ZG9DsFQHMXvczDZvIOtXsHObuhqkViI3Quw + 6CYmNoMYJJ0NBiFFIoIytOuf0+TeXP3yde+iyS+3OcP53Z4y3/dJJ4HAsiwyTVMp6BQCBIZhKAWdEcHV + vSlBmeB82NFy1KLluEWOPRC5MoHdMWhazwi4RJlALgf4EuT6BI+5kCsTrGddUY658E+QvyXYHq9UnRyC + U87f4aUApcXhnrI9Jzg/laQKFntXlHM+lSQK5psL5fvbp/JvJLGCQqmSWM5JkiCT84igXGtSrruKLQ0T + luAdmZxHBG37FFuWBC/j5XKOmX8WAH7rcI6ZMffPgjQwN2bXJgDo/COBTpjneQ2dML0PY3cISreGe8HM + qgAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAEKSURBVEhL3ZG9DsFQHMXvczDZvIOtXsHObuhqkViI3Quw + 6CYmNoMYJJ0NBiFFIoIytOuf0+TeXP3yde+iyS+3OcP53Z4y3/dJJ4HAsiwyTVMp6BQCBIZhKAWdEcHV + vSlBmeB82NFy1KLluEWOPRC5MoHdMWhazwi4RJlALgf4EuT6BI+5kCsTrGddUY658E+QvyXYHq9UnRyC + U87f4aUApcXhnrI9Jzg/laQKFntXlHM+lSQK5psL5fvbp/JvJLGCQqmSWM5JkiCT84igXGtSrruKLQ0T + luAdmZxHBG37FFuWBC/j5XKOmX8WAH7rcI6ZMffPgjQwN2bXJgDo/COBTpjneQ2dML0PY3cISreGe8HM + qgAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAEKSURBVEhL3ZG9DsFQHMXvczDZvIOtXsHObuhqkViI3Quw + 6CYmNoMYJJ0NBiFFIoIytOuf0+TeXP3yde+iyS+3OcP53Z4y3/dJJ4HAsiwyTVMp6BQCBIZhKAWdEcHV + vSlBmeB82NFy1KLluEWOPRC5MoHdMWhazwi4RJlALgf4EuT6BI+5kCsTrGddUY658E+QvyXYHq9UnRyC + U87f4aUApcXhnrI9Jzg/laQKFntXlHM+lSQK5psL5fvbp/JvJLGCQqmSWM5JkiCT84igXGtSrruKLQ0T + luAdmZxHBG37FFuWBC/j5XKOmX8WAH7rcI6ZMffPgjQwN2bXJgDo/COBTpjneQ2dML0PY3cISreGe8HM + qgAAAABJRU5ErkJggg== + + + + 401, 17 + + + 603, 17 + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAEKSURBVEhL3ZG9DsFQHMXvczDZvIOtXsHObuhqkViI3Quw + 6CYmNoMYJJ0NBiFFIoIytOuf0+TeXP3yde+iyS+3OcP53Z4y3/dJJ4HAsiwyTVMp6BQCBIZhKAWdEcHV + vSlBmeB82NFy1KLluEWOPRC5MoHdMWhazwi4RJlALgf4EuT6BI+5kCsTrGddUY658E+QvyXYHq9UnRyC + U87f4aUApcXhnrI9Jzg/laQKFntXlHM+lSQK5psL5fvbp/JvJLGCQqmSWM5JkiCT84igXGtSrruKLQ0T + luAdmZxHBG37FFuWBC/j5XKOmX8WAH7rcI6ZMffPgjQwN2bXJgDo/COBTpjneQ2dML0PY3cISreGe8HM + qgAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAEKSURBVEhL3ZG9DsFQHMXvczDZvIOtXsHObuhqkViI3Quw + 6CYmNoMYJJ0NBiFFIoIytOuf0+TeXP3yde+iyS+3OcP53Z4y3/dJJ4HAsiwyTVMp6BQCBIZhKAWdEcHV + vSlBmeB82NFy1KLluEWOPRC5MoHdMWhazwi4RJlALgf4EuT6BI+5kCsTrGddUY658E+QvyXYHq9UnRyC + U87f4aUApcXhnrI9Jzg/laQKFntXlHM+lSQK5psL5fvbp/JvJLGCQqmSWM5JkiCT84igXGtSrruKLQ0T + luAdmZxHBG37FFuWBC/j5XKOmX8WAH7rcI6ZMffPgjQwN2bXJgDo/COBTpjneQ2dML0PY3cISreGe8HM + qgAAAABJRU5ErkJggg== + + + + 48 + + + + AAABAAEAEBAAAAAAIAAoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA + AAD///8A////AP///wD///8A9vb2YPb29sD29vb/9vb2//b29v/29vb/9vb2wPb29mD///8A////AP// + /wD///8A////AP///wD29vYg9vb20O7euP/hs0z/15UA/9eVAP/XlQD/15UA/+GzTP/u3rj/9vb20Pb2 + 9iD///8A////AP///wD29vYg9vb28OS/a//XlQD/2ZsO/9eVAP/frT3/2ZsO/9mbDv/Zmw7/15UA/+O5 + XP/29vbw9vb2IP///wD///8A9vb20OS/a//XlQD/4bNM/+rRmf/XlQD/8urX/+bFe//XlQD/8urX/+Gz + TP/XlQD/5L9r//b29tD///8A9vb2YO7euP/XlQD/4bNM//b29v/juVz/3act//b29v/08Of/15UA/+jL + iv/29vb/4bNM/9eVAP/u3rj/9vb2YPb29sDhs0z/2ZsO//Lq1//u3rj/26Ee/92nLf/mxXv/3609/9uh + Hv/boR7/7Nip//Lq1//Zmw7/4bNM//b29sD29vb/15UA/9eVAP/XlQD/15UA/9eVAP/dpy3/3609/9+t + Pf/dpy3/15UA/9eVAP/XlQD/15UA/9eVAP/29vb/9vb2/9eVAP/dpy3/6MuK/+7euP/XlQD/7t64//b2 + 9v/29vb/7t64/9eVAP/08Of/7Nip/92nLf/XlQD/8urX//b29v/XlQD/5sV7//b29v/u3rj/15UA/+7e + uP/29vb/9vb2/+7euP/XlQD/7t64//b29v/mxXv/15UA//b29v/29vb/15UA/9+tPf/29vb/7Nip/9eV + AP/juVz/5L9r/9+tPf/juVz/15UA/+jLiv/y6tf/3609/9eVAP/29vb/9vb2wOGzTP/XlQD/15UA/9eV + AP/XlQD/26Ee/9+tPf/frT3/26Ee/9eVAP/XlQD/15UA/9eVAP/hs0z/9vb2wPb29mDu3rj/15UA/92n + Lf/w5Mj/3act/+O5XP/29vb/9vb2/+GzTP/hs0z/9PDn/92nLf/XlQD/7t64//b29mD///8A9vb20OS/ + a//XlQD/4bNM/+S/a//Zmw7/9vb2//Lq1//XlQD/6MuK/+GzTP/XlQD/5L9r//b29tD///8A////APb2 + 9iD29vbw47lc/9eVAP/XlQD/15UA/+O5XP/frT3/15UA/9eVAP/XlQD/5L9r//b29vD29vYg////AP// + /wD///8A9vb2IPb29tDu3rj/4bNM/9eVAP/XlQD/15UA/9eVAP/hs0z/7t64//b29tD29vYg////AP// + /wD///8A////AP///wD///8A9vb2YPb29sD29vb/9vb2//b29v/29vb/9vb2wPb29mD///8A////AP// + /wD///8A + + + \ No newline at end of file diff --git a/Samples/GTKSystemWinFormsApp11/GTKSystemWinFormsApp11.csproj b/Samples/GTKSystemWinFormsApp11/GTKSystemWinFormsApp11.csproj new file mode 100644 index 0000000000000000000000000000000000000000..f2393ddf521680c34df25bf09e7b088ad3cedfbc --- /dev/null +++ b/Samples/GTKSystemWinFormsApp11/GTKSystemWinFormsApp11.csproj @@ -0,0 +1,26 @@ + + + + WinExe + net8.0 + enable + false + enable + True + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Samples/GTKSystemWinFormsApp11/GTKSystemWinFormsApp11.csproj.user b/Samples/GTKSystemWinFormsApp11/GTKSystemWinFormsApp11.csproj.user new file mode 100644 index 0000000000000000000000000000000000000000..562025a2f3e9baeaa7d24d921f0e54d55ee1bf48 --- /dev/null +++ b/Samples/GTKSystemWinFormsApp11/GTKSystemWinFormsApp11.csproj.user @@ -0,0 +1,9 @@ + + + + + + Form + + + \ No newline at end of file diff --git a/Samples/GTKSystemWinFormsApp11/Program.cs b/Samples/GTKSystemWinFormsApp11/Program.cs new file mode 100644 index 0000000000000000000000000000000000000000..37c639cae231ed1b61ebcaf8c64279f73139acc2 --- /dev/null +++ b/Samples/GTKSystemWinFormsApp11/Program.cs @@ -0,0 +1,22 @@ +using System.Windows.Forms; + +namespace GTKSystemWinFormsApp11 +{ + internal static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + // To customize application configuration such as set high DPI settings or default font, + // see https://aka.ms/applicationconfiguration. + // ApplicationConfiguration.Initialize(); + Application.SetHighDpiMode(HighDpiMode.SystemAware); + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} \ No newline at end of file diff --git a/Samples/GTKSystemWinFormsApp11/Properties/Resources.Designer.cs b/Samples/GTKSystemWinFormsApp11/Properties/Resources.Designer.cs new file mode 100644 index 0000000000000000000000000000000000000000..d2c98f31aaaa38bae9b8fb657936a3705fbee6c9 --- /dev/null +++ b/Samples/GTKSystemWinFormsApp11/Properties/Resources.Designer.cs @@ -0,0 +1,95 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本:4.0.30319.42000 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +using System; + +namespace GTKSystemWinFormsApp11.Properties +{ + /// + /// 一个强类型的资源类,用于查找本地化的字符串等。 + /// + // 此类是由 StronglyTypedResourceBuilder + // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 + // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen + // (以 /str 作为命令选项),或重新生成 VS 项目。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// 返回此类使用的缓存的 ResourceManager 实例。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if (object.ReferenceEquals(resourceMan, null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("GTKSystemWinFormsApp11.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 重写当前线程的 CurrentUICulture 属性,对 + /// 使用此强类型资源类的所有资源查找执行重写。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap timg2 + { + get + { + object obj = ResourceManager.GetObject("timg2", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap timg6 + { + get + { + object obj = ResourceManager.GetObject("timg6", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/Samples/GTKSystemWinFormsApp11/Properties/Resources.resx b/Samples/GTKSystemWinFormsApp11/Properties/Resources.resx new file mode 100644 index 0000000000000000000000000000000000000000..1af7de150c99c12dd67a509fe57c10d63e4eeb04 --- /dev/null +++ b/Samples/GTKSystemWinFormsApp11/Properties/Resources.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Samples/GTKSystemWinFormsApp11/System.ComponentModel.cs b/Samples/GTKSystemWinFormsApp11/System.ComponentModel.cs new file mode 100644 index 0000000000000000000000000000000000000000..b0f37ec6ebbedd2716b609a8d15b946057d8a202 --- /dev/null +++ b/Samples/GTKSystemWinFormsApp11/System.ComponentModel.cs @@ -0,0 +1,28 @@ +//此文件主要是为了覆盖原生System.ComponentModel.ComponentResourceManager类,原生类不支持读取项目资源图像文件。 +//GTKSystem.ComponentModel.ComponentResourceManager实现了项目资源文件和图像文件读取。 +//如果项目里没有使用资源图像文件,可以不用新建此文件 + +using System.Globalization; + +namespace System.ComponentModel +{ + public class ComponentResourceManager : GTKSystem.ComponentModel.ComponentResourceManager + { + public ComponentResourceManager(Type form) : base(form) + { + + } + public new object GetObject(string name, CultureInfo culture) + { + + return GetObject(name); + } + + public new object GetObject(string name) + { + return base.GetObject(name); + } + } + +} + diff --git a/Samples/GTKSystemWinFormsApp11/System.Resources.ResourceManager.cs b/Samples/GTKSystemWinFormsApp11/System.Resources.ResourceManager.cs new file mode 100644 index 0000000000000000000000000000000000000000..b0af02b6b912c420feeacfc865f1685a3d4be780 --- /dev/null +++ b/Samples/GTKSystemWinFormsApp11/System.Resources.ResourceManager.cs @@ -0,0 +1,32 @@ +//此文件主要是为了覆盖原生System.Resources.ResourceManager类,原生类不支持读取项目资源图像文件。 +//GTKSystem.Resources.ResourceManager实现了项目资源文件和图像文件读取。 +//如果项目里没有使用资源图像文件,可以不用新建此文件 + +using System.ComponentModel; +using System.Reflection; +using System.Resources; +using System.Xml; + +namespace System.Resources +{ + [EditorBrowsable(EditorBrowsableState.Never)] + public class ResourceManager : GTKSystem.Resources.ResourceManager + { + public ResourceManager(System.Type resourceSource) : base(null, null, resourceSource) + { + + } + public ResourceManager(string baseName, Assembly assembly) : base(baseName, assembly, null) + { + + } + public ResourceManager(string baseName, Assembly assembly, System.Type? resourceSource) : base(baseName, assembly, resourceSource) + { + + } + protected ResourceManager() + { + + } + } +} \ No newline at end of file diff --git a/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/.NETCoreApp,Version=v3.1.AssemblyAttributes.cs b/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs similarity index 63% rename from Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/.NETCoreApp,Version=v3.1.AssemblyAttributes.cs rename to Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs index ad8dfe1a6310302587a2d0c0111d81b250eb4105..2217181c88bdc64e587ffe6e9301b67e1d462aab 100644 --- a/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/.NETCoreApp,Version=v3.1.AssemblyAttributes.cs +++ b/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs @@ -1,4 +1,4 @@ // using System; using System.Reflection; -[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v3.1", FrameworkDisplayName = "")] +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")] diff --git a/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/GTKWinFormsApp.AssemblyInfo.cs b/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.AssemblyInfo.cs similarity index 76% rename from Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/GTKWinFormsApp.AssemblyInfo.cs rename to Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.AssemblyInfo.cs index eb06b7113258e13552bb778e867fe9fff1cb3050..3ef26f6422e7b66d749086914d2c7ab7fcc13b54 100644 --- a/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/GTKWinFormsApp.AssemblyInfo.cs +++ b/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.AssemblyInfo.cs @@ -11,12 +11,12 @@ using System; using System.Reflection; -[assembly: System.Reflection.AssemblyCompanyAttribute("GTKWinFormsApp")] +[assembly: System.Reflection.AssemblyCompanyAttribute("GTKSystemWinFormsApp11")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] [assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")] -[assembly: System.Reflection.AssemblyProductAttribute("GTKWinFormsApp")] -[assembly: System.Reflection.AssemblyTitleAttribute("GTKWinFormsApp")] +[assembly: System.Reflection.AssemblyProductAttribute("GTKSystemWinFormsApp11")] +[assembly: System.Reflection.AssemblyTitleAttribute("GTKSystemWinFormsApp11")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] // 由 MSBuild WriteCodeFragment 类生成。 diff --git a/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.AssemblyInfoInputs.cache b/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.AssemblyInfoInputs.cache new file mode 100644 index 0000000000000000000000000000000000000000..dafc27c26798203bdfef8ed2b33cdf96a76a7075 --- /dev/null +++ b/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +6fc34438a46ca2014fe99ae5d57a912b47ce7d414116b6bdc38694bbfa3008e5 diff --git a/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.Form1.resources b/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.Form1.resources new file mode 100644 index 0000000000000000000000000000000000000000..3d082ba135bc0b24271a767e37a7a365e82e901b Binary files /dev/null and b/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.Form1.resources differ diff --git a/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.GeneratedMSBuildEditorConfig.editorconfig b/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000000000000000000000000000000000000..538e94349108aa7f402b7d7365b4e8e3c2641350 --- /dev/null +++ b/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,13 @@ +is_global = true +build_property.TargetFramework = net8.0 +build_property.TargetPlatformMinVersion = +build_property.UsingMicrosoftNETSdkWeb = +build_property.ProjectTypeGuids = +build_property.InvariantGlobalization = +build_property.PlatformNeutralAssembly = +build_property.EnforceExtendedAnalyzerRules = +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property.RootNamespace = GTKSystemWinFormsApp11 +build_property.ProjectDir = F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKSystemWinFormsApp11\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = diff --git a/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.GlobalUsings.g.cs b/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.GlobalUsings.g.cs new file mode 100644 index 0000000000000000000000000000000000000000..8607443f1513851b636186bab8f39a1434e76e34 --- /dev/null +++ b/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.GlobalUsings.g.cs @@ -0,0 +1,9 @@ +// +global using global::System; +global using global::System.Collections.Generic; +global using global::System.IO; +global using global::System.Linq; +global using global::System.Net.Http; +global using global::System.Threading; +global using global::System.Threading.Tasks; +global using global::System.Windows.Forms; diff --git a/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.Properties.Resources.resources b/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.Properties.Resources.resources new file mode 100644 index 0000000000000000000000000000000000000000..6c05a9776bd7cbae976fdcec7e3a254e93018279 Binary files /dev/null and b/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.Properties.Resources.resources differ diff --git a/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.assets.cache b/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.assets.cache new file mode 100644 index 0000000000000000000000000000000000000000..6a07f31fce147ebd8dfcf9a7c2948ef8c9371fa6 Binary files /dev/null and b/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.assets.cache differ diff --git a/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.csproj.AssemblyReference.cache b/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.csproj.AssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..d08f51bedf35aca0aec4266762d68db6685cf4ee Binary files /dev/null and b/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.csproj.AssemblyReference.cache differ diff --git a/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/GTKWinFormsApp.csproj.BuildWithSkipAnalyzers b/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.csproj.CopyComplete similarity index 100% rename from Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/GTKWinFormsApp.csproj.BuildWithSkipAnalyzers rename to Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.csproj.CopyComplete diff --git a/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.csproj.CoreCompileInputs.cache b/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000000000000000000000000000000000000..418326645494ca869b1e03321782768ba12c3c7e --- /dev/null +++ b/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +11a684f36ff60f263bf43bb4466aa47dfef2a172d1aea3f2a9c3b1d3be207a97 diff --git a/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.csproj.FileListAbsolute.txt b/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.csproj.FileListAbsolute.txt new file mode 100644 index 0000000000000000000000000000000000000000..011ba5e264126d63a638ca8f285ae58207de0ba1 --- /dev/null +++ b/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.csproj.FileListAbsolute.txt @@ -0,0 +1,43 @@ +F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKSystemWinFormsApp11\bin\Debug\net8.0\GTKSystemWinFormsApp11.exe +F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKSystemWinFormsApp11\bin\Debug\net8.0\GTKSystemWinFormsApp11.deps.json +F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKSystemWinFormsApp11\bin\Debug\net8.0\GTKSystemWinFormsApp11.runtimeconfig.json +F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKSystemWinFormsApp11\bin\Debug\net8.0\GTKSystemWinFormsApp11.dll +F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKSystemWinFormsApp11\bin\Debug\net8.0\GTKSystemWinFormsApp11.pdb +F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKSystemWinFormsApp11\bin\Debug\net8.0\AtkSharp.dll +F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKSystemWinFormsApp11\bin\Debug\net8.0\CairoSharp.dll +F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKSystemWinFormsApp11\bin\Debug\net8.0\GdkSharp.dll +F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKSystemWinFormsApp11\bin\Debug\net8.0\GioSharp.dll +F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKSystemWinFormsApp11\bin\Debug\net8.0\GLibSharp.dll +F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKSystemWinFormsApp11\bin\Debug\net8.0\GtkSharp.dll +F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKSystemWinFormsApp11\bin\Debug\net8.0\GTKSystem.Windows.Forms.dll +F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKSystemWinFormsApp11\bin\Debug\net8.0\GTKSystem.Windows.FormsDesigner.dll +F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKSystemWinFormsApp11\bin\Debug\net8.0\Microsoft.Build.Framework.dll +F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKSystemWinFormsApp11\bin\Debug\net8.0\Microsoft.Build.Utilities.Core.dll +F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKSystemWinFormsApp11\bin\Debug\net8.0\Microsoft.NET.StringTools.dll +F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKSystemWinFormsApp11\bin\Debug\net8.0\Microsoft.Win32.SystemEvents.dll +F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKSystemWinFormsApp11\bin\Debug\net8.0\PangoSharp.dll +F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKSystemWinFormsApp11\bin\Debug\net8.0\System.Configuration.ConfigurationManager.dll +F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKSystemWinFormsApp11\bin\Debug\net8.0\System.Drawing.Common.dll +F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKSystemWinFormsApp11\bin\Debug\net8.0\System.Resources.Extensions.dll +F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKSystemWinFormsApp11\bin\Debug\net8.0\System.Security.Cryptography.ProtectedData.dll +F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKSystemWinFormsApp11\bin\Debug\net8.0\System.Security.Permissions.dll +F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKSystemWinFormsApp11\bin\Debug\net8.0\System.Windows.Extensions.dll +F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKSystemWinFormsApp11\bin\Debug\net8.0\runtimes\win\lib\netcoreapp3.0\Microsoft.Win32.SystemEvents.dll +F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKSystemWinFormsApp11\bin\Debug\net8.0\runtimes\unix\lib\netcoreapp3.0\System.Drawing.Common.dll +F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKSystemWinFormsApp11\bin\Debug\net8.0\runtimes\win\lib\netcoreapp3.0\System.Drawing.Common.dll +F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKSystemWinFormsApp11\bin\Debug\net8.0\runtimes\win\lib\netstandard2.0\System.Security.Cryptography.ProtectedData.dll +F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKSystemWinFormsApp11\bin\Debug\net8.0\runtimes\win\lib\netcoreapp3.0\System.Windows.Extensions.dll +F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKSystemWinFormsApp11\obj\Debug\net8.0\GTKSystemWinFormsApp11.csproj.AssemblyReference.cache +F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKSystemWinFormsApp11\obj\Debug\net8.0\GTKSystemWinFormsApp11.Form1.resources +F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKSystemWinFormsApp11\obj\Debug\net8.0\GTKSystemWinFormsApp11.Properties.Resources.resources +F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKSystemWinFormsApp11\obj\Debug\net8.0\GTKSystemWinFormsApp11.csproj.GenerateResource.cache +F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKSystemWinFormsApp11\obj\Debug\net8.0\GTKSystemWinFormsApp11.GeneratedMSBuildEditorConfig.editorconfig +F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKSystemWinFormsApp11\obj\Debug\net8.0\GTKSystemWinFormsApp11.AssemblyInfoInputs.cache +F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKSystemWinFormsApp11\obj\Debug\net8.0\GTKSystemWinFormsApp11.AssemblyInfo.cs +F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKSystemWinFormsApp11\obj\Debug\net8.0\GTKSystemWinFormsApp11.csproj.CoreCompileInputs.cache +F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKSystemWinFormsApp11\obj\Debug\net8.0\GTKSystemWinFormsApp11.csproj.CopyComplete +F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKSystemWinFormsApp11\obj\Debug\net8.0\GTKSystemWinFormsApp11.dll +F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKSystemWinFormsApp11\obj\Debug\net8.0\refint\GTKSystemWinFormsApp11.dll +F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKSystemWinFormsApp11\obj\Debug\net8.0\GTKSystemWinFormsApp11.pdb +F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKSystemWinFormsApp11\obj\Debug\net8.0\GTKSystemWinFormsApp11.genruntimeconfig.cache +F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKSystemWinFormsApp11\obj\Debug\net8.0\ref\GTKSystemWinFormsApp11.dll diff --git a/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.csproj.GenerateResource.cache b/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.csproj.GenerateResource.cache new file mode 100644 index 0000000000000000000000000000000000000000..9895c5f08da11399399a05b500a451c0670b1cfc Binary files /dev/null and b/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.csproj.GenerateResource.cache differ diff --git a/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.designer.deps.json b/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.designer.deps.json new file mode 100644 index 0000000000000000000000000000000000000000..0185b97f2b16f5ade20b76d0a50247aaeeb24690 --- /dev/null +++ b/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.designer.deps.json @@ -0,0 +1,777 @@ +{ + "runtimeTarget": { + "name": ".NETCoreApp,Version=v8.0", + "signature": "" + }, + "compilationOptions": {}, + "targets": { + ".NETCoreApp,Version=v8.0": { + "AtkSharp/3.24.24.95": { + "dependencies": { + "GLibSharp": "3.24.24.95" + }, + "runtime": { + "lib/net6.0/AtkSharp.dll": { + "assemblyVersion": "3.24.24.95", + "fileVersion": "3.24.24.95" + } + } + }, + "CairoSharp/3.24.24.95": { + "runtime": { + "lib/net6.0/CairoSharp.dll": { + "assemblyVersion": "3.24.24.95", + "fileVersion": "3.24.24.95" + } + } + }, + "GdkSharp/3.24.24.95": { + "dependencies": { + "CairoSharp": "3.24.24.95", + "GLibSharp": "3.24.24.95", + "GioSharp": "3.24.24.95", + "PangoSharp": "3.24.24.95" + }, + "runtime": { + "lib/net6.0/GdkSharp.dll": { + "assemblyVersion": "3.24.24.95", + "fileVersion": "3.24.24.95" + } + } + }, + "GioSharp/3.24.24.95": { + "dependencies": { + "GLibSharp": "3.24.24.95" + }, + "runtime": { + "lib/net6.0/GioSharp.dll": { + "assemblyVersion": "3.24.24.95", + "fileVersion": "3.24.24.95" + } + } + }, + "GLibSharp/3.24.24.95": { + "runtime": { + "lib/net6.0/GLibSharp.dll": { + "assemblyVersion": "3.24.24.95", + "fileVersion": "3.24.24.95" + } + } + }, + "GtkSharp/3.24.24.95": { + "dependencies": { + "AtkSharp": "3.24.24.95", + "CairoSharp": "3.24.24.95", + "GLibSharp": "3.24.24.95", + "GdkSharp": "3.24.24.95", + "GioSharp": "3.24.24.95", + "PangoSharp": "3.24.24.95" + }, + "runtime": { + "lib/net6.0/GtkSharp.dll": { + "assemblyVersion": "3.24.24.95", + "fileVersion": "3.24.24.95" + } + } + }, + "GTKSystem.Windows.Forms/1.3.24.20": { + "dependencies": { + "GtkSharp": "3.24.24.95", + "System.Resources.Extensions": "8.0.0" + }, + "runtime": { + "lib/net8.0/GTKSystem.Windows.Forms.dll": { + "assemblyVersion": "1.3.24.20", + "fileVersion": "1.3.24.20" + } + } + }, + "GTKSystem.Windows.FormsDesigner/1.0.0": { + "dependencies": { + "Microsoft.Build.Utilities.Core": "17.1.0" + }, + "runtime": { + "lib/netstandard2.0/GTKSystem.Windows.FormsDesigner.dll": { + "assemblyVersion": "1.0.0.0", + "fileVersion": "1.0.0.0" + } + } + }, + "Microsoft.Build.Framework/17.1.0": { + "dependencies": { + "Microsoft.Win32.Registry": "4.3.0", + "System.Security.Permissions": "4.7.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Build.Framework.dll": { + "assemblyVersion": "15.1.0.0", + "fileVersion": "17.1.0.7609" + } + } + }, + "Microsoft.Build.Utilities.Core/17.1.0": { + "dependencies": { + "Microsoft.Build.Framework": "17.1.0", + "Microsoft.NET.StringTools": "1.0.0", + "Microsoft.Win32.Registry": "4.3.0", + "System.Collections.Immutable": "5.0.0", + "System.Configuration.ConfigurationManager": "4.7.0", + "System.Security.Permissions": "4.7.0", + "System.Text.Encoding.CodePages": "4.0.1" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Build.Utilities.Core.dll": { + "assemblyVersion": "15.1.0.0", + "fileVersion": "17.1.0.7609" + } + } + }, + "Microsoft.NET.StringTools/1.0.0": { + "dependencies": { + "System.Memory": "4.5.4", + "System.Runtime.CompilerServices.Unsafe": "5.0.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.NET.StringTools.dll": { + "assemblyVersion": "1.0.0.0", + "fileVersion": "1.0.0.26302" + } + } + }, + "Microsoft.NETCore.Platforms/3.1.0": {}, + "Microsoft.NETCore.Targets/1.1.0": {}, + "Microsoft.Win32.Registry/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "System.Collections": "4.3.0", + "System.Globalization": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0" + }, + "runtimeTargets": { + "runtimes/unix/lib/netstandard1.3/Microsoft.Win32.Registry.dll": { + "rid": "unix", + "assetType": "runtime", + "assemblyVersion": "4.0.1.0", + "fileVersion": "4.6.24705.1" + }, + "runtimes/win/lib/netstandard1.3/Microsoft.Win32.Registry.dll": { + "rid": "win", + "assetType": "runtime", + "assemblyVersion": "4.0.1.0", + "fileVersion": "4.6.24705.1" + } + } + }, + "Microsoft.Win32.SystemEvents/4.7.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0" + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Win32.SystemEvents.dll": { + "assemblyVersion": "4.0.2.0", + "fileVersion": "4.700.19.56404" + } + }, + "runtimeTargets": { + "runtimes/win/lib/netcoreapp3.0/Microsoft.Win32.SystemEvents.dll": { + "rid": "win", + "assetType": "runtime", + "assemblyVersion": "4.0.2.0", + "fileVersion": "4.700.19.56404" + } + } + }, + "PangoSharp/3.24.24.95": { + "dependencies": { + "CairoSharp": "3.24.24.95", + "GLibSharp": "3.24.24.95" + }, + "runtime": { + "lib/net6.0/PangoSharp.dll": { + "assemblyVersion": "3.24.24.95", + "fileVersion": "3.24.24.95" + } + } + }, + "System.Collections/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Collections.Immutable/5.0.0": { + "runtime": { + "lib/netstandard2.0/System.Collections.Immutable.dll": { + "assemblyVersion": "5.0.0.0", + "fileVersion": "5.0.20.51904" + } + } + }, + "System.Configuration.ConfigurationManager/4.7.0": { + "dependencies": { + "System.Security.Cryptography.ProtectedData": "4.7.0", + "System.Security.Permissions": "4.7.0" + }, + "runtime": { + "lib/netstandard2.0/System.Configuration.ConfigurationManager.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "4.700.19.56404" + } + } + }, + "System.Drawing.Common/4.7.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "Microsoft.Win32.SystemEvents": "4.7.0" + }, + "runtime": { + "lib/netstandard2.0/System.Drawing.Common.dll": { + "assemblyVersion": "4.0.0.1", + "fileVersion": "4.6.26919.2" + } + }, + "runtimeTargets": { + "runtimes/unix/lib/netcoreapp3.0/System.Drawing.Common.dll": { + "rid": "unix", + "assetType": "runtime", + "assemblyVersion": "4.0.2.0", + "fileVersion": "4.700.19.56404" + }, + "runtimes/win/lib/netcoreapp3.0/System.Drawing.Common.dll": { + "rid": "win", + "assetType": "runtime", + "assemblyVersion": "4.0.2.0", + "fileVersion": "4.700.19.56404" + } + } + }, + "System.Globalization/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.IO/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading.Tasks": "4.3.0" + } + }, + "System.Memory/4.5.4": {}, + "System.Reflection/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.IO": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Reflection.Primitives/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Resources.Extensions/8.0.0": { + "runtime": { + "lib/net8.0/System.Resources.Extensions.dll": { + "assemblyVersion": "8.0.0.0", + "fileVersion": "8.0.23.53103" + } + } + }, + "System.Resources.ResourceManager/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Globalization": "4.3.0", + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + } + }, + "System.Runtime/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "Microsoft.NETCore.Targets": "1.1.0" + } + }, + "System.Runtime.CompilerServices.Unsafe/5.0.0": { + "runtime": { + "lib/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.dll": { + "assemblyVersion": "5.0.0.0", + "fileVersion": "5.0.20.51904" + } + } + }, + "System.Runtime.Extensions/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Runtime.Handles/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Runtime.InteropServices/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Reflection": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Handles": "4.3.0" + } + }, + "System.Security.AccessControl/4.7.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "System.Security.Principal.Windows": "4.7.0" + }, + "runtime": { + "lib/netstandard2.0/System.Security.AccessControl.dll": { + "assemblyVersion": "4.1.3.0", + "fileVersion": "4.700.19.56404" + } + }, + "runtimeTargets": { + "runtimes/win/lib/netcoreapp2.0/System.Security.AccessControl.dll": { + "rid": "win", + "assetType": "runtime", + "assemblyVersion": "4.1.3.0", + "fileVersion": "4.700.19.56404" + } + } + }, + "System.Security.Cryptography.ProtectedData/4.7.0": { + "runtime": { + "lib/netstandard2.0/System.Security.Cryptography.ProtectedData.dll": { + "assemblyVersion": "4.0.5.0", + "fileVersion": "4.700.19.56404" + } + }, + "runtimeTargets": { + "runtimes/win/lib/netstandard2.0/System.Security.Cryptography.ProtectedData.dll": { + "rid": "win", + "assetType": "runtime", + "assemblyVersion": "4.0.5.0", + "fileVersion": "4.700.19.56404" + } + } + }, + "System.Security.Permissions/4.7.0": { + "dependencies": { + "System.Security.AccessControl": "4.7.0", + "System.Windows.Extensions": "4.7.0" + }, + "runtime": { + "lib/netcoreapp3.0/System.Security.Permissions.dll": { + "assemblyVersion": "4.0.3.0", + "fileVersion": "4.700.19.56404" + } + } + }, + "System.Security.Principal.Windows/4.7.0": { + "runtime": { + "lib/netstandard2.0/System.Security.Principal.Windows.dll": { + "assemblyVersion": "4.1.3.0", + "fileVersion": "4.700.19.56404" + } + }, + "runtimeTargets": { + "runtimes/unix/lib/netcoreapp2.1/System.Security.Principal.Windows.dll": { + "rid": "unix", + "assetType": "runtime", + "assemblyVersion": "4.1.3.0", + "fileVersion": "4.700.19.56404" + }, + "runtimes/win/lib/netcoreapp2.1/System.Security.Principal.Windows.dll": { + "rid": "win", + "assetType": "runtime", + "assemblyVersion": "4.1.3.0", + "fileVersion": "4.700.19.56404" + } + } + }, + "System.Text.Encoding/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Text.Encoding.CodePages/4.0.1": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "System.Collections": "4.3.0", + "System.Globalization": "4.3.0", + "System.IO": "4.3.0", + "System.Reflection": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading": "4.0.11" + }, + "runtimeTargets": { + "runtimes/unix/lib/netstandard1.3/System.Text.Encoding.CodePages.dll": { + "rid": "unix", + "assetType": "runtime", + "assemblyVersion": "4.0.1.0", + "fileVersion": "1.0.24212.1" + }, + "runtimes/win/lib/netstandard1.3/System.Text.Encoding.CodePages.dll": { + "rid": "win", + "assetType": "runtime", + "assemblyVersion": "4.0.1.0", + "fileVersion": "1.0.24212.1" + } + } + }, + "System.Threading/4.0.11": { + "dependencies": { + "System.Runtime": "4.3.0", + "System.Threading.Tasks": "4.3.0" + }, + "runtime": { + "lib/netstandard1.3/System.Threading.dll": { + "assemblyVersion": "4.0.11.0", + "fileVersion": "1.0.24212.1" + } + } + }, + "System.Threading.Tasks/4.3.0": { + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + } + }, + "System.Windows.Extensions/4.7.0": { + "dependencies": { + "System.Drawing.Common": "4.7.0" + }, + "runtime": { + "lib/netcoreapp3.0/System.Windows.Extensions.dll": { + "assemblyVersion": "4.0.1.0", + "fileVersion": "4.700.19.56404" + } + }, + "runtimeTargets": { + "runtimes/win/lib/netcoreapp3.0/System.Windows.Extensions.dll": { + "rid": "win", + "assetType": "runtime", + "assemblyVersion": "4.0.1.0", + "fileVersion": "4.700.19.56404" + } + } + } + } + }, + "libraries": { + "AtkSharp/3.24.24.95": { + "type": "package", + "serviceable": true, + "sha512": "sha512-LnSfsc0y11gfzczZj5bnpwcFkXFZuVTSSd92ML/FcHIM7FU+cAfm1UkAonv5BdwTRhzDbNDE39vihao/k75sUA==", + "path": "atksharp/3.24.24.95", + "hashPath": "atksharp.3.24.24.95.nupkg.sha512" + }, + "CairoSharp/3.24.24.95": { + "type": "package", + "serviceable": true, + "sha512": "sha512-EZ9KT3pwVAol35XbZW0Uwdg2LqhDvPnWdhqIrsedhDx+Omnu56hLzxh8mZGqmQvEwJE8Opbda4w9CqDtXbX6Vw==", + "path": "cairosharp/3.24.24.95", + "hashPath": "cairosharp.3.24.24.95.nupkg.sha512" + }, + "GdkSharp/3.24.24.95": { + "type": "package", + "serviceable": true, + "sha512": "sha512-rABpIGkxr8lOdyhEmrKXzjih3z3932kjqUmm5qaQhWVSvu9YepEk3J1FApgnKCW/EWEzlerzxnJArsyOlgMsZQ==", + "path": "gdksharp/3.24.24.95", + "hashPath": "gdksharp.3.24.24.95.nupkg.sha512" + }, + "GioSharp/3.24.24.95": { + "type": "package", + "serviceable": true, + "sha512": "sha512-avYEDFlYgbogb+Y7ZhIXQpyJfL83bnPpBKY642YEW9PQ+pRK3qf2k0opvd5oHccXfByj6kAQjmRUSIS0pj19Fg==", + "path": "giosharp/3.24.24.95", + "hashPath": "giosharp.3.24.24.95.nupkg.sha512" + }, + "GLibSharp/3.24.24.95": { + "type": "package", + "serviceable": true, + "sha512": "sha512-1viZRMVjddf2HUCW7WDXT47rHssteHkAOimXQ2/pI8oGrPGNFuuw5MbX8BOIy73hCWVqo7JEMONv3z32OrCoCQ==", + "path": "glibsharp/3.24.24.95", + "hashPath": "glibsharp.3.24.24.95.nupkg.sha512" + }, + "GtkSharp/3.24.24.95": { + "type": "package", + "serviceable": true, + "sha512": "sha512-RRUY45hAa5gsMcadvVjcLUzMjVtmuHSYTcIwM6j8LNgKhzFFHk69qM1D5ULfGxaWmVjicqNWiFtOtk8WsvPqaQ==", + "path": "gtksharp/3.24.24.95", + "hashPath": "gtksharp.3.24.24.95.nupkg.sha512" + }, + "GTKSystem.Windows.Forms/1.3.24.20": { + "type": "package", + "serviceable": true, + "sha512": "sha512-oWmNSj6MIY1XIZviN8Nt23LtbN9/WW/a2HBEDItKAQqgS38E5q2n9O9/+XAqg2yjOjySamETCURt0gJlsZsiIA==", + "path": "gtksystem.windows.forms/1.3.24.20", + "hashPath": "gtksystem.windows.forms.1.3.24.20.nupkg.sha512" + }, + "GTKSystem.Windows.FormsDesigner/1.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ensO8vPDMqE5WoyMSP3bWjzL1bRgGPkWrSM3yIzvX5GPZMYxML9KJSsAdXvZc5cGFwzwY12UKMVKakfIRLBnEA==", + "path": "gtksystem.windows.formsdesigner/1.0.0", + "hashPath": "gtksystem.windows.formsdesigner.1.0.0.nupkg.sha512" + }, + "Microsoft.Build.Framework/17.1.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-7PPEbjuL/lKQ8ftblxwBZKf5alZCA4GDvBTiO3UAVxtRe52a2jL3mc8TpKNiJZzytGz7fKdR5ClDCs7+Uw4hMg==", + "path": "microsoft.build.framework/17.1.0", + "hashPath": "microsoft.build.framework.17.1.0.nupkg.sha512" + }, + "Microsoft.Build.Utilities.Core/17.1.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-JqhQ4q6L4IyA0Wh3PrDrxHHYMVHyOLIusyC4imAnhcnZiOC4+CwgVRSdo8fLsQmvz0Jab8FFrU1NPZFbDoxRng==", + "path": "microsoft.build.utilities.core/17.1.0", + "hashPath": "microsoft.build.utilities.core.17.1.0.nupkg.sha512" + }, + "Microsoft.NET.StringTools/1.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ZYVcoDM0LnSyT5nWoRGfShYdOecCw2sOXWwP6j1Z0u48Xq3+BVvZ+EiPCX9/8Gz439giW+O1H1kWF9Eb/w6rVg==", + "path": "microsoft.net.stringtools/1.0.0", + "hashPath": "microsoft.net.stringtools.1.0.0.nupkg.sha512" + }, + "Microsoft.NETCore.Platforms/3.1.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-z7aeg8oHln2CuNulfhiLYxCVMPEwBl3rzicjvIX+4sUuCwvXw5oXQEtbiU2c0z4qYL5L3Kmx0mMA/+t/SbY67w==", + "path": "microsoft.netcore.platforms/3.1.0", + "hashPath": "microsoft.netcore.platforms.3.1.0.nupkg.sha512" + }, + "Microsoft.NETCore.Targets/1.1.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg==", + "path": "microsoft.netcore.targets/1.1.0", + "hashPath": "microsoft.netcore.targets.1.1.0.nupkg.sha512" + }, + "Microsoft.Win32.Registry/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-Lw1/VwLH1yxz6SfFEjVRCN0pnflLEsWgnV4qsdJ512/HhTwnKXUG+zDQ4yTO3K/EJQemGoNaBHX5InISNKTzUQ==", + "path": "microsoft.win32.registry/4.3.0", + "hashPath": "microsoft.win32.registry.4.3.0.nupkg.sha512" + }, + "Microsoft.Win32.SystemEvents/4.7.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-mtVirZr++rq+XCDITMUdnETD59XoeMxSpLRIII7JRI6Yj0LEDiO1pPn0ktlnIj12Ix8bfvQqQDMMIF9wC98oCA==", + "path": "microsoft.win32.systemevents/4.7.0", + "hashPath": "microsoft.win32.systemevents.4.7.0.nupkg.sha512" + }, + "PangoSharp/3.24.24.95": { + "type": "package", + "serviceable": true, + "sha512": "sha512-H7JeyEvLsgvsbamGpRgoNtdvzPiGwwsUuoeTobN1C/JRjw1J8Snw0yf2WBr7CKx5GLwbrwpQYOb7N/HD17ME8A==", + "path": "pangosharp/3.24.24.95", + "hashPath": "pangosharp.3.24.24.95.nupkg.sha512" + }, + "System.Collections/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==", + "path": "system.collections/4.3.0", + "hashPath": "system.collections.4.3.0.nupkg.sha512" + }, + "System.Collections.Immutable/5.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-FXkLXiK0sVVewcso0imKQoOxjoPAj42R8HtjjbSjVPAzwDfzoyoznWxgA3c38LDbN9SJux1xXoXYAhz98j7r2g==", + "path": "system.collections.immutable/5.0.0", + "hashPath": "system.collections.immutable.5.0.0.nupkg.sha512" + }, + "System.Configuration.ConfigurationManager/4.7.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-/anOTeSZCNNI2zDilogWrZ8pNqCmYbzGNexUnNhjW8k0sHqEZ2nHJBp147jBV3hGYswu5lINpNg1vxR7bnqvVA==", + "path": "system.configuration.configurationmanager/4.7.0", + "hashPath": "system.configuration.configurationmanager.4.7.0.nupkg.sha512" + }, + "System.Drawing.Common/4.7.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-v+XbyYHaZjDfn0ENmJEV1VYLgGgCTx1gnfOBcppowbpOAriglYgGCvFCPr2EEZyBvXlpxbEsTwkOlInl107ahA==", + "path": "system.drawing.common/4.7.0", + "hashPath": "system.drawing.common.4.7.0.nupkg.sha512" + }, + "System.Globalization/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==", + "path": "system.globalization/4.3.0", + "hashPath": "system.globalization.4.3.0.nupkg.sha512" + }, + "System.IO/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==", + "path": "system.io/4.3.0", + "hashPath": "system.io.4.3.0.nupkg.sha512" + }, + "System.Memory/4.5.4": { + "type": "package", + "serviceable": true, + "sha512": "sha512-1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw==", + "path": "system.memory/4.5.4", + "hashPath": "system.memory.4.5.4.nupkg.sha512" + }, + "System.Reflection/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==", + "path": "system.reflection/4.3.0", + "hashPath": "system.reflection.4.3.0.nupkg.sha512" + }, + "System.Reflection.Primitives/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==", + "path": "system.reflection.primitives/4.3.0", + "hashPath": "system.reflection.primitives.4.3.0.nupkg.sha512" + }, + "System.Resources.Extensions/8.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-psnQ6GRQOvt+evda5C4nD5EuV49mz2Tv0DD2JDVDEbE/TKoMukxSkGJcsBJ0pajpPuFRr67syFYlkJ4Wj6A5Zw==", + "path": "system.resources.extensions/8.0.0", + "hashPath": "system.resources.extensions.8.0.0.nupkg.sha512" + }, + "System.Resources.ResourceManager/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==", + "path": "system.resources.resourcemanager/4.3.0", + "hashPath": "system.resources.resourcemanager.4.3.0.nupkg.sha512" + }, + "System.Runtime/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==", + "path": "system.runtime/4.3.0", + "hashPath": "system.runtime.4.3.0.nupkg.sha512" + }, + "System.Runtime.CompilerServices.Unsafe/5.0.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ZD9TMpsmYJLrxbbmdvhwt9YEgG5WntEnZ/d1eH8JBX9LBp+Ju8BSBhUGbZMNVHHomWo2KVImJhTDl2hIgw/6MA==", + "path": "system.runtime.compilerservices.unsafe/5.0.0", + "hashPath": "system.runtime.compilerservices.unsafe.5.0.0.nupkg.sha512" + }, + "System.Runtime.Extensions/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==", + "path": "system.runtime.extensions/4.3.0", + "hashPath": "system.runtime.extensions.4.3.0.nupkg.sha512" + }, + "System.Runtime.Handles/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-OKiSUN7DmTWeYb3l51A7EYaeNMnvxwE249YtZz7yooT4gOZhmTjIn48KgSsw2k2lYdLgTKNJw/ZIfSElwDRVgg==", + "path": "system.runtime.handles/4.3.0", + "hashPath": "system.runtime.handles.4.3.0.nupkg.sha512" + }, + "System.Runtime.InteropServices/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-uv1ynXqiMK8mp1GM3jDqPCFN66eJ5w5XNomaK2XD+TuCroNTLFGeZ+WCmBMcBDyTFKou3P6cR6J/QsaqDp7fGQ==", + "path": "system.runtime.interopservices/4.3.0", + "hashPath": "system.runtime.interopservices.4.3.0.nupkg.sha512" + }, + "System.Security.AccessControl/4.7.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-JECvTt5aFF3WT3gHpfofL2MNNP6v84sxtXxpqhLBCcDRzqsPBmHhQ6shv4DwwN2tRlzsUxtb3G9M3763rbXKDg==", + "path": "system.security.accesscontrol/4.7.0", + "hashPath": "system.security.accesscontrol.4.7.0.nupkg.sha512" + }, + "System.Security.Cryptography.ProtectedData/4.7.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ehYW0m9ptxpGWvE4zgqongBVWpSDU/JCFD4K7krxkQwSz/sFQjEXCUqpvencjy6DYDbn7Ig09R8GFffu8TtneQ==", + "path": "system.security.cryptography.protecteddata/4.7.0", + "hashPath": "system.security.cryptography.protecteddata.4.7.0.nupkg.sha512" + }, + "System.Security.Permissions/4.7.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-dkOV6YYVBnYRa15/yv004eCGRBVADXw8qRbbNiCn/XpdJSUXkkUeIvdvFHkvnko4CdKMqG8yRHC4ox83LSlMsQ==", + "path": "system.security.permissions/4.7.0", + "hashPath": "system.security.permissions.4.7.0.nupkg.sha512" + }, + "System.Security.Principal.Windows/4.7.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-ojD0PX0XhneCsUbAZVKdb7h/70vyYMDYs85lwEI+LngEONe/17A0cFaRFqZU+sOEidcVswYWikYOQ9PPfjlbtQ==", + "path": "system.security.principal.windows/4.7.0", + "hashPath": "system.security.principal.windows.4.7.0.nupkg.sha512" + }, + "System.Text.Encoding/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==", + "path": "system.text.encoding/4.3.0", + "hashPath": "system.text.encoding.4.3.0.nupkg.sha512" + }, + "System.Text.Encoding.CodePages/4.0.1": { + "type": "package", + "serviceable": true, + "sha512": "sha512-h4z6rrA/hxWf4655D18IIZ0eaLRa3tQC/j+e26W+VinIHY0l07iEXaAvO0YSYq3MvCjMYy8Zs5AdC1sxNQOB7Q==", + "path": "system.text.encoding.codepages/4.0.1", + "hashPath": "system.text.encoding.codepages.4.0.1.nupkg.sha512" + }, + "System.Threading/4.0.11": { + "type": "package", + "serviceable": true, + "sha512": "sha512-N+3xqIcg3VDKyjwwCGaZ9HawG9aC6cSDI+s7ROma310GQo8vilFZa86hqKppwTHleR/G0sfOzhvgnUxWCR/DrQ==", + "path": "system.threading/4.0.11", + "hashPath": "system.threading.4.0.11.nupkg.sha512" + }, + "System.Threading.Tasks/4.3.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==", + "path": "system.threading.tasks/4.3.0", + "hashPath": "system.threading.tasks.4.3.0.nupkg.sha512" + }, + "System.Windows.Extensions/4.7.0": { + "type": "package", + "serviceable": true, + "sha512": "sha512-CeWTdRNfRaSh0pm2gDTJFwVaXfTq6Xwv/sA887iwPTneW7oMtMlpvDIO+U60+3GWTB7Aom6oQwv5VZVUhQRdPQ==", + "path": "system.windows.extensions/4.7.0", + "hashPath": "system.windows.extensions.4.7.0.nupkg.sha512" + } + } +} \ No newline at end of file diff --git a/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/GTKWinFormsApp.designer.runtimeconfig.json b/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.designer.runtimeconfig.json similarity index 57% rename from Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/GTKWinFormsApp.designer.runtimeconfig.json rename to Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.designer.runtimeconfig.json index f872b3f66d8376a39cecc92a49b722855dd908f4..3a6aa7270a741eb52abcd9d0ed3a7bf8dd6fda96 100644 --- a/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/GTKWinFormsApp.designer.runtimeconfig.json +++ b/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.designer.runtimeconfig.json @@ -1,16 +1,18 @@ { "runtimeOptions": { - "tfm": "netcoreapp3.1", + "tfm": "net8.0", "framework": { - "name": "Microsoft.WindowsDesktop.App", - "version": "3.1.0" + "name":"Microsoft.WindowsDesktop.App", + "version": "8.0.0" }, "additionalProbingPaths": [ "C:\\Users\\chj\\.dotnet\\store\\|arch|\\|tfm|", "C:\\Users\\chj\\.nuget\\packages", + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages", "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder" ], "configProperties": { + "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": true, "Microsoft.NETCore.DotNetHostPolicy.SetAppPaths": true } } diff --git a/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.dll b/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.dll new file mode 100644 index 0000000000000000000000000000000000000000..e88e36955e40d5c54845fac658a7951dee759867 Binary files /dev/null and b/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.dll differ diff --git a/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.genruntimeconfig.cache b/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.genruntimeconfig.cache new file mode 100644 index 0000000000000000000000000000000000000000..fe873fdcf6faaa530ae56bbbe57b9ba7699d22e5 --- /dev/null +++ b/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.genruntimeconfig.cache @@ -0,0 +1 @@ +2d0e17f9619295348d636f1938d3aa2e7d22a7f0dcced7ac7beabc40dae8a301 diff --git a/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.pdb b/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.pdb new file mode 100644 index 0000000000000000000000000000000000000000..d88454c8f9084f2bc9ea8e40a2cda5d9d5093045 Binary files /dev/null and b/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.pdb differ diff --git a/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.designer.runtimeconfig.json b/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.runtimeconfig.json similarity index 30% rename from Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.designer.runtimeconfig.json rename to Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.runtimeconfig.json index f872b3f66d8376a39cecc92a49b722855dd908f4..472e2d418b97107469f160c1c3a4456ce794d570 100644 --- a/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.designer.runtimeconfig.json +++ b/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/GTKSystemWinFormsApp11.runtimeconfig.json @@ -1,17 +1,12 @@ { "runtimeOptions": { - "tfm": "netcoreapp3.1", + "tfm": "net8.0", "framework": { "name": "Microsoft.WindowsDesktop.App", - "version": "3.1.0" + "version": "8.0.0" }, - "additionalProbingPaths": [ - "C:\\Users\\chj\\.dotnet\\store\\|arch|\\|tfm|", - "C:\\Users\\chj\\.nuget\\packages", - "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder" - ], "configProperties": { - "Microsoft.NETCore.DotNetHostPolicy.SetAppPaths": true + "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false } } } \ No newline at end of file diff --git a/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/apphost.exe b/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/apphost.exe new file mode 100644 index 0000000000000000000000000000000000000000..b58023c352833c0f96ba6c1fd5329f02381be4ca Binary files /dev/null and b/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/apphost.exe differ diff --git a/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/ref/GTKSystemWinFormsApp11.dll b/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/ref/GTKSystemWinFormsApp11.dll new file mode 100644 index 0000000000000000000000000000000000000000..4ad02e428705998df9136e4b5a698582fea8cb38 Binary files /dev/null and b/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/ref/GTKSystemWinFormsApp11.dll differ diff --git a/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/refint/GTKSystemWinFormsApp11.dll b/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/refint/GTKSystemWinFormsApp11.dll new file mode 100644 index 0000000000000000000000000000000000000000..4ad02e428705998df9136e4b5a698582fea8cb38 Binary files /dev/null and b/Samples/GTKSystemWinFormsApp11/obj/Debug/net8.0/refint/GTKSystemWinFormsApp11.dll differ diff --git a/Samples/GTKSystemWinFormsApp11/obj/GTKSystemWinFormsApp11.csproj.nuget.dgspec.json b/Samples/GTKSystemWinFormsApp11/obj/GTKSystemWinFormsApp11.csproj.nuget.dgspec.json new file mode 100644 index 0000000000000000000000000000000000000000..e527415d3ef1d863415e93acefcffca188150ecf --- /dev/null +++ b/Samples/GTKSystemWinFormsApp11/obj/GTKSystemWinFormsApp11.csproj.nuget.dgspec.json @@ -0,0 +1,84 @@ +{ + "format": 1, + "restore": { + "F:\\我的项目\\GTK\\gtksystem-windows-forms\\Samples\\GTKSystemWinFormsApp11\\GTKSystemWinFormsApp11.csproj": {} + }, + "projects": { + "F:\\我的项目\\GTK\\gtksystem-windows-forms\\Samples\\GTKSystemWinFormsApp11\\GTKSystemWinFormsApp11.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "F:\\我的项目\\GTK\\gtksystem-windows-forms\\Samples\\GTKSystemWinFormsApp11\\GTKSystemWinFormsApp11.csproj", + "projectName": "GTKSystemWinFormsApp11", + "projectPath": "F:\\我的项目\\GTK\\gtksystem-windows-forms\\Samples\\GTKSystemWinFormsApp11\\GTKSystemWinFormsApp11.csproj", + "packagesPath": "C:\\Users\\chj\\.nuget\\packages\\", + "outputPath": "F:\\我的项目\\GTK\\gtksystem-windows-forms\\Samples\\GTKSystemWinFormsApp11\\obj\\", + "projectStyle": "PackageReference", + "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages", + "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder" + ], + "configFilePaths": [ + "C:\\Users\\chj\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net8.0" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "C:\\Users\\chj\\.nuget\\packages": {}, + "https://api.nuget.org/v3/index.json": {}, + "https://www.nuget.org/api/v2/": {} + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + } + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "dependencies": { + "GTKSystem.Windows.Forms": { + "target": "Package", + "version": "[1.3.24.22, )" + }, + "GTKSystem.Windows.FormsDesigner": { + "target": "Package", + "version": "[1.0.0.4, )" + }, + "GtkSharp": { + "target": "Package", + "version": "[3.24.24.95, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.100/PortableRuntimeIdentifierGraph.json" + } + } + } + } +} \ No newline at end of file diff --git a/Samples/GTKSystemWinFormsApp11/obj/GTKSystemWinFormsApp11.csproj.nuget.g.props b/Samples/GTKSystemWinFormsApp11/obj/GTKSystemWinFormsApp11.csproj.nuget.g.props new file mode 100644 index 0000000000000000000000000000000000000000..5b855816d7068177b047f974b330db663ccfd261 --- /dev/null +++ b/Samples/GTKSystemWinFormsApp11/obj/GTKSystemWinFormsApp11.csproj.nuget.g.props @@ -0,0 +1,20 @@ + + + + True + NuGet + $(MSBuildThisFileDirectory)project.assets.json + $(UserProfile)\.nuget\packages\ + C:\Users\chj\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages;C:\Program Files\dotnet\sdk\NuGetFallbackFolder + PackageReference + 6.8.0 + + + + + + + + + + \ No newline at end of file diff --git a/Samples/GTKSystemWinFormsApp11/obj/GTKSystemWinFormsApp11.csproj.nuget.g.targets b/Samples/GTKSystemWinFormsApp11/obj/GTKSystemWinFormsApp11.csproj.nuget.g.targets new file mode 100644 index 0000000000000000000000000000000000000000..2577c2c4b2353615332374ad0d2c7784a49be84a --- /dev/null +++ b/Samples/GTKSystemWinFormsApp11/obj/GTKSystemWinFormsApp11.csproj.nuget.g.targets @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/Samples/GTKSystemWinFormsApp11/obj/project.assets.json b/Samples/GTKSystemWinFormsApp11/obj/project.assets.json new file mode 100644 index 0000000000000000000000000000000000000000..169201bdbbb6c2198e2180c2b3344acf37f08b1b --- /dev/null +++ b/Samples/GTKSystemWinFormsApp11/obj/project.assets.json @@ -0,0 +1,2334 @@ +{ + "version": 3, + "targets": { + "net8.0": { + "AtkSharp/3.24.24.95": { + "type": "package", + "dependencies": { + "GLibSharp": "3.24.24.95" + }, + "compile": { + "lib/net6.0/AtkSharp.dll": {} + }, + "runtime": { + "lib/net6.0/AtkSharp.dll": {} + } + }, + "CairoSharp/3.24.24.95": { + "type": "package", + "compile": { + "lib/net6.0/CairoSharp.dll": {} + }, + "runtime": { + "lib/net6.0/CairoSharp.dll": {} + } + }, + "GdkSharp/3.24.24.95": { + "type": "package", + "dependencies": { + "CairoSharp": "3.24.24.95", + "GLibSharp": "3.24.24.95", + "GioSharp": "3.24.24.95", + "PangoSharp": "3.24.24.95" + }, + "compile": { + "lib/net6.0/GdkSharp.dll": {} + }, + "runtime": { + "lib/net6.0/GdkSharp.dll": {} + } + }, + "GioSharp/3.24.24.95": { + "type": "package", + "dependencies": { + "GLibSharp": "3.24.24.95" + }, + "compile": { + "lib/net6.0/GioSharp.dll": {} + }, + "runtime": { + "lib/net6.0/GioSharp.dll": {} + } + }, + "GLibSharp/3.24.24.95": { + "type": "package", + "compile": { + "lib/net6.0/GLibSharp.dll": {} + }, + "runtime": { + "lib/net6.0/GLibSharp.dll": {} + } + }, + "GtkSharp/3.24.24.95": { + "type": "package", + "dependencies": { + "AtkSharp": "3.24.24.95", + "CairoSharp": "3.24.24.95", + "GLibSharp": "3.24.24.95", + "GdkSharp": "3.24.24.95", + "GioSharp": "3.24.24.95", + "PangoSharp": "3.24.24.95" + }, + "compile": { + "lib/net6.0/GtkSharp.dll": {} + }, + "runtime": { + "lib/net6.0/GtkSharp.dll": {} + }, + "build": { + "build/GtkSharp.targets": {} + } + }, + "GTKSystem.Windows.Forms/1.3.24.22": { + "type": "package", + "dependencies": { + "GtkSharp": "3.24.24.95", + "System.Resources.Extensions": "8.0.0" + }, + "compile": { + "lib/net8.0/GTKSystem.Windows.Forms.dll": {} + }, + "runtime": { + "lib/net8.0/GTKSystem.Windows.Forms.dll": {} + } + }, + "GTKSystem.Windows.FormsDesigner/1.0.0.4": { + "type": "package", + "dependencies": { + "Microsoft.Build.Utilities.Core": "17.1.0" + }, + "compile": { + "lib/netstandard2.0/GTKSystem.Windows.FormsDesigner.dll": {} + }, + "runtime": { + "lib/netstandard2.0/GTKSystem.Windows.FormsDesigner.dll": {} + }, + "build": { + "build/GTKSystem.Windows.FormsDesigner.props": {}, + "build/GTKSystem.Windows.FormsDesigner.targets": {} + } + }, + "Microsoft.Build.Framework/17.1.0": { + "type": "package", + "dependencies": { + "Microsoft.Win32.Registry": "4.3.0", + "System.Security.Permissions": "4.7.0" + }, + "compile": { + "lib/netstandard2.0/Microsoft.Build.Framework.dll": { + "related": ".pdb;.xml" + } + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Build.Framework.dll": { + "related": ".pdb;.xml" + } + } + }, + "Microsoft.Build.Utilities.Core/17.1.0": { + "type": "package", + "dependencies": { + "Microsoft.Build.Framework": "17.1.0", + "Microsoft.NET.StringTools": "1.0.0", + "Microsoft.Win32.Registry": "4.3.0", + "System.Collections.Immutable": "5.0.0", + "System.Configuration.ConfigurationManager": "4.7.0", + "System.Security.Permissions": "4.7.0", + "System.Text.Encoding.CodePages": "4.0.1" + }, + "compile": { + "lib/netstandard2.0/Microsoft.Build.Utilities.Core.dll": { + "related": ".pdb;.xml" + } + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Build.Utilities.Core.dll": { + "related": ".pdb;.xml" + } + } + }, + "Microsoft.NET.StringTools/1.0.0": { + "type": "package", + "dependencies": { + "System.Memory": "4.5.4", + "System.Runtime.CompilerServices.Unsafe": "5.0.0" + }, + "compile": { + "lib/netstandard2.0/Microsoft.NET.StringTools.dll": { + "related": ".pdb" + } + }, + "runtime": { + "lib/netstandard2.0/Microsoft.NET.StringTools.dll": { + "related": ".pdb" + } + } + }, + "Microsoft.NETCore.Platforms/3.1.0": { + "type": "package", + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} + } + }, + "Microsoft.NETCore.Targets/1.1.0": { + "type": "package", + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} + } + }, + "Microsoft.Win32.Registry/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Collections": "4.3.0", + "System.Globalization": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/Microsoft.Win32.Registry.dll": { + "related": ".xml" + } + }, + "runtimeTargets": { + "runtimes/unix/lib/netstandard1.3/Microsoft.Win32.Registry.dll": { + "assetType": "runtime", + "rid": "unix" + }, + "runtimes/win/lib/netstandard1.3/Microsoft.Win32.Registry.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "Microsoft.Win32.SystemEvents/4.7.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0" + }, + "compile": { + "ref/netstandard2.0/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Win32.SystemEvents.dll": { + "related": ".xml" + } + }, + "runtimeTargets": { + "runtimes/win/lib/netcoreapp3.0/Microsoft.Win32.SystemEvents.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "PangoSharp/3.24.24.95": { + "type": "package", + "dependencies": { + "CairoSharp": "3.24.24.95", + "GLibSharp": "3.24.24.95" + }, + "compile": { + "lib/net6.0/PangoSharp.dll": {} + }, + "runtime": { + "lib/net6.0/PangoSharp.dll": {} + } + }, + "System.Collections/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/_._": { + "related": ".xml" + } + } + }, + "System.Collections.Immutable/5.0.0": { + "type": "package", + "compile": { + "lib/netstandard2.0/System.Collections.Immutable.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/System.Collections.Immutable.dll": { + "related": ".xml" + } + } + }, + "System.Configuration.ConfigurationManager/4.7.0": { + "type": "package", + "dependencies": { + "System.Security.Cryptography.ProtectedData": "4.7.0", + "System.Security.Permissions": "4.7.0" + }, + "compile": { + "ref/netstandard2.0/System.Configuration.ConfigurationManager.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/System.Configuration.ConfigurationManager.dll": { + "related": ".xml" + } + } + }, + "System.Drawing.Common/4.7.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "Microsoft.Win32.SystemEvents": "4.7.0" + }, + "compile": { + "ref/netcoreapp3.0/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/System.Drawing.Common.dll": {} + }, + "runtimeTargets": { + "runtimes/unix/lib/netcoreapp3.0/System.Drawing.Common.dll": { + "assetType": "runtime", + "rid": "unix" + }, + "runtimes/win/lib/netcoreapp3.0/System.Drawing.Common.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.Globalization/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/_._": { + "related": ".xml" + } + } + }, + "System.IO/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading.Tasks": "4.3.0" + }, + "compile": { + "ref/netstandard1.5/_._": { + "related": ".xml" + } + } + }, + "System.Memory/4.5.4": { + "type": "package", + "compile": { + "ref/netcoreapp2.1/_._": {} + }, + "runtime": { + "lib/netcoreapp2.1/_._": {} + } + }, + "System.Reflection/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.IO": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.5/_._": { + "related": ".xml" + } + } + }, + "System.Reflection.Primitives/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.0/_._": { + "related": ".xml" + } + } + }, + "System.Resources.Extensions/8.0.0": { + "type": "package", + "compile": { + "lib/net8.0/System.Resources.Extensions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/System.Resources.Extensions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Resources.ResourceManager/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Globalization": "4.3.0", + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.0/_._": { + "related": ".xml" + } + } + }, + "System.Runtime/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0" + }, + "compile": { + "ref/netstandard1.5/System.Runtime.dll": { + "related": ".xml" + } + } + }, + "System.Runtime.CompilerServices.Unsafe/5.0.0": { + "type": "package", + "compile": { + "ref/netstandard2.1/System.Runtime.CompilerServices.Unsafe.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.dll": { + "related": ".xml" + } + } + }, + "System.Runtime.Extensions/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.5/_._": { + "related": ".xml" + } + } + }, + "System.Runtime.Handles/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/System.Runtime.Handles.dll": { + "related": ".xml" + } + } + }, + "System.Runtime.InteropServices/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Reflection": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Handles": "4.3.0" + }, + "compile": { + "ref/netcoreapp1.1/_._": {} + } + }, + "System.Security.AccessControl/4.7.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "System.Security.Principal.Windows": "4.7.0" + }, + "compile": { + "ref/netstandard2.0/System.Security.AccessControl.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/System.Security.AccessControl.dll": { + "related": ".xml" + } + }, + "runtimeTargets": { + "runtimes/win/lib/netcoreapp2.0/System.Security.AccessControl.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.Security.Cryptography.ProtectedData/4.7.0": { + "type": "package", + "compile": { + "ref/netstandard2.0/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/System.Security.Cryptography.ProtectedData.dll": { + "related": ".xml" + } + }, + "runtimeTargets": { + "runtimes/win/lib/netstandard2.0/System.Security.Cryptography.ProtectedData.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.Security.Permissions/4.7.0": { + "type": "package", + "dependencies": { + "System.Security.AccessControl": "4.7.0", + "System.Windows.Extensions": "4.7.0" + }, + "compile": { + "ref/netcoreapp3.0/System.Security.Permissions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netcoreapp3.0/System.Security.Permissions.dll": { + "related": ".xml" + } + } + }, + "System.Security.Principal.Windows/4.7.0": { + "type": "package", + "compile": { + "ref/netcoreapp3.0/System.Security.Principal.Windows.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/System.Security.Principal.Windows.dll": { + "related": ".xml" + } + }, + "runtimeTargets": { + "runtimes/unix/lib/netcoreapp2.1/System.Security.Principal.Windows.dll": { + "assetType": "runtime", + "rid": "unix" + }, + "runtimes/win/lib/netcoreapp2.1/System.Security.Principal.Windows.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.Text.Encoding/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/System.Text.Encoding.dll": { + "related": ".xml" + } + } + }, + "System.Text.Encoding.CodePages/4.0.1": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "System.Collections": "4.0.11", + "System.Globalization": "4.0.11", + "System.IO": "4.1.0", + "System.Reflection": "4.1.0", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0", + "System.Runtime.Handles": "4.0.1", + "System.Runtime.InteropServices": "4.1.0", + "System.Text.Encoding": "4.0.11", + "System.Threading": "4.0.11" + }, + "compile": { + "ref/netstandard1.3/System.Text.Encoding.CodePages.dll": { + "related": ".xml" + } + }, + "runtimeTargets": { + "runtimes/unix/lib/netstandard1.3/System.Text.Encoding.CodePages.dll": { + "assetType": "runtime", + "rid": "unix" + }, + "runtimes/win/lib/netstandard1.3/System.Text.Encoding.CodePages.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.Threading/4.0.11": { + "type": "package", + "dependencies": { + "System.Runtime": "4.1.0", + "System.Threading.Tasks": "4.0.11" + }, + "compile": { + "ref/netstandard1.3/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.3/System.Threading.dll": {} + } + }, + "System.Threading.Tasks/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/_._": { + "related": ".xml" + } + } + }, + "System.Windows.Extensions/4.7.0": { + "type": "package", + "dependencies": { + "System.Drawing.Common": "4.7.0" + }, + "compile": { + "ref/netcoreapp3.0/System.Windows.Extensions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netcoreapp3.0/System.Windows.Extensions.dll": { + "related": ".xml" + } + }, + "runtimeTargets": { + "runtimes/win/lib/netcoreapp3.0/System.Windows.Extensions.dll": { + "assetType": "runtime", + "rid": "win" + } + } + } + } + }, + "libraries": { + "AtkSharp/3.24.24.95": { + "sha512": "LnSfsc0y11gfzczZj5bnpwcFkXFZuVTSSd92ML/FcHIM7FU+cAfm1UkAonv5BdwTRhzDbNDE39vihao/k75sUA==", + "type": "package", + "path": "atksharp/3.24.24.95", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "atksharp.3.24.24.95.nupkg.sha512", + "atksharp.nuspec", + "lib/net6.0/AtkSharp.dll", + "lib/netstandard2.0/AtkSharp.dll" + ] + }, + "CairoSharp/3.24.24.95": { + "sha512": "EZ9KT3pwVAol35XbZW0Uwdg2LqhDvPnWdhqIrsedhDx+Omnu56hLzxh8mZGqmQvEwJE8Opbda4w9CqDtXbX6Vw==", + "type": "package", + "path": "cairosharp/3.24.24.95", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "cairosharp.3.24.24.95.nupkg.sha512", + "cairosharp.nuspec", + "lib/net6.0/CairoSharp.dll", + "lib/netstandard2.0/CairoSharp.dll" + ] + }, + "GdkSharp/3.24.24.95": { + "sha512": "rABpIGkxr8lOdyhEmrKXzjih3z3932kjqUmm5qaQhWVSvu9YepEk3J1FApgnKCW/EWEzlerzxnJArsyOlgMsZQ==", + "type": "package", + "path": "gdksharp/3.24.24.95", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "gdksharp.3.24.24.95.nupkg.sha512", + "gdksharp.nuspec", + "lib/net6.0/GdkSharp.dll", + "lib/netstandard2.0/GdkSharp.dll" + ] + }, + "GioSharp/3.24.24.95": { + "sha512": "avYEDFlYgbogb+Y7ZhIXQpyJfL83bnPpBKY642YEW9PQ+pRK3qf2k0opvd5oHccXfByj6kAQjmRUSIS0pj19Fg==", + "type": "package", + "path": "giosharp/3.24.24.95", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "giosharp.3.24.24.95.nupkg.sha512", + "giosharp.nuspec", + "lib/net6.0/GioSharp.dll", + "lib/netstandard2.0/GioSharp.dll" + ] + }, + "GLibSharp/3.24.24.95": { + "sha512": "1viZRMVjddf2HUCW7WDXT47rHssteHkAOimXQ2/pI8oGrPGNFuuw5MbX8BOIy73hCWVqo7JEMONv3z32OrCoCQ==", + "type": "package", + "path": "glibsharp/3.24.24.95", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "glibsharp.3.24.24.95.nupkg.sha512", + "glibsharp.nuspec", + "lib/net6.0/GLibSharp.dll", + "lib/netstandard2.0/GLibSharp.dll" + ] + }, + "GtkSharp/3.24.24.95": { + "sha512": "RRUY45hAa5gsMcadvVjcLUzMjVtmuHSYTcIwM6j8LNgKhzFFHk69qM1D5ULfGxaWmVjicqNWiFtOtk8WsvPqaQ==", + "type": "package", + "path": "gtksharp/3.24.24.95", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "build/GtkSharp.targets", + "gtksharp.3.24.24.95.nupkg.sha512", + "gtksharp.nuspec", + "lib/net6.0/GtkSharp.dll", + "lib/netstandard2.0/GtkSharp.dll" + ] + }, + "GTKSystem.Windows.Forms/1.3.24.22": { + "sha512": "9AHALisfDDyI7mhBH2DdVoGcuEROZoAhajGFnJHk+d/bySRZH9WBRQ+vcOCSxTaG3P7bjjHxbanYeDIxBwYv8A==", + "type": "package", + "path": "gtksystem.windows.forms/1.3.24.22", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "README.md", + "gtksystem.windows.forms.1.3.24.22.nupkg.sha512", + "gtksystem.windows.forms.nuspec", + "lib/net6.0/GTKSystem.Windows.Forms.dll", + "lib/net7.0/GTKSystem.Windows.Forms.dll", + "lib/net8.0/GTKSystem.Windows.Forms.dll", + "lib/netcoreapp3.1/GTKSystem.Windows.Forms.dll" + ] + }, + "GTKSystem.Windows.FormsDesigner/1.0.0.4": { + "sha512": "lv6mhLYcA6jxJhyMSFlKuDX3RZhy4jZZs3XWJXNPW+kBOjJpvWVlHAEgvQdTxtu+CzQt5EQZuaAHnXtoo25USQ==", + "type": "package", + "path": "gtksystem.windows.formsdesigner/1.0.0.4", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.txt", + "README.md", + "build/GTKSystem.Windows.FormsDesigner.props", + "build/GTKSystem.Windows.FormsDesigner.targets", + "gtksystem.windows.formsdesigner.1.0.0.4.nupkg.sha512", + "gtksystem.windows.formsdesigner.nuspec", + "lib/netstandard2.0/GTKSystem.Windows.FormsDesigner.dll" + ] + }, + "Microsoft.Build.Framework/17.1.0": { + "sha512": "7PPEbjuL/lKQ8ftblxwBZKf5alZCA4GDvBTiO3UAVxtRe52a2jL3mc8TpKNiJZzytGz7fKdR5ClDCs7+Uw4hMg==", + "type": "package", + "path": "microsoft.build.framework/17.1.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "MSBuild-NuGet-Icon.png", + "lib/net472/Microsoft.Build.Framework.dll", + "lib/net472/Microsoft.Build.Framework.pdb", + "lib/net472/Microsoft.Build.Framework.xml", + "lib/netstandard2.0/Microsoft.Build.Framework.dll", + "lib/netstandard2.0/Microsoft.Build.Framework.pdb", + "lib/netstandard2.0/Microsoft.Build.Framework.xml", + "microsoft.build.framework.17.1.0.nupkg.sha512", + "microsoft.build.framework.nuspec", + "notices/THIRDPARTYNOTICES.txt" + ] + }, + "Microsoft.Build.Utilities.Core/17.1.0": { + "sha512": "JqhQ4q6L4IyA0Wh3PrDrxHHYMVHyOLIusyC4imAnhcnZiOC4+CwgVRSdo8fLsQmvz0Jab8FFrU1NPZFbDoxRng==", + "type": "package", + "path": "microsoft.build.utilities.core/17.1.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "MSBuild-NuGet-Icon.png", + "lib/net472/Microsoft.Build.Utilities.Core.dll", + "lib/net472/Microsoft.Build.Utilities.Core.pdb", + "lib/net472/Microsoft.Build.Utilities.Core.xml", + "lib/netstandard2.0/Microsoft.Build.Utilities.Core.dll", + "lib/netstandard2.0/Microsoft.Build.Utilities.Core.pdb", + "lib/netstandard2.0/Microsoft.Build.Utilities.Core.xml", + "microsoft.build.utilities.core.17.1.0.nupkg.sha512", + "microsoft.build.utilities.core.nuspec", + "notices/THIRDPARTYNOTICES.txt" + ] + }, + "Microsoft.NET.StringTools/1.0.0": { + "sha512": "ZYVcoDM0LnSyT5nWoRGfShYdOecCw2sOXWwP6j1Z0u48Xq3+BVvZ+EiPCX9/8Gz439giW+O1H1kWF9Eb/w6rVg==", + "type": "package", + "path": "microsoft.net.stringtools/1.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "MSBuild-NuGet-Icon.png", + "lib/net35/Microsoft.NET.StringTools.net35.dll", + "lib/net35/Microsoft.NET.StringTools.net35.pdb", + "lib/net472/Microsoft.NET.StringTools.dll", + "lib/net472/Microsoft.NET.StringTools.pdb", + "lib/netstandard2.0/Microsoft.NET.StringTools.dll", + "lib/netstandard2.0/Microsoft.NET.StringTools.pdb", + "microsoft.net.stringtools.1.0.0.nupkg.sha512", + "microsoft.net.stringtools.nuspec", + "notices/THIRDPARTYNOTICES.txt" + ] + }, + "Microsoft.NETCore.Platforms/3.1.0": { + "sha512": "z7aeg8oHln2CuNulfhiLYxCVMPEwBl3rzicjvIX+4sUuCwvXw5oXQEtbiU2c0z4qYL5L3Kmx0mMA/+t/SbY67w==", + "type": "package", + "path": "microsoft.netcore.platforms/3.1.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/netstandard1.0/_._", + "microsoft.netcore.platforms.3.1.0.nupkg.sha512", + "microsoft.netcore.platforms.nuspec", + "runtime.json", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "Microsoft.NETCore.Targets/1.1.0": { + "sha512": "aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg==", + "type": "package", + "path": "microsoft.netcore.targets/1.1.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/netstandard1.0/_._", + "microsoft.netcore.targets.1.1.0.nupkg.sha512", + "microsoft.netcore.targets.nuspec", + "runtime.json" + ] + }, + "Microsoft.Win32.Registry/4.3.0": { + "sha512": "Lw1/VwLH1yxz6SfFEjVRCN0pnflLEsWgnV4qsdJ512/HhTwnKXUG+zDQ4yTO3K/EJQemGoNaBHX5InISNKTzUQ==", + "type": "package", + "path": "microsoft.win32.registry/4.3.0", + "files": [ + ".nupkg.metadata", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/net46/Microsoft.Win32.Registry.dll", + "microsoft.win32.registry.4.3.0.nupkg.sha512", + "microsoft.win32.registry.nuspec", + "ref/net46/Microsoft.Win32.Registry.dll", + "ref/netstandard1.3/Microsoft.Win32.Registry.dll", + "ref/netstandard1.3/Microsoft.Win32.Registry.xml", + "ref/netstandard1.3/de/Microsoft.Win32.Registry.xml", + "ref/netstandard1.3/es/Microsoft.Win32.Registry.xml", + "ref/netstandard1.3/fr/Microsoft.Win32.Registry.xml", + "ref/netstandard1.3/it/Microsoft.Win32.Registry.xml", + "ref/netstandard1.3/ja/Microsoft.Win32.Registry.xml", + "ref/netstandard1.3/ko/Microsoft.Win32.Registry.xml", + "ref/netstandard1.3/ru/Microsoft.Win32.Registry.xml", + "ref/netstandard1.3/zh-hans/Microsoft.Win32.Registry.xml", + "ref/netstandard1.3/zh-hant/Microsoft.Win32.Registry.xml", + "runtimes/unix/lib/netstandard1.3/Microsoft.Win32.Registry.dll", + "runtimes/win/lib/net46/Microsoft.Win32.Registry.dll", + "runtimes/win/lib/netcore50/_._", + "runtimes/win/lib/netstandard1.3/Microsoft.Win32.Registry.dll" + ] + }, + "Microsoft.Win32.SystemEvents/4.7.0": { + "sha512": "mtVirZr++rq+XCDITMUdnETD59XoeMxSpLRIII7JRI6Yj0LEDiO1pPn0ktlnIj12Ix8bfvQqQDMMIF9wC98oCA==", + "type": "package", + "path": "microsoft.win32.systemevents/4.7.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/net461/Microsoft.Win32.SystemEvents.dll", + "lib/net461/Microsoft.Win32.SystemEvents.xml", + "lib/netstandard2.0/Microsoft.Win32.SystemEvents.dll", + "lib/netstandard2.0/Microsoft.Win32.SystemEvents.xml", + "microsoft.win32.systemevents.4.7.0.nupkg.sha512", + "microsoft.win32.systemevents.nuspec", + "ref/net461/Microsoft.Win32.SystemEvents.dll", + "ref/net461/Microsoft.Win32.SystemEvents.xml", + "ref/net472/Microsoft.Win32.SystemEvents.dll", + "ref/net472/Microsoft.Win32.SystemEvents.xml", + "ref/netstandard2.0/Microsoft.Win32.SystemEvents.dll", + "ref/netstandard2.0/Microsoft.Win32.SystemEvents.xml", + "runtimes/win/lib/netcoreapp2.0/Microsoft.Win32.SystemEvents.dll", + "runtimes/win/lib/netcoreapp2.0/Microsoft.Win32.SystemEvents.xml", + "runtimes/win/lib/netcoreapp3.0/Microsoft.Win32.SystemEvents.dll", + "runtimes/win/lib/netcoreapp3.0/Microsoft.Win32.SystemEvents.xml", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "PangoSharp/3.24.24.95": { + "sha512": "H7JeyEvLsgvsbamGpRgoNtdvzPiGwwsUuoeTobN1C/JRjw1J8Snw0yf2WBr7CKx5GLwbrwpQYOb7N/HD17ME8A==", + "type": "package", + "path": "pangosharp/3.24.24.95", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/net6.0/PangoSharp.dll", + "lib/netstandard2.0/PangoSharp.dll", + "pangosharp.3.24.24.95.nupkg.sha512", + "pangosharp.nuspec" + ] + }, + "System.Collections/4.3.0": { + "sha512": "3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==", + "type": "package", + "path": "system.collections/4.3.0", + "files": [ + ".nupkg.metadata", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Collections.dll", + "ref/netcore50/System.Collections.xml", + "ref/netcore50/de/System.Collections.xml", + "ref/netcore50/es/System.Collections.xml", + "ref/netcore50/fr/System.Collections.xml", + "ref/netcore50/it/System.Collections.xml", + "ref/netcore50/ja/System.Collections.xml", + "ref/netcore50/ko/System.Collections.xml", + "ref/netcore50/ru/System.Collections.xml", + "ref/netcore50/zh-hans/System.Collections.xml", + "ref/netcore50/zh-hant/System.Collections.xml", + "ref/netstandard1.0/System.Collections.dll", + "ref/netstandard1.0/System.Collections.xml", + "ref/netstandard1.0/de/System.Collections.xml", + "ref/netstandard1.0/es/System.Collections.xml", + "ref/netstandard1.0/fr/System.Collections.xml", + "ref/netstandard1.0/it/System.Collections.xml", + "ref/netstandard1.0/ja/System.Collections.xml", + "ref/netstandard1.0/ko/System.Collections.xml", + "ref/netstandard1.0/ru/System.Collections.xml", + "ref/netstandard1.0/zh-hans/System.Collections.xml", + "ref/netstandard1.0/zh-hant/System.Collections.xml", + "ref/netstandard1.3/System.Collections.dll", + "ref/netstandard1.3/System.Collections.xml", + "ref/netstandard1.3/de/System.Collections.xml", + "ref/netstandard1.3/es/System.Collections.xml", + "ref/netstandard1.3/fr/System.Collections.xml", + "ref/netstandard1.3/it/System.Collections.xml", + "ref/netstandard1.3/ja/System.Collections.xml", + "ref/netstandard1.3/ko/System.Collections.xml", + "ref/netstandard1.3/ru/System.Collections.xml", + "ref/netstandard1.3/zh-hans/System.Collections.xml", + "ref/netstandard1.3/zh-hant/System.Collections.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.collections.4.3.0.nupkg.sha512", + "system.collections.nuspec" + ] + }, + "System.Collections.Immutable/5.0.0": { + "sha512": "FXkLXiK0sVVewcso0imKQoOxjoPAj42R8HtjjbSjVPAzwDfzoyoznWxgA3c38LDbN9SJux1xXoXYAhz98j7r2g==", + "type": "package", + "path": "system.collections.immutable/5.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/net461/System.Collections.Immutable.dll", + "lib/net461/System.Collections.Immutable.xml", + "lib/netstandard1.0/System.Collections.Immutable.dll", + "lib/netstandard1.0/System.Collections.Immutable.xml", + "lib/netstandard1.3/System.Collections.Immutable.dll", + "lib/netstandard1.3/System.Collections.Immutable.xml", + "lib/netstandard2.0/System.Collections.Immutable.dll", + "lib/netstandard2.0/System.Collections.Immutable.xml", + "lib/portable-net45+win8+wp8+wpa81/System.Collections.Immutable.dll", + "lib/portable-net45+win8+wp8+wpa81/System.Collections.Immutable.xml", + "system.collections.immutable.5.0.0.nupkg.sha512", + "system.collections.immutable.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.Configuration.ConfigurationManager/4.7.0": { + "sha512": "/anOTeSZCNNI2zDilogWrZ8pNqCmYbzGNexUnNhjW8k0sHqEZ2nHJBp147jBV3hGYswu5lINpNg1vxR7bnqvVA==", + "type": "package", + "path": "system.configuration.configurationmanager/4.7.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/net461/System.Configuration.ConfigurationManager.dll", + "lib/net461/System.Configuration.ConfigurationManager.xml", + "lib/netstandard2.0/System.Configuration.ConfigurationManager.dll", + "lib/netstandard2.0/System.Configuration.ConfigurationManager.xml", + "ref/net461/System.Configuration.ConfigurationManager.dll", + "ref/net461/System.Configuration.ConfigurationManager.xml", + "ref/netstandard2.0/System.Configuration.ConfigurationManager.dll", + "ref/netstandard2.0/System.Configuration.ConfigurationManager.xml", + "system.configuration.configurationmanager.4.7.0.nupkg.sha512", + "system.configuration.configurationmanager.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.Drawing.Common/4.7.0": { + "sha512": "v+XbyYHaZjDfn0ENmJEV1VYLgGgCTx1gnfOBcppowbpOAriglYgGCvFCPr2EEZyBvXlpxbEsTwkOlInl107ahA==", + "type": "package", + "path": "system.drawing.common/4.7.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net461/System.Drawing.Common.dll", + "lib/netstandard2.0/System.Drawing.Common.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net461/System.Drawing.Common.dll", + "ref/netcoreapp3.0/System.Drawing.Common.dll", + "ref/netcoreapp3.0/System.Drawing.Common.xml", + "ref/netstandard2.0/System.Drawing.Common.dll", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/unix/lib/netcoreapp2.0/System.Drawing.Common.dll", + "runtimes/unix/lib/netcoreapp3.0/System.Drawing.Common.dll", + "runtimes/unix/lib/netcoreapp3.0/System.Drawing.Common.xml", + "runtimes/win/lib/netcoreapp2.0/System.Drawing.Common.dll", + "runtimes/win/lib/netcoreapp3.0/System.Drawing.Common.dll", + "runtimes/win/lib/netcoreapp3.0/System.Drawing.Common.xml", + "system.drawing.common.4.7.0.nupkg.sha512", + "system.drawing.common.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.Globalization/4.3.0": { + "sha512": "kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==", + "type": "package", + "path": "system.globalization/4.3.0", + "files": [ + ".nupkg.metadata", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Globalization.dll", + "ref/netcore50/System.Globalization.xml", + "ref/netcore50/de/System.Globalization.xml", + "ref/netcore50/es/System.Globalization.xml", + "ref/netcore50/fr/System.Globalization.xml", + "ref/netcore50/it/System.Globalization.xml", + "ref/netcore50/ja/System.Globalization.xml", + "ref/netcore50/ko/System.Globalization.xml", + "ref/netcore50/ru/System.Globalization.xml", + "ref/netcore50/zh-hans/System.Globalization.xml", + "ref/netcore50/zh-hant/System.Globalization.xml", + "ref/netstandard1.0/System.Globalization.dll", + "ref/netstandard1.0/System.Globalization.xml", + "ref/netstandard1.0/de/System.Globalization.xml", + "ref/netstandard1.0/es/System.Globalization.xml", + "ref/netstandard1.0/fr/System.Globalization.xml", + "ref/netstandard1.0/it/System.Globalization.xml", + "ref/netstandard1.0/ja/System.Globalization.xml", + "ref/netstandard1.0/ko/System.Globalization.xml", + "ref/netstandard1.0/ru/System.Globalization.xml", + "ref/netstandard1.0/zh-hans/System.Globalization.xml", + "ref/netstandard1.0/zh-hant/System.Globalization.xml", + "ref/netstandard1.3/System.Globalization.dll", + "ref/netstandard1.3/System.Globalization.xml", + "ref/netstandard1.3/de/System.Globalization.xml", + "ref/netstandard1.3/es/System.Globalization.xml", + "ref/netstandard1.3/fr/System.Globalization.xml", + "ref/netstandard1.3/it/System.Globalization.xml", + "ref/netstandard1.3/ja/System.Globalization.xml", + "ref/netstandard1.3/ko/System.Globalization.xml", + "ref/netstandard1.3/ru/System.Globalization.xml", + "ref/netstandard1.3/zh-hans/System.Globalization.xml", + "ref/netstandard1.3/zh-hant/System.Globalization.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.globalization.4.3.0.nupkg.sha512", + "system.globalization.nuspec" + ] + }, + "System.IO/4.3.0": { + "sha512": "3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==", + "type": "package", + "path": "system.io/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.IO.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.IO.dll", + "ref/netcore50/System.IO.dll", + "ref/netcore50/System.IO.xml", + "ref/netcore50/de/System.IO.xml", + "ref/netcore50/es/System.IO.xml", + "ref/netcore50/fr/System.IO.xml", + "ref/netcore50/it/System.IO.xml", + "ref/netcore50/ja/System.IO.xml", + "ref/netcore50/ko/System.IO.xml", + "ref/netcore50/ru/System.IO.xml", + "ref/netcore50/zh-hans/System.IO.xml", + "ref/netcore50/zh-hant/System.IO.xml", + "ref/netstandard1.0/System.IO.dll", + "ref/netstandard1.0/System.IO.xml", + "ref/netstandard1.0/de/System.IO.xml", + "ref/netstandard1.0/es/System.IO.xml", + "ref/netstandard1.0/fr/System.IO.xml", + "ref/netstandard1.0/it/System.IO.xml", + "ref/netstandard1.0/ja/System.IO.xml", + "ref/netstandard1.0/ko/System.IO.xml", + "ref/netstandard1.0/ru/System.IO.xml", + "ref/netstandard1.0/zh-hans/System.IO.xml", + "ref/netstandard1.0/zh-hant/System.IO.xml", + "ref/netstandard1.3/System.IO.dll", + "ref/netstandard1.3/System.IO.xml", + "ref/netstandard1.3/de/System.IO.xml", + "ref/netstandard1.3/es/System.IO.xml", + "ref/netstandard1.3/fr/System.IO.xml", + "ref/netstandard1.3/it/System.IO.xml", + "ref/netstandard1.3/ja/System.IO.xml", + "ref/netstandard1.3/ko/System.IO.xml", + "ref/netstandard1.3/ru/System.IO.xml", + "ref/netstandard1.3/zh-hans/System.IO.xml", + "ref/netstandard1.3/zh-hant/System.IO.xml", + "ref/netstandard1.5/System.IO.dll", + "ref/netstandard1.5/System.IO.xml", + "ref/netstandard1.5/de/System.IO.xml", + "ref/netstandard1.5/es/System.IO.xml", + "ref/netstandard1.5/fr/System.IO.xml", + "ref/netstandard1.5/it/System.IO.xml", + "ref/netstandard1.5/ja/System.IO.xml", + "ref/netstandard1.5/ko/System.IO.xml", + "ref/netstandard1.5/ru/System.IO.xml", + "ref/netstandard1.5/zh-hans/System.IO.xml", + "ref/netstandard1.5/zh-hant/System.IO.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.io.4.3.0.nupkg.sha512", + "system.io.nuspec" + ] + }, + "System.Memory/4.5.4": { + "sha512": "1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw==", + "type": "package", + "path": "system.memory/4.5.4", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/net461/System.Memory.dll", + "lib/net461/System.Memory.xml", + "lib/netcoreapp2.1/_._", + "lib/netstandard1.1/System.Memory.dll", + "lib/netstandard1.1/System.Memory.xml", + "lib/netstandard2.0/System.Memory.dll", + "lib/netstandard2.0/System.Memory.xml", + "ref/netcoreapp2.1/_._", + "system.memory.4.5.4.nupkg.sha512", + "system.memory.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.Reflection/4.3.0": { + "sha512": "KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==", + "type": "package", + "path": "system.reflection/4.3.0", + "files": [ + ".nupkg.metadata", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.Reflection.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.Reflection.dll", + "ref/netcore50/System.Reflection.dll", + "ref/netcore50/System.Reflection.xml", + "ref/netcore50/de/System.Reflection.xml", + "ref/netcore50/es/System.Reflection.xml", + "ref/netcore50/fr/System.Reflection.xml", + "ref/netcore50/it/System.Reflection.xml", + "ref/netcore50/ja/System.Reflection.xml", + "ref/netcore50/ko/System.Reflection.xml", + "ref/netcore50/ru/System.Reflection.xml", + "ref/netcore50/zh-hans/System.Reflection.xml", + "ref/netcore50/zh-hant/System.Reflection.xml", + "ref/netstandard1.0/System.Reflection.dll", + "ref/netstandard1.0/System.Reflection.xml", + "ref/netstandard1.0/de/System.Reflection.xml", + "ref/netstandard1.0/es/System.Reflection.xml", + "ref/netstandard1.0/fr/System.Reflection.xml", + "ref/netstandard1.0/it/System.Reflection.xml", + "ref/netstandard1.0/ja/System.Reflection.xml", + "ref/netstandard1.0/ko/System.Reflection.xml", + "ref/netstandard1.0/ru/System.Reflection.xml", + "ref/netstandard1.0/zh-hans/System.Reflection.xml", + "ref/netstandard1.0/zh-hant/System.Reflection.xml", + "ref/netstandard1.3/System.Reflection.dll", + "ref/netstandard1.3/System.Reflection.xml", + "ref/netstandard1.3/de/System.Reflection.xml", + "ref/netstandard1.3/es/System.Reflection.xml", + "ref/netstandard1.3/fr/System.Reflection.xml", + "ref/netstandard1.3/it/System.Reflection.xml", + "ref/netstandard1.3/ja/System.Reflection.xml", + "ref/netstandard1.3/ko/System.Reflection.xml", + "ref/netstandard1.3/ru/System.Reflection.xml", + "ref/netstandard1.3/zh-hans/System.Reflection.xml", + "ref/netstandard1.3/zh-hant/System.Reflection.xml", + "ref/netstandard1.5/System.Reflection.dll", + "ref/netstandard1.5/System.Reflection.xml", + "ref/netstandard1.5/de/System.Reflection.xml", + "ref/netstandard1.5/es/System.Reflection.xml", + "ref/netstandard1.5/fr/System.Reflection.xml", + "ref/netstandard1.5/it/System.Reflection.xml", + "ref/netstandard1.5/ja/System.Reflection.xml", + "ref/netstandard1.5/ko/System.Reflection.xml", + "ref/netstandard1.5/ru/System.Reflection.xml", + "ref/netstandard1.5/zh-hans/System.Reflection.xml", + "ref/netstandard1.5/zh-hant/System.Reflection.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.reflection.4.3.0.nupkg.sha512", + "system.reflection.nuspec" + ] + }, + "System.Reflection.Primitives/4.3.0": { + "sha512": "5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==", + "type": "package", + "path": "system.reflection.primitives/4.3.0", + "files": [ + ".nupkg.metadata", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Reflection.Primitives.dll", + "ref/netcore50/System.Reflection.Primitives.xml", + "ref/netcore50/de/System.Reflection.Primitives.xml", + "ref/netcore50/es/System.Reflection.Primitives.xml", + "ref/netcore50/fr/System.Reflection.Primitives.xml", + "ref/netcore50/it/System.Reflection.Primitives.xml", + "ref/netcore50/ja/System.Reflection.Primitives.xml", + "ref/netcore50/ko/System.Reflection.Primitives.xml", + "ref/netcore50/ru/System.Reflection.Primitives.xml", + "ref/netcore50/zh-hans/System.Reflection.Primitives.xml", + "ref/netcore50/zh-hant/System.Reflection.Primitives.xml", + "ref/netstandard1.0/System.Reflection.Primitives.dll", + "ref/netstandard1.0/System.Reflection.Primitives.xml", + "ref/netstandard1.0/de/System.Reflection.Primitives.xml", + "ref/netstandard1.0/es/System.Reflection.Primitives.xml", + "ref/netstandard1.0/fr/System.Reflection.Primitives.xml", + "ref/netstandard1.0/it/System.Reflection.Primitives.xml", + "ref/netstandard1.0/ja/System.Reflection.Primitives.xml", + "ref/netstandard1.0/ko/System.Reflection.Primitives.xml", + "ref/netstandard1.0/ru/System.Reflection.Primitives.xml", + "ref/netstandard1.0/zh-hans/System.Reflection.Primitives.xml", + "ref/netstandard1.0/zh-hant/System.Reflection.Primitives.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.reflection.primitives.4.3.0.nupkg.sha512", + "system.reflection.primitives.nuspec" + ] + }, + "System.Resources.Extensions/8.0.0": { + "sha512": "psnQ6GRQOvt+evda5C4nD5EuV49mz2Tv0DD2JDVDEbE/TKoMukxSkGJcsBJ0pajpPuFRr67syFYlkJ4Wj6A5Zw==", + "type": "package", + "path": "system.resources.extensions/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Resources.Extensions.targets", + "buildTransitive/net462/System.Resources.Extensions.targets", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Resources.Extensions.targets", + "lib/net462/System.Resources.Extensions.dll", + "lib/net462/System.Resources.Extensions.xml", + "lib/net6.0/System.Resources.Extensions.dll", + "lib/net6.0/System.Resources.Extensions.xml", + "lib/net7.0/System.Resources.Extensions.dll", + "lib/net7.0/System.Resources.Extensions.xml", + "lib/net8.0/System.Resources.Extensions.dll", + "lib/net8.0/System.Resources.Extensions.xml", + "lib/netstandard2.0/System.Resources.Extensions.dll", + "lib/netstandard2.0/System.Resources.Extensions.xml", + "system.resources.extensions.8.0.0.nupkg.sha512", + "system.resources.extensions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Resources.ResourceManager/4.3.0": { + "sha512": "/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==", + "type": "package", + "path": "system.resources.resourcemanager/4.3.0", + "files": [ + ".nupkg.metadata", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Resources.ResourceManager.dll", + "ref/netcore50/System.Resources.ResourceManager.xml", + "ref/netcore50/de/System.Resources.ResourceManager.xml", + "ref/netcore50/es/System.Resources.ResourceManager.xml", + "ref/netcore50/fr/System.Resources.ResourceManager.xml", + "ref/netcore50/it/System.Resources.ResourceManager.xml", + "ref/netcore50/ja/System.Resources.ResourceManager.xml", + "ref/netcore50/ko/System.Resources.ResourceManager.xml", + "ref/netcore50/ru/System.Resources.ResourceManager.xml", + "ref/netcore50/zh-hans/System.Resources.ResourceManager.xml", + "ref/netcore50/zh-hant/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/System.Resources.ResourceManager.dll", + "ref/netstandard1.0/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/de/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/es/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/fr/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/it/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/ja/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/ko/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/ru/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/zh-hans/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/zh-hant/System.Resources.ResourceManager.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.resources.resourcemanager.4.3.0.nupkg.sha512", + "system.resources.resourcemanager.nuspec" + ] + }, + "System.Runtime/4.3.0": { + "sha512": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==", + "type": "package", + "path": "system.runtime/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.Runtime.dll", + "lib/portable-net45+win8+wp80+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.Runtime.dll", + "ref/netcore50/System.Runtime.dll", + "ref/netcore50/System.Runtime.xml", + "ref/netcore50/de/System.Runtime.xml", + "ref/netcore50/es/System.Runtime.xml", + "ref/netcore50/fr/System.Runtime.xml", + "ref/netcore50/it/System.Runtime.xml", + "ref/netcore50/ja/System.Runtime.xml", + "ref/netcore50/ko/System.Runtime.xml", + "ref/netcore50/ru/System.Runtime.xml", + "ref/netcore50/zh-hans/System.Runtime.xml", + "ref/netcore50/zh-hant/System.Runtime.xml", + "ref/netstandard1.0/System.Runtime.dll", + "ref/netstandard1.0/System.Runtime.xml", + "ref/netstandard1.0/de/System.Runtime.xml", + "ref/netstandard1.0/es/System.Runtime.xml", + "ref/netstandard1.0/fr/System.Runtime.xml", + "ref/netstandard1.0/it/System.Runtime.xml", + "ref/netstandard1.0/ja/System.Runtime.xml", + "ref/netstandard1.0/ko/System.Runtime.xml", + "ref/netstandard1.0/ru/System.Runtime.xml", + "ref/netstandard1.0/zh-hans/System.Runtime.xml", + "ref/netstandard1.0/zh-hant/System.Runtime.xml", + "ref/netstandard1.2/System.Runtime.dll", + "ref/netstandard1.2/System.Runtime.xml", + "ref/netstandard1.2/de/System.Runtime.xml", + "ref/netstandard1.2/es/System.Runtime.xml", + "ref/netstandard1.2/fr/System.Runtime.xml", + "ref/netstandard1.2/it/System.Runtime.xml", + "ref/netstandard1.2/ja/System.Runtime.xml", + "ref/netstandard1.2/ko/System.Runtime.xml", + "ref/netstandard1.2/ru/System.Runtime.xml", + "ref/netstandard1.2/zh-hans/System.Runtime.xml", + "ref/netstandard1.2/zh-hant/System.Runtime.xml", + "ref/netstandard1.3/System.Runtime.dll", + "ref/netstandard1.3/System.Runtime.xml", + "ref/netstandard1.3/de/System.Runtime.xml", + "ref/netstandard1.3/es/System.Runtime.xml", + "ref/netstandard1.3/fr/System.Runtime.xml", + "ref/netstandard1.3/it/System.Runtime.xml", + "ref/netstandard1.3/ja/System.Runtime.xml", + "ref/netstandard1.3/ko/System.Runtime.xml", + "ref/netstandard1.3/ru/System.Runtime.xml", + "ref/netstandard1.3/zh-hans/System.Runtime.xml", + "ref/netstandard1.3/zh-hant/System.Runtime.xml", + "ref/netstandard1.5/System.Runtime.dll", + "ref/netstandard1.5/System.Runtime.xml", + "ref/netstandard1.5/de/System.Runtime.xml", + "ref/netstandard1.5/es/System.Runtime.xml", + "ref/netstandard1.5/fr/System.Runtime.xml", + "ref/netstandard1.5/it/System.Runtime.xml", + "ref/netstandard1.5/ja/System.Runtime.xml", + "ref/netstandard1.5/ko/System.Runtime.xml", + "ref/netstandard1.5/ru/System.Runtime.xml", + "ref/netstandard1.5/zh-hans/System.Runtime.xml", + "ref/netstandard1.5/zh-hant/System.Runtime.xml", + "ref/portable-net45+win8+wp80+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.runtime.4.3.0.nupkg.sha512", + "system.runtime.nuspec" + ] + }, + "System.Runtime.CompilerServices.Unsafe/5.0.0": { + "sha512": "ZD9TMpsmYJLrxbbmdvhwt9YEgG5WntEnZ/d1eH8JBX9LBp+Ju8BSBhUGbZMNVHHomWo2KVImJhTDl2hIgw/6MA==", + "type": "package", + "path": "system.runtime.compilerservices.unsafe/5.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/net45/System.Runtime.CompilerServices.Unsafe.dll", + "lib/net45/System.Runtime.CompilerServices.Unsafe.xml", + "lib/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.dll", + "lib/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.xml", + "lib/netstandard1.0/System.Runtime.CompilerServices.Unsafe.dll", + "lib/netstandard1.0/System.Runtime.CompilerServices.Unsafe.xml", + "lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll", + "lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.xml", + "ref/net461/System.Runtime.CompilerServices.Unsafe.dll", + "ref/net461/System.Runtime.CompilerServices.Unsafe.xml", + "ref/netstandard1.0/System.Runtime.CompilerServices.Unsafe.dll", + "ref/netstandard1.0/System.Runtime.CompilerServices.Unsafe.xml", + "ref/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll", + "ref/netstandard2.0/System.Runtime.CompilerServices.Unsafe.xml", + "ref/netstandard2.1/System.Runtime.CompilerServices.Unsafe.dll", + "ref/netstandard2.1/System.Runtime.CompilerServices.Unsafe.xml", + "system.runtime.compilerservices.unsafe.5.0.0.nupkg.sha512", + "system.runtime.compilerservices.unsafe.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.Runtime.Extensions/4.3.0": { + "sha512": "guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==", + "type": "package", + "path": "system.runtime.extensions/4.3.0", + "files": [ + ".nupkg.metadata", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.Runtime.Extensions.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.Runtime.Extensions.dll", + "ref/netcore50/System.Runtime.Extensions.dll", + "ref/netcore50/System.Runtime.Extensions.xml", + "ref/netcore50/de/System.Runtime.Extensions.xml", + "ref/netcore50/es/System.Runtime.Extensions.xml", + "ref/netcore50/fr/System.Runtime.Extensions.xml", + "ref/netcore50/it/System.Runtime.Extensions.xml", + "ref/netcore50/ja/System.Runtime.Extensions.xml", + "ref/netcore50/ko/System.Runtime.Extensions.xml", + "ref/netcore50/ru/System.Runtime.Extensions.xml", + "ref/netcore50/zh-hans/System.Runtime.Extensions.xml", + "ref/netcore50/zh-hant/System.Runtime.Extensions.xml", + "ref/netstandard1.0/System.Runtime.Extensions.dll", + "ref/netstandard1.0/System.Runtime.Extensions.xml", + "ref/netstandard1.0/de/System.Runtime.Extensions.xml", + "ref/netstandard1.0/es/System.Runtime.Extensions.xml", + "ref/netstandard1.0/fr/System.Runtime.Extensions.xml", + "ref/netstandard1.0/it/System.Runtime.Extensions.xml", + "ref/netstandard1.0/ja/System.Runtime.Extensions.xml", + "ref/netstandard1.0/ko/System.Runtime.Extensions.xml", + "ref/netstandard1.0/ru/System.Runtime.Extensions.xml", + "ref/netstandard1.0/zh-hans/System.Runtime.Extensions.xml", + "ref/netstandard1.0/zh-hant/System.Runtime.Extensions.xml", + "ref/netstandard1.3/System.Runtime.Extensions.dll", + "ref/netstandard1.3/System.Runtime.Extensions.xml", + "ref/netstandard1.3/de/System.Runtime.Extensions.xml", + "ref/netstandard1.3/es/System.Runtime.Extensions.xml", + "ref/netstandard1.3/fr/System.Runtime.Extensions.xml", + "ref/netstandard1.3/it/System.Runtime.Extensions.xml", + "ref/netstandard1.3/ja/System.Runtime.Extensions.xml", + "ref/netstandard1.3/ko/System.Runtime.Extensions.xml", + "ref/netstandard1.3/ru/System.Runtime.Extensions.xml", + "ref/netstandard1.3/zh-hans/System.Runtime.Extensions.xml", + "ref/netstandard1.3/zh-hant/System.Runtime.Extensions.xml", + "ref/netstandard1.5/System.Runtime.Extensions.dll", + "ref/netstandard1.5/System.Runtime.Extensions.xml", + "ref/netstandard1.5/de/System.Runtime.Extensions.xml", + "ref/netstandard1.5/es/System.Runtime.Extensions.xml", + "ref/netstandard1.5/fr/System.Runtime.Extensions.xml", + "ref/netstandard1.5/it/System.Runtime.Extensions.xml", + "ref/netstandard1.5/ja/System.Runtime.Extensions.xml", + "ref/netstandard1.5/ko/System.Runtime.Extensions.xml", + "ref/netstandard1.5/ru/System.Runtime.Extensions.xml", + "ref/netstandard1.5/zh-hans/System.Runtime.Extensions.xml", + "ref/netstandard1.5/zh-hant/System.Runtime.Extensions.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.runtime.extensions.4.3.0.nupkg.sha512", + "system.runtime.extensions.nuspec" + ] + }, + "System.Runtime.Handles/4.3.0": { + "sha512": "OKiSUN7DmTWeYb3l51A7EYaeNMnvxwE249YtZz7yooT4gOZhmTjIn48KgSsw2k2lYdLgTKNJw/ZIfSElwDRVgg==", + "type": "package", + "path": "system.runtime.handles/4.3.0", + "files": [ + ".nupkg.metadata", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/_._", + "ref/netstandard1.3/System.Runtime.Handles.dll", + "ref/netstandard1.3/System.Runtime.Handles.xml", + "ref/netstandard1.3/de/System.Runtime.Handles.xml", + "ref/netstandard1.3/es/System.Runtime.Handles.xml", + "ref/netstandard1.3/fr/System.Runtime.Handles.xml", + "ref/netstandard1.3/it/System.Runtime.Handles.xml", + "ref/netstandard1.3/ja/System.Runtime.Handles.xml", + "ref/netstandard1.3/ko/System.Runtime.Handles.xml", + "ref/netstandard1.3/ru/System.Runtime.Handles.xml", + "ref/netstandard1.3/zh-hans/System.Runtime.Handles.xml", + "ref/netstandard1.3/zh-hant/System.Runtime.Handles.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.runtime.handles.4.3.0.nupkg.sha512", + "system.runtime.handles.nuspec" + ] + }, + "System.Runtime.InteropServices/4.3.0": { + "sha512": "uv1ynXqiMK8mp1GM3jDqPCFN66eJ5w5XNomaK2XD+TuCroNTLFGeZ+WCmBMcBDyTFKou3P6cR6J/QsaqDp7fGQ==", + "type": "package", + "path": "system.runtime.interopservices/4.3.0", + "files": [ + ".nupkg.metadata", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.Runtime.InteropServices.dll", + "lib/net463/System.Runtime.InteropServices.dll", + "lib/portable-net45+win8+wpa81/_._", + "lib/win8/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.Runtime.InteropServices.dll", + "ref/net463/System.Runtime.InteropServices.dll", + "ref/netcore50/System.Runtime.InteropServices.dll", + "ref/netcore50/System.Runtime.InteropServices.xml", + "ref/netcore50/de/System.Runtime.InteropServices.xml", + "ref/netcore50/es/System.Runtime.InteropServices.xml", + "ref/netcore50/fr/System.Runtime.InteropServices.xml", + "ref/netcore50/it/System.Runtime.InteropServices.xml", + "ref/netcore50/ja/System.Runtime.InteropServices.xml", + "ref/netcore50/ko/System.Runtime.InteropServices.xml", + "ref/netcore50/ru/System.Runtime.InteropServices.xml", + "ref/netcore50/zh-hans/System.Runtime.InteropServices.xml", + "ref/netcore50/zh-hant/System.Runtime.InteropServices.xml", + "ref/netcoreapp1.1/System.Runtime.InteropServices.dll", + "ref/netstandard1.1/System.Runtime.InteropServices.dll", + "ref/netstandard1.1/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/de/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/es/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/fr/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/it/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/ja/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/ko/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/ru/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/zh-hans/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/zh-hant/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/System.Runtime.InteropServices.dll", + "ref/netstandard1.2/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/de/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/es/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/fr/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/it/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/ja/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/ko/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/ru/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/zh-hans/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/zh-hant/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/System.Runtime.InteropServices.dll", + "ref/netstandard1.3/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/de/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/es/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/fr/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/it/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/ja/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/ko/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/ru/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/zh-hans/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/zh-hant/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/System.Runtime.InteropServices.dll", + "ref/netstandard1.5/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/de/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/es/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/fr/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/it/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/ja/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/ko/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/ru/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/zh-hans/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/zh-hant/System.Runtime.InteropServices.xml", + "ref/portable-net45+win8+wpa81/_._", + "ref/win8/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.runtime.interopservices.4.3.0.nupkg.sha512", + "system.runtime.interopservices.nuspec" + ] + }, + "System.Security.AccessControl/4.7.0": { + "sha512": "JECvTt5aFF3WT3gHpfofL2MNNP6v84sxtXxpqhLBCcDRzqsPBmHhQ6shv4DwwN2tRlzsUxtb3G9M3763rbXKDg==", + "type": "package", + "path": "system.security.accesscontrol/4.7.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/net46/System.Security.AccessControl.dll", + "lib/net461/System.Security.AccessControl.dll", + "lib/net461/System.Security.AccessControl.xml", + "lib/netstandard1.3/System.Security.AccessControl.dll", + "lib/netstandard2.0/System.Security.AccessControl.dll", + "lib/netstandard2.0/System.Security.AccessControl.xml", + "lib/uap10.0.16299/_._", + "ref/net46/System.Security.AccessControl.dll", + "ref/net461/System.Security.AccessControl.dll", + "ref/net461/System.Security.AccessControl.xml", + "ref/netstandard1.3/System.Security.AccessControl.dll", + "ref/netstandard1.3/System.Security.AccessControl.xml", + "ref/netstandard1.3/de/System.Security.AccessControl.xml", + "ref/netstandard1.3/es/System.Security.AccessControl.xml", + "ref/netstandard1.3/fr/System.Security.AccessControl.xml", + "ref/netstandard1.3/it/System.Security.AccessControl.xml", + "ref/netstandard1.3/ja/System.Security.AccessControl.xml", + "ref/netstandard1.3/ko/System.Security.AccessControl.xml", + "ref/netstandard1.3/ru/System.Security.AccessControl.xml", + "ref/netstandard1.3/zh-hans/System.Security.AccessControl.xml", + "ref/netstandard1.3/zh-hant/System.Security.AccessControl.xml", + "ref/netstandard2.0/System.Security.AccessControl.dll", + "ref/netstandard2.0/System.Security.AccessControl.xml", + "ref/uap10.0.16299/_._", + "runtimes/win/lib/net46/System.Security.AccessControl.dll", + "runtimes/win/lib/net461/System.Security.AccessControl.dll", + "runtimes/win/lib/net461/System.Security.AccessControl.xml", + "runtimes/win/lib/netcoreapp2.0/System.Security.AccessControl.dll", + "runtimes/win/lib/netcoreapp2.0/System.Security.AccessControl.xml", + "runtimes/win/lib/netstandard1.3/System.Security.AccessControl.dll", + "runtimes/win/lib/uap10.0.16299/_._", + "system.security.accesscontrol.4.7.0.nupkg.sha512", + "system.security.accesscontrol.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.Security.Cryptography.ProtectedData/4.7.0": { + "sha512": "ehYW0m9ptxpGWvE4zgqongBVWpSDU/JCFD4K7krxkQwSz/sFQjEXCUqpvencjy6DYDbn7Ig09R8GFffu8TtneQ==", + "type": "package", + "path": "system.security.cryptography.protecteddata/4.7.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Security.Cryptography.ProtectedData.dll", + "lib/net461/System.Security.Cryptography.ProtectedData.dll", + "lib/net461/System.Security.Cryptography.ProtectedData.xml", + "lib/netstandard1.3/System.Security.Cryptography.ProtectedData.dll", + "lib/netstandard2.0/System.Security.Cryptography.ProtectedData.dll", + "lib/netstandard2.0/System.Security.Cryptography.ProtectedData.xml", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Security.Cryptography.ProtectedData.dll", + "ref/net461/System.Security.Cryptography.ProtectedData.dll", + "ref/net461/System.Security.Cryptography.ProtectedData.xml", + "ref/netstandard1.3/System.Security.Cryptography.ProtectedData.dll", + "ref/netstandard2.0/System.Security.Cryptography.ProtectedData.dll", + "ref/netstandard2.0/System.Security.Cryptography.ProtectedData.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/win/lib/net46/System.Security.Cryptography.ProtectedData.dll", + "runtimes/win/lib/net461/System.Security.Cryptography.ProtectedData.dll", + "runtimes/win/lib/net461/System.Security.Cryptography.ProtectedData.xml", + "runtimes/win/lib/netstandard1.3/System.Security.Cryptography.ProtectedData.dll", + "runtimes/win/lib/netstandard2.0/System.Security.Cryptography.ProtectedData.dll", + "runtimes/win/lib/netstandard2.0/System.Security.Cryptography.ProtectedData.xml", + "system.security.cryptography.protecteddata.4.7.0.nupkg.sha512", + "system.security.cryptography.protecteddata.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.Security.Permissions/4.7.0": { + "sha512": "dkOV6YYVBnYRa15/yv004eCGRBVADXw8qRbbNiCn/XpdJSUXkkUeIvdvFHkvnko4CdKMqG8yRHC4ox83LSlMsQ==", + "type": "package", + "path": "system.security.permissions/4.7.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/net461/System.Security.Permissions.dll", + "lib/net461/System.Security.Permissions.xml", + "lib/netcoreapp3.0/System.Security.Permissions.dll", + "lib/netcoreapp3.0/System.Security.Permissions.xml", + "lib/netstandard2.0/System.Security.Permissions.dll", + "lib/netstandard2.0/System.Security.Permissions.xml", + "ref/net461/System.Security.Permissions.dll", + "ref/net461/System.Security.Permissions.xml", + "ref/netcoreapp3.0/System.Security.Permissions.dll", + "ref/netcoreapp3.0/System.Security.Permissions.xml", + "ref/netstandard2.0/System.Security.Permissions.dll", + "ref/netstandard2.0/System.Security.Permissions.xml", + "system.security.permissions.4.7.0.nupkg.sha512", + "system.security.permissions.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.Security.Principal.Windows/4.7.0": { + "sha512": "ojD0PX0XhneCsUbAZVKdb7h/70vyYMDYs85lwEI+LngEONe/17A0cFaRFqZU+sOEidcVswYWikYOQ9PPfjlbtQ==", + "type": "package", + "path": "system.security.principal.windows/4.7.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/net46/System.Security.Principal.Windows.dll", + "lib/net461/System.Security.Principal.Windows.dll", + "lib/net461/System.Security.Principal.Windows.xml", + "lib/netstandard1.3/System.Security.Principal.Windows.dll", + "lib/netstandard2.0/System.Security.Principal.Windows.dll", + "lib/netstandard2.0/System.Security.Principal.Windows.xml", + "lib/uap10.0.16299/_._", + "ref/net46/System.Security.Principal.Windows.dll", + "ref/net461/System.Security.Principal.Windows.dll", + "ref/net461/System.Security.Principal.Windows.xml", + "ref/netcoreapp3.0/System.Security.Principal.Windows.dll", + "ref/netcoreapp3.0/System.Security.Principal.Windows.xml", + "ref/netstandard1.3/System.Security.Principal.Windows.dll", + "ref/netstandard1.3/System.Security.Principal.Windows.xml", + "ref/netstandard1.3/de/System.Security.Principal.Windows.xml", + "ref/netstandard1.3/es/System.Security.Principal.Windows.xml", + "ref/netstandard1.3/fr/System.Security.Principal.Windows.xml", + "ref/netstandard1.3/it/System.Security.Principal.Windows.xml", + "ref/netstandard1.3/ja/System.Security.Principal.Windows.xml", + "ref/netstandard1.3/ko/System.Security.Principal.Windows.xml", + "ref/netstandard1.3/ru/System.Security.Principal.Windows.xml", + "ref/netstandard1.3/zh-hans/System.Security.Principal.Windows.xml", + "ref/netstandard1.3/zh-hant/System.Security.Principal.Windows.xml", + "ref/netstandard2.0/System.Security.Principal.Windows.dll", + "ref/netstandard2.0/System.Security.Principal.Windows.xml", + "ref/uap10.0.16299/_._", + "runtimes/unix/lib/netcoreapp2.0/System.Security.Principal.Windows.dll", + "runtimes/unix/lib/netcoreapp2.0/System.Security.Principal.Windows.xml", + "runtimes/unix/lib/netcoreapp2.1/System.Security.Principal.Windows.dll", + "runtimes/unix/lib/netcoreapp2.1/System.Security.Principal.Windows.xml", + "runtimes/win/lib/net46/System.Security.Principal.Windows.dll", + "runtimes/win/lib/net461/System.Security.Principal.Windows.dll", + "runtimes/win/lib/net461/System.Security.Principal.Windows.xml", + "runtimes/win/lib/netcoreapp2.0/System.Security.Principal.Windows.dll", + "runtimes/win/lib/netcoreapp2.0/System.Security.Principal.Windows.xml", + "runtimes/win/lib/netcoreapp2.1/System.Security.Principal.Windows.dll", + "runtimes/win/lib/netcoreapp2.1/System.Security.Principal.Windows.xml", + "runtimes/win/lib/netstandard1.3/System.Security.Principal.Windows.dll", + "runtimes/win/lib/uap10.0.16299/_._", + "system.security.principal.windows.4.7.0.nupkg.sha512", + "system.security.principal.windows.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.Text.Encoding/4.3.0": { + "sha512": "BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==", + "type": "package", + "path": "system.text.encoding/4.3.0", + "files": [ + ".nupkg.metadata", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Text.Encoding.dll", + "ref/netcore50/System.Text.Encoding.xml", + "ref/netcore50/de/System.Text.Encoding.xml", + "ref/netcore50/es/System.Text.Encoding.xml", + "ref/netcore50/fr/System.Text.Encoding.xml", + "ref/netcore50/it/System.Text.Encoding.xml", + "ref/netcore50/ja/System.Text.Encoding.xml", + "ref/netcore50/ko/System.Text.Encoding.xml", + "ref/netcore50/ru/System.Text.Encoding.xml", + "ref/netcore50/zh-hans/System.Text.Encoding.xml", + "ref/netcore50/zh-hant/System.Text.Encoding.xml", + "ref/netstandard1.0/System.Text.Encoding.dll", + "ref/netstandard1.0/System.Text.Encoding.xml", + "ref/netstandard1.0/de/System.Text.Encoding.xml", + "ref/netstandard1.0/es/System.Text.Encoding.xml", + "ref/netstandard1.0/fr/System.Text.Encoding.xml", + "ref/netstandard1.0/it/System.Text.Encoding.xml", + "ref/netstandard1.0/ja/System.Text.Encoding.xml", + "ref/netstandard1.0/ko/System.Text.Encoding.xml", + "ref/netstandard1.0/ru/System.Text.Encoding.xml", + "ref/netstandard1.0/zh-hans/System.Text.Encoding.xml", + "ref/netstandard1.0/zh-hant/System.Text.Encoding.xml", + "ref/netstandard1.3/System.Text.Encoding.dll", + "ref/netstandard1.3/System.Text.Encoding.xml", + "ref/netstandard1.3/de/System.Text.Encoding.xml", + "ref/netstandard1.3/es/System.Text.Encoding.xml", + "ref/netstandard1.3/fr/System.Text.Encoding.xml", + "ref/netstandard1.3/it/System.Text.Encoding.xml", + "ref/netstandard1.3/ja/System.Text.Encoding.xml", + "ref/netstandard1.3/ko/System.Text.Encoding.xml", + "ref/netstandard1.3/ru/System.Text.Encoding.xml", + "ref/netstandard1.3/zh-hans/System.Text.Encoding.xml", + "ref/netstandard1.3/zh-hant/System.Text.Encoding.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.text.encoding.4.3.0.nupkg.sha512", + "system.text.encoding.nuspec" + ] + }, + "System.Text.Encoding.CodePages/4.0.1": { + "sha512": "h4z6rrA/hxWf4655D18IIZ0eaLRa3tQC/j+e26W+VinIHY0l07iEXaAvO0YSYq3MvCjMYy8Zs5AdC1sxNQOB7Q==", + "type": "package", + "path": "system.text.encoding.codepages/4.0.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Text.Encoding.CodePages.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/netstandard1.3/System.Text.Encoding.CodePages.dll", + "ref/netstandard1.3/System.Text.Encoding.CodePages.xml", + "ref/netstandard1.3/de/System.Text.Encoding.CodePages.xml", + "ref/netstandard1.3/es/System.Text.Encoding.CodePages.xml", + "ref/netstandard1.3/fr/System.Text.Encoding.CodePages.xml", + "ref/netstandard1.3/it/System.Text.Encoding.CodePages.xml", + "ref/netstandard1.3/ja/System.Text.Encoding.CodePages.xml", + "ref/netstandard1.3/ko/System.Text.Encoding.CodePages.xml", + "ref/netstandard1.3/ru/System.Text.Encoding.CodePages.xml", + "ref/netstandard1.3/zh-hans/System.Text.Encoding.CodePages.xml", + "ref/netstandard1.3/zh-hant/System.Text.Encoding.CodePages.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/unix/lib/netstandard1.3/System.Text.Encoding.CodePages.dll", + "runtimes/win/lib/netstandard1.3/System.Text.Encoding.CodePages.dll", + "system.text.encoding.codepages.4.0.1.nupkg.sha512", + "system.text.encoding.codepages.nuspec" + ] + }, + "System.Threading/4.0.11": { + "sha512": "N+3xqIcg3VDKyjwwCGaZ9HawG9aC6cSDI+s7ROma310GQo8vilFZa86hqKppwTHleR/G0sfOzhvgnUxWCR/DrQ==", + "type": "package", + "path": "system.threading/4.0.11", + "files": [ + ".nupkg.metadata", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/netcore50/System.Threading.dll", + "lib/netstandard1.3/System.Threading.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Threading.dll", + "ref/netcore50/System.Threading.xml", + "ref/netcore50/de/System.Threading.xml", + "ref/netcore50/es/System.Threading.xml", + "ref/netcore50/fr/System.Threading.xml", + "ref/netcore50/it/System.Threading.xml", + "ref/netcore50/ja/System.Threading.xml", + "ref/netcore50/ko/System.Threading.xml", + "ref/netcore50/ru/System.Threading.xml", + "ref/netcore50/zh-hans/System.Threading.xml", + "ref/netcore50/zh-hant/System.Threading.xml", + "ref/netstandard1.0/System.Threading.dll", + "ref/netstandard1.0/System.Threading.xml", + "ref/netstandard1.0/de/System.Threading.xml", + "ref/netstandard1.0/es/System.Threading.xml", + "ref/netstandard1.0/fr/System.Threading.xml", + "ref/netstandard1.0/it/System.Threading.xml", + "ref/netstandard1.0/ja/System.Threading.xml", + "ref/netstandard1.0/ko/System.Threading.xml", + "ref/netstandard1.0/ru/System.Threading.xml", + "ref/netstandard1.0/zh-hans/System.Threading.xml", + "ref/netstandard1.0/zh-hant/System.Threading.xml", + "ref/netstandard1.3/System.Threading.dll", + "ref/netstandard1.3/System.Threading.xml", + "ref/netstandard1.3/de/System.Threading.xml", + "ref/netstandard1.3/es/System.Threading.xml", + "ref/netstandard1.3/fr/System.Threading.xml", + "ref/netstandard1.3/it/System.Threading.xml", + "ref/netstandard1.3/ja/System.Threading.xml", + "ref/netstandard1.3/ko/System.Threading.xml", + "ref/netstandard1.3/ru/System.Threading.xml", + "ref/netstandard1.3/zh-hans/System.Threading.xml", + "ref/netstandard1.3/zh-hant/System.Threading.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/aot/lib/netcore50/System.Threading.dll", + "system.threading.4.0.11.nupkg.sha512", + "system.threading.nuspec" + ] + }, + "System.Threading.Tasks/4.3.0": { + "sha512": "LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==", + "type": "package", + "path": "system.threading.tasks/4.3.0", + "files": [ + ".nupkg.metadata", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Threading.Tasks.dll", + "ref/netcore50/System.Threading.Tasks.xml", + "ref/netcore50/de/System.Threading.Tasks.xml", + "ref/netcore50/es/System.Threading.Tasks.xml", + "ref/netcore50/fr/System.Threading.Tasks.xml", + "ref/netcore50/it/System.Threading.Tasks.xml", + "ref/netcore50/ja/System.Threading.Tasks.xml", + "ref/netcore50/ko/System.Threading.Tasks.xml", + "ref/netcore50/ru/System.Threading.Tasks.xml", + "ref/netcore50/zh-hans/System.Threading.Tasks.xml", + "ref/netcore50/zh-hant/System.Threading.Tasks.xml", + "ref/netstandard1.0/System.Threading.Tasks.dll", + "ref/netstandard1.0/System.Threading.Tasks.xml", + "ref/netstandard1.0/de/System.Threading.Tasks.xml", + "ref/netstandard1.0/es/System.Threading.Tasks.xml", + "ref/netstandard1.0/fr/System.Threading.Tasks.xml", + "ref/netstandard1.0/it/System.Threading.Tasks.xml", + "ref/netstandard1.0/ja/System.Threading.Tasks.xml", + "ref/netstandard1.0/ko/System.Threading.Tasks.xml", + "ref/netstandard1.0/ru/System.Threading.Tasks.xml", + "ref/netstandard1.0/zh-hans/System.Threading.Tasks.xml", + "ref/netstandard1.0/zh-hant/System.Threading.Tasks.xml", + "ref/netstandard1.3/System.Threading.Tasks.dll", + "ref/netstandard1.3/System.Threading.Tasks.xml", + "ref/netstandard1.3/de/System.Threading.Tasks.xml", + "ref/netstandard1.3/es/System.Threading.Tasks.xml", + "ref/netstandard1.3/fr/System.Threading.Tasks.xml", + "ref/netstandard1.3/it/System.Threading.Tasks.xml", + "ref/netstandard1.3/ja/System.Threading.Tasks.xml", + "ref/netstandard1.3/ko/System.Threading.Tasks.xml", + "ref/netstandard1.3/ru/System.Threading.Tasks.xml", + "ref/netstandard1.3/zh-hans/System.Threading.Tasks.xml", + "ref/netstandard1.3/zh-hant/System.Threading.Tasks.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.threading.tasks.4.3.0.nupkg.sha512", + "system.threading.tasks.nuspec" + ] + }, + "System.Windows.Extensions/4.7.0": { + "sha512": "CeWTdRNfRaSh0pm2gDTJFwVaXfTq6Xwv/sA887iwPTneW7oMtMlpvDIO+U60+3GWTB7Aom6oQwv5VZVUhQRdPQ==", + "type": "package", + "path": "system.windows.extensions/4.7.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/netcoreapp3.0/System.Windows.Extensions.dll", + "lib/netcoreapp3.0/System.Windows.Extensions.xml", + "ref/netcoreapp3.0/System.Windows.Extensions.dll", + "ref/netcoreapp3.0/System.Windows.Extensions.xml", + "runtimes/win/lib/netcoreapp3.0/System.Windows.Extensions.dll", + "runtimes/win/lib/netcoreapp3.0/System.Windows.Extensions.xml", + "system.windows.extensions.4.7.0.nupkg.sha512", + "system.windows.extensions.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + } + }, + "projectFileDependencyGroups": { + "net8.0": [ + "GTKSystem.Windows.Forms >= 1.3.24.22", + "GTKSystem.Windows.FormsDesigner >= 1.0.0.4", + "GtkSharp >= 3.24.24.95" + ] + }, + "packageFolders": { + "C:\\Users\\chj\\.nuget\\packages\\": {}, + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {}, + "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder": {} + }, + "project": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "F:\\我的项目\\GTK\\gtksystem-windows-forms\\Samples\\GTKSystemWinFormsApp11\\GTKSystemWinFormsApp11.csproj", + "projectName": "GTKSystemWinFormsApp11", + "projectPath": "F:\\我的项目\\GTK\\gtksystem-windows-forms\\Samples\\GTKSystemWinFormsApp11\\GTKSystemWinFormsApp11.csproj", + "packagesPath": "C:\\Users\\chj\\.nuget\\packages\\", + "outputPath": "F:\\我的项目\\GTK\\gtksystem-windows-forms\\Samples\\GTKSystemWinFormsApp11\\obj\\", + "projectStyle": "PackageReference", + "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages", + "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder" + ], + "configFilePaths": [ + "C:\\Users\\chj\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net8.0" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "C:\\Users\\chj\\.nuget\\packages": {}, + "https://api.nuget.org/v3/index.json": {}, + "https://www.nuget.org/api/v2/": {} + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + } + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "dependencies": { + "GTKSystem.Windows.Forms": { + "target": "Package", + "version": "[1.3.24.22, )" + }, + "GTKSystem.Windows.FormsDesigner": { + "target": "Package", + "version": "[1.0.0.4, )" + }, + "GtkSharp": { + "target": "Package", + "version": "[3.24.24.95, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.100/PortableRuntimeIdentifierGraph.json" + } + } + } +} \ No newline at end of file diff --git a/Samples/GTKSystemWinFormsApp11/obj/project.nuget.cache b/Samples/GTKSystemWinFormsApp11/obj/project.nuget.cache new file mode 100644 index 0000000000000000000000000000000000000000..3df8fee5677a3095b5ba0096242a3879cde1953a --- /dev/null +++ b/Samples/GTKSystemWinFormsApp11/obj/project.nuget.cache @@ -0,0 +1,50 @@ +{ + "version": 2, + "dgSpecHash": "Tq+rgngKfGs6SPI/XDAaI2QSnVrhODf1EiTqUTEFATCTgq8v9pvKtFGz+9Y3fqf4ytshSJsdykRADz3JgPzdPg==", + "success": true, + "projectFilePath": "F:\\我的项目\\GTK\\gtksystem-windows-forms\\Samples\\GTKSystemWinFormsApp11\\GTKSystemWinFormsApp11.csproj", + "expectedPackageFiles": [ + "C:\\Users\\chj\\.nuget\\packages\\atksharp\\3.24.24.95\\atksharp.3.24.24.95.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\cairosharp\\3.24.24.95\\cairosharp.3.24.24.95.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\gdksharp\\3.24.24.95\\gdksharp.3.24.24.95.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\giosharp\\3.24.24.95\\giosharp.3.24.24.95.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\glibsharp\\3.24.24.95\\glibsharp.3.24.24.95.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\gtksharp\\3.24.24.95\\gtksharp.3.24.24.95.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\gtksystem.windows.forms\\1.3.24.22\\gtksystem.windows.forms.1.3.24.22.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\gtksystem.windows.formsdesigner\\1.0.0.4\\gtksystem.windows.formsdesigner.1.0.0.4.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\microsoft.build.framework\\17.1.0\\microsoft.build.framework.17.1.0.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\microsoft.build.utilities.core\\17.1.0\\microsoft.build.utilities.core.17.1.0.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\microsoft.net.stringtools\\1.0.0\\microsoft.net.stringtools.1.0.0.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\microsoft.netcore.platforms\\3.1.0\\microsoft.netcore.platforms.3.1.0.nupkg.sha512", + "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\microsoft.netcore.targets\\1.1.0\\microsoft.netcore.targets.1.1.0.nupkg.sha512", + "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\microsoft.win32.registry\\4.3.0\\microsoft.win32.registry.4.3.0.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\microsoft.win32.systemevents\\4.7.0\\microsoft.win32.systemevents.4.7.0.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\pangosharp\\3.24.24.95\\pangosharp.3.24.24.95.nupkg.sha512", + "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.collections\\4.3.0\\system.collections.4.3.0.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\system.collections.immutable\\5.0.0\\system.collections.immutable.5.0.0.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\system.configuration.configurationmanager\\4.7.0\\system.configuration.configurationmanager.4.7.0.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\system.drawing.common\\4.7.0\\system.drawing.common.4.7.0.nupkg.sha512", + "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.globalization\\4.3.0\\system.globalization.4.3.0.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\system.io\\4.3.0\\system.io.4.3.0.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\system.memory\\4.5.4\\system.memory.4.5.4.nupkg.sha512", + "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.reflection\\4.3.0\\system.reflection.4.3.0.nupkg.sha512", + "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.reflection.primitives\\4.3.0\\system.reflection.primitives.4.3.0.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\system.resources.extensions\\8.0.0\\system.resources.extensions.8.0.0.nupkg.sha512", + "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.resources.resourcemanager\\4.3.0\\system.resources.resourcemanager.4.3.0.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\system.runtime\\4.3.0\\system.runtime.4.3.0.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\system.runtime.compilerservices.unsafe\\5.0.0\\system.runtime.compilerservices.unsafe.5.0.0.nupkg.sha512", + "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.runtime.extensions\\4.3.0\\system.runtime.extensions.4.3.0.nupkg.sha512", + "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.runtime.handles\\4.3.0\\system.runtime.handles.4.3.0.nupkg.sha512", + "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.runtime.interopservices\\4.3.0\\system.runtime.interopservices.4.3.0.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\system.security.accesscontrol\\4.7.0\\system.security.accesscontrol.4.7.0.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\system.security.cryptography.protecteddata\\4.7.0\\system.security.cryptography.protecteddata.4.7.0.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\system.security.permissions\\4.7.0\\system.security.permissions.4.7.0.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\system.security.principal.windows\\4.7.0\\system.security.principal.windows.4.7.0.nupkg.sha512", + "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.text.encoding\\4.3.0\\system.text.encoding.4.3.0.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\system.text.encoding.codepages\\4.0.1\\system.text.encoding.codepages.4.0.1.nupkg.sha512", + "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.threading\\4.0.11\\system.threading.4.0.11.nupkg.sha512", + "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.threading.tasks\\4.3.0\\system.threading.tasks.4.3.0.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\system.windows.extensions\\4.7.0\\system.windows.extensions.4.7.0.nupkg.sha512" + ], + "logs": [] +} \ No newline at end of file diff --git a/Samples/GTKWinFormsApp/Form1.Designer.cs b/Samples/GTKWinFormsApp/Form1.Designer.cs index c107bdf28610ad052364f4837c2039aa6cbe3e57..4f4a7a0654da5bb027924d1960b3808cc34dd074 100644 --- a/Samples/GTKWinFormsApp/Form1.Designer.cs +++ b/Samples/GTKWinFormsApp/Form1.Designer.cs @@ -4,6 +4,7 @@ using System; using System.Windows.Forms; using System.IO; using System.Runtime.Serialization.Formatters.Binary; + namespace GTKWinFormsApp { partial class Form1 @@ -27,657 +28,800 @@ namespace GTKWinFormsApp } #region Windows Form Designer generated code - + /// /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// private void InitializeComponent() { - this.components = new System.ComponentModel.Container(); + components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); - System.Windows.Forms.TreeNode treeNode1 = new System.Windows.Forms.TreeNode("Node2"); - System.Windows.Forms.TreeNode treeNode2 = new System.Windows.Forms.TreeNode("Node3"); - System.Windows.Forms.TreeNode treeNode3 = new System.Windows.Forms.TreeNode("Node0", new System.Windows.Forms.TreeNode[] { - treeNode1, - treeNode2}); - System.Windows.Forms.TreeNode treeNode4 = new System.Windows.Forms.TreeNode("Node1"); - this.button1 = new System.Windows.Forms.Button(); - this.comboBox1 = new System.Windows.Forms.ComboBox(); - this.textBox1 = new System.Windows.Forms.TextBox(); - this.dataGridView1 = new System.Windows.Forms.DataGridView(); - this.ID = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.State = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.Title = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.CreateDate = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.Operate = new System.Windows.Forms.DataGridViewButtonColumn(); - this.PIC = new System.Windows.Forms.DataGridViewImageColumn(); - this.groupBox1 = new System.Windows.Forms.GroupBox(); - this.checkBox2 = new System.Windows.Forms.CheckBox(); - this.maskedTextBox2 = new System.Windows.Forms.MaskedTextBox(); - this.radioButton3 = new System.Windows.Forms.RadioButton(); - this.radioButton2 = new System.Windows.Forms.RadioButton(); - this.label2 = new System.Windows.Forms.Label(); - this.radioButton1 = new System.Windows.Forms.RadioButton(); - this.linkLabel1 = new System.Windows.Forms.LinkLabel(); - this.button2 = new System.Windows.Forms.Button(); - this.label1 = new System.Windows.Forms.Label(); - this.maskedTextBox1 = new System.Windows.Forms.MaskedTextBox(); - this.tabControl1 = new System.Windows.Forms.TabControl(); - this.tabPage1 = new System.Windows.Forms.TabPage(); - this.tabPage2 = new System.Windows.Forms.TabPage(); - this.richTextBox1 = new System.Windows.Forms.RichTextBox(); - this.label3 = new System.Windows.Forms.Label(); - this.checkBox1 = new System.Windows.Forms.CheckBox(); - this.button3 = new System.Windows.Forms.Button(); - this.treeView1 = new System.Windows.Forms.TreeView(); - this.pictureBox1 = new System.Windows.Forms.PictureBox(); - this.contextMenuStrip1 = new System.Windows.Forms.ContextMenuStrip(this.components); - this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem(); - this.菜单三ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.menuStrip1 = new System.Windows.Forms.MenuStrip(); - this.toolStripMenuItem3 = new System.Windows.Forms.ToolStripMenuItem(); - this.test1ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.三级菜单1ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.test2ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripMenuItem4 = new System.Windows.Forms.ToolStripMenuItem(); - this.二级菜单1ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.dateTimePicker1 = new System.Windows.Forms.DateTimePicker(); - this.numericUpDown1 = new System.Windows.Forms.NumericUpDown(); - this.checkedListBox1 = new System.Windows.Forms.CheckedListBox(); - this.splitContainer1 = new System.Windows.Forms.SplitContainer(); - this.pictureBox2 = new System.Windows.Forms.PictureBox(); - ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit(); - this.groupBox1.SuspendLayout(); - this.tabControl1.SuspendLayout(); - this.tabPage1.SuspendLayout(); - this.tabPage2.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); - this.contextMenuStrip1.SuspendLayout(); - this.menuStrip1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); - this.splitContainer1.Panel1.SuspendLayout(); - this.splitContainer1.Panel2.SuspendLayout(); - this.splitContainer1.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit(); - this.SuspendLayout(); + TreeNode treeNode1 = new TreeNode("Node21"); + TreeNode treeNode2 = new TreeNode("Node22"); + TreeNode treeNode3 = new TreeNode("Node2", new TreeNode[] { treeNode1, treeNode2 }); + TreeNode treeNode4 = new TreeNode("Node3"); + TreeNode treeNode5 = new TreeNode("Node0", new TreeNode[] { treeNode3, treeNode4 }); + TreeNode treeNode6 = new TreeNode("Node1"); + button1 = new Button(); + comboBox1 = new ComboBox(); + textBox1 = new TextBox(); + dataGridView1 = new DataGridView(); + ID = new DataGridViewTextBoxColumn(); + State = new DataGridViewCheckBoxColumn(); + Title = new DataGridViewTextBoxColumn(); + CreateDate = new DataGridViewComboBoxColumn(); + Operate = new DataGridViewButtonColumn(); + PIC = new DataGridViewImageColumn(); + groupBox1 = new GroupBox(); + button7 = new Button(); + checkBox2 = new CheckBox(); + maskedTextBox2 = new MaskedTextBox(); + radioButton3 = new RadioButton(); + radioButton2 = new RadioButton(); + label2 = new Label(); + radioButton1 = new RadioButton(); + linkLabel1 = new LinkLabel(); + button2 = new Button(); + label1 = new Label(); + maskedTextBox1 = new MaskedTextBox(); + tabControl1 = new TabControl(); + tabPage1 = new TabPage(); + tabPage2 = new TabPage(); + tableLayoutPanel1 = new TableLayoutPanel(); + label6 = new Label(); + label5 = new Label(); + button6 = new Button(); + richTextBox1 = new RichTextBox(); + flowLayoutPanel1 = new FlowLayoutPanel(); + button4 = new Button(); + button5 = new Button(); + checkBox3 = new CheckBox(); + label4 = new Label(); + listBox1 = new ListBox(); + label3 = new Label(); + checkBox1 = new CheckBox(); + button3 = new Button(); + treeView1 = new TreeView(); + pictureBox1 = new PictureBox(); + contextMenuStrip1 = new ContextMenuStrip(components); + toolStripMenuItem1 = new ToolStripMenuItem(); + toolStripMenuItem2 = new ToolStripMenuItem(); + 菜单三ToolStripMenuItem = new ToolStripMenuItem(); + menuStrip1 = new MenuStrip(); + toolStripMenuItem3 = new ToolStripMenuItem(); + test1ToolStripMenuItem = new ToolStripMenuItem(); + 三级菜单1ToolStripMenuItem = new ToolStripMenuItem(); + test2ToolStripMenuItem = new ToolStripMenuItem(); + toolStripMenuItem4 = new ToolStripMenuItem(); + 二级菜单1ToolStripMenuItem = new ToolStripMenuItem(); + dateTimePicker1 = new DateTimePicker(); + numericUpDown1 = new NumericUpDown(); + checkedListBox1 = new CheckedListBox(); + splitContainer1 = new SplitContainer(); + pictureBox2 = new PictureBox(); + ((System.ComponentModel.ISupportInitialize)dataGridView1).BeginInit(); + groupBox1.SuspendLayout(); + tabControl1.SuspendLayout(); + tabPage1.SuspendLayout(); + tabPage2.SuspendLayout(); + tableLayoutPanel1.SuspendLayout(); + flowLayoutPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)pictureBox1).BeginInit(); + contextMenuStrip1.SuspendLayout(); + menuStrip1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)numericUpDown1).BeginInit(); + ((System.ComponentModel.ISupportInitialize)splitContainer1).BeginInit(); + splitContainer1.Panel1.SuspendLayout(); + splitContainer1.Panel2.SuspendLayout(); + splitContainer1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)pictureBox2).BeginInit(); + SuspendLayout(); // // button1 // - this.button1.BackColor = System.Drawing.Color.Gold; - this.button1.ForeColor = System.Drawing.Color.Red; - this.button1.Location = new System.Drawing.Point(317, 148); - this.button1.Margin = new System.Windows.Forms.Padding(4); - this.button1.Name = "button1"; - this.button1.Size = new System.Drawing.Size(175, 31); - this.button1.TabIndex = 0; - this.button1.Text = "加载数据表数据"; - this.button1.UseVisualStyleBackColor = false; - this.button1.Click += new System.EventHandler(this.button1_Click); - this.button1.Paint += new System.Windows.Forms.PaintEventHandler(this.button1_Paint); + button1.BackColor = System.Drawing.Color.Gold; + button1.BackgroundImage = Properties.Resources.timg; + button1.BackgroundImageLayout = ImageLayout.Stretch; + button1.ForeColor = System.Drawing.Color.Red; + button1.Image = Properties.Resources.timg; + button1.Location = new System.Drawing.Point(317, 148); + button1.Margin = new Padding(4); + button1.Name = "button1"; + button1.Size = new System.Drawing.Size(175, 31); + button1.TabIndex = 0; + button1.Text = "加载数据表数据"; + button1.UseVisualStyleBackColor = false; + button1.Click += button1_Click; + button1.Paint += button1_Paint; // // comboBox1 // - this.comboBox1.FormattingEnabled = true; - this.comboBox1.Items.AddRange(new object[] { - "test1", - "test2", - "test3"}); - this.comboBox1.Location = new System.Drawing.Point(483, 25); - this.comboBox1.Margin = new System.Windows.Forms.Padding(4); - this.comboBox1.Name = "comboBox1"; - this.comboBox1.Size = new System.Drawing.Size(134, 28); - this.comboBox1.TabIndex = 1; - this.comboBox1.Text = "combobox99"; - this.comboBox1.SelectedIndexChanged += new System.EventHandler(this.comboBox1_SelectedIndexChanged); - this.comboBox1.SelectedValueChanged += new System.EventHandler(this.comboBox1_SelectedValueChanged); + comboBox1.FormattingEnabled = true; + comboBox1.Items.AddRange(new object[] { "test1", "test2", "test3" }); + comboBox1.Location = new System.Drawing.Point(483, 25); + comboBox1.Margin = new Padding(4); + comboBox1.Name = "comboBox1"; + comboBox1.Size = new System.Drawing.Size(134, 28); + comboBox1.TabIndex = 1; + comboBox1.Text = "combobox99"; + comboBox1.SelectedIndexChanged += comboBox1_SelectedIndexChanged; + comboBox1.SelectedValueChanged += comboBox1_SelectedValueChanged; // // textBox1 // - this.textBox1.BackColor = System.Drawing.SystemColors.Window; - this.textBox1.Location = new System.Drawing.Point(524, 71); - this.textBox1.Margin = new System.Windows.Forms.Padding(4); - this.textBox1.Name = "textBox1"; - this.textBox1.Size = new System.Drawing.Size(93, 27); - this.textBox1.TabIndex = 2; - this.textBox1.Text = "text"; - this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged); - this.textBox1.Enter += new System.EventHandler(this.textBox1_Enter); - this.textBox1.Validating += new System.ComponentModel.CancelEventHandler(this.textBox1_Validating); + textBox1.BackColor = System.Drawing.SystemColors.MenuHighlight; + textBox1.Location = new System.Drawing.Point(524, 71); + textBox1.Margin = new Padding(4); + textBox1.Name = "textBox1"; + textBox1.Size = new System.Drawing.Size(93, 27); + textBox1.TabIndex = 2; + textBox1.Text = "text"; + textBox1.TextChanged += textBox1_TextChanged; + textBox1.Enter += textBox1_Enter; + textBox1.Validating += textBox1_Validating; // // dataGridView1 // - this.dataGridView1.ColumnHeadersHeight = 29; - this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { - this.ID, - this.State, - this.Title, - this.CreateDate, - this.Operate, - this.PIC}); - this.dataGridView1.Dock = System.Windows.Forms.DockStyle.Fill; - this.dataGridView1.Location = new System.Drawing.Point(4, 4); - this.dataGridView1.Margin = new System.Windows.Forms.Padding(4); - this.dataGridView1.Name = "dataGridView1"; - this.dataGridView1.RowHeadersWidth = 51; - this.dataGridView1.Size = new System.Drawing.Size(1429, 306); - this.dataGridView1.TabIndex = 2; - this.dataGridView1.MultiSelectChanged += new System.EventHandler(this.dataGridView1_MultiSelectChanged); - this.dataGridView1.CellClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_CellClick); - this.dataGridView1.CellEnter += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_CellEnter); - this.dataGridView1.CellLeave += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_CellLeave); - this.dataGridView1.CellValidated += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_CellValidated); - this.dataGridView1.CellValidating += new System.Windows.Forms.DataGridViewCellValidatingEventHandler(this.dataGridView1_CellValidating); - this.dataGridView1.CellValueChanged += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_CellValueChanged); - this.dataGridView1.RowEnter += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_RowEnter); - this.dataGridView1.RowLeave += new System.Windows.Forms.DataGridViewCellEventHandler(this.dataGridView1_RowLeave); - this.dataGridView1.SelectionChanged += new System.EventHandler(this.dataGridView1_SelectionChanged); + dataGridView1.ColumnHeadersHeight = 29; + dataGridView1.Columns.AddRange(new DataGridViewColumn[] { ID, State, Title, CreateDate, Operate, PIC }); + dataGridView1.Dock = DockStyle.Fill; + dataGridView1.Location = new System.Drawing.Point(4, 4); + dataGridView1.Margin = new Padding(4); + dataGridView1.Name = "dataGridView1"; + dataGridView1.RowHeadersWidth = 51; + dataGridView1.Size = new System.Drawing.Size(1323, 269); + dataGridView1.TabIndex = 2; + dataGridView1.MultiSelectChanged += dataGridView1_MultiSelectChanged; + dataGridView1.CellClick += dataGridView1_CellClick; + dataGridView1.CellEnter += dataGridView1_CellEnter; + dataGridView1.CellLeave += dataGridView1_CellLeave; + dataGridView1.CellValidated += dataGridView1_CellValidated; + dataGridView1.CellValidating += dataGridView1_CellValidating; + dataGridView1.CellValueChanged += dataGridView1_CellValueChanged; + dataGridView1.RowEnter += dataGridView1_RowEnter; + dataGridView1.RowLeave += dataGridView1_RowLeave; + dataGridView1.SelectionChanged += dataGridView1_SelectionChanged; // // ID // - this.ID.HeaderText = "ID"; - this.ID.MinimumWidth = 6; - this.ID.Name = "ID"; - this.ID.SortMode = System.Windows.Forms.DataGridViewColumnSortMode.NotSortable; - this.ID.Width = 125; + ID.HeaderText = "ID"; + ID.MinimumWidth = 6; + ID.Name = "ID"; + ID.ReadOnly = true; + ID.SortMode = DataGridViewColumnSortMode.NotSortable; + ID.Width = 125; // // State // - this.State.HeaderText = "State"; - this.State.MinimumWidth = 6; - this.State.Name = "State"; - this.State.Width = 125; + State.HeaderText = "State"; + State.MinimumWidth = 6; + State.Name = "State"; + State.Resizable = DataGridViewTriState.False; + State.Width = 125; // // Title // - this.Title.HeaderText = "Title"; - this.Title.MinimumWidth = 6; - this.Title.Name = "Title"; - this.Title.Resizable = System.Windows.Forms.DataGridViewTriState.True; - this.Title.Width = 125; + Title.HeaderText = "Title"; + Title.MinimumWidth = 6; + Title.Name = "Title"; + Title.Resizable = DataGridViewTriState.True; + Title.Width = 125; // // CreateDate // - this.CreateDate.HeaderText = "CreateDate"; - this.CreateDate.MinimumWidth = 6; - this.CreateDate.Name = "CreateDate"; - this.CreateDate.ReadOnly = true; - this.CreateDate.Width = 125; + CreateDate.HeaderText = "CreateDate"; + CreateDate.Items.AddRange(new object[] { "2012-09-12 12:32:11", "2012-09-13 12:32:22", "2012-09-14 12:32:33" }); + CreateDate.MinimumWidth = 6; + CreateDate.Name = "CreateDate"; + CreateDate.Resizable = DataGridViewTriState.True; + CreateDate.SortMode = DataGridViewColumnSortMode.Automatic; + CreateDate.Width = 125; // // Operate // - this.Operate.HeaderText = "Operate"; - this.Operate.MinimumWidth = 6; - this.Operate.Name = "Operate"; - this.Operate.ReadOnly = true; - this.Operate.Width = 125; + Operate.HeaderText = "Operate"; + Operate.MinimumWidth = 6; + Operate.Name = "Operate"; + Operate.ReadOnly = true; + Operate.Width = 125; // // PIC // - this.PIC.HeaderText = "PIC"; - this.PIC.MinimumWidth = 6; - this.PIC.Name = "PIC"; - this.PIC.ReadOnly = true; - this.PIC.Width = 125; + PIC.HeaderText = "PIC"; + PIC.MinimumWidth = 6; + PIC.Name = "PIC"; + PIC.ReadOnly = true; + PIC.Width = 125; // // groupBox1 // - this.groupBox1.AutoSize = true; - this.groupBox1.Controls.Add(this.checkBox2); - this.groupBox1.Controls.Add(this.maskedTextBox2); - this.groupBox1.Controls.Add(this.radioButton3); - this.groupBox1.Controls.Add(this.radioButton2); - this.groupBox1.Controls.Add(this.label2); - this.groupBox1.Controls.Add(this.radioButton1); - this.groupBox1.Controls.Add(this.linkLabel1); - this.groupBox1.Controls.Add(this.comboBox1); - this.groupBox1.Controls.Add(this.button2); - this.groupBox1.Controls.Add(this.label1); - this.groupBox1.Controls.Add(this.maskedTextBox1); - this.groupBox1.Controls.Add(this.textBox1); - this.groupBox1.Dock = System.Windows.Forms.DockStyle.Top; - this.groupBox1.Location = new System.Drawing.Point(0, 29); - this.groupBox1.Margin = new System.Windows.Forms.Padding(4); - this.groupBox1.Name = "groupBox1"; - this.groupBox1.Padding = new System.Windows.Forms.Padding(4); - this.groupBox1.Size = new System.Drawing.Size(1445, 167); - this.groupBox1.TabIndex = 3; - this.groupBox1.TabStop = false; - this.groupBox1.Text = "groupBox1"; + groupBox1.AutoSize = true; + groupBox1.Controls.Add(button7); + groupBox1.Controls.Add(checkBox2); + groupBox1.Controls.Add(maskedTextBox2); + groupBox1.Controls.Add(radioButton3); + groupBox1.Controls.Add(radioButton2); + groupBox1.Controls.Add(label2); + groupBox1.Controls.Add(radioButton1); + groupBox1.Controls.Add(linkLabel1); + groupBox1.Controls.Add(comboBox1); + groupBox1.Controls.Add(button2); + groupBox1.Controls.Add(label1); + groupBox1.Controls.Add(maskedTextBox1); + groupBox1.Controls.Add(textBox1); + groupBox1.Dock = DockStyle.Top; + groupBox1.Location = new System.Drawing.Point(0, 29); + groupBox1.Margin = new Padding(4); + groupBox1.Name = "groupBox1"; + groupBox1.Padding = new Padding(4); + groupBox1.Size = new System.Drawing.Size(1339, 167); + groupBox1.TabIndex = 3; + groupBox1.TabStop = false; + groupBox1.Text = "分组框标题"; + // + // button7 + // + button7.BackColor = System.Drawing.Color.LightCoral; + button7.Location = new System.Drawing.Point(827, 21); + button7.Name = "button7"; + button7.Size = new System.Drawing.Size(154, 29); + button7.TabIndex = 14; + button7.Text = "listview演示"; + button7.UseVisualStyleBackColor = false; + button7.Click += button7_Click; // // checkBox2 // - this.checkBox2.AutoSize = true; - this.checkBox2.Checked = true; - this.checkBox2.CheckState = System.Windows.Forms.CheckState.Indeterminate; - this.checkBox2.Location = new System.Drawing.Point(681, 26); - this.checkBox2.Margin = new System.Windows.Forms.Padding(4); - this.checkBox2.Name = "checkBox2"; - this.checkBox2.Size = new System.Drawing.Size(109, 24); - this.checkBox2.TabIndex = 6; - this.checkBox2.Text = "checkBox2"; - this.checkBox2.UseVisualStyleBackColor = true; - this.checkBox2.CheckedChanged += new System.EventHandler(this.checkBox2_CheckedChanged); - this.checkBox2.CheckStateChanged += new System.EventHandler(this.checkBox2_CheckStateChanged); + checkBox2.AutoSize = true; + checkBox2.Checked = true; + checkBox2.CheckState = CheckState.Indeterminate; + checkBox2.Location = new System.Drawing.Point(681, 26); + checkBox2.Margin = new Padding(4); + checkBox2.Name = "checkBox2"; + checkBox2.Size = new System.Drawing.Size(109, 24); + checkBox2.TabIndex = 6; + checkBox2.Text = "checkBox2"; + checkBox2.UseVisualStyleBackColor = true; + checkBox2.CheckedChanged += checkBox2_CheckedChanged; + checkBox2.CheckStateChanged += checkBox2_CheckStateChanged; // // maskedTextBox2 // - this.maskedTextBox2.Location = new System.Drawing.Point(101, 71); - this.maskedTextBox2.Margin = new System.Windows.Forms.Padding(4); - this.maskedTextBox2.Name = "maskedTextBox2"; - this.maskedTextBox2.PasswordChar = '*'; - this.maskedTextBox2.Size = new System.Drawing.Size(223, 27); - this.maskedTextBox2.TabIndex = 5; - this.maskedTextBox2.Text = "sdfdf43"; - this.maskedTextBox2.Validated += new System.EventHandler(this.maskedTextBox2_Validated); + maskedTextBox2.Location = new System.Drawing.Point(101, 71); + maskedTextBox2.Margin = new Padding(4); + maskedTextBox2.Name = "maskedTextBox2"; + maskedTextBox2.PasswordChar = '*'; + maskedTextBox2.Size = new System.Drawing.Size(223, 27); + maskedTextBox2.TabIndex = 5; + maskedTextBox2.Text = "sdfdf43"; + maskedTextBox2.Validated += maskedTextBox2_Validated; // // radioButton3 // - this.radioButton3.AutoSize = true; - this.radioButton3.Location = new System.Drawing.Point(1029, 88); - this.radioButton3.Margin = new System.Windows.Forms.Padding(4); - this.radioButton3.Name = "radioButton3"; - this.radioButton3.Size = new System.Drawing.Size(126, 24); - this.radioButton3.TabIndex = 12; - this.radioButton3.Text = "radioButton3"; - this.radioButton3.UseVisualStyleBackColor = true; - this.radioButton3.CheckedChanged += new System.EventHandler(this.radioButton3_CheckedChanged); + radioButton3.AutoSize = true; + radioButton3.Location = new System.Drawing.Point(1029, 88); + radioButton3.Margin = new Padding(4); + radioButton3.Name = "radioButton3"; + radioButton3.Size = new System.Drawing.Size(126, 24); + radioButton3.TabIndex = 12; + radioButton3.Text = "radioButton3"; + radioButton3.UseVisualStyleBackColor = true; + radioButton3.CheckedChanged += radioButton3_CheckedChanged; // // radioButton2 // - this.radioButton2.AutoSize = true; - this.radioButton2.Checked = true; - this.radioButton2.Location = new System.Drawing.Point(1029, 56); - this.radioButton2.Margin = new System.Windows.Forms.Padding(4); - this.radioButton2.Name = "radioButton2"; - this.radioButton2.Size = new System.Drawing.Size(126, 24); - this.radioButton2.TabIndex = 11; - this.radioButton2.TabStop = true; - this.radioButton2.Text = "radioButton2"; - this.radioButton2.UseVisualStyleBackColor = true; - this.radioButton2.CheckedChanged += new System.EventHandler(this.radioButton2_CheckedChanged); + radioButton2.AutoSize = true; + radioButton2.Checked = true; + radioButton2.Location = new System.Drawing.Point(1029, 56); + radioButton2.Margin = new Padding(4); + radioButton2.Name = "radioButton2"; + radioButton2.Size = new System.Drawing.Size(126, 24); + radioButton2.TabIndex = 11; + radioButton2.TabStop = true; + radioButton2.Text = "radioButton2"; + radioButton2.UseVisualStyleBackColor = true; + radioButton2.CheckedChanged += radioButton2_CheckedChanged; // // label2 // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(35, 34); - this.label2.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(58, 20); - this.label2.TabIndex = 3; - this.label2.Text = "掩 码:"; + label2.AutoSize = true; + label2.Location = new System.Drawing.Point(35, 34); + label2.Margin = new Padding(4, 0, 4, 0); + label2.Name = "label2"; + label2.Size = new System.Drawing.Size(58, 20); + label2.TabIndex = 3; + label2.Text = "掩 码:"; // // radioButton1 // - this.radioButton1.AutoSize = true; - this.radioButton1.Location = new System.Drawing.Point(1029, 22); - this.radioButton1.Margin = new System.Windows.Forms.Padding(4); - this.radioButton1.Name = "radioButton1"; - this.radioButton1.Size = new System.Drawing.Size(126, 24); - this.radioButton1.TabIndex = 10; - this.radioButton1.Text = "radioButton1"; - this.radioButton1.UseVisualStyleBackColor = true; - this.radioButton1.CheckedChanged += new System.EventHandler(this.radioButton1_CheckedChanged); + radioButton1.AutoSize = true; + radioButton1.Location = new System.Drawing.Point(1029, 22); + radioButton1.Margin = new Padding(4); + radioButton1.Name = "radioButton1"; + radioButton1.Size = new System.Drawing.Size(126, 24); + radioButton1.TabIndex = 10; + radioButton1.Text = "radioButton1"; + radioButton1.UseVisualStyleBackColor = true; + radioButton1.CheckedChanged += radioButton1_CheckedChanged; // // linkLabel1 // - this.linkLabel1.ActiveLinkColor = System.Drawing.Color.Blue; - this.linkLabel1.AutoSize = true; - this.linkLabel1.LinkColor = System.Drawing.Color.Red; - this.linkLabel1.Location = new System.Drawing.Point(886, 108); - this.linkLabel1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); - this.linkLabel1.Name = "linkLabel1"; - this.linkLabel1.Size = new System.Drawing.Size(82, 20); - this.linkLabel1.TabIndex = 6; - this.linkLabel1.TabStop = true; - this.linkLabel1.Text = "linkLabel1"; + linkLabel1.ActiveLinkColor = System.Drawing.Color.Blue; + linkLabel1.AutoSize = true; + linkLabel1.LinkColor = System.Drawing.Color.Red; + linkLabel1.Location = new System.Drawing.Point(886, 108); + linkLabel1.Margin = new Padding(4, 0, 4, 0); + linkLabel1.Name = "linkLabel1"; + linkLabel1.Size = new System.Drawing.Size(82, 20); + linkLabel1.TabIndex = 6; + linkLabel1.TabStop = true; + linkLabel1.Text = "linkLabel1"; // // button2 // - this.button2.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("button2.BackgroundImage"))); - this.button2.Font = new System.Drawing.Font("Microsoft YaHei UI", 11F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); - this.button2.ForeColor = System.Drawing.Color.Blue; - this.button2.Location = new System.Drawing.Point(681, 71); - this.button2.Margin = new System.Windows.Forms.Padding(4); - this.button2.Name = "button2"; - this.button2.Size = new System.Drawing.Size(185, 68); - this.button2.TabIndex = 0; - this.button2.Text = "选择颜色按钮"; - this.button2.UseVisualStyleBackColor = true; - this.button2.Click += new System.EventHandler(this.button2_Click); + button2.BackgroundImage = (System.Drawing.Image)resources.GetObject("button2.BackgroundImage"); + button2.BackgroundImageLayout = ImageLayout.Stretch; + button2.Font = new System.Drawing.Font("Microsoft YaHei UI", 15F); + button2.ForeColor = System.Drawing.Color.Blue; + button2.Location = new System.Drawing.Point(681, 71); + button2.Margin = new Padding(4); + button2.Name = "button2"; + button2.Size = new System.Drawing.Size(185, 68); + button2.TabIndex = 0; + button2.Text = "选择颜色按钮"; + button2.UseVisualStyleBackColor = true; + button2.Click += button2_Click; // // label1 // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(432, 74); - this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(84, 20); - this.label1.TabIndex = 1; - this.label1.Text = "选择颜色:"; + label1.AutoSize = true; + label1.Location = new System.Drawing.Point(432, 74); + label1.Margin = new Padding(4, 0, 4, 0); + label1.Name = "label1"; + label1.Size = new System.Drawing.Size(84, 20); + label1.TabIndex = 1; + label1.Text = "选择颜色:"; // // maskedTextBox1 // - this.maskedTextBox1.Location = new System.Drawing.Point(101, 31); - this.maskedTextBox1.Margin = new System.Windows.Forms.Padding(4); - this.maskedTextBox1.Mask = "0000年90月90日 90时00分"; - this.maskedTextBox1.Name = "maskedTextBox1"; - this.maskedTextBox1.Size = new System.Drawing.Size(223, 27); - this.maskedTextBox1.TabIndex = 4; - this.maskedTextBox1.ValidatingType = typeof(System.DateTime); + maskedTextBox1.Location = new System.Drawing.Point(101, 31); + maskedTextBox1.Margin = new Padding(4); + maskedTextBox1.Mask = "0000年90月90日 90时00分"; + maskedTextBox1.Name = "maskedTextBox1"; + maskedTextBox1.Size = new System.Drawing.Size(223, 27); + maskedTextBox1.TabIndex = 4; + maskedTextBox1.ValidatingType = typeof(DateTime); // // tabControl1 // - this.tabControl1.Controls.Add(this.tabPage1); - this.tabControl1.Controls.Add(this.tabPage2); - this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tabControl1.Location = new System.Drawing.Point(0, 0); - this.tabControl1.Margin = new System.Windows.Forms.Padding(4); - this.tabControl1.Name = "tabControl1"; - this.tabControl1.SelectedIndex = 0; - this.tabControl1.Size = new System.Drawing.Size(1445, 347); - this.tabControl1.TabIndex = 4; - this.tabControl1.SelectedIndexChanged += new System.EventHandler(this.tabControl1_SelectedIndexChanged); + tabControl1.Controls.Add(tabPage1); + tabControl1.Controls.Add(tabPage2); + tabControl1.Dock = DockStyle.Fill; + tabControl1.ItemSize = new System.Drawing.Size(181, 25); + tabControl1.Location = new System.Drawing.Point(0, 0); + tabControl1.Margin = new Padding(4); + tabControl1.Name = "tabControl1"; + tabControl1.SelectedIndex = 0; + tabControl1.Size = new System.Drawing.Size(1339, 310); + tabControl1.TabIndex = 4; + tabControl1.DrawItem += tabControl1_DrawItem; + tabControl1.SelectedIndexChanged += tabControl1_SelectedIndexChanged; // // tabPage1 // - this.tabPage1.Controls.Add(this.dataGridView1); - this.tabPage1.Location = new System.Drawing.Point(4, 29); - this.tabPage1.Margin = new System.Windows.Forms.Padding(4); - this.tabPage1.Name = "tabPage1"; - this.tabPage1.Padding = new System.Windows.Forms.Padding(4); - this.tabPage1.Size = new System.Drawing.Size(1437, 314); - this.tabPage1.TabIndex = 0; - this.tabPage1.Text = "tabPage1"; - this.tabPage1.UseVisualStyleBackColor = true; + tabPage1.Controls.Add(dataGridView1); + tabPage1.Location = new System.Drawing.Point(4, 29); + tabPage1.Margin = new Padding(4); + tabPage1.Name = "tabPage1"; + tabPage1.Padding = new Padding(4); + tabPage1.Size = new System.Drawing.Size(1331, 277); + tabPage1.TabIndex = 0; + tabPage1.Text = "数据表格"; + tabPage1.UseVisualStyleBackColor = true; // // tabPage2 // - this.tabPage2.Controls.Add(this.richTextBox1); - this.tabPage2.Controls.Add(this.label3); - this.tabPage2.Controls.Add(this.checkBox1); - this.tabPage2.Controls.Add(this.button3); - this.tabPage2.Location = new System.Drawing.Point(4, 29); - this.tabPage2.Margin = new System.Windows.Forms.Padding(4); - this.tabPage2.Name = "tabPage2"; - this.tabPage2.Padding = new System.Windows.Forms.Padding(4); - this.tabPage2.Size = new System.Drawing.Size(1437, 314); - this.tabPage2.TabIndex = 1; - this.tabPage2.Text = "tabPage2"; - this.tabPage2.UseVisualStyleBackColor = true; + tabPage2.Controls.Add(tableLayoutPanel1); + tabPage2.Controls.Add(richTextBox1); + tabPage2.Controls.Add(flowLayoutPanel1); + tabPage2.Controls.Add(listBox1); + tabPage2.Controls.Add(label3); + tabPage2.Controls.Add(checkBox1); + tabPage2.Controls.Add(button3); + tabPage2.Location = new System.Drawing.Point(4, 29); + tabPage2.Margin = new Padding(4); + tabPage2.Name = "tabPage2"; + tabPage2.Padding = new Padding(4); + tabPage2.Size = new System.Drawing.Size(1331, 277); + tabPage2.TabIndex = 1; + tabPage2.Text = "容器类表格"; + tabPage2.UseVisualStyleBackColor = true; + // + // tableLayoutPanel1 + // + tableLayoutPanel1.CellBorderStyle = TableLayoutPanelCellBorderStyle.Single; + tableLayoutPanel1.ColumnCount = 2; + tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F)); + tableLayoutPanel1.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 50F)); + tableLayoutPanel1.Controls.Add(label6, 0, 1); + tableLayoutPanel1.Controls.Add(label5, 0, 0); + tableLayoutPanel1.Controls.Add(button6, 1, 1); + tableLayoutPanel1.Location = new System.Drawing.Point(823, 26); + tableLayoutPanel1.Name = "tableLayoutPanel1"; + tableLayoutPanel1.RowCount = 2; + tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 66.29214F)); + tableLayoutPanel1.RowStyles.Add(new RowStyle(SizeType.Percent, 33.7078667F)); + tableLayoutPanel1.Size = new System.Drawing.Size(291, 181); + tableLayoutPanel1.TabIndex = 7; + // + // label6 + // + label6.AutoSize = true; + label6.Location = new System.Drawing.Point(4, 120); + label6.Name = "label6"; + label6.Size = new System.Drawing.Size(129, 60); + label6.TabIndex = 0; + label6.Text = "\r\nddddddddddddddddddddddddddddddddddddd"; + // + // label5 + // + label5.AutoSize = true; + label5.Location = new System.Drawing.Point(4, 1); + label5.Name = "label5"; + label5.Size = new System.Drawing.Size(131, 20); + label5.TabIndex = 0; + label5.Text = "tablelayoutpanel"; + // + // button6 + // + button6.Location = new System.Drawing.Point(149, 123); + button6.Name = "button6"; + button6.Size = new System.Drawing.Size(94, 29); + button6.TabIndex = 1; + button6.Text = "button6"; + button6.UseVisualStyleBackColor = true; + button6.Click += button6_Click; // // richTextBox1 // - this.richTextBox1.Location = new System.Drawing.Point(552, 38); - this.richTextBox1.Margin = new System.Windows.Forms.Padding(4); - this.richTextBox1.Name = "richTextBox1"; - this.richTextBox1.Size = new System.Drawing.Size(127, 112); - this.richTextBox1.TabIndex = 3; - this.richTextBox1.Text = ""; - this.richTextBox1.TextChanged += new System.EventHandler(this.richTextBox1_TextChanged); + richTextBox1.Location = new System.Drawing.Point(636, 154); + richTextBox1.Name = "richTextBox1"; + richTextBox1.Size = new System.Drawing.Size(125, 120); + richTextBox1.TabIndex = 6; + richTextBox1.Text = ""; + // + // flowLayoutPanel1 + // + flowLayoutPanel1.Controls.Add(button4); + flowLayoutPanel1.Controls.Add(button5); + flowLayoutPanel1.Controls.Add(checkBox3); + flowLayoutPanel1.Controls.Add(label4); + flowLayoutPanel1.Location = new System.Drawing.Point(198, 55); + flowLayoutPanel1.Name = "flowLayoutPanel1"; + flowLayoutPanel1.Size = new System.Drawing.Size(392, 183); + flowLayoutPanel1.TabIndex = 5; + // + // button4 + // + button4.Location = new System.Drawing.Point(3, 3); + button4.Name = "button4"; + button4.Size = new System.Drawing.Size(94, 29); + button4.TabIndex = 0; + button4.Text = "button4"; + button4.UseVisualStyleBackColor = true; + // + // button5 + // + button5.Location = new System.Drawing.Point(103, 3); + button5.Name = "button5"; + button5.Size = new System.Drawing.Size(249, 29); + button5.TabIndex = 1; + button5.Text = "button5"; + button5.UseVisualStyleBackColor = true; + // + // checkBox3 + // + checkBox3.AutoSize = true; + checkBox3.Location = new System.Drawing.Point(3, 38); + checkBox3.Name = "checkBox3"; + checkBox3.Size = new System.Drawing.Size(109, 24); + checkBox3.TabIndex = 2; + checkBox3.Text = "checkBox3"; + checkBox3.UseVisualStyleBackColor = true; + // + // label4 + // + label4.AutoSize = true; + label4.Location = new System.Drawing.Point(118, 35); + label4.Name = "label4"; + label4.Size = new System.Drawing.Size(125, 20); + label4.TabIndex = 3; + label4.Text = "flowlayoutpanel"; + // + // listBox1 + // + listBox1.ColumnWidth = 100; + listBox1.DisplayMember = "Title"; + listBox1.FormattingEnabled = true; + listBox1.HorizontalScrollbar = true; + listBox1.Items.AddRange(new object[] { "test1", "test2" }); + listBox1.Location = new System.Drawing.Point(636, 26); + listBox1.MultiColumn = true; + listBox1.Name = "listBox1"; + listBox1.ScrollAlwaysVisible = true; + listBox1.SelectionMode = SelectionMode.MultiSimple; + listBox1.Size = new System.Drawing.Size(150, 104); + listBox1.Sorted = true; + listBox1.TabIndex = 4; + listBox1.ValueMember = "Title"; // // label3 // - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(78, 0); - this.label3.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(53, 20); - this.label3.TabIndex = 2; - this.label3.Text = "label3"; + label3.AutoSize = true; + label3.Location = new System.Drawing.Point(31, 89); + label3.Margin = new Padding(4, 0, 4, 0); + label3.Name = "label3"; + label3.Size = new System.Drawing.Size(53, 20); + label3.TabIndex = 2; + label3.Text = "label3"; // // checkBox1 // - this.checkBox1.AutoSize = true; - this.checkBox1.Location = new System.Drawing.Point(1293, 318); - this.checkBox1.Margin = new System.Windows.Forms.Padding(4); - this.checkBox1.Name = "checkBox1"; - this.checkBox1.Size = new System.Drawing.Size(109, 24); - this.checkBox1.TabIndex = 1; - this.checkBox1.Text = "checkBox1"; - this.checkBox1.UseVisualStyleBackColor = true; + checkBox1.AutoSize = true; + checkBox1.Location = new System.Drawing.Point(1293, 318); + checkBox1.Margin = new Padding(4); + checkBox1.Name = "checkBox1"; + checkBox1.Size = new System.Drawing.Size(109, 24); + checkBox1.TabIndex = 1; + checkBox1.Text = "checkBox1"; + checkBox1.UseVisualStyleBackColor = true; // // button3 // - this.button3.Location = new System.Drawing.Point(248, 58); - this.button3.Margin = new System.Windows.Forms.Padding(4); - this.button3.Name = "button3"; - this.button3.Size = new System.Drawing.Size(96, 27); - this.button3.TabIndex = 0; - this.button3.Text = "button3"; - this.button3.UseVisualStyleBackColor = true; + button3.Location = new System.Drawing.Point(31, 38); + button3.Margin = new Padding(4); + button3.Name = "button3"; + button3.Size = new System.Drawing.Size(96, 27); + button3.TabIndex = 0; + button3.Text = "button3"; + button3.UseVisualStyleBackColor = true; // // treeView1 // - this.treeView1.Location = new System.Drawing.Point(127, 66); - this.treeView1.Margin = new System.Windows.Forms.Padding(4); - this.treeView1.Name = "treeView1"; - treeNode1.Name = "Node2"; - treeNode1.Text = "Node2"; - treeNode2.Name = "Node3"; - treeNode2.Text = "Node3"; - treeNode3.Name = "Node0"; - treeNode3.Text = "Node0"; - treeNode4.Name = "Node1"; - treeNode4.Text = "Node1"; - this.treeView1.Nodes.AddRange(new System.Windows.Forms.TreeNode[] { - treeNode3, - treeNode4}); - this.treeView1.Size = new System.Drawing.Size(154, 113); - this.treeView1.TabIndex = 4; - this.treeView1.AfterCollapse += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterCollapse); - this.treeView1.AfterExpand += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterExpand); - this.treeView1.BeforeSelect += new System.Windows.Forms.TreeViewCancelEventHandler(this.treeView1_BeforeSelect); - this.treeView1.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterSelect); + treeView1.Location = new System.Drawing.Point(127, 66); + treeView1.Margin = new Padding(4); + treeView1.Name = "treeView1"; + treeNode1.Name = ""; + treeNode1.Text = "Node21"; + treeNode2.Name = ""; + treeNode2.Text = "Node22"; + treeNode3.Name = "Node2"; + treeNode3.Text = "Node2"; + treeNode4.Name = "Node3"; + treeNode4.Text = "Node3"; + treeNode5.Name = "Node0"; + treeNode5.Text = "Node0"; + treeNode6.Name = "Node1"; + treeNode6.Text = "Node1"; + treeView1.Nodes.AddRange(new TreeNode[] { treeNode5, treeNode6 }); + treeView1.Size = new System.Drawing.Size(154, 113); + treeView1.TabIndex = 4; + treeView1.AfterCollapse += treeView1_AfterCollapse; + treeView1.AfterExpand += treeView1_AfterExpand; + treeView1.BeforeSelect += treeView1_BeforeSelect; + treeView1.AfterSelect += treeView1_AfterSelect; // // pictureBox1 // - this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image"))); - this.pictureBox1.Location = new System.Drawing.Point(1016, 35); - this.pictureBox1.Margin = new System.Windows.Forms.Padding(4); - this.pictureBox1.Name = "pictureBox1"; - this.pictureBox1.Size = new System.Drawing.Size(280, 134); - this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; - this.pictureBox1.TabIndex = 5; - this.pictureBox1.TabStop = false; + pictureBox1.BackgroundImage = Properties.Resources.timg; + pictureBox1.Image = (System.Drawing.Image)resources.GetObject("pictureBox1.Image"); + pictureBox1.Location = new System.Drawing.Point(1016, 35); + pictureBox1.Margin = new Padding(4); + pictureBox1.MaximumSize = new System.Drawing.Size(200, 130); + pictureBox1.Name = "pictureBox1"; + pictureBox1.Size = new System.Drawing.Size(200, 130); + pictureBox1.SizeMode = PictureBoxSizeMode.Zoom; + pictureBox1.TabIndex = 5; + pictureBox1.TabStop = false; // // contextMenuStrip1 // - this.contextMenuStrip1.ImageScalingSize = new System.Drawing.Size(20, 20); - this.contextMenuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.toolStripMenuItem1, - this.toolStripMenuItem2}); - this.contextMenuStrip1.Name = "contextMenuStrip1"; - this.contextMenuStrip1.Size = new System.Drawing.Size(124, 52); + contextMenuStrip1.ImageScalingSize = new System.Drawing.Size(20, 20); + contextMenuStrip1.Items.AddRange(new ToolStripItem[] { toolStripMenuItem1, toolStripMenuItem2 }); + contextMenuStrip1.Name = "contextMenuStrip1"; + contextMenuStrip1.Size = new System.Drawing.Size(124, 52); // // toolStripMenuItem1 // - this.toolStripMenuItem1.Name = "toolStripMenuItem1"; - this.toolStripMenuItem1.Size = new System.Drawing.Size(123, 24); - this.toolStripMenuItem1.Text = "菜单一"; - this.toolStripMenuItem1.Click += new System.EventHandler(this.toolStripMenuItem1_Click); + toolStripMenuItem1.Name = "toolStripMenuItem1"; + toolStripMenuItem1.Size = new System.Drawing.Size(123, 24); + toolStripMenuItem1.Text = "菜单一"; + toolStripMenuItem1.Click += toolStripMenuItem1_Click; // // toolStripMenuItem2 // - this.toolStripMenuItem2.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.菜单三ToolStripMenuItem}); - this.toolStripMenuItem2.Name = "toolStripMenuItem2"; - this.toolStripMenuItem2.Size = new System.Drawing.Size(123, 24); - this.toolStripMenuItem2.Text = "菜单二"; + toolStripMenuItem2.DropDownItems.AddRange(new ToolStripItem[] { 菜单三ToolStripMenuItem }); + toolStripMenuItem2.Name = "toolStripMenuItem2"; + toolStripMenuItem2.Size = new System.Drawing.Size(123, 24); + toolStripMenuItem2.Text = "菜单二"; // // 菜单三ToolStripMenuItem // - this.菜单三ToolStripMenuItem.Name = "菜单三ToolStripMenuItem"; - this.菜单三ToolStripMenuItem.Size = new System.Drawing.Size(137, 26); - this.菜单三ToolStripMenuItem.Text = "菜单三"; + 菜单三ToolStripMenuItem.Name = "菜单三ToolStripMenuItem"; + 菜单三ToolStripMenuItem.Size = new System.Drawing.Size(137, 26); + 菜单三ToolStripMenuItem.Text = "菜单三"; // // menuStrip1 // - this.menuStrip1.AutoSize = false; - this.menuStrip1.ImageScalingSize = new System.Drawing.Size(20, 20); - this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.toolStripMenuItem3, - this.toolStripMenuItem4}); - this.menuStrip1.Location = new System.Drawing.Point(0, 0); - this.menuStrip1.Name = "menuStrip1"; - this.menuStrip1.Padding = new System.Windows.Forms.Padding(8, 2, 0, 2); - this.menuStrip1.Size = new System.Drawing.Size(1445, 29); - this.menuStrip1.TabIndex = 7; - this.menuStrip1.Text = "menuStrip1"; + menuStrip1.AutoSize = false; + menuStrip1.ImageScalingSize = new System.Drawing.Size(20, 20); + menuStrip1.Items.AddRange(new ToolStripItem[] { toolStripMenuItem3, toolStripMenuItem4 }); + menuStrip1.Location = new System.Drawing.Point(0, 0); + menuStrip1.Name = "menuStrip1"; + menuStrip1.Padding = new Padding(8, 2, 0, 2); + menuStrip1.Size = new System.Drawing.Size(1339, 29); + menuStrip1.TabIndex = 7; + menuStrip1.Text = "menuStrip1"; // // toolStripMenuItem3 // - this.toolStripMenuItem3.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.test1ToolStripMenuItem, - this.test2ToolStripMenuItem}); - this.toolStripMenuItem3.Name = "toolStripMenuItem3"; - this.toolStripMenuItem3.Size = new System.Drawing.Size(92, 25); - this.toolStripMenuItem3.Text = "一级菜单1"; - this.toolStripMenuItem3.DropDownItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.toolStripMenuItem3_DropDownItemClicked); - this.toolStripMenuItem3.Click += new System.EventHandler(this.toolStripMenuItem3_Click); + toolStripMenuItem3.DropDownItems.AddRange(new ToolStripItem[] { test1ToolStripMenuItem, test2ToolStripMenuItem }); + toolStripMenuItem3.Name = "toolStripMenuItem3"; + toolStripMenuItem3.Size = new System.Drawing.Size(92, 25); + toolStripMenuItem3.Text = "一级菜单1"; + toolStripMenuItem3.DropDownItemClicked += toolStripMenuItem3_DropDownItemClicked; + toolStripMenuItem3.Click += toolStripMenuItem3_Click; // // test1ToolStripMenuItem // - this.test1ToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.三级菜单1ToolStripMenuItem}); - this.test1ToolStripMenuItem.Name = "test1ToolStripMenuItem"; - this.test1ToolStripMenuItem.Size = new System.Drawing.Size(161, 26); - this.test1ToolStripMenuItem.Text = "二级菜单1"; + test1ToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { 三级菜单1ToolStripMenuItem }); + test1ToolStripMenuItem.Name = "test1ToolStripMenuItem"; + test1ToolStripMenuItem.Size = new System.Drawing.Size(161, 26); + test1ToolStripMenuItem.Text = "二级菜单1"; // // 三级菜单1ToolStripMenuItem // - this.三级菜单1ToolStripMenuItem.Name = "三级菜单1ToolStripMenuItem"; - this.三级菜单1ToolStripMenuItem.Size = new System.Drawing.Size(161, 26); - this.三级菜单1ToolStripMenuItem.Text = "三级菜单1"; + 三级菜单1ToolStripMenuItem.Name = "三级菜单1ToolStripMenuItem"; + 三级菜单1ToolStripMenuItem.Size = new System.Drawing.Size(161, 26); + 三级菜单1ToolStripMenuItem.Text = "三级菜单1"; // // test2ToolStripMenuItem // - this.test2ToolStripMenuItem.Checked = true; - this.test2ToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked; - this.test2ToolStripMenuItem.Name = "test2ToolStripMenuItem"; - this.test2ToolStripMenuItem.Size = new System.Drawing.Size(161, 26); - this.test2ToolStripMenuItem.Text = "二级菜单2"; - this.test2ToolStripMenuItem.CheckedChanged += new System.EventHandler(this.test2ToolStripMenuItem_CheckedChanged); - this.test2ToolStripMenuItem.CheckStateChanged += new System.EventHandler(this.test2ToolStripMenuItem_CheckStateChanged); - this.test2ToolStripMenuItem.DropDownItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.test2ToolStripMenuItem_DropDownItemClicked); + test2ToolStripMenuItem.Checked = true; + test2ToolStripMenuItem.CheckState = CheckState.Checked; + test2ToolStripMenuItem.Name = "test2ToolStripMenuItem"; + test2ToolStripMenuItem.Size = new System.Drawing.Size(161, 26); + test2ToolStripMenuItem.Text = "二级菜单2"; + test2ToolStripMenuItem.CheckedChanged += test2ToolStripMenuItem_CheckedChanged; + test2ToolStripMenuItem.CheckStateChanged += test2ToolStripMenuItem_CheckStateChanged; + test2ToolStripMenuItem.DropDownItemClicked += test2ToolStripMenuItem_DropDownItemClicked; // // toolStripMenuItem4 // - this.toolStripMenuItem4.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.二级菜单1ToolStripMenuItem}); - this.toolStripMenuItem4.Name = "toolStripMenuItem4"; - this.toolStripMenuItem4.Size = new System.Drawing.Size(92, 25); - this.toolStripMenuItem4.Text = "一级菜单2"; + toolStripMenuItem4.DropDownItems.AddRange(new ToolStripItem[] { 二级菜单1ToolStripMenuItem }); + toolStripMenuItem4.Image = Properties.Resources.timg; + toolStripMenuItem4.Name = "toolStripMenuItem4"; + toolStripMenuItem4.Size = new System.Drawing.Size(112, 25); + toolStripMenuItem4.Text = "一级菜单2"; // // 二级菜单1ToolStripMenuItem // - this.二级菜单1ToolStripMenuItem.Name = "二级菜单1ToolStripMenuItem"; - this.二级菜单1ToolStripMenuItem.Size = new System.Drawing.Size(161, 26); - this.二级菜单1ToolStripMenuItem.Text = "二级菜单1"; + 二级菜单1ToolStripMenuItem.Name = "二级菜单1ToolStripMenuItem"; + 二级菜单1ToolStripMenuItem.Size = new System.Drawing.Size(161, 26); + 二级菜单1ToolStripMenuItem.Text = "二级菜单1"; // // dateTimePicker1 // - this.dateTimePicker1.Location = new System.Drawing.Point(26, 21); - this.dateTimePicker1.Margin = new System.Windows.Forms.Padding(4); - this.dateTimePicker1.Name = "dateTimePicker1"; - this.dateTimePicker1.Size = new System.Drawing.Size(256, 27); - this.dateTimePicker1.TabIndex = 8; - this.dateTimePicker1.ValueChanged += new System.EventHandler(this.dateTimePicker1_ValueChanged); + dateTimePicker1.Location = new System.Drawing.Point(26, 21); + dateTimePicker1.Margin = new Padding(4); + dateTimePicker1.Name = "dateTimePicker1"; + dateTimePicker1.Size = new System.Drawing.Size(256, 27); + dateTimePicker1.TabIndex = 8; + dateTimePicker1.ValueChanged += dateTimePicker1_ValueChanged; // // numericUpDown1 // - this.numericUpDown1.Location = new System.Drawing.Point(317, 29); - this.numericUpDown1.Margin = new System.Windows.Forms.Padding(4); - this.numericUpDown1.Name = "numericUpDown1"; - this.numericUpDown1.Size = new System.Drawing.Size(154, 27); - this.numericUpDown1.TabIndex = 9; - this.numericUpDown1.ValueChanged += new System.EventHandler(this.numericUpDown1_ValueChanged); + numericUpDown1.Location = new System.Drawing.Point(317, 29); + numericUpDown1.Margin = new Padding(4); + numericUpDown1.Name = "numericUpDown1"; + numericUpDown1.Size = new System.Drawing.Size(154, 27); + numericUpDown1.TabIndex = 9; + numericUpDown1.ValueChanged += numericUpDown1_ValueChanged; // // checkedListBox1 // - this.checkedListBox1.FormattingEnabled = true; - this.checkedListBox1.Items.AddRange(new object[] { - "3232", - "dfdf", - "ssss"}); - this.checkedListBox1.Location = new System.Drawing.Point(573, 29); - this.checkedListBox1.Margin = new System.Windows.Forms.Padding(4); - this.checkedListBox1.Name = "checkedListBox1"; - this.checkedListBox1.Size = new System.Drawing.Size(153, 92); - this.checkedListBox1.TabIndex = 13; - this.checkedListBox1.ItemCheck += new System.Windows.Forms.ItemCheckEventHandler(this.checkedListBox1_ItemCheck); - this.checkedListBox1.SelectedValueChanged += new System.EventHandler(this.checkedListBox1_SelectedValueChanged); + checkedListBox1.CheckOnClick = true; + checkedListBox1.ColumnWidth = 100; + checkedListBox1.FormattingEnabled = true; + checkedListBox1.Items.AddRange(new object[] { "3232", "dfdf", "ssss", "ssssssdddddddddddddd", "ffffff", "gggggggg", "gf333", "sssddd" }); + checkedListBox1.Location = new System.Drawing.Point(492, 29); + checkedListBox1.Margin = new Padding(4); + checkedListBox1.MultiColumn = true; + checkedListBox1.Name = "checkedListBox1"; + checkedListBox1.Size = new System.Drawing.Size(241, 92); + checkedListBox1.TabIndex = 13; + checkedListBox1.ItemCheck += checkedListBox1_ItemCheck; + checkedListBox1.SelectedValueChanged += checkedListBox1_SelectedValueChanged; // // splitContainer1 // - this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Bottom; - this.splitContainer1.Location = new System.Drawing.Point(0, 175); - this.splitContainer1.Margin = new System.Windows.Forms.Padding(4); - this.splitContainer1.Name = "splitContainer1"; - this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + splitContainer1.Dock = DockStyle.Bottom; + splitContainer1.Location = new System.Drawing.Point(0, 196); + splitContainer1.Margin = new Padding(4); + splitContainer1.Name = "splitContainer1"; + splitContainer1.Orientation = Orientation.Horizontal; // // splitContainer1.Panel1 // - this.splitContainer1.Panel1.Controls.Add(this.pictureBox2); - this.splitContainer1.Panel1.Controls.Add(this.treeView1); - this.splitContainer1.Panel1.Controls.Add(this.checkedListBox1); - this.splitContainer1.Panel1.Controls.Add(this.pictureBox1); - this.splitContainer1.Panel1.Controls.Add(this.dateTimePicker1); - this.splitContainer1.Panel1.Controls.Add(this.button1); - this.splitContainer1.Panel1.Controls.Add(this.numericUpDown1); + splitContainer1.Panel1.AutoScroll = true; + splitContainer1.Panel1.Controls.Add(pictureBox2); + splitContainer1.Panel1.Controls.Add(treeView1); + splitContainer1.Panel1.Controls.Add(checkedListBox1); + splitContainer1.Panel1.Controls.Add(pictureBox1); + splitContainer1.Panel1.Controls.Add(dateTimePicker1); + splitContainer1.Panel1.Controls.Add(button1); + splitContainer1.Panel1.Controls.Add(numericUpDown1); // // splitContainer1.Panel2 // - this.splitContainer1.Panel2.Controls.Add(this.tabControl1); - this.splitContainer1.Size = new System.Drawing.Size(1445, 565); - this.splitContainer1.SplitterDistance = 213; - this.splitContainer1.SplitterWidth = 5; - this.splitContainer1.TabIndex = 14; + splitContainer1.Panel2.AutoScroll = true; + splitContainer1.Panel2.Controls.Add(tabControl1); + splitContainer1.Size = new System.Drawing.Size(1339, 565); + splitContainer1.SplitterDistance = 250; + splitContainer1.SplitterWidth = 5; + splitContainer1.TabIndex = 14; // // pictureBox2 // - this.pictureBox2.Location = new System.Drawing.Point(753, 29); - this.pictureBox2.Name = "pictureBox2"; - this.pictureBox2.Size = new System.Drawing.Size(228, 140); - this.pictureBox2.TabIndex = 14; - this.pictureBox2.TabStop = false; - this.pictureBox2.Paint += new System.Windows.Forms.PaintEventHandler(this.pictureBox2_Paint); + pictureBox2.Location = new System.Drawing.Point(753, 29); + pictureBox2.Name = "pictureBox2"; + pictureBox2.Size = new System.Drawing.Size(228, 140); + pictureBox2.TabIndex = 14; + pictureBox2.TabStop = false; + pictureBox2.Paint += pictureBox2_Paint; // // Form1 // - this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(1445, 740); - this.ContextMenuStrip = this.contextMenuStrip1; - this.Controls.Add(this.groupBox1); - this.Controls.Add(this.splitContainer1); - this.Controls.Add(this.menuStrip1); - this.MainMenuStrip = this.menuStrip1; - this.Margin = new System.Windows.Forms.Padding(4); - this.Name = "Form1"; - this.Text = "C# winform gtk效果"; - ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit(); - this.groupBox1.ResumeLayout(false); - this.groupBox1.PerformLayout(); - this.tabControl1.ResumeLayout(false); - this.tabPage1.ResumeLayout(false); - this.tabPage2.ResumeLayout(false); - this.tabPage2.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); - this.contextMenuStrip1.ResumeLayout(false); - this.menuStrip1.ResumeLayout(false); - this.menuStrip1.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).EndInit(); - this.splitContainer1.Panel1.ResumeLayout(false); - this.splitContainer1.Panel2.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); - this.splitContainer1.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit(); - this.ResumeLayout(false); - this.PerformLayout(); - + AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F); + AutoScaleMode = AutoScaleMode.Font; + AutoScroll = true; + BackColor = System.Drawing.Color.AliceBlue; + BackgroundImage = Properties.Resources.timg; + BackgroundImageLayout = ImageLayout.Stretch; + ClientSize = new System.Drawing.Size(1360, 743); + ContextMenuStrip = contextMenuStrip1; + Controls.Add(groupBox1); + Controls.Add(splitContainer1); + Controls.Add(menuStrip1); + MainMenuStrip = menuStrip1; + Margin = new Padding(4); + MinimizeBox = false; + Name = "Form1"; + Text = "C# winform gtk效果"; + ((System.ComponentModel.ISupportInitialize)dataGridView1).EndInit(); + groupBox1.ResumeLayout(false); + groupBox1.PerformLayout(); + tabControl1.ResumeLayout(false); + tabPage1.ResumeLayout(false); + tabPage2.ResumeLayout(false); + tabPage2.PerformLayout(); + tableLayoutPanel1.ResumeLayout(false); + tableLayoutPanel1.PerformLayout(); + flowLayoutPanel1.ResumeLayout(false); + flowLayoutPanel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)pictureBox1).EndInit(); + contextMenuStrip1.ResumeLayout(false); + menuStrip1.ResumeLayout(false); + menuStrip1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)numericUpDown1).EndInit(); + splitContainer1.Panel1.ResumeLayout(false); + splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)splitContainer1).EndInit(); + splitContainer1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)pictureBox2).EndInit(); + ResumeLayout(false); + PerformLayout(); } #endregion @@ -718,18 +862,29 @@ namespace GTKWinFormsApp private System.Windows.Forms.RadioButton radioButton2; private System.Windows.Forms.RadioButton radioButton3; private CheckedListBox checkedListBox1; - private RichTextBox richTextBox1; private System.Windows.Forms.TreeView treeView1; private ToolStripMenuItem 三级菜单1ToolStripMenuItem; private ToolStripMenuItem 二级菜单1ToolStripMenuItem; private SplitContainer splitContainer1; + private PictureBox pictureBox2; + private ListBox listBox1; + private FlowLayoutPanel flowLayoutPanel1; + private Button button4; + private Button button5; + private CheckBox checkBox3; + private Label label4; + private RichTextBox richTextBox1; + private TableLayoutPanel tableLayoutPanel1; + private Label label5; + private Button button6; + private Label label6; + private Button button7; private DataGridViewTextBoxColumn ID; private DataGridViewCheckBoxColumn State; private DataGridViewTextBoxColumn Title; - private DataGridViewTextBoxColumn CreateDate; + private DataGridViewComboBoxColumn CreateDate; private DataGridViewButtonColumn Operate; private DataGridViewImageColumn PIC; - private PictureBox pictureBox2; } } diff --git a/Samples/GTKWinFormsApp/Form1.cs b/Samples/GTKWinFormsApp/Form1.cs index 3b9e8dd93dceecd3bf5257826bd491cfb1173877..87c2551b84c0b12a7ba1540486c82abf028ff6d1 100644 --- a/Samples/GTKWinFormsApp/Form1.cs +++ b/Samples/GTKWinFormsApp/Form1.cs @@ -1,12 +1,14 @@ using System; +using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Data; +using System.Data.Common; using System.Drawing; +using System.IO; using System.Linq; +using System.Runtime.CompilerServices; using System.Text; -using System.Threading.Tasks; -//using System.Windows.Forms; using System.Windows.Forms; namespace GTKWinFormsApp @@ -15,12 +17,32 @@ namespace GTKWinFormsApp { public Form1() { + InitializeComponent(); + DataTable dt = new DataTable(); + dt.Columns.Add("ID", typeof(string)); + dt.Columns.Add("CreateDate", typeof(DateTime)); + dt.Columns.Add("State", typeof(bool)); + dt.Rows.Add("user1", DateTime.Now, true); + dt.Rows.Add("user2", DateTime.Now.AddDays(5), false); + + DataSet dataSet = new DataSet(); + // dataSet.Tables.Add(dt); + b.ID = 1; + b.Title = "test1"; + listBox1.DataBindings.Add(new Binding("SelectedItem", b, "Title")); + + listBox1.DisplayMember = "ID"; + listBox1.DataSource = dt; + var ss = listBox1.Items[0]; } + TestEntity b = new TestEntity(); private void button1_Click(object sender, EventArgs e) { + // b.Title = "test2"; + DialogResult result = MessageBox.Show("1、加载数据点yes \n2、不加载数据点no", "加载数据提示", MessageBoxButtons.YesNo); if (result == DialogResult.No) { @@ -29,43 +51,54 @@ namespace GTKWinFormsApp //1、数据集列表数据源 List data = new List(); var createdate = DateTime.Now; - data.Add(new TestEntity() { ID = 0, Title = "test1", Info = "sdfdf", State = true, CreateDate = createdate, Operate = "编辑", PIC = "face-smile-big-symbolic.symbolic" }); - data.Add(new TestEntity() { ID = 1, Title = "test2", Info = " 3234fdf", State = true, CreateDate = createdate, Operate = "编辑", PIC = "face-smile" }); - data.Add(new TestEntity() { ID = 3, Title = "test3", Info = "ddds", State = false, CreateDate = createdate, Operate = "编辑", PIC = "" }); + data.Add(new TestEntity() { ID = 0, Title = "test1", Info = "sdfdf", State = true, CreateDate = createdate, Operate = "编辑", PIC = "face-smile-big" }); + data.Add(new TestEntity() { ID = 1, Title = "test2", Info = " 3234fdf", State = true, CreateDate = createdate, Operate = "编辑", PIC = "Resources\\timg2.jpg" }); + data.Add(new TestEntity() { ID = 3, Title = "test3", Info = "ddds", State = false, CreateDate = createdate, Operate = "编辑", PIC = "Resources\\BindingNavigator.Delete.ico" }); data.Add(new TestEntity() { ID = 4, Title = "test4", Info = "yyyy", State = true, CreateDate = createdate, Operate = "编辑", PIC = "" }); - //2、datatable数据源 - //DataTable dt = new DataTable(); - //dt.Columns.Add("ID", typeof(string)); - //dt.Columns.Add("CreateDate", typeof(DateTime)); - //dt.Columns.Add("State", typeof(bool)); - //dt.Rows.Add("user1", DateTime.Now,true); - //dt.Rows.Add("user2", DateTime.Now.AddDays(5),false); + data.Add(new TestEntity() { ID = 5, Title = "test3", Info = "ddds", State = false, CreateDate = createdate, Operate = "编辑", PIC = "Resources\\BindingNavigator.Delete.ico" }); + data.Add(new TestEntity() { ID = 6, Title = "test4", Info = "yyyy", State = true, CreateDate = createdate, Operate = "编辑", PIC = "" }); - this.dataGridView1.DataSource = data; + this.dataGridView1.DataSource = data; + //var s=this.dataGridView1.Rows[0].Cells[0]; - //3、通过dataviewrow添加数据 + //2、datatable数据源 + DataTable dt = new DataTable(); + dt.Columns.Add("ID", typeof(string)); + dt.Columns.Add("CreateDate", typeof(DateTime)); + dt.Columns.Add("State", typeof(bool)); + dt.Rows.Add("test1", DateTime.Now, true); + dt.Rows.Add("test2", DateTime.Now.AddDays(5), false); + //this.dataGridView1.Columns.Clear(); + //this.dataGridView1.DataSource = dt; + + //3、通过dataviewrow添加数据 //for (int i = 0; i < 10; i++) //{ // var cell = new DataGridViewRow(); - // cell.Cells.AddRange(new List() { new DataGridViewTextBoxCell() { Value = "user" + i.ToString() }, new DataGridViewCheckBoxCell() { Value=true }, new DataGridViewTextBoxCell() { Value = "title" + i.ToString() }, new DataGridViewTextBoxCell() { Value = DateTime.Now } }.ToArray()); + // cell.Cells.AddRange(new List() { new DataGridViewTextBoxCell() { Value = "user" + i.ToString() }, new DataGridViewCheckBoxCell() { Value = true }, new DataGridViewTextBoxCell() { Value = "title" + i.ToString() }, new DataGridViewComboBoxCell() { Value = DateTime.Now } }.ToArray()); // cell.DefaultCellStyle = new DataGridViewCellStyle() { BackColor = Color.Red }; - // this.dataGridView1.Rows.Add(cell); + // this.dataGridView1.Rows.Add(cell); //} - - this.textBox1.Text = this.comboBox1.SelectedItem?.ToString() + "/" + this.comboBox1.SelectedIndex; - } - public class TestEntity + public class TestEntity:INotifyPropertyChanged { public int ID { get; set; } - public string Title { get; set; } + public string title; + public string Title { get { return title; } set { title = value; OnPropertyChangedEventHandler(); } } public string Info { get; set; } public bool State { get; set; } public DateTime CreateDate { get; set; } public string Operate { get; set; } public string PIC { get; set; } + + public event PropertyChangedEventHandler? PropertyChanged; + protected void OnPropertyChangedEventHandler([CallerMemberName] string propertyName = null) + { + if(PropertyChanged != null) + PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); + } } private void button2_Click(object sender, EventArgs e) @@ -84,6 +117,7 @@ namespace GTKWinFormsApp if (result == DialogResult.OK) { textBox1.Text = "#" + cd.Color.Name; + textBox1.BackColor = ColorTranslator.FromHtml(textBox1.Text); } //DialogResult result = MessageBox.Show(this, " 弹窗测试 ", "信息提示", MessageBoxButtons.OKCancel); @@ -175,37 +209,47 @@ namespace GTKWinFormsApp private void dataGridView1_SelectionChanged(object sender, EventArgs e) { + //6 Console.WriteLine("dataGridView1_SelectionChanged"); } private void dataGridView1_MultiSelectChanged(object sender, EventArgs e) - { + { //1 Console.WriteLine("dataGridView1_MultiSelectChanged"); } private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e) { Console.WriteLine("dataGridView1_CellValueChanged"); + foreach (DataGridViewRow row in dataGridView1.Rows) + { + Console.WriteLine(row.Cells[1].Value); + } } private void dataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e) { + //3 Console.WriteLine("dataGridView1_CellEnter"); } private void dataGridView1_CellLeave(object sender, DataGridViewCellEventArgs e) - { + {//4 Console.WriteLine("dataGridView1_CellLeave"); } private void dataGridView1_CellValidated(object sender, DataGridViewCellEventArgs e) { + //7 Console.WriteLine("dataGridView1_CellValidated"); + + Console.WriteLine(dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value); } private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) { - Console.WriteLine("dataGridView1_CellValidating"+e.FormattedValue); + //5 + Console.WriteLine("dataGridView1_CellValidating" + e.FormattedValue); } private void dataGridView1_RowEnter(object sender, DataGridViewCellEventArgs e) @@ -220,6 +264,7 @@ namespace GTKWinFormsApp private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) { + //2 Console.WriteLine("dataGridView1_CellClick"); } @@ -235,12 +280,14 @@ namespace GTKWinFormsApp private void treeView1_BeforeSelect(object sender, TreeViewCancelEventArgs e) { - Console.WriteLine("treeView1_BeforeSelect"); + + Console.WriteLine("treeView1_BeforeSelect:"+ e.Node?.Text); } private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) { - Console.WriteLine("treeView1_AfterSelect"); + Console.WriteLine("treeView1_AfterSelect:" + treeView1.SelectedValuePath); + Console.WriteLine("treeView1_AfterSelect:"+ e.Node?.Text); } private void treeView1_AfterCollapse(object sender, TreeViewEventArgs e) @@ -285,29 +332,84 @@ namespace GTKWinFormsApp private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e) { - Console.WriteLine("checkedListBox1_ItemCheck,"+e.NewValue + e.CurrentValue); + Console.WriteLine("checkedListBox1_ItemCheck," + e.NewValue + e.CurrentValue); if (e.Index == 2) { - // checkedListBox1.ClearSelected(); + // checkedListBox1.ClearSelected(); } } - private void button1_Paint(object sender, PaintEventArgs e) - { - - } - private void pictureBox2_Paint(object sender, PaintEventArgs e) { var g = e.Graphics; g.Clear(Color.White); - //g.DrawImage(new Bitmap(GTKWinFormsApp.Properties.Resources.timg6), new Point(0, 0)); - g.DrawImage(new Bitmap(GTKWinFormsApp.Properties.Resources.timg6), new Rectangle(0, 0, 192, 108), new Rectangle(0, 0, 1920, 1080), GraphicsUnit.Pixel); + + using (MemoryStream mem = new MemoryStream(GTKWinFormsApp.Properties.Resources.timg6)) + { + //g.DrawImage(new Bitmap(mem), new Point(0, 0)); + g.DrawImage(new Bitmap(mem), new Rectangle(0, 0, 192, 108), new Rectangle(0, 0, 1920, 1080), GraphicsUnit.Pixel); + } g.FillRectangle(new SolidBrush(Color.AliceBlue), new Rectangle(0, 0, 100, 50)); - g.DrawLine(new Pen(new SolidBrush(Color.Blue), 2), new Point(10, 10), new Point(50, 30)); - g.DrawString("这是Paint Graphics示例效果", new Font(new FontFamily(""), 12, FontStyle.Regular),new SolidBrush(Color.Red),0,80); - g.DrawArc(new Pen(new SolidBrush(Color.Blue), 2),new Rectangle(0,0, pictureBox2.Width, pictureBox2.Height), 60, 190); + // g.DrawLine(new Pen(new SolidBrush(Color.Blue), 2), new Point(10, 10), new Point(50, 30)); + List Rps = new List(); + List rps = new List(); + float R = 50; + double rad = Math.PI / 180; + float r = (float)(R * Math.Sin(18 * R) / Math.Cos(36 * R)); + float x = pictureBox2.Width / 2; + float y = pictureBox2.Height / 2; + for (int k = 0; k < 5; k++) + { + Rps.Add(new PointF(x - (R * (float)Math.Cos((90 + k * 72) * rad)), y - (R * (float)Math.Sin((90 + k * 72) * rad)))); + rps.Add(new PointF(x - (r * (float)Math.Cos((90 + k * 72 + 36) * rad)), y - (r * (float)Math.Sin((90 + k * 72 + 36) * rad)))); + } + for (int i = 0; i < 5; i++) + { + //g.DrawLine(new Pen(new SolidBrush(Color.Blue), 2), Rps[i], rps[i]); + //g.DrawLine(new Pen(new SolidBrush(Color.Blue), 2), rps[i], new PointF(x, y)); + //g.DrawLine(new Pen(new SolidBrush(Color.Blue), 2), new PointF(x, y), Rps[i]); + + g.DrawLines(new Pen(new SolidBrush(Color.Red), 2), new PointF[] { Rps[i], rps[i], new PointF(x, y), Rps[i] }); + } + + g.DrawString("这是Paint Graphics示例效果", new Font(FontFamily.GenericSansSerif, 12, FontStyle.Regular), new SolidBrush(Color.Red), 0, 60); + g.DrawArc(new Pen(new SolidBrush(Color.Blue), 2), new Rectangle(pictureBox2.Width/2, pictureBox2.Height/2, pictureBox2.Width, pictureBox2.Height), 0, 270); + + g.DrawCurve(new Pen(new SolidBrush(Color.Blue), 2), new PointF[] { new PointF(50, 60), new PointF(100, 80), new PointF(75, 100)}); + g.DrawCurve(new Pen(new SolidBrush(Color.Blue), 2), new PointF[] { new PointF(75, 100), new PointF(100, 120), new PointF(120, 100)}); + + } + + private void button6_Click(object sender, EventArgs e) + { + + } + + private void button7_Click(object sender, EventArgs e) + { + Form2 form = new Form2(); + DialogResult result = form.ShowDialog(this); + if (result == DialogResult.None || result == DialogResult.Cancel) + { + // MessageBox.Show("关闭窗口返回"); + } + //form.Show(); + } + + private void tabControl1_DrawItem(object sender, DrawItemEventArgs e) + { + var rect = tabControl1.GetTabRect(e.Index); + //e.Graphics.FillRectangle(new SolidBrush(Color.Gray), new Rectangle(rect.X, rect.Y, rect.Width, rect.Height)); + e.Graphics.FillRectangle(new SolidBrush(Color.DarkBlue), e.Bounds); + var font = new Font(FontFamily.GenericSansSerif, 12); + e.Graphics.DrawString($"tab组{e.Index}", font, new SolidBrush(Color.Red), new PointF(0, 0)); + e.Graphics.DrawImage(Image.FromFile("Resources\\BindingNavigator.Delete.ico"),new Point(e.Bounds.Width-16, 0)); + } + + private void button1_Paint(object sender, PaintEventArgs e) + { + } } diff --git a/Samples/GTKWinFormsApp/Form1.resx b/Samples/GTKWinFormsApp/Form1.resx index 0bbea1da11a3d986868d0d4e6547e8534c99ccdc..2cc9afe0fb400d2b9385a46e7e3aab375905ed15 100644 --- a/Samples/GTKWinFormsApp/Form1.resx +++ b/Samples/GTKWinFormsApp/Form1.resx @@ -1,4 +1,64 @@ - + + + @@ -57,8 +117,8 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - + + iVBORw0KGgoAAAANSUhEUgAAAD8AAACACAIAAAAzoSYoAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO vAAADrwBlbxySQAAQCFJREFUeF69vGdwVWfW76lv89b02+222wmwDRgMzsZkAUI555wTkkgCRJYECOVw @@ -338,7 +398,7 @@ AAAASUVORK5CYII= - + /9j/4AAQSkZJRgABAQEAAAAAAAD/4gHYSUNDX1BST0ZJTEUAAQEAAAHIAAAAAAQwAABtbnRyUkdCIFhZ WiAH4AABAAEAAAAAAABhY3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLQAA @@ -29204,4 +29264,10 @@ WMuU/9k= + + 17, 17 + + + 219, 17 + \ No newline at end of file diff --git a/Samples/GTKWinFormsApp/Form2.Designer.cs b/Samples/GTKWinFormsApp/Form2.Designer.cs new file mode 100644 index 0000000000000000000000000000000000000000..1c3153dd0b80533c4665506e46467f3e894c950c --- /dev/null +++ b/Samples/GTKWinFormsApp/Form2.Designer.cs @@ -0,0 +1,206 @@ +using System.Windows.Forms; + +namespace GTKWinFormsApp +{ + partial class Form2 + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form2)); + ListViewGroup listViewGroup1 = new ListViewGroup("ListViewGroup1", HorizontalAlignment.Left); + ListViewGroup listViewGroup2 = new ListViewGroup("ListViewGroup2", HorizontalAlignment.Left); + ListViewItem listViewItem1 = new ListViewItem(new string[] { "ListViewItem 是一个 ContentControl 且只能包含单个子元素。 但是,该子元素可以是任何视觉元素。" }, 0, System.Drawing.Color.Blue, System.Drawing.Color.FromArgb(255, 192, 255), null); + ListViewItem listViewItem2 = new ListViewItem("ListView 派生自 ListBox。 通常,该控件的项为数据集合的成员,并且表示为 ListViewItem 对象", 0); + ListViewItem listViewItem3 = new ListViewItem("ListView 控件提供了使用不同布局或视图中显示一组数据项的基础结构。 例如,用户可能需要在表格中显示数据项,并同时对表格的列进行排序。", 0); + ListViewItem listViewItem4 = new ListViewItem(new string[] { "ListView 分组", "listView1.Groups.Add()", "432321" }, 0); + ListViewItem listViewItem5 = new ListViewItem(new string[] { "ListView 定义视图模式", "View.SmallIcon", "View.LargeIcon", "View.Details", "View.List" }, 1); + ListViewItem listViewItem6 = new ListViewItem("什么是 ListView?", 0); + ListViewItem listViewItem7 = new ListViewItem(new string[] { "将数据绑定到 ListView", "listView1.Items.Add();" }, 0); + imageList1 = new ImageList(components); + listView1 = new ListView(); + columnHeader1 = new ColumnHeader(); + columnHeader2 = new ColumnHeader(); + columnHeader3 = new ColumnHeader(); + columnHeader4 = new ColumnHeader(); + columnHeader5 = new ColumnHeader(); + listBox1 = new ListBox(); + richTextBox1 = new RichTextBox(); + label1 = new Label(); + button1 = new Button(); + SuspendLayout(); + // + // imageList1 + // + imageList1.ColorDepth = ColorDepth.Depth32Bit; + imageList1.ImageStream = (ImageListStreamer)resources.GetObject("imageList1.ImageStream"); + imageList1.TransparentColor = System.Drawing.Color.Transparent; + imageList1.Images.SetKeyName(0, "010.jpg"); + imageList1.Images.SetKeyName(1, "timg2.jpg"); + // + // listView1 + // + listView1.AllowColumnReorder = true; + listView1.CheckBoxes = true; + listView1.Columns.AddRange(new ColumnHeader[] { columnHeader1, columnHeader2, columnHeader3, columnHeader4, columnHeader5 }); + listView1.Dock = DockStyle.Top; + listView1.FullRowSelect = true; + listView1.GridLines = true; + listView1.GroupImageList = imageList1; + listViewGroup1.Footer = "ggg1"; + listViewGroup1.Header = "ListViewGroup1"; + listViewGroup1.Name = "listViewGroup1"; + listViewGroup1.Subtitle = "group1"; + listViewGroup2.Header = "ListViewGroup2"; + listViewGroup2.Name = "listViewGroup2"; + listViewGroup2.Subtitle = "group2"; + listView1.Groups.AddRange(new ListViewGroup[] { listViewGroup1, listViewGroup2 }); + listViewItem1.Group = listViewGroup1; + listViewItem1.StateImageIndex = 0; + listViewItem2.Group = listViewGroup1; + listViewItem2.StateImageIndex = 0; + listViewItem3.Group = listViewGroup1; + listViewItem3.StateImageIndex = 0; + listViewItem4.Group = listViewGroup2; + listViewItem4.StateImageIndex = 0; + listViewItem5.Group = listViewGroup2; + listViewItem5.StateImageIndex = 0; + listViewItem6.StateImageIndex = 0; + listViewItem7.Group = listViewGroup2; + listViewItem7.StateImageIndex = 0; + listView1.Items.AddRange(new ListViewItem[] { listViewItem1, listViewItem2, listViewItem3, listViewItem4, listViewItem5, listViewItem6, listViewItem7 }); + listView1.LargeImageList = imageList1; + listView1.Location = new System.Drawing.Point(0, 0); + listView1.Name = "listView1"; + listView1.Size = new System.Drawing.Size(1078, 260); + listView1.SmallImageList = imageList1; + listView1.Sorting = SortOrder.Descending; + listView1.TabIndex = 13; + listView1.UseCompatibleStateImageBehavior = false; + listView1.View = View.SmallIcon; + listView1.ColumnClick += listView1_ColumnClick; + listView1.ColumnReordered += listView1_ColumnReordered; + listView1.ItemCheck += listView1_ItemCheck; + listView1.ItemChecked += listView1_ItemChecked; + listView1.ItemSelectionChanged += listView1_ItemSelectionChanged; + listView1.SelectedIndexChanged += listView1_SelectedIndexChanged; + listView1.Click += listView1_Click; + // + // columnHeader1 + // + columnHeader1.Text = "组1"; + columnHeader1.Width = 300; + // + // columnHeader2 + // + columnHeader2.DisplayIndex = 2; + columnHeader2.Text = "组2fffffffffffffffffffffffffffffff"; + columnHeader2.Width = 100; + // + // columnHeader3 + // + columnHeader3.DisplayIndex = 1; + columnHeader3.Text = "组3"; + columnHeader3.Width = 100; + // + // columnHeader4 + // + columnHeader4.Text = "4"; + // + // columnHeader5 + // + columnHeader5.Text = "5"; + // + // listBox1 + // + listBox1.FormattingEnabled = true; + listBox1.Items.AddRange(new object[] { "sdfdfdf", "ssss", "fffff", "ddddddddd", "ddddddd" }); + listBox1.Location = new System.Drawing.Point(721, 462); + listBox1.Name = "listBox1"; + listBox1.Size = new System.Drawing.Size(150, 104); + listBox1.TabIndex = 3; + // + // richTextBox1 + // + richTextBox1.BackColor = System.Drawing.Color.Yellow; + richTextBox1.Location = new System.Drawing.Point(48, 446); + richTextBox1.Name = "richTextBox1"; + richTextBox1.Size = new System.Drawing.Size(549, 120); + richTextBox1.TabIndex = 14; + richTextBox1.Text = ""; + // + // label1 + // + label1.AutoSize = true; + label1.Font = new System.Drawing.Font("Microsoft YaHei UI", 12F); + label1.Location = new System.Drawing.Point(48, 298); + label1.Name = "label1"; + label1.Size = new System.Drawing.Size(1032, 135); + label1.TabIndex = 15; + label1.Text = resources.GetString("label1.Text"); + // + // button1 + // + button1.Location = new System.Drawing.Point(260, 266); + button1.Name = "button1"; + button1.Size = new System.Drawing.Size(295, 29); + button1.TabIndex = 16; + button1.Text = "add listview item"; + button1.UseVisualStyleBackColor = true; + button1.Click += button1_Click; + // + // Form2 + // + AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F); + AutoScaleMode = AutoScaleMode.Font; + BackgroundImage = (System.Drawing.Image)resources.GetObject("$this.BackgroundImage"); + ClientSize = new System.Drawing.Size(1078, 596); + Controls.Add(button1); + Controls.Add(label1); + Controls.Add(richTextBox1); + Controls.Add(listBox1); + Controls.Add(listView1); + Name = "Form2"; + Text = "Form2"; + ResumeLayout(false); + PerformLayout(); + } + + #endregion + private System.Windows.Forms.ListView listView1; + private System.Windows.Forms.ImageList imageList1; + private System.Windows.Forms.ListBox listBox1; + private ColumnHeader columnHeader1; + private ColumnHeader columnHeader2; + private ColumnHeader columnHeader3; + private RichTextBox richTextBox1; + private Label label1; + private Button button1; + private ColumnHeader columnHeader4; + private ColumnHeader columnHeader5; + } +} \ No newline at end of file diff --git a/Samples/GTKWinFormsApp/Form2.cs b/Samples/GTKWinFormsApp/Form2.cs new file mode 100644 index 0000000000000000000000000000000000000000..f0c4f8b125d809a63e81cbc6ec25cc47cc6eda28 --- /dev/null +++ b/Samples/GTKWinFormsApp/Form2.cs @@ -0,0 +1,79 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace GTKWinFormsApp +{ + public partial class Form2 : Form + { + public Form2() + { + InitializeComponent(); + // listView1.Items.Add(new ListViewItem("test1", new ListViewGroup("ListViewGroup1", "ListViewGroup1")) { }); + + } + + private void listView1_ItemCheck(object sender, ItemCheckEventArgs e) + { + MessageBox.Show($"ItemCheck:{e.NewValue.ToString()},{e.CurrentValue.ToString()}"); + } + + private void listView1_ItemChecked(object sender, ItemCheckedEventArgs e) + { + richTextBox1.Text = ""; + foreach (ListViewItem m in listView1.CheckedItems) + richTextBox1.Text += $"{m.Text},Selected:{m.Selected},Checked:{m.Checked};\n"; + } + + private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e) + { + MessageBox.Show($"ItemSelectionChanged:{e.Item.Text},{e.Item.Selected}"); + } + + private void listView1_SelectedIndexChanged(object sender, EventArgs e) + { + richTextBox1.Text = ""; + foreach (ListViewItem m in listView1.SelectedItems) + richTextBox1.Text += $"{m.Text},Selected:{m.Selected},Checked:{m.Checked};\n"; + } + + private void listView1_ColumnClick(object sender, ColumnClickEventArgs e) + { + MessageBox.Show($"ColumnClick:{e.Column}"); + } + + private void listView1_Click(object sender, EventArgs e) + { + + } + + private void button1_Click(object sender, EventArgs e) + { + listView1.Items.Add(new ListViewItem("同时添加分组和数据") { ForeColor=Color.Red, BackColor=Color.Yellow, Group = new ListViewGroup("listViewGroup1", "ListViewGroup1") }); + listView1.Items.Add(new ListViewItem("向指定分组添加数据") { ForeColor = Color.Red, BackColor = Color.Yellow, Group = listView1.Groups[1] }); + + ListViewItem m = new ListViewItem("这是一种添加多栏数据的方法", 0); + m.Checked = true; + m.Selected = true; + m.ForeColor = Color.Green; + m.BackColor = Color.Yellow; + m.SubItems.Add(new ListViewItem.ListViewSubItem(m, "子列数据1", Color.HotPink, Color.Gray, new Font(FontFamily.GenericSansSerif, 16))); + m.SubItems.Add(new ListViewItem.ListViewSubItem(m, "子列数据2")); + m.SubItems.Add(new ListViewItem.ListViewSubItem(m, "子列数据3子列数据3子列数据3")); + m.SubItems.Add(new ListViewItem.ListViewSubItem(m, "子列数据1")); + listView1.Items.Add(m); + } + + private void listView1_ColumnReordered(object sender, ColumnReorderedEventArgs e) + { + + } + } +} diff --git a/Samples/GTKWinFormsApp/Form2.resx b/Samples/GTKWinFormsApp/Form2.resx new file mode 100644 index 0000000000000000000000000000000000000000..72d058f0516398672ef77283fbec8ab8e2600388 --- /dev/null +++ b/Samples/GTKWinFormsApp/Form2.resx @@ -0,0 +1,5082 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs + LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu + SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAdAsAAAJNU0Z0AUkBTAIBAQIB + AAHQAQAB0AEAARABAAEQAQAD/wEAASEBAAj/AUIBTQE2BwABNgMAASgDAAFAAwABEAMAAQEBAAEgBgAB + EB4ALAEcAAMXAR8BZAJgAdsBswF6AVMB/gHnAWABOgH/Ab4BRgFAAf0BVwJWAbUDFAEbmAABxgFTATEB + /wHnAWABOgH/AecBYAE6Af8B5wFgAToB/wHnAWABOgH/AecBYAE6Af8B5wFgAToB/wHnAWABOgH/AecB + YAE6Af8B5wFgAToB/wHnAWABOgH/AecBYAE6Af8BWgJYAboQAAMEAQUB3QFcATcB/wHnAWABOgH/AecB + YAE6Af8B5wFgAToB/wHnAWABOgH/AecBYAE6Af8B5wFgAToB/wHnAWABOgH/Ab8BUAEwAf8EApAAAecB + YAE6Af8B5wFgAToB/wHnAWABOgH/AecBYAE6Af8B5wFgAToB/wHnAWABOgH/AecBYAE6Af8B5wFgAToB + /wHnAWABOgH/AecBYAE6Af8B5wFgAToB/wHnAWABOgH/AecBYAE6Af8MAAMCAQMB5wFgAToB/wHnAWAB + OgH/AecBYAE6Af8B5wFgAToB/wHnAWABOgH/AecBYAE6Af8B5wFgAToB/wHnAWABOgH/AecBYAE6Af8B + 5wFgAToB/wHmAWABOQH/BAGMAAHnAWABOgH/AecBYAE6Af8B5wFgAToB/wHnAWABOgH/AecBYAE6Af8D + /QH/AecBYAE6Af8B5wFgAToB/wHnAWABOgH/AecBYAE6Af8B5wFgAToB/wHnAWABOgH/AecBYAE6Af8M + AAG+AUYBQAH9AecBYAE6Af8B5wFgAToB/wHnAWABOgH/A/0B/wP9Af8D/QH/AecBYAE6Af8B5wFgAToB + /wHnAWABOgH/AecBYAE6Af8B5wFgAToB/wHEAVEBMQH/jAAB5wFgAToB/wHnAWABOgH/AecBYAE6Af8B + 5wFgAToB/wP9Af8D/QH/A/0B/wHnAWABOgH/AecBYAE6Af8B5wFgAToB/wHnAWABOgH/AecBYAE6Af8B + 5wFgAToB/wgAAwkBDAHnAWABOgH/AecBYAE6Af8B5wFgAToB/wP9Af8D/QH/A/0B/wP9Af8B9wHSAccB + /wHnAWABOgH/AecBYAE6Af8B5wFgAToB/wHnAWABOgH/AecBYAE6Af8DBAEFiAAB5wFgAToB/wHnAWAB + OgH/AecBYAE6Af8B5wFgAToB/wP9Af8D/QH/A/0B/wHnAWABOgH/AecBYAE6Af8B5wFgAToB/wHnAWAB + OgH/AecBYAE6Af8B5wFgAToB/wgAAekBYQE6Af8B5wFgAToB/wHnAWABOgH/AecBYAE6Af8D/QH/A/0B + /wP9Af8D/QH/AfsB7AHnAf8B5wFgAToB/wHnAWABOgH/AecBYAE6Af8B5wFgAToB/wHnAWABOgH/AVkC + VwG8iAAB5wFgAToB/wHnAWABOgH/AecBYAE6Af8B5wFgAToB/wP9Af8D/QH/A/0B/wHnAWABOgH/AecB + YAE6Af8B5wFgAToB/wHnAWABOgH/AecBYAE6Af8B5wFgAToB/wgAAecBYAE6Af8B5wFgAToB/wHnAWAB + OgH/AecBYAE6Af8B5wFgAToB/wP9Af8D/QH/A/0B/wH7AewB5wH/AecBYAE6Af8B5wFgAToB/wHnAWAB + OgH/AecBYAE6Af8B5wFgAToB/wGzAXoBUwH+iAAB5wFgAToB/wHnAWABOgH/AecBYAE6Af8B5wFgAToB + /wHnAWABOgH/AecBYAE6Af8D/QH/AecBYAE6Af8B5wFgAToB/wHnAWABOgH/AecBYAE6Af8B5wFgAToB + /wHnAWABOgH/CAAB5wFgAToB/wHnAWABOgH/AecBYAE6Af8B5wFgAToB/wHnAWABOgH/AecBYAE6Af8B + 5wFgAToB/wP9Af8B+wHsAecB/wHnAWABOgH/AecBYAE6Af8B5wFgAToB/wHnAWABOgH/AecBYAE6Af8B + 5wFgAToB/4gAAecBYAE6Af8B5wFgAToB/wHnAWABOgH/AecBYAE6Af8B5wFgAToB/wHnAWABOgH/A/0B + /wHnAWABOgH/AecBYAE6Af8B5wFgAToB/wHnAWABOgH/AecBYAE6Af8B5wFgAToB/wgAAecBYAE6Af8B + 5wFgAToB/wHnAWABOgH/AecBYAE6Af8B5wFgAToB/wHnAWABOgH/AecBYAE6Af8D/QH/AfsB7AHnAf8B + 5wFgAToB/wHnAWABOgH/AecBYAE6Af8B5wFgAToB/wHnAWABOgH/AeYBYAE5Af+IAAHnAWABOgH/AecB + YAE6Af8B5wFgAToB/wHnAWABOgH/AecBYAE6Af8B5wFgAToB/wP9Af8B5wFgAToB/wHnAWABOgH/AecB + YAE6Af8B5wFgAToB/wHnAWABOgH/AecBYAE6Af8IAAHpAWEBOgH/AecBYAE6Af8B5wFgAToB/wHnAWAB + OgH/AecBYAE6Af8B5wFgAToB/wHnAWABOgH/A/0B/wH7AewB5wH/AecBYAE6Af8B5wFgAToB/wHnAWAB + OgH/AecBYAE6Af8B5wFgAToB/wFqAmEB5ogAAecBYAE6Af8B5wFgAToB/wHnAWABOgH/AecBYAE6Af8B + 5wFgAToB/wHnAWABOgH/A/0B/wP9Af8D/QH/AecBYAE6Af8B5wFgAToB/wHnAWABOgH/AecBYAE6Af8I + AAQBAecBYAE6Af8B5wFgAToB/wHnAWABOgH/AecBYAE6Af8B5wFgAToB/wHnAWABOgH/A/0B/wP9Af8D + /QH/A/0B/wHnAWABOgH/AecBYAE6Af8B5wFgAToB/4wAAecBYAE6Af8B5wFgAToB/wHnAWABOgH/AecB + YAE6Af8B5wFgAToB/wHnAWABOgH/A/0B/wP9Af8D/QH/AecBYAE6Af8B5wFgAToB/wHnAWABOgH/AecB + YAE6Af8MAAG0AXoBVAH+AecBYAE6Af8B5wFgAToB/wHnAWABOgH/AecBYAE6Af8B5wFgAToB/wP9Af8D + /QH/A/0B/wP9Af8B5wFgAToB/wHnAWABOgH/AecBYAE6Af+MAAHnAWABOgH/AecBYAE6Af8B5wFgAToB + /wHnAWABOgH/AecBYAE6Af8B5wFgAToB/wHnAWABOgH/AecBYAE6Af8B5wFgAToB/wHnAWABOgH/AecB + YAE6Af8B5wFgAToB/wHnAWABOgH/EAAB5wFgAToB/wHnAWABOgH/AecBYAE6Af8B5wFgAToB/wHnAWAB + OgH/AecBYAE6Af8B5wFgAToB/wHnAWABOgH/AecBYAE6Af8B5wFgAToB/wHnAWABOgH/kAABtQF7AVQB + /gHnAWABOgH/AecBYAE6Af8B5wFgAToB/wHnAWABOgH/AecBYAE6Af8B5wFgAToB/wHnAWABOgH/AecB + YAE6Af8B5wFgAToB/wHnAWABOgH/AecBYAE6Af8B4wFeATgB/xQAAbQBegFUAf4B5wFgAToB/wHnAWAB + OgH/AecBYAE6Af8B5wFgAToB/wHnAWABOgH/AecBYAE6Af8B5wFgAToB/wGYAV8BOgH74AAEAQHpAWEB + OgH/AecBYAE6Af8B5wFgAToB/wHnAWABOgH/AekBYQE6Af//AJUAAUIBTQE+BwABPgMAASgDAAFAAwAB + EAMAAQEBAAEBBQABgBcAA/8BAAHgAQMB+AEPBAABwAEBAeABAwQAAcABAQHAAQEEAAHAAQEBwAEBBAAB + wAEBAYAFAAHAAQEBgAUAAcABAQGABQABwAEBAYAFAAHAAQEBgAUAAcABAQGABQABwAEBAYABAQQAAcAB + AQHAAQEEAAHAAQEB4AEDBAABwAEBAfABBwQAAv8B+AEfBAAE/wQACw== + + + + 特别说明: +ImageList 所添加的图片必须放到程序目录下的Resource目录下(此目录下可进一步增加指定目录(如imageList1)) +否则无法读取图片,图片的名称可以在xxx.Designer.cs文件下查看到,如: + imageList1.Images.SetKeyName(0, "010.jpg"); + imageList1.Images.SetKeyName(1, "timg2.jpg"); + + + + + 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 + CycOZQJrUIerIcV1dXXtHnpJn//Z + + + \ No newline at end of file diff --git a/Samples/GTKWinFormsApp/Form3.Designer.cs b/Samples/GTKWinFormsApp/Form3.Designer.cs new file mode 100644 index 0000000000000000000000000000000000000000..720a4ca26dfd19bbaba52ce09ddae6615452656b --- /dev/null +++ b/Samples/GTKWinFormsApp/Form3.Designer.cs @@ -0,0 +1,495 @@ + +using System.Windows.Forms; + +namespace GTKWinFormsApp +{ + partial class Form3 + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form3)); + menuStrip1 = new MenuStrip(); + toolStripMenuItem1 = new ToolStripMenuItem(); + ddddToolStripMenuItem = new ToolStripMenuItem(); + ssssToolStripMenuItem = new ToolStripMenuItem(); + bb菜单ToolStripMenuItem = new ToolStripMenuItem(); + bb菜单2ToolStripMenuItem = new ToolStripMenuItem(); + ssssToolStripMenuItem1 = new ToolStripMenuItem(); + toolStrip2 = new ToolStrip(); + toolStripButton1 = new ToolStripButton(); + toolStripLabel1 = new ToolStripLabel(); + toolStripSeparator1 = new ToolStripSeparator(); + toolStripDropDownButton1 = new ToolStripDropDownButton(); + memnuToolStripMenuItem = new ToolStripMenuItem(); + fffffffToolStripMenuItem = new ToolStripMenuItem(); + toolStripSplitButton1 = new ToolStripSplitButton(); + menuToolStripMenuItem = new ToolStripMenuItem(); + toolStripSeparator2 = new ToolStripSeparator(); + toolStripComboBox1 = new ToolStripComboBox(); + toolStripTextBox1 = new ToolStripTextBox(); + toolStripProgressBar1 = new ToolStripProgressBar(); + button1 = new Button(); + contextMenuStrip1 = new ContextMenuStrip(components); + ddddToolStripMenuItem1 = new ToolStripMenuItem(); + ffffToolStripMenuItem = new ToolStripMenuItem(); + statusStrip1 = new StatusStrip(); + toolStripStatusLabel1 = new ToolStripStatusLabel(); + toolStripProgressBar2 = new ToolStripProgressBar(); + toolStripDropDownButton2 = new ToolStripDropDownButton(); + toolStripMenuItem4 = new ToolStripMenuItem(); + toolStripMenuItem3 = new ToolStripMenuItem(); + toolStripSplitButton2 = new ToolStripSplitButton(); + toolStripMenuItem6 = new ToolStripMenuItem(); + toolStripMenuItem5 = new ToolStripMenuItem(); + label1 = new Label(); + linkLabel1 = new LinkLabel(); + trackBar1 = new TrackBar(); + panel1 = new Panel(); + button3 = new Button(); + button2 = new Button(); + panel3 = new Panel(); + panel5 = new Panel(); + label2 = new Label(); + menuStrip1.SuspendLayout(); + toolStrip2.SuspendLayout(); + contextMenuStrip1.SuspendLayout(); + statusStrip1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)trackBar1).BeginInit(); + panel1.SuspendLayout(); + panel5.SuspendLayout(); + SuspendLayout(); + // + // menuStrip1 + // + menuStrip1.ImageScalingSize = new System.Drawing.Size(20, 20); + menuStrip1.Items.AddRange(new ToolStripItem[] { toolStripMenuItem1, ssssToolStripMenuItem1 }); + menuStrip1.Location = new System.Drawing.Point(0, 0); + menuStrip1.Name = "menuStrip1"; + menuStrip1.Size = new System.Drawing.Size(800, 28); + menuStrip1.TabIndex = 1; + menuStrip1.Text = "menuStrip1"; + // + // toolStripMenuItem1 + // + toolStripMenuItem1.DropDownItems.AddRange(new ToolStripItem[] { ddddToolStripMenuItem, ssssToolStripMenuItem }); + toolStripMenuItem1.Name = "toolStripMenuItem1"; + toolStripMenuItem1.Size = new System.Drawing.Size(62, 24); + toolStripMenuItem1.Text = "菜单1"; + // + // ddddToolStripMenuItem + // + ddddToolStripMenuItem.Checked = true; + ddddToolStripMenuItem.CheckState = CheckState.Checked; + ddddToolStripMenuItem.Name = "ddddToolStripMenuItem"; + ddddToolStripMenuItem.Size = new System.Drawing.Size(132, 26); + ddddToolStripMenuItem.Text = "a菜单"; + // + // ssssToolStripMenuItem + // + ssssToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { bb菜单ToolStripMenuItem, bb菜单2ToolStripMenuItem }); + ssssToolStripMenuItem.Name = "ssssToolStripMenuItem"; + ssssToolStripMenuItem.Size = new System.Drawing.Size(132, 26); + ssssToolStripMenuItem.Text = "b菜单"; + // + // bb菜单ToolStripMenuItem + // + bb菜单ToolStripMenuItem.Name = "bb菜单ToolStripMenuItem"; + bb菜单ToolStripMenuItem.Size = new System.Drawing.Size(151, 26); + bb菜单ToolStripMenuItem.Text = "bb菜单"; + // + // bb菜单2ToolStripMenuItem + // + bb菜单2ToolStripMenuItem.Name = "bb菜单2ToolStripMenuItem"; + bb菜单2ToolStripMenuItem.Size = new System.Drawing.Size(151, 26); + bb菜单2ToolStripMenuItem.Text = "bb菜单2"; + // + // ssssToolStripMenuItem1 + // + ssssToolStripMenuItem1.Name = "ssssToolStripMenuItem1"; + ssssToolStripMenuItem1.Size = new System.Drawing.Size(62, 24); + ssssToolStripMenuItem1.Text = "菜单2"; + // + // toolStrip2 + // + toolStrip2.ImageScalingSize = new System.Drawing.Size(20, 20); + toolStrip2.Items.AddRange(new ToolStripItem[] { toolStripButton1, toolStripLabel1, toolStripSeparator1, toolStripDropDownButton1, toolStripSplitButton1, toolStripSeparator2, toolStripComboBox1, toolStripTextBox1, toolStripProgressBar1 }); + toolStrip2.Location = new System.Drawing.Point(0, 28); + toolStrip2.Name = "toolStrip2"; + toolStrip2.Size = new System.Drawing.Size(800, 28); + toolStrip2.TabIndex = 2; + toolStrip2.Text = "toolStrip2"; + // + // toolStripButton1 + // + toolStripButton1.DisplayStyle = ToolStripItemDisplayStyle.Image; + toolStripButton1.Image = (System.Drawing.Image)resources.GetObject("toolStripButton1.Image"); + toolStripButton1.ImageTransparentColor = System.Drawing.Color.Magenta; + toolStripButton1.Name = "toolStripButton1"; + toolStripButton1.Size = new System.Drawing.Size(29, 25); + toolStripButton1.Text = "toolStripButton1"; + // + // toolStripLabel1 + // + toolStripLabel1.Name = "toolStripLabel1"; + toolStripLabel1.Size = new System.Drawing.Size(57, 25); + toolStripLabel1.Text = "Label1"; + // + // toolStripSeparator1 + // + toolStripSeparator1.Name = "toolStripSeparator1"; + toolStripSeparator1.Size = new System.Drawing.Size(6, 28); + // + // toolStripDropDownButton1 + // + toolStripDropDownButton1.DropDownItems.AddRange(new ToolStripItem[] { memnuToolStripMenuItem, fffffffToolStripMenuItem }); + toolStripDropDownButton1.Image = (System.Drawing.Image)resources.GetObject("toolStripDropDownButton1.Image"); + toolStripDropDownButton1.ImageTransparentColor = System.Drawing.Color.Magenta; + toolStripDropDownButton1.Name = "toolStripDropDownButton1"; + toolStripDropDownButton1.Size = new System.Drawing.Size(112, 25); + toolStripDropDownButton1.Text = "下拉列表1"; + // + // memnuToolStripMenuItem + // + memnuToolStripMenuItem.Checked = true; + memnuToolStripMenuItem.CheckState = CheckState.Checked; + memnuToolStripMenuItem.Name = "memnuToolStripMenuItem"; + memnuToolStripMenuItem.Size = new System.Drawing.Size(116, 26); + memnuToolStripMenuItem.Text = "项1"; + // + // fffffffToolStripMenuItem + // + fffffffToolStripMenuItem.Name = "fffffffToolStripMenuItem"; + fffffffToolStripMenuItem.Size = new System.Drawing.Size(116, 26); + fffffffToolStripMenuItem.Text = "项2"; + // + // toolStripSplitButton1 + // + toolStripSplitButton1.DropDownItems.AddRange(new ToolStripItem[] { menuToolStripMenuItem }); + toolStripSplitButton1.Image = (System.Drawing.Image)resources.GetObject("toolStripSplitButton1.Image"); + toolStripSplitButton1.ImageTransparentColor = System.Drawing.Color.Magenta; + toolStripSplitButton1.Name = "toolStripSplitButton1"; + toolStripSplitButton1.Size = new System.Drawing.Size(139, 25); + toolStripSplitButton1.Text = "SplitButton1"; + // + // menuToolStripMenuItem + // + menuToolStripMenuItem.Name = "menuToolStripMenuItem"; + menuToolStripMenuItem.Size = new System.Drawing.Size(142, 26); + menuToolStripMenuItem.Text = "2menu"; + // + // toolStripSeparator2 + // + toolStripSeparator2.Name = "toolStripSeparator2"; + toolStripSeparator2.Size = new System.Drawing.Size(6, 28); + // + // toolStripComboBox1 + // + toolStripComboBox1.Items.AddRange(new object[] { "1testitem", "2testitem", "3testitem" }); + toolStripComboBox1.Name = "toolStripComboBox1"; + toolStripComboBox1.Size = new System.Drawing.Size(121, 28); + // + // toolStripTextBox1 + // + toolStripTextBox1.Name = "toolStripTextBox1"; + toolStripTextBox1.Size = new System.Drawing.Size(100, 28); + // + // toolStripProgressBar1 + // + toolStripProgressBar1.Name = "toolStripProgressBar1"; + toolStripProgressBar1.Size = new System.Drawing.Size(90, 25); + toolStripProgressBar1.Value = 35; + // + // button1 + // + button1.Font = new System.Drawing.Font("Microsoft Sans Serif", 15F, System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, 0); + button1.Location = new System.Drawing.Point(488, 102); + button1.Name = "button1"; + button1.Size = new System.Drawing.Size(275, 66); + button1.TabIndex = 3; + button1.Text = "打开主窗口"; + button1.UseVisualStyleBackColor = true; + button1.Click += button1_Click; + // + // contextMenuStrip1 + // + contextMenuStrip1.ImageScalingSize = new System.Drawing.Size(20, 20); + contextMenuStrip1.Items.AddRange(new ToolStripItem[] { ddddToolStripMenuItem1, ffffToolStripMenuItem }); + contextMenuStrip1.Name = "contextMenuStrip1"; + contextMenuStrip1.Size = new System.Drawing.Size(119, 52); + // + // ddddToolStripMenuItem1 + // + ddddToolStripMenuItem1.Name = "ddddToolStripMenuItem1"; + ddddToolStripMenuItem1.Size = new System.Drawing.Size(118, 24); + ddddToolStripMenuItem1.Text = "dddd"; + // + // ffffToolStripMenuItem + // + ffffToolStripMenuItem.Name = "ffffToolStripMenuItem"; + ffffToolStripMenuItem.Size = new System.Drawing.Size(118, 24); + ffffToolStripMenuItem.Text = "ffff"; + // + // statusStrip1 + // + statusStrip1.ImageScalingSize = new System.Drawing.Size(20, 20); + statusStrip1.Items.AddRange(new ToolStripItem[] { toolStripStatusLabel1, toolStripProgressBar2, toolStripDropDownButton2, toolStripSplitButton2 }); + statusStrip1.Location = new System.Drawing.Point(0, 424); + statusStrip1.Name = "statusStrip1"; + statusStrip1.Size = new System.Drawing.Size(800, 26); + statusStrip1.TabIndex = 4; + statusStrip1.Text = "statusStrip1"; + // + // toolStripStatusLabel1 + // + toolStripStatusLabel1.BackColor = System.Drawing.SystemColors.ActiveCaption; + toolStripStatusLabel1.Name = "toolStripStatusLabel1"; + toolStripStatusLabel1.Size = new System.Drawing.Size(69, 20); + toolStripStatusLabel1.Text = "状态文本"; + // + // toolStripProgressBar2 + // + toolStripProgressBar2.Name = "toolStripProgressBar2"; + toolStripProgressBar2.Size = new System.Drawing.Size(100, 18); + // + // toolStripDropDownButton2 + // + toolStripDropDownButton2.DisplayStyle = ToolStripItemDisplayStyle.Image; + toolStripDropDownButton2.DropDownItems.AddRange(new ToolStripItem[] { toolStripMenuItem4, toolStripMenuItem3 }); + toolStripDropDownButton2.Image = (System.Drawing.Image)resources.GetObject("toolStripDropDownButton2.Image"); + toolStripDropDownButton2.ImageTransparentColor = System.Drawing.Color.Magenta; + toolStripDropDownButton2.Name = "toolStripDropDownButton2"; + toolStripDropDownButton2.Size = new System.Drawing.Size(34, 24); + toolStripDropDownButton2.Text = "toolStripDropDownButton2"; + // + // toolStripMenuItem4 + // + toolStripMenuItem4.Name = "toolStripMenuItem4"; + toolStripMenuItem4.Size = new System.Drawing.Size(173, 26); + toolStripMenuItem4.Text = "222222222"; + // + // toolStripMenuItem3 + // + toolStripMenuItem3.Name = "toolStripMenuItem3"; + toolStripMenuItem3.Size = new System.Drawing.Size(173, 26); + toolStripMenuItem3.Text = "111111"; + // + // toolStripSplitButton2 + // + toolStripSplitButton2.DropDownItems.AddRange(new ToolStripItem[] { toolStripMenuItem6, toolStripMenuItem5 }); + toolStripSplitButton2.Image = (System.Drawing.Image)resources.GetObject("toolStripSplitButton2.Image"); + toolStripSplitButton2.ImageTransparentColor = System.Drawing.Color.Magenta; + toolStripSplitButton2.Name = "toolStripSplitButton2"; + toolStripSplitButton2.Size = new System.Drawing.Size(108, 24); + toolStripSplitButton2.Text = "下拉菜单"; + // + // toolStripMenuItem6 + // + toolStripMenuItem6.Name = "toolStripMenuItem6"; + toolStripMenuItem6.Size = new System.Drawing.Size(137, 26); + toolStripMenuItem6.Text = "22222"; + // + // toolStripMenuItem5 + // + toolStripMenuItem5.Name = "toolStripMenuItem5"; + toolStripMenuItem5.Size = new System.Drawing.Size(137, 26); + toolStripMenuItem5.Text = "11111"; + // + // label1 + // + label1.AutoSize = true; + label1.BackColor = System.Drawing.Color.IndianRed; + label1.Font = new System.Drawing.Font("Tahoma", 15F, System.Drawing.FontStyle.Underline | System.Drawing.FontStyle.Strikeout); + label1.Location = new System.Drawing.Point(215, 326); + label1.Name = "label1"; + label1.Size = new System.Drawing.Size(79, 30); + label1.TabIndex = 5; + label1.Text = "label1"; + // + // linkLabel1 + // + linkLabel1.AutoSize = true; + linkLabel1.Font = new System.Drawing.Font("Microsoft YaHei UI", 9F, System.Drawing.FontStyle.Strikeout); + linkLabel1.Location = new System.Drawing.Point(437, 247); + linkLabel1.Name = "linkLabel1"; + linkLabel1.Size = new System.Drawing.Size(82, 20); + linkLabel1.TabIndex = 6; + linkLabel1.TabStop = true; + linkLabel1.Text = "linkLabel1"; + // + // trackBar1 + // + trackBar1.BackColor = System.Drawing.SystemColors.ControlLight; + trackBar1.LargeChange = 6; + trackBar1.Location = new System.Drawing.Point(338, 102); + trackBar1.Maximum = 100; + trackBar1.Name = "trackBar1"; + trackBar1.Orientation = Orientation.Vertical; + trackBar1.Size = new System.Drawing.Size(56, 291); + trackBar1.TabIndex = 7; + trackBar1.TickFrequency = 2; + trackBar1.TickStyle = TickStyle.Both; + trackBar1.Value = 10; + trackBar1.Scroll += trackBar1_Scroll; + // + // panel1 + // + panel1.AutoScroll = true; + panel1.Controls.Add(button3); + panel1.Controls.Add(button2); + panel1.Location = new System.Drawing.Point(547, 250); + panel1.Name = "panel1"; + panel1.Size = new System.Drawing.Size(216, 144); + panel1.TabIndex = 8; + // + // button3 + // + button3.Location = new System.Drawing.Point(94, 126); + button3.Name = "button3"; + button3.Size = new System.Drawing.Size(94, 29); + button3.TabIndex = 1; + button3.Text = "button3"; + button3.UseVisualStyleBackColor = true; + // + // button2 + // + button2.Location = new System.Drawing.Point(43, 18); + button2.Name = "button2"; + button2.Size = new System.Drawing.Size(94, 29); + button2.TabIndex = 0; + button2.Text = "button2"; + button2.UseVisualStyleBackColor = true; + // + // panel3 + // + panel3.Location = new System.Drawing.Point(29, 102); + panel3.Name = "panel3"; + panel3.Size = new System.Drawing.Size(250, 135); + panel3.TabIndex = 9; + panel3.Paint += panel3_Paint; + // + // panel5 + // + panel5.Controls.Add(label2); + panel5.Location = new System.Drawing.Point(29, 268); + panel5.Name = "panel5"; + panel5.Size = new System.Drawing.Size(180, 113); + panel5.TabIndex = 10; + // + // label2 + // + label2.AutoSize = true; + label2.Location = new System.Drawing.Point(3, 9); + label2.Name = "label2"; + label2.Size = new System.Drawing.Size(168, 20); + label2.TabIndex = 0; + label2.Text = "这是usercontrol占位框"; + // + // Form3 + // + AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F); + AutoScaleMode = AutoScaleMode.Font; + BackColor = System.Drawing.Color.FromArgb(238,235,230); + ClientSize = new System.Drawing.Size(800, 450); + ContextMenuStrip = contextMenuStrip1; + Controls.Add(panel5); + Controls.Add(panel3); + Controls.Add(panel1); + Controls.Add(trackBar1); + Controls.Add(linkLabel1); + Controls.Add(label1); + Controls.Add(statusStrip1); + Controls.Add(button1); + Controls.Add(toolStrip2); + Controls.Add(menuStrip1); + Icon = (System.Drawing.Icon)resources.GetObject("$this.Icon"); + MainMenuStrip = menuStrip1; + MaximizeBox = false; + Name = "Form3"; + ShowInTaskbar = false; + Text = "Form3"; + Load += Form3_Load; + menuStrip1.ResumeLayout(false); + menuStrip1.PerformLayout(); + toolStrip2.ResumeLayout(false); + toolStrip2.PerformLayout(); + contextMenuStrip1.ResumeLayout(false); + statusStrip1.ResumeLayout(false); + statusStrip1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)trackBar1).EndInit(); + panel1.ResumeLayout(false); + panel5.ResumeLayout(false); + panel5.PerformLayout(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + private System.Windows.Forms.MenuStrip menuStrip1; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem1; + private System.Windows.Forms.ToolStrip toolStrip2; + private System.Windows.Forms.ToolStripButton toolStripButton1; + private System.Windows.Forms.ToolStripLabel toolStripLabel1; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ToolStripDropDownButton toolStripDropDownButton1; + private System.Windows.Forms.ToolStripSplitButton toolStripSplitButton1; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; + private System.Windows.Forms.ToolStripComboBox toolStripComboBox1; + private System.Windows.Forms.ToolStripTextBox toolStripTextBox1; + private System.Windows.Forms.ToolStripMenuItem memnuToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem menuToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem ddddToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem ssssToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem fffffffToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem ssssToolStripMenuItem1; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.ToolStripMenuItem bb菜单ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem bb菜单2ToolStripMenuItem; + private System.Windows.Forms.ToolStripProgressBar toolStripProgressBar1; + private System.Windows.Forms.ContextMenuStrip contextMenuStrip1; + private System.Windows.Forms.ToolStripMenuItem ddddToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem ffffToolStripMenuItem; + private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1; + private System.Windows.Forms.ToolStripProgressBar toolStripProgressBar2; + private System.Windows.Forms.ToolStripDropDownButton toolStripDropDownButton2; + private System.Windows.Forms.ToolStripSplitButton toolStripSplitButton2; + private System.Windows.Forms.StatusStrip statusStrip1; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem3; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem4; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem5; + private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem6; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.LinkLabel linkLabel1; + private System.Windows.Forms.TrackBar trackBar1; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.Button button2; + private Panel panel3; + private Panel panel5; + private Label label2; + } +} \ No newline at end of file diff --git a/Samples/GTKWinFormsApp/Form3.cs b/Samples/GTKWinFormsApp/Form3.cs new file mode 100644 index 0000000000000000000000000000000000000000..39344263ace06affe117016a67667960f34c3c0a --- /dev/null +++ b/Samples/GTKWinFormsApp/Form3.cs @@ -0,0 +1,93 @@ +using GLib; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace GTKWinFormsApp +{ + public partial class Form3 : Form + { + public Form3() + { + InitializeComponent(); + //目前自定义控件无法在窗体设计器中可视化,建议使用程序添加,如下示例: + UserControl11 userControl11 = new UserControl11(); + panel5.Controls.Add(userControl11); + } + + private void button1_Click(object sender, EventArgs e) + { + //button1.ForeColor=Color.Red; + //button1.BackColor=Color.Green; + Form1 f = new Form1(); + f.Show(); + } + + private void trackBar1_Scroll(object sender, EventArgs e) + { + label1.Text = trackBar1.Value.ToString(); + } + + private void Form3_Load(object sender, EventArgs e) + { + var result = this.BeginInvoke(new MethodInvoker(() => + { + for (int i = 0; i < 30; i++) + { + trackBar1.Value = i; + label1.Text = i.ToString(); + System.Threading.Thread.Sleep(200); + + } + })); + } + + private void panel3_Paint(object sender, PaintEventArgs e) + { + var g = e.Graphics; + + GraphicsPath path = new GraphicsPath(); + path.AddEllipse(90, 25, 40, 20); + + path.StartFigure(); + path.AddArc(5, 5, 6, 6, 180, 90); + path.AddArc(20, 5, 6, 6, 270, 90); + path.AddArc(20, 18, 6, 6, 0, 90); + path.AddArc(5, 18, 6, 6, 90, 90); + path.CloseFigure(); + + path.StartFigure(); + + path.AddLine(new Point(20, 40), new Point(60, 30)); + path.AddPie(-10, 20, 60, 60, 10, 100); + //path.StartFigure(); + path.AddBezier(new Point(60, 70), new Point(80, 120), new Point(110, 20), new Point(160, 80)); + path.AddRectangle(new Rectangle(30, 10, 190, 30)); + //path.CloseFigure(); + + + path.AddString("test文本", new FontFamily(GenericFontFamilies.Serif), (int)FontStyle.Italic, 16, new Point(10, 10), new StringFormat(StringFormatFlags.NoWrap)); + + //path.CloseAllFigures(); + + LinearGradientBrush brush = new LinearGradientBrush(new Point(0, 0), new Point(100, 30), Color.Red, Color.Blue); + //g.TranslateTransform(30, 0); + //g.RotateTransform(20); + g.DrawPath(new Pen(brush, 2), path); + + //PathGradientBrush gradientBrush = new PathGradientBrush(path); + //gradientBrush.CenterColor = Color.Red; + //gradientBrush.SurroundColors = new Color[] { Color.Yellow, Color.Blue }; + //g.DrawPath(new Pen(gradientBrush, 2), path); + + //g.FillPath(brush, path); + } + } +} diff --git a/Samples/GTKWinFormsApp/Form3.resx b/Samples/GTKWinFormsApp/Form3.resx new file mode 100644 index 0000000000000000000000000000000000000000..cb969af09b446183a3c852f4e34d3abd9577936d --- /dev/null +++ b/Samples/GTKWinFormsApp/Form3.resx @@ -0,0 +1,214 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 122, 17 + + + 267, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAEKSURBVEhL3ZG9DsFQHMXvczDZvIOtXsHObuhqkViI3Quw + 6CYmNoMYJJ0NBiFFIoIytOuf0+TeXP3yde+iyS+3OcP53Z4y3/dJJ4HAsiwyTVMp6BQCBIZhKAWdEcHV + vSlBmeB82NFy1KLluEWOPRC5MoHdMWhazwi4RJlALgf4EuT6BI+5kCsTrGddUY658E+QvyXYHq9UnRyC + U87f4aUApcXhnrI9Jzg/laQKFntXlHM+lSQK5psL5fvbp/JvJLGCQqmSWM5JkiCT84igXGtSrruKLQ0T + luAdmZxHBG37FFuWBC/j5XKOmX8WAH7rcI6ZMffPgjQwN2bXJgDo/COBTpjneQ2dML0PY3cISreGe8HM + qgAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAEKSURBVEhL3ZG9DsFQHMXvczDZvIOtXsHObuhqkViI3Quw + 6CYmNoMYJJ0NBiFFIoIytOuf0+TeXP3yde+iyS+3OcP53Z4y3/dJJ4HAsiwyTVMp6BQCBIZhKAWdEcHV + vSlBmeB82NFy1KLluEWOPRC5MoHdMWhazwi4RJlALgf4EuT6BI+5kCsTrGddUY658E+QvyXYHq9UnRyC + U87f4aUApcXhnrI9Jzg/laQKFntXlHM+lSQK5psL5fvbp/JvJLGCQqmSWM5JkiCT84igXGtSrruKLQ0T + luAdmZxHBG37FFuWBC/j5XKOmX8WAH7rcI6ZMffPgjQwN2bXJgDo/COBTpjneQ2dML0PY3cISreGe8HM + qgAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAEKSURBVEhL3ZG9DsFQHMXvczDZvIOtXsHObuhqkViI3Quw + 6CYmNoMYJJ0NBiFFIoIytOuf0+TeXP3yde+iyS+3OcP53Z4y3/dJJ4HAsiwyTVMp6BQCBIZhKAWdEcHV + vSlBmeB82NFy1KLluEWOPRC5MoHdMWhazwi4RJlALgf4EuT6BI+5kCsTrGddUY658E+QvyXYHq9UnRyC + U87f4aUApcXhnrI9Jzg/laQKFntXlHM+lSQK5psL5fvbp/JvJLGCQqmSWM5JkiCT84igXGtSrruKLQ0T + luAdmZxHBG37FFuWBC/j5XKOmX8WAH7rcI6ZMffPgjQwN2bXJgDo/COBTpjneQ2dML0PY3cISreGe8HM + qgAAAABJRU5ErkJggg== + + + + 401, 17 + + + 603, 17 + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAEKSURBVEhL3ZG9DsFQHMXvczDZvIOtXsHObuhqkViI3Quw + 6CYmNoMYJJ0NBiFFIoIytOuf0+TeXP3yde+iyS+3OcP53Z4y3/dJJ4HAsiwyTVMp6BQCBIZhKAWdEcHV + vSlBmeB82NFy1KLluEWOPRC5MoHdMWhazwi4RJlALgf4EuT6BI+5kCsTrGddUY658E+QvyXYHq9UnRyC + U87f4aUApcXhnrI9Jzg/laQKFntXlHM+lSQK5psL5fvbp/JvJLGCQqmSWM5JkiCT84igXGtSrruKLQ0T + luAdmZxHBG37FFuWBC/j5XKOmX8WAH7rcI6ZMffPgjQwN2bXJgDo/COBTpjneQ2dML0PY3cISreGe8HM + qgAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAEKSURBVEhL3ZG9DsFQHMXvczDZvIOtXsHObuhqkViI3Quw + 6CYmNoMYJJ0NBiFFIoIytOuf0+TeXP3yde+iyS+3OcP53Z4y3/dJJ4HAsiwyTVMp6BQCBIZhKAWdEcHV + vSlBmeB82NFy1KLluEWOPRC5MoHdMWhazwi4RJlALgf4EuT6BI+5kCsTrGddUY658E+QvyXYHq9UnRyC + U87f4aUApcXhnrI9Jzg/laQKFntXlHM+lSQK5psL5fvbp/JvJLGCQqmSWM5JkiCT84igXGtSrruKLQ0T + luAdmZxHBG37FFuWBC/j5XKOmX8WAH7rcI6ZMffPgjQwN2bXJgDo/COBTpjneQ2dML0PY3cISreGe8HM + qgAAAABJRU5ErkJggg== + + + + 48 + + + + AAABAAEAEBAAAAAAIAAoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA + AAD///8A////AP///wD///8A9vb2YPb29sD29vb/9vb2//b29v/29vb/9vb2wPb29mD///8A////AP// + /wD///8A////AP///wD29vYg9vb20O7euP/hs0z/15UA/9eVAP/XlQD/15UA/+GzTP/u3rj/9vb20Pb2 + 9iD///8A////AP///wD29vYg9vb28OS/a//XlQD/2ZsO/9eVAP/frT3/2ZsO/9mbDv/Zmw7/15UA/+O5 + XP/29vbw9vb2IP///wD///8A9vb20OS/a//XlQD/4bNM/+rRmf/XlQD/8urX/+bFe//XlQD/8urX/+Gz + TP/XlQD/5L9r//b29tD///8A9vb2YO7euP/XlQD/4bNM//b29v/juVz/3act//b29v/08Of/15UA/+jL + iv/29vb/4bNM/9eVAP/u3rj/9vb2YPb29sDhs0z/2ZsO//Lq1//u3rj/26Ee/92nLf/mxXv/3609/9uh + Hv/boR7/7Nip//Lq1//Zmw7/4bNM//b29sD29vb/15UA/9eVAP/XlQD/15UA/9eVAP/dpy3/3609/9+t + Pf/dpy3/15UA/9eVAP/XlQD/15UA/9eVAP/29vb/9vb2/9eVAP/dpy3/6MuK/+7euP/XlQD/7t64//b2 + 9v/29vb/7t64/9eVAP/08Of/7Nip/92nLf/XlQD/8urX//b29v/XlQD/5sV7//b29v/u3rj/15UA/+7e + uP/29vb/9vb2/+7euP/XlQD/7t64//b29v/mxXv/15UA//b29v/29vb/15UA/9+tPf/29vb/7Nip/9eV + AP/juVz/5L9r/9+tPf/juVz/15UA/+jLiv/y6tf/3609/9eVAP/29vb/9vb2wOGzTP/XlQD/15UA/9eV + AP/XlQD/26Ee/9+tPf/frT3/26Ee/9eVAP/XlQD/15UA/9eVAP/hs0z/9vb2wPb29mDu3rj/15UA/92n + Lf/w5Mj/3act/+O5XP/29vb/9vb2/+GzTP/hs0z/9PDn/92nLf/XlQD/7t64//b29mD///8A9vb20OS/ + a//XlQD/4bNM/+S/a//Zmw7/9vb2//Lq1//XlQD/6MuK/+GzTP/XlQD/5L9r//b29tD///8A////APb2 + 9iD29vbw47lc/9eVAP/XlQD/15UA/+O5XP/frT3/15UA/9eVAP/XlQD/5L9r//b29vD29vYg////AP// + /wD///8A9vb2IPb29tDu3rj/4bNM/9eVAP/XlQD/15UA/9eVAP/hs0z/7t64//b29tD29vYg////AP// + /wD///8A////AP///wD///8A9vb2YPb29sD29vb/9vb2//b29v/29vb/9vb2wPb29mD///8A////AP// + /wD///8A + + + \ No newline at end of file diff --git a/Samples/GTKWinFormsApp/GTKWinFormsApp.csproj b/Samples/GTKWinFormsApp/GTKWinFormsApp.csproj index a989258a085212aa4141112de0a38066d7abae4e..3f7b4d5d7ae06e4cc24d4be3260b1db83699a8e8 100644 --- a/Samples/GTKWinFormsApp/GTKWinFormsApp.csproj +++ b/Samples/GTKWinFormsApp/GTKWinFormsApp.csproj @@ -1,26 +1,22 @@ - + - - WinExe - netcoreapp3.1 - false + + Exe + net8.0 + enable + False False + False + True - - - - - - ..\..\Libs\GTKSystem.Windows.Forms.dll - - - ..\..\Libs\System.Resources.Extensions.dll - + + + True True @@ -35,4 +31,24 @@ + + + Always + + + Always + + + Always + + + + + + + + + + + \ No newline at end of file diff --git a/Samples/GTKWinFormsApp/GTKWinFormsApp.csproj.user b/Samples/GTKWinFormsApp/GTKWinFormsApp.csproj.user index ae1faa999eac8e1538a4a08d9c8a373752b883de..3cdc5330e7b16e921b9941bacd4303a49e8a06b9 100644 --- a/Samples/GTKWinFormsApp/GTKWinFormsApp.csproj.user +++ b/Samples/GTKWinFormsApp/GTKWinFormsApp.csproj.user @@ -8,5 +8,19 @@ Form + + Form + + + Form + + + UserControl + + + + + Designer + \ No newline at end of file diff --git a/Samples/GTKWinFormsApp/Program.cs b/Samples/GTKWinFormsApp/Program.cs index 0f7cfeed44c6880a0811d3c86eab43fdfa1b8cc3..3e947f139fa5682b9bf740e78ab3fe8a11a5a767 100644 --- a/Samples/GTKWinFormsApp/Program.cs +++ b/Samples/GTKWinFormsApp/Program.cs @@ -17,7 +17,7 @@ namespace GTKWinFormsApp Application.SetHighDpiMode(HighDpiMode.SystemAware); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); - Application.Run(new Form1()); + Application.Run(new Form3()); } } } diff --git a/Samples/GTKWinFormsApp/Properties/DataSources/TestDataSource.datasource b/Samples/GTKWinFormsApp/Properties/DataSources/TestDataSource.datasource new file mode 100644 index 0000000000000000000000000000000000000000..a4fc89afec0fb0270cda7a879135bf920bf93ec0 --- /dev/null +++ b/Samples/GTKWinFormsApp/Properties/DataSources/TestDataSource.datasource @@ -0,0 +1,10 @@ + + + + GTKWinFormsApp.TestDataSource, GTKWinFormsApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + \ No newline at end of file diff --git a/Samples/GTKWinFormsApp/Properties/PublishProfiles/FolderProfile.pubxml.user b/Samples/GTKWinFormsApp/Properties/PublishProfiles/FolderProfile.pubxml.user index 6cb72c7baba36c2f3db1ecfe9156a505a037a843..8bed00d466c1b63b14baaea396f24f274e54ac7e 100644 --- a/Samples/GTKWinFormsApp/Properties/PublishProfiles/FolderProfile.pubxml.user +++ b/Samples/GTKWinFormsApp/Properties/PublishProfiles/FolderProfile.pubxml.user @@ -4,7 +4,7 @@ https://go.microsoft.com/fwlink/?LinkID=208121. --> - True|2023-10-27T06:20:01.0889460Z; + True|2023-12-24T17:18:04.0724580Z;True|2023-10-27T14:20:01.0889460+08:00; \ No newline at end of file diff --git a/Samples/GTKWinFormsApp/Properties/Resources.Designer.cs b/Samples/GTKWinFormsApp/Properties/Resources.Designer.cs index 3cf6bf4bceff239d28e6d43fb44e584f9eea5e25..02f71541b893482c70b6e1ab4683163b18825dff 100644 --- a/Samples/GTKWinFormsApp/Properties/Resources.Designer.cs +++ b/Samples/GTKWinFormsApp/Properties/Resources.Designer.cs @@ -19,7 +19,7 @@ namespace GTKWinFormsApp.Properties { // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen // (以 /str 作为命令选项),或重新生成 VS 项目。 - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { @@ -60,6 +60,16 @@ namespace GTKWinFormsApp.Properties { } } + /// + /// 查找 System.Drawing.Bitmap 类型的本地化资源。 + /// + internal static System.Drawing.Bitmap timg { + get { + object obj = ResourceManager.GetObject("timg", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// 查找 System.Byte[] 类型的本地化资源。 /// diff --git a/Samples/GTKWinFormsApp/Properties/Resources.resx b/Samples/GTKWinFormsApp/Properties/Resources.resx index 4c3916f5640f3f289b276be20d35240f0f501075..3c0690c58d3077a8e3c0412c9908936ec421a4cd 100644 --- a/Samples/GTKWinFormsApp/Properties/Resources.resx +++ b/Samples/GTKWinFormsApp/Properties/Resources.resx @@ -121,4 +121,7 @@ ..\Resources\timg6.jpg;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + ..\Resources\timg.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/Samples/GTKWinFormsApp/Resources/010.jpg b/Samples/GTKWinFormsApp/Resources/010.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7d1ce25f17a80aafe591bc14d1984655324526f2 Binary files /dev/null and b/Samples/GTKWinFormsApp/Resources/010.jpg differ diff --git a/Samples/GTKWinFormsApp/Resources/BindingNavigator.Delete.ico b/Samples/GTKWinFormsApp/Resources/BindingNavigator.Delete.ico new file mode 100644 index 0000000000000000000000000000000000000000..2bf258ceee05ae9888716ccc68929c4e08131fbe Binary files /dev/null and b/Samples/GTKWinFormsApp/Resources/BindingNavigator.Delete.ico differ diff --git a/Samples/GTKWinFormsApp/Resources/timg.jpg b/Samples/GTKWinFormsApp/Resources/timg.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ab1f91b34c11a0b6f9e173c9e4dfef253e7fe79d Binary files /dev/null and b/Samples/GTKWinFormsApp/Resources/timg.jpg differ diff --git a/Samples/GTKWinFormsApp/Resources/timg2.jpg b/Samples/GTKWinFormsApp/Resources/timg2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..44def60b4d49e84f58cd38f42f4eca595241d739 Binary files /dev/null and b/Samples/GTKWinFormsApp/Resources/timg2.jpg differ diff --git a/Samples/GTKWinFormsApp/System.Resources.ResourceManager.cs b/Samples/GTKWinFormsApp/System.Resources.ResourceManager.cs index 951ed54022e65cf11a7860fe8737e7ddf94e7447..085eeee3374f6862d758ebcf9584c3726dcbe927 100644 --- a/Samples/GTKWinFormsApp/System.Resources.ResourceManager.cs +++ b/Samples/GTKWinFormsApp/System.Resources.ResourceManager.cs @@ -20,7 +20,7 @@ namespace System.Resources { } - public ResourceManager(string baseName, Assembly assembly, System.Type? resourceSource) : base(baseName, assembly, resourceSource) + public ResourceManager(string baseName, Assembly assembly, System.Type resourceSource) : base(baseName, assembly, resourceSource) { } diff --git a/Samples/GTKWinFormsApp/UserControl11.Designer.cs b/Samples/GTKWinFormsApp/UserControl11.Designer.cs new file mode 100644 index 0000000000000000000000000000000000000000..5527efe1b6cd76a07fa231ee073619971fd24c4e --- /dev/null +++ b/Samples/GTKWinFormsApp/UserControl11.Designer.cs @@ -0,0 +1,63 @@ +using System.Collections; +using System.Windows.Forms; + +namespace GTKWinFormsApp +{ + partial class UserControl11 + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region 组件设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要修改 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + button1 = new Button(); + SuspendLayout(); + // + // button1 + // + button1.Location = new System.Drawing.Point(3, 44); + button1.Name = "button1"; + button1.Size = new System.Drawing.Size(153, 34); + button1.TabIndex = 0; + button1.Text = "这是自定义控件"; + button1.UseVisualStyleBackColor = true; + // + // UserControl11 + // + AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F); + AutoScaleMode = AutoScaleMode.Font; + Controls.Add(button1); + Name = "UserControl11"; + Size = new System.Drawing.Size(190, 81); + Load += UserControl11_Load; + Paint += UserControl11_Paint; + ParentChanged += UserControl11_ParentChanged; + ResumeLayout(false); + } + + #endregion + + private Button button1; + } +} diff --git a/Samples/GTKWinFormsApp/UserControl11.cs b/Samples/GTKWinFormsApp/UserControl11.cs new file mode 100644 index 0000000000000000000000000000000000000000..defc23ffba24fdd6117be06d78e6f49f4ab4b0d0 --- /dev/null +++ b/Samples/GTKWinFormsApp/UserControl11.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.ComponentModel.Design; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Windows.Forms.Design; + +namespace GTKWinFormsApp +{ + [Designer(typeof(ControlDesigner))] + public partial class UserControl11 : UserControl + { + public UserControl11() + { + InitializeComponent(); + } + + private void UserControl11_Paint(object sender, PaintEventArgs e) + { + var g = e.Graphics; + g.DrawEllipse(new Pen(new SolidBrush(Color.Red), 2), 0, 0, 30, 20); + //g.FillEllipse(new SolidBrush(Color.Red), 40, 25, 30, 20); + } + + private void UserControl11_ParentChanged(object sender, EventArgs e) + { + MessageBox.Show("sss"); + } + + private void UserControl11_Load(object sender, EventArgs e) + { + Invalidate(); + System.IO.File.AppendAllText("F:\\我的项目\\GTK\\gtksystem-windows-forms\\Samples\\GTKWinFormsApp\\bin\\ii2.txt", "UserControl11_Load"); + } + + protected override void OnPaint(System.Windows.Forms.PaintEventArgs e) + { + + //using SolidBrush brush = new SolidBrush(_backgroundColor); + //e.Graphics.FillRectangle(brush, new Rectangle(0, 0, Width, Height)); + //using SolidBrush brush2 = new SolidBrush(Color.Red); + //e.Graphics.DrawEllipse(new Pen(brush2), new Rectangle(30, 30, Width, Height)); + base.OnPaint(e); + } + } +} diff --git a/Samples/GTKWinFormsApp/UserControl11.resx b/Samples/GTKWinFormsApp/UserControl11.resx new file mode 100644 index 0000000000000000000000000000000000000000..af32865ec12ff9e3beb4b98fb4cf5b8420e12d69 --- /dev/null +++ b/Samples/GTKWinFormsApp/UserControl11.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Samples/GTKWinFormsApp/bin/Debug/GTKWinFormsApp.1.0.0.nupkg b/Samples/GTKWinFormsApp/bin/Debug/GTKWinFormsApp.1.0.0.nupkg deleted file mode 100644 index f24cbefdfbd7500c3881075280c4566b54a41d6c..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/bin/Debug/GTKWinFormsApp.1.0.0.nupkg and /dev/null differ diff --git a/Samples/GTKWinFormsApp/bin/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.dll b/Samples/GTKWinFormsApp/bin/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.dll deleted file mode 100644 index cc27a9d7f5df2d19a8c7a7df13ea49abb3c2bdae..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/bin/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.dll and /dev/null differ diff --git a/Samples/GTKWinFormsApp/bin/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.pdb b/Samples/GTKWinFormsApp/bin/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.pdb deleted file mode 100644 index e256c98466be8b309486b8876c224f2ee5f7d6f6..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/bin/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.pdb and /dev/null differ diff --git a/Samples/GTKWinFormsApp/bin/Debug/netcoreapp3.1/GTKWinFormsApp.deps.json b/Samples/GTKWinFormsApp/bin/Debug/netcoreapp3.1/GTKWinFormsApp.deps.json deleted file mode 100644 index 7effbe40a1d7a59ed932306fbaa829f34aa6d39e..0000000000000000000000000000000000000000 --- a/Samples/GTKWinFormsApp/bin/Debug/netcoreapp3.1/GTKWinFormsApp.deps.json +++ /dev/null @@ -1,183 +0,0 @@ -{ - "runtimeTarget": { - "name": ".NETCoreApp,Version=v3.1", - "signature": "" - }, - "compilationOptions": {}, - "targets": { - ".NETCoreApp,Version=v3.1": { - "GTKWinFormsApp/1.0.0": { - "dependencies": { - "GtkSharp": "3.24.24.34", - "GTKSystem.Windows.Forms": "0.3.24.1", - "System.Resources.Extensions": "1.0.0.0" - }, - "runtime": { - "GTKWinFormsApp.dll": {} - } - }, - "AtkSharp/3.24.24.34": { - "dependencies": { - "GLibSharp": "3.24.24.34" - }, - "runtime": { - "lib/netstandard2.0/AtkSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "CairoSharp/3.24.24.34": { - "runtime": { - "lib/netstandard2.0/CairoSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "GdkSharp/3.24.24.34": { - "dependencies": { - "CairoSharp": "3.24.24.34", - "GLibSharp": "3.24.24.34", - "GioSharp": "3.24.24.34", - "PangoSharp": "3.24.24.34" - }, - "runtime": { - "lib/netstandard2.0/GdkSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "GioSharp/3.24.24.34": { - "dependencies": { - "GLibSharp": "3.24.24.34" - }, - "runtime": { - "lib/netstandard2.0/GioSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "GLibSharp/3.24.24.34": { - "runtime": { - "lib/netstandard2.0/GLibSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "GtkSharp/3.24.24.34": { - "dependencies": { - "AtkSharp": "3.24.24.34", - "CairoSharp": "3.24.24.34", - "GLibSharp": "3.24.24.34", - "GdkSharp": "3.24.24.34", - "GioSharp": "3.24.24.34", - "PangoSharp": "3.24.24.34" - }, - "runtime": { - "lib/netstandard2.0/GtkSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "PangoSharp/3.24.24.34": { - "dependencies": { - "CairoSharp": "3.24.24.34", - "GLibSharp": "3.24.24.34" - }, - "runtime": { - "lib/netstandard2.0/PangoSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "GTKSystem.Windows.Forms/0.3.24.1": { - "runtime": { - "GTKSystem.Windows.Forms.dll": { - "assemblyVersion": "0.3.24.1", - "fileVersion": "0.3.24.1" - } - } - }, - "System.Resources.Extensions/1.0.0.0": { - "runtime": { - "System.Resources.Extensions.dll": { - "assemblyVersion": "1.0.0.0", - "fileVersion": "1.0.0.0" - } - } - } - } - }, - "libraries": { - "GTKWinFormsApp/1.0.0": { - "type": "project", - "serviceable": false, - "sha512": "" - }, - "AtkSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-CNfTGhGDxcnow5e/u0THtOJeNWaZNDeeFmzYTMdC1tdUkmAtTFDareTGesLx+Gfj75m3415AKJSC9wQ6VyacYQ==", - "path": "atksharp/3.24.24.34", - "hashPath": "atksharp.3.24.24.34.nupkg.sha512" - }, - "CairoSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-hr75uYPGFlmB3RvpL3/6ZJtb+UiKsrpkyjb5VGI+8y1/lkY405FMBhPZKlxFqoEH0iIZ9gAMPBqKzT1lSVaDqA==", - "path": "cairosharp/3.24.24.34", - "hashPath": "cairosharp.3.24.24.34.nupkg.sha512" - }, - "GdkSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-COORB6Qd4yu6HWRbzVZXrkzr1T96Gy0wO7ckJfpYxWLbDUDnZVd/g2PICp9T05a0ZvLvkE++vsSjAWobwQeS0g==", - "path": "gdksharp/3.24.24.34", - "hashPath": "gdksharp.3.24.24.34.nupkg.sha512" - }, - "GioSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-Qyz8bhKjLMTWoxXu6cdNEtTLNUuw7Y1sPdXlyTfyWMP/JmsUE9smCsCC0kyQNSFW17flxdSoeDpG8l6zzJF0vQ==", - "path": "giosharp/3.24.24.34", - "hashPath": "giosharp.3.24.24.34.nupkg.sha512" - }, - "GLibSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-PSA7YJbxpnpeltjekoUk93FI9HWUMc2NtkxNIaWzHz7BavkkZDFmx8EKTKtuBrqbZZmEhlv5472NwGdiycSfxw==", - "path": "glibsharp/3.24.24.34", - "hashPath": "glibsharp.3.24.24.34.nupkg.sha512" - }, - "GtkSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-CVAz7ACMxW9xPhlrrg4Xe+v3jUnpN+emQl78aaXHtoiE7pf0tR8mP8mw0/eBHxMObrmg6DsLxbEFqE/7Yo4Uow==", - "path": "gtksharp/3.24.24.34", - "hashPath": "gtksharp.3.24.24.34.nupkg.sha512" - }, - "PangoSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-QpBEIiE29sxkewdW7l7rVRJR1p3SGoPauHrjm0A3yxpYxj+St5x45weHI8jquMJAZBUdVQuXYHSZDW1lQeJ+PQ==", - "path": "pangosharp/3.24.24.34", - "hashPath": "pangosharp.3.24.24.34.nupkg.sha512" - }, - "GTKSystem.Windows.Forms/0.3.24.1": { - "type": "reference", - "serviceable": false, - "sha512": "" - }, - "System.Resources.Extensions/1.0.0.0": { - "type": "reference", - "serviceable": false, - "sha512": "" - } - } -} \ No newline at end of file diff --git a/Samples/GTKWinFormsApp/bin/Debug/netcoreapp3.1/GTKWinFormsApp.dll b/Samples/GTKWinFormsApp/bin/Debug/netcoreapp3.1/GTKWinFormsApp.dll deleted file mode 100644 index c4f60e9f1ead85be638be2a2ef143f4b9a9d5162..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/bin/Debug/netcoreapp3.1/GTKWinFormsApp.dll and /dev/null differ diff --git a/Samples/GTKWinFormsApp/bin/Debug/netcoreapp3.1/GTKWinFormsApp.exe b/Samples/GTKWinFormsApp/bin/Debug/netcoreapp3.1/GTKWinFormsApp.exe deleted file mode 100644 index bae8a873033bbd61761568102c0257154222eb70..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/bin/Debug/netcoreapp3.1/GTKWinFormsApp.exe and /dev/null differ diff --git a/Samples/GTKWinFormsApp/bin/Debug/netcoreapp3.1/GTKWinFormsApp.pdb b/Samples/GTKWinFormsApp/bin/Debug/netcoreapp3.1/GTKWinFormsApp.pdb deleted file mode 100644 index 19c8985cbd6236eafd79c5c11dbe6b59bcd912dd..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/bin/Debug/netcoreapp3.1/GTKWinFormsApp.pdb and /dev/null differ diff --git a/Samples/GTKWinFormsApp/bin/Debug/netcoreapp3.1/GTKWinFormsApp.runtimeconfig.dev.json b/Samples/GTKWinFormsApp/bin/Debug/netcoreapp3.1/GTKWinFormsApp.runtimeconfig.dev.json deleted file mode 100644 index fbb99cd6cc94d78b6f6d0cc8f3e550da7364cadc..0000000000000000000000000000000000000000 --- a/Samples/GTKWinFormsApp/bin/Debug/netcoreapp3.1/GTKWinFormsApp.runtimeconfig.dev.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "runtimeOptions": { - "additionalProbingPaths": [ - "C:\\Users\\chj\\.dotnet\\store\\|arch|\\|tfm|", - "C:\\Users\\chj\\.nuget\\packages", - "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder" - ] - } -} \ No newline at end of file diff --git a/Samples/GTKWinFormsApp/bin/Debug/netcoreapp3.1/GTKWinFormsApp.runtimeconfig.json b/Samples/GTKWinFormsApp/bin/Debug/netcoreapp3.1/GTKWinFormsApp.runtimeconfig.json deleted file mode 100644 index bc456d7868bb54ec1809da30e339cd43f0a8a09c..0000000000000000000000000000000000000000 --- a/Samples/GTKWinFormsApp/bin/Debug/netcoreapp3.1/GTKWinFormsApp.runtimeconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "runtimeOptions": { - "tfm": "netcoreapp3.1", - "framework": { - "name": "Microsoft.NETCore.App", - "version": "3.1.0" - } - } -} \ No newline at end of file diff --git a/Samples/GTKWinFormsApp/bin/Debug/netcoreapp3.1/System.Resources.Extensions.dll b/Samples/GTKWinFormsApp/bin/Debug/netcoreapp3.1/System.Resources.Extensions.dll deleted file mode 100644 index b299d9d0ff10ca1c11a4e565a9d8594f58fa941c..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/bin/Debug/netcoreapp3.1/System.Resources.Extensions.dll and /dev/null differ diff --git a/Samples/GTKWinFormsApp/bin/Debug/netcoreapp3.1/System.Resources.Extensions.pdb b/Samples/GTKWinFormsApp/bin/Debug/netcoreapp3.1/System.Resources.Extensions.pdb deleted file mode 100644 index c41fe38fe5e278a51f6138b191f791ccf3d0acf6..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/bin/Debug/netcoreapp3.1/System.Resources.Extensions.pdb and /dev/null differ diff --git a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/AtkSharp.dll b/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/AtkSharp.dll deleted file mode 100644 index 508c1efc96b2414dcf1c0451df676c8f5a45ccb6..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/AtkSharp.dll and /dev/null differ diff --git a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/CairoSharp.dll b/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/CairoSharp.dll deleted file mode 100644 index ea9d80e3cf5859ede1d1ca001a145fc09bf7d4a3..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/CairoSharp.dll and /dev/null differ diff --git a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/GLibSharp.dll b/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/GLibSharp.dll deleted file mode 100644 index e73f088b0f57bfe858f7e6e811be867190f3ea28..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/GLibSharp.dll and /dev/null differ diff --git a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/GTKSystem.Windows.Forms.dll b/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/GTKSystem.Windows.Forms.dll deleted file mode 100644 index 027156f49b8d3b389a352f94206ce81bc7443b07..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/GTKSystem.Windows.Forms.dll and /dev/null differ diff --git a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/GTKSystem.Windows.Forms.pdb b/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/GTKSystem.Windows.Forms.pdb deleted file mode 100644 index d72d2693fb2b737296f426636fcca9163943cd6b..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/GTKSystem.Windows.Forms.pdb and /dev/null differ diff --git a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/GTKWinFormsApp.deps.json b/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/GTKWinFormsApp.deps.json deleted file mode 100644 index 7effbe40a1d7a59ed932306fbaa829f34aa6d39e..0000000000000000000000000000000000000000 --- a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/GTKWinFormsApp.deps.json +++ /dev/null @@ -1,183 +0,0 @@ -{ - "runtimeTarget": { - "name": ".NETCoreApp,Version=v3.1", - "signature": "" - }, - "compilationOptions": {}, - "targets": { - ".NETCoreApp,Version=v3.1": { - "GTKWinFormsApp/1.0.0": { - "dependencies": { - "GtkSharp": "3.24.24.34", - "GTKSystem.Windows.Forms": "0.3.24.1", - "System.Resources.Extensions": "1.0.0.0" - }, - "runtime": { - "GTKWinFormsApp.dll": {} - } - }, - "AtkSharp/3.24.24.34": { - "dependencies": { - "GLibSharp": "3.24.24.34" - }, - "runtime": { - "lib/netstandard2.0/AtkSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "CairoSharp/3.24.24.34": { - "runtime": { - "lib/netstandard2.0/CairoSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "GdkSharp/3.24.24.34": { - "dependencies": { - "CairoSharp": "3.24.24.34", - "GLibSharp": "3.24.24.34", - "GioSharp": "3.24.24.34", - "PangoSharp": "3.24.24.34" - }, - "runtime": { - "lib/netstandard2.0/GdkSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "GioSharp/3.24.24.34": { - "dependencies": { - "GLibSharp": "3.24.24.34" - }, - "runtime": { - "lib/netstandard2.0/GioSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "GLibSharp/3.24.24.34": { - "runtime": { - "lib/netstandard2.0/GLibSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "GtkSharp/3.24.24.34": { - "dependencies": { - "AtkSharp": "3.24.24.34", - "CairoSharp": "3.24.24.34", - "GLibSharp": "3.24.24.34", - "GdkSharp": "3.24.24.34", - "GioSharp": "3.24.24.34", - "PangoSharp": "3.24.24.34" - }, - "runtime": { - "lib/netstandard2.0/GtkSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "PangoSharp/3.24.24.34": { - "dependencies": { - "CairoSharp": "3.24.24.34", - "GLibSharp": "3.24.24.34" - }, - "runtime": { - "lib/netstandard2.0/PangoSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "GTKSystem.Windows.Forms/0.3.24.1": { - "runtime": { - "GTKSystem.Windows.Forms.dll": { - "assemblyVersion": "0.3.24.1", - "fileVersion": "0.3.24.1" - } - } - }, - "System.Resources.Extensions/1.0.0.0": { - "runtime": { - "System.Resources.Extensions.dll": { - "assemblyVersion": "1.0.0.0", - "fileVersion": "1.0.0.0" - } - } - } - } - }, - "libraries": { - "GTKWinFormsApp/1.0.0": { - "type": "project", - "serviceable": false, - "sha512": "" - }, - "AtkSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-CNfTGhGDxcnow5e/u0THtOJeNWaZNDeeFmzYTMdC1tdUkmAtTFDareTGesLx+Gfj75m3415AKJSC9wQ6VyacYQ==", - "path": "atksharp/3.24.24.34", - "hashPath": "atksharp.3.24.24.34.nupkg.sha512" - }, - "CairoSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-hr75uYPGFlmB3RvpL3/6ZJtb+UiKsrpkyjb5VGI+8y1/lkY405FMBhPZKlxFqoEH0iIZ9gAMPBqKzT1lSVaDqA==", - "path": "cairosharp/3.24.24.34", - "hashPath": "cairosharp.3.24.24.34.nupkg.sha512" - }, - "GdkSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-COORB6Qd4yu6HWRbzVZXrkzr1T96Gy0wO7ckJfpYxWLbDUDnZVd/g2PICp9T05a0ZvLvkE++vsSjAWobwQeS0g==", - "path": "gdksharp/3.24.24.34", - "hashPath": "gdksharp.3.24.24.34.nupkg.sha512" - }, - "GioSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-Qyz8bhKjLMTWoxXu6cdNEtTLNUuw7Y1sPdXlyTfyWMP/JmsUE9smCsCC0kyQNSFW17flxdSoeDpG8l6zzJF0vQ==", - "path": "giosharp/3.24.24.34", - "hashPath": "giosharp.3.24.24.34.nupkg.sha512" - }, - "GLibSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-PSA7YJbxpnpeltjekoUk93FI9HWUMc2NtkxNIaWzHz7BavkkZDFmx8EKTKtuBrqbZZmEhlv5472NwGdiycSfxw==", - "path": "glibsharp/3.24.24.34", - "hashPath": "glibsharp.3.24.24.34.nupkg.sha512" - }, - "GtkSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-CVAz7ACMxW9xPhlrrg4Xe+v3jUnpN+emQl78aaXHtoiE7pf0tR8mP8mw0/eBHxMObrmg6DsLxbEFqE/7Yo4Uow==", - "path": "gtksharp/3.24.24.34", - "hashPath": "gtksharp.3.24.24.34.nupkg.sha512" - }, - "PangoSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-QpBEIiE29sxkewdW7l7rVRJR1p3SGoPauHrjm0A3yxpYxj+St5x45weHI8jquMJAZBUdVQuXYHSZDW1lQeJ+PQ==", - "path": "pangosharp/3.24.24.34", - "hashPath": "pangosharp.3.24.24.34.nupkg.sha512" - }, - "GTKSystem.Windows.Forms/0.3.24.1": { - "type": "reference", - "serviceable": false, - "sha512": "" - }, - "System.Resources.Extensions/1.0.0.0": { - "type": "reference", - "serviceable": false, - "sha512": "" - } - } -} \ No newline at end of file diff --git a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/GTKWinFormsApp.dll b/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/GTKWinFormsApp.dll deleted file mode 100644 index 3042256da004a721e1b1ef624d6083a0994ebbed..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/GTKWinFormsApp.dll and /dev/null differ diff --git a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/GTKWinFormsApp.exe b/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/GTKWinFormsApp.exe deleted file mode 100644 index 48e7070cdb96775b2a801f10c08d0a92ccf0a19b..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/GTKWinFormsApp.exe and /dev/null differ diff --git a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/GTKWinFormsApp.pdb b/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/GTKWinFormsApp.pdb deleted file mode 100644 index e87498eb6302f21a708af33285e85f08220613f2..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/GTKWinFormsApp.pdb and /dev/null differ diff --git a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/GTKWinFormsApp.runtimeconfig.dev.json b/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/GTKWinFormsApp.runtimeconfig.dev.json deleted file mode 100644 index fbb99cd6cc94d78b6f6d0cc8f3e550da7364cadc..0000000000000000000000000000000000000000 --- a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/GTKWinFormsApp.runtimeconfig.dev.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "runtimeOptions": { - "additionalProbingPaths": [ - "C:\\Users\\chj\\.dotnet\\store\\|arch|\\|tfm|", - "C:\\Users\\chj\\.nuget\\packages", - "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder" - ] - } -} \ No newline at end of file diff --git a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/GTKWinFormsApp.runtimeconfig.json b/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/GTKWinFormsApp.runtimeconfig.json deleted file mode 100644 index bc456d7868bb54ec1809da30e339cd43f0a8a09c..0000000000000000000000000000000000000000 --- a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/GTKWinFormsApp.runtimeconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "runtimeOptions": { - "tfm": "netcoreapp3.1", - "framework": { - "name": "Microsoft.NETCore.App", - "version": "3.1.0" - } - } -} \ No newline at end of file diff --git a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/GdkSharp.dll b/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/GdkSharp.dll deleted file mode 100644 index 556d7a60d6582a40ca726d733e099936e07e45e2..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/GdkSharp.dll and /dev/null differ diff --git a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/GioSharp.dll b/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/GioSharp.dll deleted file mode 100644 index 50176d92d8e5b20c5a9f400ffee5c0531a58a202..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/GioSharp.dll and /dev/null differ diff --git a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/GtkSharp.dll b/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/GtkSharp.dll deleted file mode 100644 index 6d17c558eca9214328d10e325f41a6c129fd540d..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/GtkSharp.dll and /dev/null differ diff --git a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/PangoSharp.dll b/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/PangoSharp.dll deleted file mode 100644 index 5cb34c26c53bac03d58d003e96ca4da28766fb54..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/PangoSharp.dll and /dev/null differ diff --git a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/System.Resources.Extensions.dll b/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/System.Resources.Extensions.dll deleted file mode 100644 index b299d9d0ff10ca1c11a4e565a9d8594f58fa941c..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/System.Resources.Extensions.dll and /dev/null differ diff --git a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/System.Resources.Extensions.pdb b/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/System.Resources.Extensions.pdb deleted file mode 100644 index c41fe38fe5e278a51f6138b191f791ccf3d0acf6..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/System.Resources.Extensions.pdb and /dev/null differ diff --git a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/AtkSharp.dll b/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/AtkSharp.dll deleted file mode 100644 index 508c1efc96b2414dcf1c0451df676c8f5a45ccb6..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/AtkSharp.dll and /dev/null differ diff --git a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/CairoSharp.dll b/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/CairoSharp.dll deleted file mode 100644 index ea9d80e3cf5859ede1d1ca001a145fc09bf7d4a3..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/CairoSharp.dll and /dev/null differ diff --git a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/GLibSharp.dll b/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/GLibSharp.dll deleted file mode 100644 index e73f088b0f57bfe858f7e6e811be867190f3ea28..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/GLibSharp.dll and /dev/null differ diff --git a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/GTKSystem.Windows.Forms.dll b/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/GTKSystem.Windows.Forms.dll deleted file mode 100644 index 027156f49b8d3b389a352f94206ce81bc7443b07..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/GTKSystem.Windows.Forms.dll and /dev/null differ diff --git a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/GTKSystem.Windows.Forms.pdb b/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/GTKSystem.Windows.Forms.pdb deleted file mode 100644 index d72d2693fb2b737296f426636fcca9163943cd6b..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/GTKSystem.Windows.Forms.pdb and /dev/null differ diff --git a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/GTKWinFormsApp.deps.json b/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/GTKWinFormsApp.deps.json deleted file mode 100644 index 7effbe40a1d7a59ed932306fbaa829f34aa6d39e..0000000000000000000000000000000000000000 --- a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/GTKWinFormsApp.deps.json +++ /dev/null @@ -1,183 +0,0 @@ -{ - "runtimeTarget": { - "name": ".NETCoreApp,Version=v3.1", - "signature": "" - }, - "compilationOptions": {}, - "targets": { - ".NETCoreApp,Version=v3.1": { - "GTKWinFormsApp/1.0.0": { - "dependencies": { - "GtkSharp": "3.24.24.34", - "GTKSystem.Windows.Forms": "0.3.24.1", - "System.Resources.Extensions": "1.0.0.0" - }, - "runtime": { - "GTKWinFormsApp.dll": {} - } - }, - "AtkSharp/3.24.24.34": { - "dependencies": { - "GLibSharp": "3.24.24.34" - }, - "runtime": { - "lib/netstandard2.0/AtkSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "CairoSharp/3.24.24.34": { - "runtime": { - "lib/netstandard2.0/CairoSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "GdkSharp/3.24.24.34": { - "dependencies": { - "CairoSharp": "3.24.24.34", - "GLibSharp": "3.24.24.34", - "GioSharp": "3.24.24.34", - "PangoSharp": "3.24.24.34" - }, - "runtime": { - "lib/netstandard2.0/GdkSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "GioSharp/3.24.24.34": { - "dependencies": { - "GLibSharp": "3.24.24.34" - }, - "runtime": { - "lib/netstandard2.0/GioSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "GLibSharp/3.24.24.34": { - "runtime": { - "lib/netstandard2.0/GLibSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "GtkSharp/3.24.24.34": { - "dependencies": { - "AtkSharp": "3.24.24.34", - "CairoSharp": "3.24.24.34", - "GLibSharp": "3.24.24.34", - "GdkSharp": "3.24.24.34", - "GioSharp": "3.24.24.34", - "PangoSharp": "3.24.24.34" - }, - "runtime": { - "lib/netstandard2.0/GtkSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "PangoSharp/3.24.24.34": { - "dependencies": { - "CairoSharp": "3.24.24.34", - "GLibSharp": "3.24.24.34" - }, - "runtime": { - "lib/netstandard2.0/PangoSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "GTKSystem.Windows.Forms/0.3.24.1": { - "runtime": { - "GTKSystem.Windows.Forms.dll": { - "assemblyVersion": "0.3.24.1", - "fileVersion": "0.3.24.1" - } - } - }, - "System.Resources.Extensions/1.0.0.0": { - "runtime": { - "System.Resources.Extensions.dll": { - "assemblyVersion": "1.0.0.0", - "fileVersion": "1.0.0.0" - } - } - } - } - }, - "libraries": { - "GTKWinFormsApp/1.0.0": { - "type": "project", - "serviceable": false, - "sha512": "" - }, - "AtkSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-CNfTGhGDxcnow5e/u0THtOJeNWaZNDeeFmzYTMdC1tdUkmAtTFDareTGesLx+Gfj75m3415AKJSC9wQ6VyacYQ==", - "path": "atksharp/3.24.24.34", - "hashPath": "atksharp.3.24.24.34.nupkg.sha512" - }, - "CairoSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-hr75uYPGFlmB3RvpL3/6ZJtb+UiKsrpkyjb5VGI+8y1/lkY405FMBhPZKlxFqoEH0iIZ9gAMPBqKzT1lSVaDqA==", - "path": "cairosharp/3.24.24.34", - "hashPath": "cairosharp.3.24.24.34.nupkg.sha512" - }, - "GdkSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-COORB6Qd4yu6HWRbzVZXrkzr1T96Gy0wO7ckJfpYxWLbDUDnZVd/g2PICp9T05a0ZvLvkE++vsSjAWobwQeS0g==", - "path": "gdksharp/3.24.24.34", - "hashPath": "gdksharp.3.24.24.34.nupkg.sha512" - }, - "GioSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-Qyz8bhKjLMTWoxXu6cdNEtTLNUuw7Y1sPdXlyTfyWMP/JmsUE9smCsCC0kyQNSFW17flxdSoeDpG8l6zzJF0vQ==", - "path": "giosharp/3.24.24.34", - "hashPath": "giosharp.3.24.24.34.nupkg.sha512" - }, - "GLibSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-PSA7YJbxpnpeltjekoUk93FI9HWUMc2NtkxNIaWzHz7BavkkZDFmx8EKTKtuBrqbZZmEhlv5472NwGdiycSfxw==", - "path": "glibsharp/3.24.24.34", - "hashPath": "glibsharp.3.24.24.34.nupkg.sha512" - }, - "GtkSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-CVAz7ACMxW9xPhlrrg4Xe+v3jUnpN+emQl78aaXHtoiE7pf0tR8mP8mw0/eBHxMObrmg6DsLxbEFqE/7Yo4Uow==", - "path": "gtksharp/3.24.24.34", - "hashPath": "gtksharp.3.24.24.34.nupkg.sha512" - }, - "PangoSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-QpBEIiE29sxkewdW7l7rVRJR1p3SGoPauHrjm0A3yxpYxj+St5x45weHI8jquMJAZBUdVQuXYHSZDW1lQeJ+PQ==", - "path": "pangosharp/3.24.24.34", - "hashPath": "pangosharp.3.24.24.34.nupkg.sha512" - }, - "GTKSystem.Windows.Forms/0.3.24.1": { - "type": "reference", - "serviceable": false, - "sha512": "" - }, - "System.Resources.Extensions/1.0.0.0": { - "type": "reference", - "serviceable": false, - "sha512": "" - } - } -} \ No newline at end of file diff --git a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/GTKWinFormsApp.dll b/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/GTKWinFormsApp.dll deleted file mode 100644 index 3042256da004a721e1b1ef624d6083a0994ebbed..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/GTKWinFormsApp.dll and /dev/null differ diff --git a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/GTKWinFormsApp.exe b/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/GTKWinFormsApp.exe deleted file mode 100644 index 48e7070cdb96775b2a801f10c08d0a92ccf0a19b..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/GTKWinFormsApp.exe and /dev/null differ diff --git a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/GTKWinFormsApp.pdb b/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/GTKWinFormsApp.pdb deleted file mode 100644 index e87498eb6302f21a708af33285e85f08220613f2..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/GTKWinFormsApp.pdb and /dev/null differ diff --git a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/GTKWinFormsApp.runtimeconfig.json b/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/GTKWinFormsApp.runtimeconfig.json deleted file mode 100644 index bc456d7868bb54ec1809da30e339cd43f0a8a09c..0000000000000000000000000000000000000000 --- a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/GTKWinFormsApp.runtimeconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "runtimeOptions": { - "tfm": "netcoreapp3.1", - "framework": { - "name": "Microsoft.NETCore.App", - "version": "3.1.0" - } - } -} \ No newline at end of file diff --git a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/GdkSharp.dll b/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/GdkSharp.dll deleted file mode 100644 index 556d7a60d6582a40ca726d733e099936e07e45e2..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/GdkSharp.dll and /dev/null differ diff --git a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/GioSharp.dll b/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/GioSharp.dll deleted file mode 100644 index 50176d92d8e5b20c5a9f400ffee5c0531a58a202..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/GioSharp.dll and /dev/null differ diff --git a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/GtkSharp.dll b/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/GtkSharp.dll deleted file mode 100644 index 6d17c558eca9214328d10e325f41a6c129fd540d..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/GtkSharp.dll and /dev/null differ diff --git a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/PangoSharp.dll b/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/PangoSharp.dll deleted file mode 100644 index 5cb34c26c53bac03d58d003e96ca4da28766fb54..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/PangoSharp.dll and /dev/null differ diff --git a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/System.Resources.Extensions.dll b/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/System.Resources.Extensions.dll deleted file mode 100644 index b299d9d0ff10ca1c11a4e565a9d8594f58fa941c..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/System.Resources.Extensions.dll and /dev/null differ diff --git a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/System.Resources.Extensions.pdb b/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/System.Resources.Extensions.pdb deleted file mode 100644 index c41fe38fe5e278a51f6138b191f791ccf3d0acf6..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/bin/Release/netcoreapp3.1/publish/System.Resources.Extensions.pdb and /dev/null differ diff --git a/Samples/GTKWinFormsApp/obj/Debug/GTKWinFormsApp.1.0.0.nuspec b/Samples/GTKWinFormsApp/obj/Debug/GTKWinFormsApp.1.0.0.nuspec deleted file mode 100644 index be57a36b88f38de7ec7a1db6f47cb7bc86db39ea..0000000000000000000000000000000000000000 --- a/Samples/GTKWinFormsApp/obj/Debug/GTKWinFormsApp.1.0.0.nuspec +++ /dev/null @@ -1,19 +0,0 @@ - - - - GTKWinFormsApp - 1.0.0 - GTKWinFormsApp - false - Package Description - - - - - - - - - - - \ No newline at end of file diff --git a/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/GTKWinFormsApp.AssemblyInfoInputs.cache b/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/GTKWinFormsApp.AssemblyInfoInputs.cache deleted file mode 100644 index b37e838eb4eb008246339c1e11712335ea9ab19a..0000000000000000000000000000000000000000 --- a/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/GTKWinFormsApp.AssemblyInfoInputs.cache +++ /dev/null @@ -1 +0,0 @@ -f5f6301b6c0f4ef8e7c5a0bfcc0e0412af4195e1 diff --git a/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/GTKWinFormsApp.Form1.resources b/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/GTKWinFormsApp.Form1.resources deleted file mode 100644 index 9c128e797a670bb38c2dac40ee9ad5505ea909d1..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/GTKWinFormsApp.Form1.resources and /dev/null differ diff --git a/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/GTKWinFormsApp.Properties.Resources.resources b/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/GTKWinFormsApp.Properties.Resources.resources deleted file mode 100644 index 7225e5d01c10c92b8d3417591b5eeff409bfee59..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/GTKWinFormsApp.Properties.Resources.resources and /dev/null differ diff --git a/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/GTKWinFormsApp.assets.cache b/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/GTKWinFormsApp.assets.cache deleted file mode 100644 index 9f45900085467935ae2519e406d1580b25792a3a..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/GTKWinFormsApp.assets.cache and /dev/null differ diff --git a/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/GTKWinFormsApp.csproj.CoreCompileInputs.cache b/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/GTKWinFormsApp.csproj.CoreCompileInputs.cache deleted file mode 100644 index 474cfde1df2b6b5268056014c6e8db98a6c8d0e7..0000000000000000000000000000000000000000 --- a/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/GTKWinFormsApp.csproj.CoreCompileInputs.cache +++ /dev/null @@ -1 +0,0 @@ -09a29dbb2a3bae5b102cdc6c7fbdb001b5dd88d3 diff --git a/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/GTKWinFormsApp.csproj.FileListAbsolute.txt b/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/GTKWinFormsApp.csproj.FileListAbsolute.txt deleted file mode 100644 index 17cf12f9f96fe89bce187346e9dd21ffb37acf80..0000000000000000000000000000000000000000 --- a/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/GTKWinFormsApp.csproj.FileListAbsolute.txt +++ /dev/null @@ -1,110 +0,0 @@ -F:\GTK项目\WindowsFormsApp1\GTKWinFormsApp\obj\Debug\netcoreapp3.1\GTKWinFormsApp.csproj.AssemblyReference.cache -F:\GTK项目\WindowsFormsApp1\GTKWinFormsApp\obj\Debug\netcoreapp3.1\GTKWinFormsApp.csproj.GenerateResource.cache -F:\GTK项目\WindowsFormsApp1\GTKWinFormsApp\obj\Debug\netcoreapp3.1\GTKWinFormsApp.GeneratedMSBuildEditorConfig.editorconfig -F:\GTK项目\WindowsFormsApp1\GTKWinFormsApp\obj\Debug\netcoreapp3.1\GTKWinFormsApp.AssemblyInfoInputs.cache -F:\GTK项目\WindowsFormsApp1\GTKWinFormsApp\obj\Debug\netcoreapp3.1\GTKWinFormsApp.AssemblyInfo.cs -F:\GTK项目\WindowsFormsApp1\GTKWinFormsApp\obj\Debug\netcoreapp3.1\GTKWinFormsApp.csproj.CoreCompileInputs.cache -F:\GTK项目\WindowsFormsApp1\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GTKWinFormsApp.exe -F:\GTK项目\WindowsFormsApp1\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GTKWinFormsApp.deps.json -F:\GTK项目\WindowsFormsApp1\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GTKWinFormsApp.runtimeconfig.json -F:\GTK项目\WindowsFormsApp1\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GTKWinFormsApp.runtimeconfig.dev.json -F:\GTK项目\WindowsFormsApp1\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GTKWinFormsApp.dll -F:\GTK项目\WindowsFormsApp1\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GTKWinFormsApp.pdb -F:\GTK项目\WindowsFormsApp1\GTKWinFormsApp\obj\Debug\netcoreapp3.1\GTKWinFormsApp.Form1.resources -F:\GTK项目\WindowsFormsApp1\GTKWinFormsApp\obj\Debug\netcoreapp3.1\GTKWinFormsApp.dll -F:\GTK项目\WindowsFormsApp1\GTKWinFormsApp\obj\Debug\netcoreapp3.1\GTKWinFormsApp.pdb -F:\GTK项目\WindowsFormsApp1\GTKWinFormsApp\obj\Debug\netcoreapp3.1\GTKWinFormsApp.genruntimeconfig.cache -F:\GTK项目\WindowsFormsApp1\GTKWinFormsApp\bin\Debug\netcoreapp3.1\AtkSharp.dll -F:\GTK项目\WindowsFormsApp1\GTKWinFormsApp\bin\Debug\netcoreapp3.1\CairoSharp.dll -F:\GTK项目\WindowsFormsApp1\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GdkSharp.dll -F:\GTK项目\WindowsFormsApp1\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GioSharp.dll -F:\GTK项目\WindowsFormsApp1\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GLibSharp.dll -F:\GTK项目\WindowsFormsApp1\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GtkSharp.dll -F:\GTK项目\WindowsFormsApp1\GTKWinFormsApp\bin\Debug\netcoreapp3.1\PangoSharp.dll -F:\GTK项目\WindowsFormsApp1\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.dll -F:\GTK项目\WindowsFormsApp1\GTKWinFormsApp\bin\Debug\netcoreapp3.1\System.Resources.Extensions.dll -F:\GTK项目\WindowsFormsApp1\GTKWinFormsApp\bin\Debug\netcoreapp3.1\System.Resources.Extensions.pdb -F:\GTK项目\WindowsFormsApp1\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.pdb -F:\GTK项目\WindowsFormsApp1\GTKWinFormsApp\obj\Debug\netcoreapp3.1\GTKWinFormsApp.csproj.CopyComplete -F:\我的项目\GTK\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GTKWinFormsApp.exe -F:\我的项目\GTK\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GTKWinFormsApp.deps.json -F:\我的项目\GTK\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GTKWinFormsApp.runtimeconfig.json -F:\我的项目\GTK\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GTKWinFormsApp.runtimeconfig.dev.json -F:\我的项目\GTK\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GTKWinFormsApp.dll -F:\我的项目\GTK\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GTKWinFormsApp.pdb -F:\我的项目\GTK\GTKWinFormsApp\bin\Debug\netcoreapp3.1\AtkSharp.dll -F:\我的项目\GTK\GTKWinFormsApp\bin\Debug\netcoreapp3.1\CairoSharp.dll -F:\我的项目\GTK\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GdkSharp.dll -F:\我的项目\GTK\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GioSharp.dll -F:\我的项目\GTK\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GLibSharp.dll -F:\我的项目\GTK\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GtkSharp.dll -F:\我的项目\GTK\GTKWinFormsApp\bin\Debug\netcoreapp3.1\PangoSharp.dll -F:\我的项目\GTK\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.dll -F:\我的项目\GTK\GTKWinFormsApp\bin\Debug\netcoreapp3.1\System.Resources.Extensions.dll -F:\我的项目\GTK\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.pdb -F:\我的项目\GTK\GTKWinFormsApp\bin\Debug\netcoreapp3.1\System.Resources.Extensions.pdb -F:\我的项目\GTK\GTKWinFormsApp\obj\Debug\netcoreapp3.1\GTKWinFormsApp.csprojAssemblyReference.cache -F:\我的项目\GTK\GTKWinFormsApp\obj\Debug\netcoreapp3.1\GTKWinFormsApp.Form1.resources -F:\我的项目\GTK\GTKWinFormsApp\obj\Debug\netcoreapp3.1\GTKWinFormsApp.csproj.GenerateResource.cache -F:\我的项目\GTK\GTKWinFormsApp\obj\Debug\netcoreapp3.1\GTKWinFormsApp.AssemblyInfoInputs.cache -F:\我的项目\GTK\GTKWinFormsApp\obj\Debug\netcoreapp3.1\GTKWinFormsApp.AssemblyInfo.cs -F:\我的项目\GTK\GTKWinFormsApp\obj\Debug\netcoreapp3.1\GTKWinFormsApp.csproj.CoreCompileInputs.cache -F:\我的项目\GTK\GTKWinFormsApp\obj\Debug\netcoreapp3.1\GTKWinFormsApp.csproj.CopyComplete -F:\我的项目\GTK\GTKWinFormsApp\obj\Debug\netcoreapp3.1\GTKWinFormsApp.dll -F:\我的项目\GTK\GTKWinFormsApp\obj\Debug\netcoreapp3.1\GTKWinFormsApp.pdb -F:\我的项目\GTK\GTKWinFormsApp\obj\Debug\netcoreapp3.1\GTKWinFormsApp.genruntimeconfig.cache -F:\我的项目\GTK\GTKWindowsForms\Samples\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GTKWinFormsApp.exe -F:\我的项目\GTK\GTKWindowsForms\Samples\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GTKWinFormsApp.deps.json -F:\我的项目\GTK\GTKWindowsForms\Samples\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GTKWinFormsApp.runtimeconfig.json -F:\我的项目\GTK\GTKWindowsForms\Samples\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GTKWinFormsApp.runtimeconfig.dev.json -F:\我的项目\GTK\GTKWindowsForms\Samples\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GTKWinFormsApp.dll -F:\我的项目\GTK\GTKWindowsForms\Samples\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GTKWinFormsApp.pdb -F:\我的项目\GTK\GTKWindowsForms\Samples\GTKWinFormsApp\bin\Debug\netcoreapp3.1\AtkSharp.dll -F:\我的项目\GTK\GTKWindowsForms\Samples\GTKWinFormsApp\bin\Debug\netcoreapp3.1\CairoSharp.dll -F:\我的项目\GTK\GTKWindowsForms\Samples\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GdkSharp.dll -F:\我的项目\GTK\GTKWindowsForms\Samples\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GioSharp.dll -F:\我的项目\GTK\GTKWindowsForms\Samples\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GLibSharp.dll -F:\我的项目\GTK\GTKWindowsForms\Samples\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GtkSharp.dll -F:\我的项目\GTK\GTKWindowsForms\Samples\GTKWinFormsApp\bin\Debug\netcoreapp3.1\PangoSharp.dll -F:\我的项目\GTK\GTKWindowsForms\Samples\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.dll -F:\我的项目\GTK\GTKWindowsForms\Samples\GTKWinFormsApp\bin\Debug\netcoreapp3.1\System.Resources.Extensions.dll -F:\我的项目\GTK\GTKWindowsForms\Samples\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.pdb -F:\我的项目\GTK\GTKWindowsForms\Samples\GTKWinFormsApp\bin\Debug\netcoreapp3.1\System.Resources.Extensions.pdb -F:\我的项目\GTK\GTKWindowsForms\Samples\GTKWinFormsApp\obj\Debug\netcoreapp3.1\GTKWinFormsApp.Form1.resources -F:\我的项目\GTK\GTKWindowsForms\Samples\GTKWinFormsApp\obj\Debug\netcoreapp3.1\GTKWinFormsApp.csproj.GenerateResource.cache -F:\我的项目\GTK\GTKWindowsForms\Samples\GTKWinFormsApp\obj\Debug\netcoreapp3.1\GTKWinFormsApp.AssemblyInfoInputs.cache -F:\我的项目\GTK\GTKWindowsForms\Samples\GTKWinFormsApp\obj\Debug\netcoreapp3.1\GTKWinFormsApp.AssemblyInfo.cs -F:\我的项目\GTK\GTKWindowsForms\Samples\GTKWinFormsApp\obj\Debug\netcoreapp3.1\GTKWinFormsApp.csproj.CoreCompileInputs.cache -F:\我的项目\GTK\GTKWindowsForms\Samples\GTKWinFormsApp\obj\Debug\netcoreapp3.1\GTKWinFormsApp.csproj.CopyComplete -F:\我的项目\GTK\GTKWindowsForms\Samples\GTKWinFormsApp\obj\Debug\netcoreapp3.1\GTKWinFormsApp.dll -F:\我的项目\GTK\GTKWindowsForms\Samples\GTKWinFormsApp\obj\Debug\netcoreapp3.1\GTKWinFormsApp.pdb -F:\我的项目\GTK\GTKWindowsForms\Samples\GTKWinFormsApp\obj\Debug\netcoreapp3.1\GTKWinFormsApp.genruntimeconfig.cache -F:\我的项目\GTK\GTKWindowsForms\Samples\GTKWinFormsApp\obj\Debug\netcoreapp3.1\GTKWinFormsApp.Properties.Resources.resources -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GTKWinFormsApp.exe -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GTKWinFormsApp.deps.json -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GTKWinFormsApp.runtimeconfig.json -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GTKWinFormsApp.runtimeconfig.dev.json -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GTKWinFormsApp.dll -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GTKWinFormsApp.pdb -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Debug\netcoreapp3.1\AtkSharp.dll -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Debug\netcoreapp3.1\CairoSharp.dll -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GdkSharp.dll -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GioSharp.dll -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GLibSharp.dll -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GtkSharp.dll -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Debug\netcoreapp3.1\PangoSharp.dll -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.dll -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Debug\netcoreapp3.1\System.Resources.Extensions.dll -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.pdb -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Debug\netcoreapp3.1\System.Resources.Extensions.pdb -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\obj\Debug\netcoreapp3.1\GTKWinFormsApp.Form1.resources -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\obj\Debug\netcoreapp3.1\GTKWinFormsApp.Properties.Resources.resources -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\obj\Debug\netcoreapp3.1\GTKWinFormsApp.csproj.GenerateResource.cache -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\obj\Debug\netcoreapp3.1\GTKWinFormsApp.AssemblyInfoInputs.cache -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\obj\Debug\netcoreapp3.1\GTKWinFormsApp.AssemblyInfo.cs -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\obj\Debug\netcoreapp3.1\GTKWinFormsApp.csproj.CoreCompileInputs.cache -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\obj\Debug\netcoreapp3.1\GTKWinFormsApp.csproj.CopyComplete -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\obj\Debug\netcoreapp3.1\GTKWinFormsApp.dll -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\obj\Debug\netcoreapp3.1\GTKWinFormsApp.pdb -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\obj\Debug\netcoreapp3.1\GTKWinFormsApp.genruntimeconfig.cache -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\obj\Debug\netcoreapp3.1\GTKWinFormsApp.csprojAssemblyReference.cache diff --git a/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/GTKWinFormsApp.csproj.GenerateResource.cache b/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/GTKWinFormsApp.csproj.GenerateResource.cache deleted file mode 100644 index 1d68bdf99016363a11bcb78def528078bb56b479..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/GTKWinFormsApp.csproj.GenerateResource.cache and /dev/null differ diff --git a/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/GTKWinFormsApp.csprojAssemblyReference.cache b/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/GTKWinFormsApp.csprojAssemblyReference.cache deleted file mode 100644 index 392b395b63705a4055915d8dc6264a7ebdeb7e86..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/GTKWinFormsApp.csprojAssemblyReference.cache and /dev/null differ diff --git a/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/GTKWinFormsApp.designer.deps.json b/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/GTKWinFormsApp.designer.deps.json deleted file mode 100644 index d2d72175755182870ea25d9e127120645ee66895..0000000000000000000000000000000000000000 --- a/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/GTKWinFormsApp.designer.deps.json +++ /dev/null @@ -1,142 +0,0 @@ -{ - "runtimeTarget": { - "name": ".NETCoreApp,Version=v3.1", - "signature": "" - }, - "compilationOptions": {}, - "targets": { - ".NETCoreApp,Version=v3.1": { - "AtkSharp/3.24.24.34": { - "dependencies": { - "GLibSharp": "3.24.24.34" - }, - "runtime": { - "lib/netstandard2.0/AtkSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "CairoSharp/3.24.24.34": { - "runtime": { - "lib/netstandard2.0/CairoSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "GdkSharp/3.24.24.34": { - "dependencies": { - "CairoSharp": "3.24.24.34", - "GLibSharp": "3.24.24.34", - "GioSharp": "3.24.24.34", - "PangoSharp": "3.24.24.34" - }, - "runtime": { - "lib/netstandard2.0/GdkSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "GioSharp/3.24.24.34": { - "dependencies": { - "GLibSharp": "3.24.24.34" - }, - "runtime": { - "lib/netstandard2.0/GioSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "GLibSharp/3.24.24.34": { - "runtime": { - "lib/netstandard2.0/GLibSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "GtkSharp/3.24.24.34": { - "dependencies": { - "AtkSharp": "3.24.24.34", - "CairoSharp": "3.24.24.34", - "GLibSharp": "3.24.24.34", - "GdkSharp": "3.24.24.34", - "GioSharp": "3.24.24.34", - "PangoSharp": "3.24.24.34" - }, - "runtime": { - "lib/netstandard2.0/GtkSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "PangoSharp/3.24.24.34": { - "dependencies": { - "CairoSharp": "3.24.24.34", - "GLibSharp": "3.24.24.34" - }, - "runtime": { - "lib/netstandard2.0/PangoSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - } - } - }, - "libraries": { - "AtkSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-CNfTGhGDxcnow5e/u0THtOJeNWaZNDeeFmzYTMdC1tdUkmAtTFDareTGesLx+Gfj75m3415AKJSC9wQ6VyacYQ==", - "path": "atksharp/3.24.24.34", - "hashPath": "atksharp.3.24.24.34.nupkg.sha512" - }, - "CairoSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-hr75uYPGFlmB3RvpL3/6ZJtb+UiKsrpkyjb5VGI+8y1/lkY405FMBhPZKlxFqoEH0iIZ9gAMPBqKzT1lSVaDqA==", - "path": "cairosharp/3.24.24.34", - "hashPath": "cairosharp.3.24.24.34.nupkg.sha512" - }, - "GdkSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-COORB6Qd4yu6HWRbzVZXrkzr1T96Gy0wO7ckJfpYxWLbDUDnZVd/g2PICp9T05a0ZvLvkE++vsSjAWobwQeS0g==", - "path": "gdksharp/3.24.24.34", - "hashPath": "gdksharp.3.24.24.34.nupkg.sha512" - }, - "GioSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-Qyz8bhKjLMTWoxXu6cdNEtTLNUuw7Y1sPdXlyTfyWMP/JmsUE9smCsCC0kyQNSFW17flxdSoeDpG8l6zzJF0vQ==", - "path": "giosharp/3.24.24.34", - "hashPath": "giosharp.3.24.24.34.nupkg.sha512" - }, - "GLibSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-PSA7YJbxpnpeltjekoUk93FI9HWUMc2NtkxNIaWzHz7BavkkZDFmx8EKTKtuBrqbZZmEhlv5472NwGdiycSfxw==", - "path": "glibsharp/3.24.24.34", - "hashPath": "glibsharp.3.24.24.34.nupkg.sha512" - }, - "GtkSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-CVAz7ACMxW9xPhlrrg4Xe+v3jUnpN+emQl78aaXHtoiE7pf0tR8mP8mw0/eBHxMObrmg6DsLxbEFqE/7Yo4Uow==", - "path": "gtksharp/3.24.24.34", - "hashPath": "gtksharp.3.24.24.34.nupkg.sha512" - }, - "PangoSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-QpBEIiE29sxkewdW7l7rVRJR1p3SGoPauHrjm0A3yxpYxj+St5x45weHI8jquMJAZBUdVQuXYHSZDW1lQeJ+PQ==", - "path": "pangosharp/3.24.24.34", - "hashPath": "pangosharp.3.24.24.34.nupkg.sha512" - } - } -} \ No newline at end of file diff --git a/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/GTKWinFormsApp.dll b/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/GTKWinFormsApp.dll deleted file mode 100644 index c4f60e9f1ead85be638be2a2ef143f4b9a9d5162..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/GTKWinFormsApp.dll and /dev/null differ diff --git a/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/GTKWinFormsApp.genruntimeconfig.cache b/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/GTKWinFormsApp.genruntimeconfig.cache deleted file mode 100644 index 3ffab02190ee5126800ecc56f6c15718d3af5256..0000000000000000000000000000000000000000 --- a/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/GTKWinFormsApp.genruntimeconfig.cache +++ /dev/null @@ -1 +0,0 @@ -b80a60b18a782450ed1334d1ae19fba3de453db6 diff --git a/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/GTKWinFormsApp.pdb b/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/GTKWinFormsApp.pdb deleted file mode 100644 index 19c8985cbd6236eafd79c5c11dbe6b59bcd912dd..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/GTKWinFormsApp.pdb and /dev/null differ diff --git a/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/TempPE/Properties.Resources.Designer.cs.dll b/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/TempPE/Properties.Resources.Designer.cs.dll deleted file mode 100644 index e9a1f2ef111bd81bcec3e26ed493627f7ae450fd..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/TempPE/Properties.Resources.Designer.cs.dll and /dev/null differ diff --git a/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/apphost.exe b/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/apphost.exe deleted file mode 100644 index bae8a873033bbd61761568102c0257154222eb70..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/apphost.exe and /dev/null differ diff --git a/Samples/GTKWinFormsApp/obj/GTKWinFormsApp.csproj.nuget.dgspec.json b/Samples/GTKWinFormsApp/obj/GTKWinFormsApp.csproj.nuget.dgspec.json index d27385f334e51b021ff41ad88ac347a86e3a4f92..6c26bd29fb96a716a3d2f93fc3dec3f1bbcbb539 100644 --- a/Samples/GTKWinFormsApp/obj/GTKWinFormsApp.csproj.nuget.dgspec.json +++ b/Samples/GTKWinFormsApp/obj/GTKWinFormsApp.csproj.nuget.dgspec.json @@ -14,16 +14,100 @@ "outputPath": "F:\\我的项目\\GTK\\gtksystem-windows-forms\\Samples\\GTKWinFormsApp\\obj\\", "projectStyle": "PackageReference", "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages", "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder" ], "configFilePaths": [ "C:\\Users\\chj\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" ], "originalTargetFrameworks": [ + "net8.0" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "C:\\Users\\chj\\.nuget\\packages": {}, + "https://api.nuget.org/v3/index.json": {}, + "https://www.nuget.org/api/v2/": {} + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "projectReferences": { + "F:\\我的项目\\GTK\\gtksystem-windows-forms\\Source\\GTKSystem.Windows.Forms\\GTKSystem.Windows.Forms.csproj": { + "projectPath": "F:\\我的项目\\GTK\\gtksystem-windows-forms\\Source\\GTKSystem.Windows.Forms\\GTKSystem.Windows.Forms.csproj" + } + } + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + } + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "dependencies": { + "GTKSystem.Windows.FormsDesigner": { + "target": "Package", + "version": "[1.0.0.4, )" + }, + "GtkSharp": { + "target": "Package", + "version": "[3.24.24.95, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.100/PortableRuntimeIdentifierGraph.json" + } + } + }, + "F:\\我的项目\\GTK\\gtksystem-windows-forms\\Source\\GTKSystem.Windows.Forms\\GTKSystem.Windows.Forms.csproj": { + "version": "1.3.24.23", + "restore": { + "projectUniqueName": "F:\\我的项目\\GTK\\gtksystem-windows-forms\\Source\\GTKSystem.Windows.Forms\\GTKSystem.Windows.Forms.csproj", + "projectName": "GTKSystem.Windows.Forms", + "projectPath": "F:\\我的项目\\GTK\\gtksystem-windows-forms\\Source\\GTKSystem.Windows.Forms\\GTKSystem.Windows.Forms.csproj", + "packagesPath": "C:\\Users\\chj\\.nuget\\packages\\", + "outputPath": "F:\\我的项目\\GTK\\gtksystem-windows-forms\\Source\\GTKSystem.Windows.Forms\\obj\\", + "projectStyle": "PackageReference", + "crossTargeting": true, + "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages", + "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder" + ], + "configFilePaths": [ + "C:\\Users\\chj\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net6.0", + "net7.0", + "net8.0", "netcoreapp3.1" ], "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "C:\\Users\\chj\\.nuget\\packages": {}, "https://api.nuget.org/v3/index.json": {}, "https://www.nuget.org/api/v2/": {} }, @@ -31,6 +115,18 @@ "netcoreapp3.1": { "targetAlias": "netcoreapp3.1", "projectReferences": {} + }, + "net6.0": { + "targetAlias": "net6.0", + "projectReferences": {} + }, + "net7.0": { + "targetAlias": "net7.0", + "projectReferences": {} + }, + "net8.0": { + "targetAlias": "net8.0", + "projectReferences": {} } }, "warningProperties": { @@ -45,7 +141,171 @@ "dependencies": { "GtkSharp": { "target": "Package", - "version": "[3.24.24.34, )" + "version": "[3.24.24.95, )" + }, + "Microsoft.NET.ILLink.Analyzers": { + "suppressParent": "All", + "target": "Package", + "version": "[7.0.100-1.23211.1, )", + "autoReferenced": true + }, + "Microsoft.NET.ILLink.Tasks": { + "suppressParent": "All", + "target": "Package", + "version": "[7.0.100-1.23211.1, )", + "autoReferenced": true + }, + "System.Resources.Extensions": { + "target": "Package", + "version": "[8.0.0, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.100\\RuntimeIdentifierGraph.json" + }, + "net6.0": { + "targetAlias": "net6.0", + "dependencies": { + "GtkSharp": { + "target": "Package", + "version": "[3.24.24.95, )" + }, + "Microsoft.NET.ILLink.Analyzers": { + "suppressParent": "All", + "target": "Package", + "version": "[7.0.100-1.23211.1, )", + "autoReferenced": true + }, + "Microsoft.NET.ILLink.Tasks": { + "suppressParent": "All", + "target": "Package", + "version": "[7.0.100-1.23211.1, )", + "autoReferenced": true + }, + "System.Resources.Extensions": { + "target": "Package", + "version": "[8.0.0, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "downloadDependencies": [ + { + "name": "Microsoft.AspNetCore.App.Ref", + "version": "[6.0.25, 6.0.25]" + }, + { + "name": "Microsoft.NETCore.App.Ref", + "version": "[6.0.25, 6.0.25]" + }, + { + "name": "Microsoft.WindowsDesktop.App.Ref", + "version": "[6.0.25, 6.0.25]" + } + ], + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.100\\RuntimeIdentifierGraph.json" + }, + "net7.0": { + "targetAlias": "net7.0", + "dependencies": { + "GtkSharp": { + "target": "Package", + "version": "[3.24.24.95, )" + }, + "Microsoft.NET.ILLink.Analyzers": { + "suppressParent": "All", + "target": "Package", + "version": "[7.0.100-1.23211.1, )", + "autoReferenced": true + }, + "Microsoft.NET.ILLink.Tasks": { + "suppressParent": "All", + "target": "Package", + "version": "[7.0.100-1.23211.1, )", + "autoReferenced": true + }, + "System.Resources.Extensions": { + "target": "Package", + "version": "[8.0.0, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "downloadDependencies": [ + { + "name": "Microsoft.AspNetCore.App.Ref", + "version": "[7.0.14, 7.0.14]" + }, + { + "name": "Microsoft.NETCore.App.Ref", + "version": "[7.0.14, 7.0.14]" + }, + { + "name": "Microsoft.WindowsDesktop.App.Ref", + "version": "[7.0.14, 7.0.14]" + } + ], + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.100\\RuntimeIdentifierGraph.json" + }, + "net8.0": { + "targetAlias": "net8.0", + "dependencies": { + "GtkSharp": { + "target": "Package", + "version": "[3.24.24.95, )" + }, + "Microsoft.NET.ILLink.Tasks": { + "suppressParent": "All", + "target": "Package", + "version": "[8.0.0, )", + "autoReferenced": true + }, + "System.Resources.Extensions": { + "target": "Package", + "version": "[8.0.0, )" } }, "imports": [ @@ -54,7 +314,8 @@ "net47", "net471", "net472", - "net48" + "net48", + "net481" ], "assetTargetFallback": true, "warn": true, @@ -63,7 +324,7 @@ "privateAssets": "all" } }, - "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\5.0.203\\RuntimeIdentifierGraph.json" + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.100/PortableRuntimeIdentifierGraph.json" } } } diff --git a/Samples/GTKWinFormsApp/obj/GTKWinFormsApp.csproj.nuget.g.props b/Samples/GTKWinFormsApp/obj/GTKWinFormsApp.csproj.nuget.g.props index dcc4c3f5c5d34053a37b465e53d2585fe328b5a5..5b855816d7068177b047f974b330db663ccfd261 100644 --- a/Samples/GTKWinFormsApp/obj/GTKWinFormsApp.csproj.nuget.g.props +++ b/Samples/GTKWinFormsApp/obj/GTKWinFormsApp.csproj.nuget.g.props @@ -5,14 +5,16 @@ NuGet $(MSBuildThisFileDirectory)project.assets.json $(UserProfile)\.nuget\packages\ - C:\Users\chj\.nuget\packages\;C:\Program Files\dotnet\sdk\NuGetFallbackFolder + C:\Users\chj\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages;C:\Program Files\dotnet\sdk\NuGetFallbackFolder PackageReference - 5.8.1 + 6.8.0
- + + + - - $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - + + +
\ No newline at end of file diff --git a/Samples/GTKWinFormsApp/obj/GTKWinFormsApp.csproj.nuget.g.targets b/Samples/GTKWinFormsApp/obj/GTKWinFormsApp.csproj.nuget.g.targets index 4fc8c64b6358bce89c7ecb5d319d7933c17506f8..2577c2c4b2353615332374ad0d2c7784a49be84a 100644 --- a/Samples/GTKWinFormsApp/obj/GTKWinFormsApp.csproj.nuget.g.targets +++ b/Samples/GTKWinFormsApp/obj/GTKWinFormsApp.csproj.nuget.g.targets @@ -1,9 +1,7 @@  - - $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - - + + \ No newline at end of file diff --git a/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/.NETCoreApp,Version=v3.1.AssemblyAttributes.cs b/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/.NETCoreApp,Version=v3.1.AssemblyAttributes.cs deleted file mode 100644 index ad8dfe1a6310302587a2d0c0111d81b250eb4105..0000000000000000000000000000000000000000 --- a/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/.NETCoreApp,Version=v3.1.AssemblyAttributes.cs +++ /dev/null @@ -1,4 +0,0 @@ -// -using System; -using System.Reflection; -[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v3.1", FrameworkDisplayName = "")] diff --git a/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.AssemblyInfoInputs.cache b/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.AssemblyInfoInputs.cache deleted file mode 100644 index 615091f2bed6b20bc3f1398cc26c6d62a1b9264c..0000000000000000000000000000000000000000 --- a/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.AssemblyInfoInputs.cache +++ /dev/null @@ -1 +0,0 @@ -24990433b24c5e00b2ebe599c6e03dfa81bf9976 diff --git a/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.Form1.resources b/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.Form1.resources deleted file mode 100644 index 87b03884751ec06d34b68f5da91619fc930b15df..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.Form1.resources and /dev/null differ diff --git a/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.GeneratedMSBuildEditorConfig.editorconfig b/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.GeneratedMSBuildEditorConfig.editorconfig deleted file mode 100644 index 9912f1abbacb8997775ccdea1f659aff8a765f3d..0000000000000000000000000000000000000000 --- a/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.GeneratedMSBuildEditorConfig.editorconfig +++ /dev/null @@ -1,3 +0,0 @@ -is_global = true -build_property.RootNamespace = GTKWinFormsApp -build_property.ProjectDir = F:\GTK项目\GTKWinFormsDemo\GTKWinFormsApp\ diff --git a/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.Properties.Resources.resources b/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.Properties.Resources.resources deleted file mode 100644 index 7225e5d01c10c92b8d3417591b5eeff409bfee59..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.Properties.Resources.resources and /dev/null differ diff --git a/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.assets.cache b/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.assets.cache deleted file mode 100644 index 1b68d809e13762bda2b62b62c58b4278287cc26f..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.assets.cache and /dev/null differ diff --git a/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.csproj.AssemblyReference.cache b/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.csproj.AssemblyReference.cache deleted file mode 100644 index 36ec47a9cbea78ebb950e65a49e6e24ea8adec2d..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.csproj.AssemblyReference.cache and /dev/null differ diff --git a/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.csproj.CopyComplete b/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.csproj.CopyComplete deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.csproj.CoreCompileInputs.cache b/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.csproj.CoreCompileInputs.cache deleted file mode 100644 index db6d9eab0286c5b15ddadfb33e8f57d9f20254ca..0000000000000000000000000000000000000000 --- a/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.csproj.CoreCompileInputs.cache +++ /dev/null @@ -1 +0,0 @@ -f8f8ffab567a165c0e74c3cfa7d5221ad0b7bc40 diff --git a/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.csproj.FileListAbsolute.txt b/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.csproj.FileListAbsolute.txt deleted file mode 100644 index 506f944692586fc5b689b134563c7306c1823372..0000000000000000000000000000000000000000 --- a/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.csproj.FileListAbsolute.txt +++ /dev/null @@ -1,83 +0,0 @@ -F:\GTK项目\GTKWinFormsDemo\GTKWinFormsApp\bin\Release\netcoreapp3.1\GTKWinFormsApp.exe -F:\GTK项目\GTKWinFormsDemo\GTKWinFormsApp\bin\Release\netcoreapp3.1\GTKWinFormsApp.deps.json -F:\GTK项目\GTKWinFormsDemo\GTKWinFormsApp\bin\Release\netcoreapp3.1\GTKWinFormsApp.runtimeconfig.json -F:\GTK项目\GTKWinFormsDemo\GTKWinFormsApp\bin\Release\netcoreapp3.1\GTKWinFormsApp.runtimeconfig.dev.json -F:\GTK项目\GTKWinFormsDemo\GTKWinFormsApp\bin\Release\netcoreapp3.1\GTKWinFormsApp.dll -F:\GTK项目\GTKWinFormsDemo\GTKWinFormsApp\bin\Release\netcoreapp3.1\GTKWinFormsApp.pdb -F:\GTK项目\GTKWinFormsDemo\GTKWinFormsApp\bin\Release\netcoreapp3.1\AtkSharp.dll -F:\GTK项目\GTKWinFormsDemo\GTKWinFormsApp\bin\Release\netcoreapp3.1\CairoSharp.dll -F:\GTK项目\GTKWinFormsDemo\GTKWinFormsApp\bin\Release\netcoreapp3.1\GdkSharp.dll -F:\GTK项目\GTKWinFormsDemo\GTKWinFormsApp\bin\Release\netcoreapp3.1\GioSharp.dll -F:\GTK项目\GTKWinFormsDemo\GTKWinFormsApp\bin\Release\netcoreapp3.1\GLibSharp.dll -F:\GTK项目\GTKWinFormsDemo\GTKWinFormsApp\bin\Release\netcoreapp3.1\GtkSharp.dll -F:\GTK项目\GTKWinFormsDemo\GTKWinFormsApp\bin\Release\netcoreapp3.1\PangoSharp.dll -F:\GTK项目\GTKWinFormsDemo\GTKWinFormsApp\bin\Release\netcoreapp3.1\GTKSystem.Windows.Forms.dll -F:\GTK项目\GTKWinFormsDemo\GTKWinFormsApp\bin\Release\netcoreapp3.1\System.Resources.Extensions.dll -F:\GTK项目\GTKWinFormsDemo\GTKWinFormsApp\bin\Release\netcoreapp3.1\GTKSystem.Windows.Forms.pdb -F:\GTK项目\GTKWinFormsDemo\GTKWinFormsApp\bin\Release\netcoreapp3.1\System.Resources.Extensions.pdb -F:\GTK项目\GTKWinFormsDemo\GTKWinFormsApp\obj\Release\netcoreapp3.1\GTKWinFormsApp.csproj.AssemblyReference.cache -F:\GTK项目\GTKWinFormsDemo\GTKWinFormsApp\obj\Release\netcoreapp3.1\GTKWinFormsApp.Form1.resources -F:\GTK项目\GTKWinFormsDemo\GTKWinFormsApp\obj\Release\netcoreapp3.1\GTKWinFormsApp.csproj.GenerateResource.cache -F:\GTK项目\GTKWinFormsDemo\GTKWinFormsApp\obj\Release\netcoreapp3.1\GTKWinFormsApp.GeneratedMSBuildEditorConfig.editorconfig -F:\GTK项目\GTKWinFormsDemo\GTKWinFormsApp\obj\Release\netcoreapp3.1\GTKWinFormsApp.AssemblyInfoInputs.cache -F:\GTK项目\GTKWinFormsDemo\GTKWinFormsApp\obj\Release\netcoreapp3.1\GTKWinFormsApp.AssemblyInfo.cs -F:\GTK项目\GTKWinFormsDemo\GTKWinFormsApp\obj\Release\netcoreapp3.1\GTKWinFormsApp.csproj.CoreCompileInputs.cache -F:\GTK项目\GTKWinFormsDemo\GTKWinFormsApp\obj\Release\netcoreapp3.1\GTKWinFormsApp.csproj.CopyComplete -F:\GTK项目\GTKWinFormsDemo\GTKWinFormsApp\obj\Release\netcoreapp3.1\GTKWinFormsApp.dll -F:\GTK项目\GTKWinFormsDemo\GTKWinFormsApp\obj\Release\netcoreapp3.1\GTKWinFormsApp.pdb -F:\GTK项目\GTKWinFormsDemo\GTKWinFormsApp\obj\Release\netcoreapp3.1\GTKWinFormsApp.genruntimeconfig.cache -F:\我的项目\GTK\GTKWinFormsApp\bin\Release\netcoreapp3.1\GTKWinFormsApp.exe -F:\我的项目\GTK\GTKWinFormsApp\bin\Release\netcoreapp3.1\GTKWinFormsApp.deps.json -F:\我的项目\GTK\GTKWinFormsApp\bin\Release\netcoreapp3.1\GTKWinFormsApp.runtimeconfig.json -F:\我的项目\GTK\GTKWinFormsApp\bin\Release\netcoreapp3.1\GTKWinFormsApp.runtimeconfig.dev.json -F:\我的项目\GTK\GTKWinFormsApp\bin\Release\netcoreapp3.1\GTKWinFormsApp.dll -F:\我的项目\GTK\GTKWinFormsApp\bin\Release\netcoreapp3.1\GTKWinFormsApp.pdb -F:\我的项目\GTK\GTKWinFormsApp\bin\Release\netcoreapp3.1\AtkSharp.dll -F:\我的项目\GTK\GTKWinFormsApp\bin\Release\netcoreapp3.1\CairoSharp.dll -F:\我的项目\GTK\GTKWinFormsApp\bin\Release\netcoreapp3.1\GdkSharp.dll -F:\我的项目\GTK\GTKWinFormsApp\bin\Release\netcoreapp3.1\GioSharp.dll -F:\我的项目\GTK\GTKWinFormsApp\bin\Release\netcoreapp3.1\GLibSharp.dll -F:\我的项目\GTK\GTKWinFormsApp\bin\Release\netcoreapp3.1\GtkSharp.dll -F:\我的项目\GTK\GTKWinFormsApp\bin\Release\netcoreapp3.1\PangoSharp.dll -F:\我的项目\GTK\GTKWinFormsApp\bin\Release\netcoreapp3.1\GTKSystem.Windows.Forms.dll -F:\我的项目\GTK\GTKWinFormsApp\bin\Release\netcoreapp3.1\System.Resources.Extensions.dll -F:\我的项目\GTK\GTKWinFormsApp\bin\Release\netcoreapp3.1\GTKSystem.Windows.Forms.pdb -F:\我的项目\GTK\GTKWinFormsApp\bin\Release\netcoreapp3.1\System.Resources.Extensions.pdb -F:\我的项目\GTK\GTKWinFormsApp\obj\Release\netcoreapp3.1\GTKWinFormsApp.csprojAssemblyReference.cache -F:\我的项目\GTK\GTKWinFormsApp\obj\Release\netcoreapp3.1\GTKWinFormsApp.Form1.resources -F:\我的项目\GTK\GTKWinFormsApp\obj\Release\netcoreapp3.1\GTKWinFormsApp.csproj.GenerateResource.cache -F:\我的项目\GTK\GTKWinFormsApp\obj\Release\netcoreapp3.1\GTKWinFormsApp.AssemblyInfoInputs.cache -F:\我的项目\GTK\GTKWinFormsApp\obj\Release\netcoreapp3.1\GTKWinFormsApp.AssemblyInfo.cs -F:\我的项目\GTK\GTKWinFormsApp\obj\Release\netcoreapp3.1\GTKWinFormsApp.csproj.CoreCompileInputs.cache -F:\我的项目\GTK\GTKWinFormsApp\obj\Release\netcoreapp3.1\GTKWinFormsApp.csproj.CopyComplete -F:\我的项目\GTK\GTKWinFormsApp\obj\Release\netcoreapp3.1\GTKWinFormsApp.dll -F:\我的项目\GTK\GTKWinFormsApp\obj\Release\netcoreapp3.1\GTKWinFormsApp.pdb -F:\我的项目\GTK\GTKWinFormsApp\obj\Release\netcoreapp3.1\GTKWinFormsApp.genruntimeconfig.cache -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Release\netcoreapp3.1\GTKWinFormsApp.exe -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Release\netcoreapp3.1\GTKWinFormsApp.deps.json -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Release\netcoreapp3.1\GTKWinFormsApp.runtimeconfig.json -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Release\netcoreapp3.1\GTKWinFormsApp.runtimeconfig.dev.json -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Release\netcoreapp3.1\GTKWinFormsApp.dll -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Release\netcoreapp3.1\GTKWinFormsApp.pdb -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Release\netcoreapp3.1\AtkSharp.dll -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Release\netcoreapp3.1\CairoSharp.dll -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Release\netcoreapp3.1\GdkSharp.dll -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Release\netcoreapp3.1\GioSharp.dll -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Release\netcoreapp3.1\GLibSharp.dll -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Release\netcoreapp3.1\GtkSharp.dll -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Release\netcoreapp3.1\PangoSharp.dll -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Release\netcoreapp3.1\GTKSystem.Windows.Forms.dll -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Release\netcoreapp3.1\System.Resources.Extensions.dll -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Release\netcoreapp3.1\GTKSystem.Windows.Forms.pdb -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Release\netcoreapp3.1\System.Resources.Extensions.pdb -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\obj\Release\netcoreapp3.1\GTKWinFormsApp.csprojAssemblyReference.cache -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\obj\Release\netcoreapp3.1\GTKWinFormsApp.Form1.resources -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\obj\Release\netcoreapp3.1\GTKWinFormsApp.Properties.Resources.resources -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\obj\Release\netcoreapp3.1\GTKWinFormsApp.csproj.GenerateResource.cache -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\obj\Release\netcoreapp3.1\GTKWinFormsApp.AssemblyInfoInputs.cache -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\obj\Release\netcoreapp3.1\GTKWinFormsApp.AssemblyInfo.cs -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\obj\Release\netcoreapp3.1\GTKWinFormsApp.csproj.CoreCompileInputs.cache -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\obj\Release\netcoreapp3.1\GTKWinFormsApp.csproj.CopyComplete -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\obj\Release\netcoreapp3.1\GTKWinFormsApp.dll -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\obj\Release\netcoreapp3.1\GTKWinFormsApp.pdb -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\obj\Release\netcoreapp3.1\GTKWinFormsApp.genruntimeconfig.cache diff --git a/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.csproj.GenerateResource.cache b/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.csproj.GenerateResource.cache deleted file mode 100644 index 131dd0b4ccdcc7641a280d3ee3ed33ab6af9f692..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.csproj.GenerateResource.cache and /dev/null differ diff --git a/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.csprojAssemblyReference.cache b/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.csprojAssemblyReference.cache deleted file mode 100644 index cc01addab03e94ce27848cd92857bdd8b101f6fb..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.csprojAssemblyReference.cache and /dev/null differ diff --git a/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.designer.deps.json b/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.designer.deps.json deleted file mode 100644 index d2d72175755182870ea25d9e127120645ee66895..0000000000000000000000000000000000000000 --- a/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.designer.deps.json +++ /dev/null @@ -1,142 +0,0 @@ -{ - "runtimeTarget": { - "name": ".NETCoreApp,Version=v3.1", - "signature": "" - }, - "compilationOptions": {}, - "targets": { - ".NETCoreApp,Version=v3.1": { - "AtkSharp/3.24.24.34": { - "dependencies": { - "GLibSharp": "3.24.24.34" - }, - "runtime": { - "lib/netstandard2.0/AtkSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "CairoSharp/3.24.24.34": { - "runtime": { - "lib/netstandard2.0/CairoSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "GdkSharp/3.24.24.34": { - "dependencies": { - "CairoSharp": "3.24.24.34", - "GLibSharp": "3.24.24.34", - "GioSharp": "3.24.24.34", - "PangoSharp": "3.24.24.34" - }, - "runtime": { - "lib/netstandard2.0/GdkSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "GioSharp/3.24.24.34": { - "dependencies": { - "GLibSharp": "3.24.24.34" - }, - "runtime": { - "lib/netstandard2.0/GioSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "GLibSharp/3.24.24.34": { - "runtime": { - "lib/netstandard2.0/GLibSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "GtkSharp/3.24.24.34": { - "dependencies": { - "AtkSharp": "3.24.24.34", - "CairoSharp": "3.24.24.34", - "GLibSharp": "3.24.24.34", - "GdkSharp": "3.24.24.34", - "GioSharp": "3.24.24.34", - "PangoSharp": "3.24.24.34" - }, - "runtime": { - "lib/netstandard2.0/GtkSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "PangoSharp/3.24.24.34": { - "dependencies": { - "CairoSharp": "3.24.24.34", - "GLibSharp": "3.24.24.34" - }, - "runtime": { - "lib/netstandard2.0/PangoSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - } - } - }, - "libraries": { - "AtkSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-CNfTGhGDxcnow5e/u0THtOJeNWaZNDeeFmzYTMdC1tdUkmAtTFDareTGesLx+Gfj75m3415AKJSC9wQ6VyacYQ==", - "path": "atksharp/3.24.24.34", - "hashPath": "atksharp.3.24.24.34.nupkg.sha512" - }, - "CairoSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-hr75uYPGFlmB3RvpL3/6ZJtb+UiKsrpkyjb5VGI+8y1/lkY405FMBhPZKlxFqoEH0iIZ9gAMPBqKzT1lSVaDqA==", - "path": "cairosharp/3.24.24.34", - "hashPath": "cairosharp.3.24.24.34.nupkg.sha512" - }, - "GdkSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-COORB6Qd4yu6HWRbzVZXrkzr1T96Gy0wO7ckJfpYxWLbDUDnZVd/g2PICp9T05a0ZvLvkE++vsSjAWobwQeS0g==", - "path": "gdksharp/3.24.24.34", - "hashPath": "gdksharp.3.24.24.34.nupkg.sha512" - }, - "GioSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-Qyz8bhKjLMTWoxXu6cdNEtTLNUuw7Y1sPdXlyTfyWMP/JmsUE9smCsCC0kyQNSFW17flxdSoeDpG8l6zzJF0vQ==", - "path": "giosharp/3.24.24.34", - "hashPath": "giosharp.3.24.24.34.nupkg.sha512" - }, - "GLibSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-PSA7YJbxpnpeltjekoUk93FI9HWUMc2NtkxNIaWzHz7BavkkZDFmx8EKTKtuBrqbZZmEhlv5472NwGdiycSfxw==", - "path": "glibsharp/3.24.24.34", - "hashPath": "glibsharp.3.24.24.34.nupkg.sha512" - }, - "GtkSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-CVAz7ACMxW9xPhlrrg4Xe+v3jUnpN+emQl78aaXHtoiE7pf0tR8mP8mw0/eBHxMObrmg6DsLxbEFqE/7Yo4Uow==", - "path": "gtksharp/3.24.24.34", - "hashPath": "gtksharp.3.24.24.34.nupkg.sha512" - }, - "PangoSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-QpBEIiE29sxkewdW7l7rVRJR1p3SGoPauHrjm0A3yxpYxj+St5x45weHI8jquMJAZBUdVQuXYHSZDW1lQeJ+PQ==", - "path": "pangosharp/3.24.24.34", - "hashPath": "pangosharp.3.24.24.34.nupkg.sha512" - } - } -} \ No newline at end of file diff --git a/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.dll b/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.dll deleted file mode 100644 index 3042256da004a721e1b1ef624d6083a0994ebbed..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.dll and /dev/null differ diff --git a/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.genruntimeconfig.cache b/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.genruntimeconfig.cache deleted file mode 100644 index 3ffab02190ee5126800ecc56f6c15718d3af5256..0000000000000000000000000000000000000000 --- a/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.genruntimeconfig.cache +++ /dev/null @@ -1 +0,0 @@ -b80a60b18a782450ed1334d1ae19fba3de453db6 diff --git a/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.pdb b/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.pdb deleted file mode 100644 index e87498eb6302f21a708af33285e85f08220613f2..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.pdb and /dev/null differ diff --git a/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/PublishOutputs.283a1c2962.txt b/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/PublishOutputs.283a1c2962.txt deleted file mode 100644 index a58b190fdfea301f516de6a5a494497be63823a5..0000000000000000000000000000000000000000 --- a/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/PublishOutputs.283a1c2962.txt +++ /dev/null @@ -1,16 +0,0 @@ -F:\GTK项目\GTKWinFormsDemo\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\GTKWinFormsApp.exe -F:\GTK项目\GTKWinFormsDemo\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\GTKWinFormsApp.dll -F:\GTK项目\GTKWinFormsDemo\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\GTKWinFormsApp.deps.json -F:\GTK项目\GTKWinFormsDemo\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\GTKWinFormsApp.runtimeconfig.json -F:\GTK项目\GTKWinFormsDemo\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\GTKWinFormsApp.pdb -F:\GTK项目\GTKWinFormsDemo\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\AtkSharp.dll -F:\GTK项目\GTKWinFormsDemo\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\CairoSharp.dll -F:\GTK项目\GTKWinFormsDemo\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\GdkSharp.dll -F:\GTK项目\GTKWinFormsDemo\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\GioSharp.dll -F:\GTK项目\GTKWinFormsDemo\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\GLibSharp.dll -F:\GTK项目\GTKWinFormsDemo\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\GtkSharp.dll -F:\GTK项目\GTKWinFormsDemo\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\PangoSharp.dll -F:\GTK项目\GTKWinFormsDemo\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\GTKSystem.Windows.Forms.dll -F:\GTK项目\GTKWinFormsDemo\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\System.Resources.Extensions.dll -F:\GTK项目\GTKWinFormsDemo\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\GTKSystem.Windows.Forms.pdb -F:\GTK项目\GTKWinFormsDemo\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\System.Resources.Extensions.pdb diff --git a/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/PublishOutputs.374bc26860.txt b/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/PublishOutputs.374bc26860.txt deleted file mode 100644 index 751b115ecc695c71cf7dbf5edbb6aa72b704af9d..0000000000000000000000000000000000000000 --- a/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/PublishOutputs.374bc26860.txt +++ /dev/null @@ -1,16 +0,0 @@ -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\GTKWinFormsApp.exe -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\GTKWinFormsApp.dll -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\GTKWinFormsApp.deps.json -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\GTKWinFormsApp.runtimeconfig.json -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\GTKWinFormsApp.pdb -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\AtkSharp.dll -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\CairoSharp.dll -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\GdkSharp.dll -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\GioSharp.dll -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\GLibSharp.dll -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\GtkSharp.dll -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\PangoSharp.dll -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\GTKSystem.Windows.Forms.dll -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\System.Resources.Extensions.dll -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\GTKSystem.Windows.Forms.pdb -F:\我的项目\GTK\gtksystem-windows-forms\Samples\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\System.Resources.Extensions.pdb diff --git a/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/PublishOutputs.4f21ecd37c.txt b/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/PublishOutputs.4f21ecd37c.txt deleted file mode 100644 index 7c60bba5a8e57302c8513a86c0004b5307c594fa..0000000000000000000000000000000000000000 --- a/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/PublishOutputs.4f21ecd37c.txt +++ /dev/null @@ -1,16 +0,0 @@ -F:\我的项目\GTK\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\GTKWinFormsApp.exe -F:\我的项目\GTK\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\GTKWinFormsApp.dll -F:\我的项目\GTK\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\GTKWinFormsApp.deps.json -F:\我的项目\GTK\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\GTKWinFormsApp.runtimeconfig.json -F:\我的项目\GTK\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\GTKWinFormsApp.pdb -F:\我的项目\GTK\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\AtkSharp.dll -F:\我的项目\GTK\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\CairoSharp.dll -F:\我的项目\GTK\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\GdkSharp.dll -F:\我的项目\GTK\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\GioSharp.dll -F:\我的项目\GTK\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\GLibSharp.dll -F:\我的项目\GTK\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\GtkSharp.dll -F:\我的项目\GTK\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\PangoSharp.dll -F:\我的项目\GTK\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\GTKSystem.Windows.Forms.dll -F:\我的项目\GTK\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\System.Resources.Extensions.dll -F:\我的项目\GTK\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\GTKSystem.Windows.Forms.pdb -F:\我的项目\GTK\GTKWinFormsApp\bin\Release\netcoreapp3.1\publish\System.Resources.Extensions.pdb diff --git a/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/TempPE/Properties.Resources.Designer.cs.dll b/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/TempPE/Properties.Resources.Designer.cs.dll deleted file mode 100644 index e9a1f2ef111bd81bcec3e26ed493627f7ae450fd..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/TempPE/Properties.Resources.Designer.cs.dll and /dev/null differ diff --git a/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/apphost.exe b/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/apphost.exe deleted file mode 100644 index 48e7070cdb96775b2a801f10c08d0a92ccf0a19b..0000000000000000000000000000000000000000 Binary files a/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/apphost.exe and /dev/null differ diff --git a/Samples/GTKWinFormsApp/obj/project.assets.json b/Samples/GTKWinFormsApp/obj/project.assets.json index c85ecb8ff6aa6c9932edc0e93cba2dd0fc412c98..38a846c6d1a76c95dde8ec3e2e12baff623f0957 100644 --- a/Samples/GTKWinFormsApp/obj/project.assets.json +++ b/Samples/GTKWinFormsApp/obj/project.assets.json @@ -1,193 +1,2247 @@ { "version": 3, "targets": { - ".NETCoreApp,Version=v3.1": { - "AtkSharp/3.24.24.34": { + "net8.0": { + "AtkSharp/3.24.24.95": { "type": "package", "dependencies": { - "GLibSharp": "3.24.24.34" + "GLibSharp": "3.24.24.95" }, "compile": { - "lib/netstandard2.0/AtkSharp.dll": {} + "lib/net6.0/AtkSharp.dll": {} }, "runtime": { - "lib/netstandard2.0/AtkSharp.dll": {} + "lib/net6.0/AtkSharp.dll": {} } }, - "CairoSharp/3.24.24.34": { + "CairoSharp/3.24.24.95": { "type": "package", "compile": { - "lib/netstandard2.0/CairoSharp.dll": {} + "lib/net6.0/CairoSharp.dll": {} }, "runtime": { - "lib/netstandard2.0/CairoSharp.dll": {} + "lib/net6.0/CairoSharp.dll": {} } }, - "GdkSharp/3.24.24.34": { + "GdkSharp/3.24.24.95": { "type": "package", "dependencies": { - "CairoSharp": "3.24.24.34", - "GLibSharp": "3.24.24.34", - "GioSharp": "3.24.24.34", - "PangoSharp": "3.24.24.34" + "CairoSharp": "3.24.24.95", + "GLibSharp": "3.24.24.95", + "GioSharp": "3.24.24.95", + "PangoSharp": "3.24.24.95" }, "compile": { - "lib/netstandard2.0/GdkSharp.dll": {} + "lib/net6.0/GdkSharp.dll": {} }, "runtime": { - "lib/netstandard2.0/GdkSharp.dll": {} + "lib/net6.0/GdkSharp.dll": {} } }, - "GioSharp/3.24.24.34": { + "GioSharp/3.24.24.95": { "type": "package", "dependencies": { - "GLibSharp": "3.24.24.34" + "GLibSharp": "3.24.24.95" }, "compile": { - "lib/netstandard2.0/GioSharp.dll": {} + "lib/net6.0/GioSharp.dll": {} }, "runtime": { - "lib/netstandard2.0/GioSharp.dll": {} + "lib/net6.0/GioSharp.dll": {} } }, - "GLibSharp/3.24.24.34": { + "GLibSharp/3.24.24.95": { "type": "package", "compile": { - "lib/netstandard2.0/GLibSharp.dll": {} + "lib/net6.0/GLibSharp.dll": {} }, "runtime": { - "lib/netstandard2.0/GLibSharp.dll": {} + "lib/net6.0/GLibSharp.dll": {} } }, - "GtkSharp/3.24.24.34": { + "GtkSharp/3.24.24.95": { "type": "package", "dependencies": { - "AtkSharp": "3.24.24.34", - "CairoSharp": "3.24.24.34", - "GLibSharp": "3.24.24.34", - "GdkSharp": "3.24.24.34", - "GioSharp": "3.24.24.34", - "PangoSharp": "3.24.24.34" + "AtkSharp": "3.24.24.95", + "CairoSharp": "3.24.24.95", + "GLibSharp": "3.24.24.95", + "GdkSharp": "3.24.24.95", + "GioSharp": "3.24.24.95", + "PangoSharp": "3.24.24.95" }, "compile": { - "lib/netstandard2.0/GtkSharp.dll": {} + "lib/net6.0/GtkSharp.dll": {} }, "runtime": { - "lib/netstandard2.0/GtkSharp.dll": {} + "lib/net6.0/GtkSharp.dll": {} }, "build": { "build/GtkSharp.targets": {} } }, - "PangoSharp/3.24.24.34": { + "GTKSystem.Windows.FormsDesigner/1.0.0.4": { "type": "package", "dependencies": { - "CairoSharp": "3.24.24.34", - "GLibSharp": "3.24.24.34" + "Microsoft.Build.Utilities.Core": "17.1.0" }, "compile": { - "lib/netstandard2.0/PangoSharp.dll": {} + "lib/netstandard2.0/GTKSystem.Windows.FormsDesigner.dll": {} }, "runtime": { - "lib/netstandard2.0/PangoSharp.dll": {} + "lib/netstandard2.0/GTKSystem.Windows.FormsDesigner.dll": {} + }, + "build": { + "build/GTKSystem.Windows.FormsDesigner.props": {}, + "build/GTKSystem.Windows.FormsDesigner.targets": {} + } + }, + "Microsoft.Build.Framework/17.1.0": { + "type": "package", + "dependencies": { + "Microsoft.Win32.Registry": "4.3.0", + "System.Security.Permissions": "4.7.0" + }, + "compile": { + "lib/netstandard2.0/Microsoft.Build.Framework.dll": { + "related": ".pdb;.xml" + } + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Build.Framework.dll": { + "related": ".pdb;.xml" + } + } + }, + "Microsoft.Build.Utilities.Core/17.1.0": { + "type": "package", + "dependencies": { + "Microsoft.Build.Framework": "17.1.0", + "Microsoft.NET.StringTools": "1.0.0", + "Microsoft.Win32.Registry": "4.3.0", + "System.Collections.Immutable": "5.0.0", + "System.Configuration.ConfigurationManager": "4.7.0", + "System.Security.Permissions": "4.7.0", + "System.Text.Encoding.CodePages": "4.0.1" + }, + "compile": { + "lib/netstandard2.0/Microsoft.Build.Utilities.Core.dll": { + "related": ".pdb;.xml" + } + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Build.Utilities.Core.dll": { + "related": ".pdb;.xml" + } + } + }, + "Microsoft.NET.StringTools/1.0.0": { + "type": "package", + "dependencies": { + "System.Memory": "4.5.4", + "System.Runtime.CompilerServices.Unsafe": "5.0.0" + }, + "compile": { + "lib/netstandard2.0/Microsoft.NET.StringTools.dll": { + "related": ".pdb" + } + }, + "runtime": { + "lib/netstandard2.0/Microsoft.NET.StringTools.dll": { + "related": ".pdb" + } + } + }, + "Microsoft.NETCore.Platforms/3.1.0": { + "type": "package", + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} + } + }, + "Microsoft.NETCore.Targets/1.1.0": { + "type": "package", + "compile": { + "lib/netstandard1.0/_._": {} + }, + "runtime": { + "lib/netstandard1.0/_._": {} + } + }, + "Microsoft.Win32.Registry/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "System.Collections": "4.3.0", + "System.Globalization": "4.3.0", + "System.Resources.ResourceManager": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Extensions": "4.3.0", + "System.Runtime.Handles": "4.3.0", + "System.Runtime.InteropServices": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/Microsoft.Win32.Registry.dll": { + "related": ".xml" + } + }, + "runtimeTargets": { + "runtimes/unix/lib/netstandard1.3/Microsoft.Win32.Registry.dll": { + "assetType": "runtime", + "rid": "unix" + }, + "runtimes/win/lib/netstandard1.3/Microsoft.Win32.Registry.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "Microsoft.Win32.SystemEvents/4.7.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0" + }, + "compile": { + "ref/netstandard2.0/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/Microsoft.Win32.SystemEvents.dll": { + "related": ".xml" + } + }, + "runtimeTargets": { + "runtimes/win/lib/netcoreapp3.0/Microsoft.Win32.SystemEvents.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "PangoSharp/3.24.24.95": { + "type": "package", + "dependencies": { + "CairoSharp": "3.24.24.95", + "GLibSharp": "3.24.24.95" + }, + "compile": { + "lib/net6.0/PangoSharp.dll": {} + }, + "runtime": { + "lib/net6.0/PangoSharp.dll": {} + } + }, + "System.Collections/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/_._": { + "related": ".xml" + } + } + }, + "System.Collections.Immutable/5.0.0": { + "type": "package", + "compile": { + "lib/netstandard2.0/System.Collections.Immutable.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/System.Collections.Immutable.dll": { + "related": ".xml" + } + } + }, + "System.Configuration.ConfigurationManager/4.7.0": { + "type": "package", + "dependencies": { + "System.Security.Cryptography.ProtectedData": "4.7.0", + "System.Security.Permissions": "4.7.0" + }, + "compile": { + "ref/netstandard2.0/System.Configuration.ConfigurationManager.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/System.Configuration.ConfigurationManager.dll": { + "related": ".xml" + } + } + }, + "System.Drawing.Common/4.7.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "Microsoft.Win32.SystemEvents": "4.7.0" + }, + "compile": { + "ref/netcoreapp3.0/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/System.Drawing.Common.dll": {} + }, + "runtimeTargets": { + "runtimes/unix/lib/netcoreapp3.0/System.Drawing.Common.dll": { + "assetType": "runtime", + "rid": "unix" + }, + "runtimes/win/lib/netcoreapp3.0/System.Drawing.Common.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.Globalization/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/_._": { + "related": ".xml" + } + } + }, + "System.IO/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0", + "System.Text.Encoding": "4.3.0", + "System.Threading.Tasks": "4.3.0" + }, + "compile": { + "ref/netstandard1.5/_._": { + "related": ".xml" + } + } + }, + "System.Memory/4.5.4": { + "type": "package", + "compile": { + "ref/netcoreapp2.1/_._": {} + }, + "runtime": { + "lib/netcoreapp2.1/_._": {} + } + }, + "System.Reflection/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.IO": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.5/_._": { + "related": ".xml" + } + } + }, + "System.Reflection.Primitives/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.0/_._": { + "related": ".xml" + } + } + }, + "System.Resources.Extensions/8.0.0": { + "type": "package", + "compile": { + "lib/net8.0/System.Resources.Extensions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/System.Resources.Extensions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "System.Resources.ResourceManager/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Globalization": "4.3.0", + "System.Reflection": "4.3.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.0/_._": { + "related": ".xml" + } + } + }, + "System.Runtime/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0" + }, + "compile": { + "ref/netstandard1.5/System.Runtime.dll": { + "related": ".xml" + } + } + }, + "System.Runtime.CompilerServices.Unsafe/5.0.0": { + "type": "package", + "compile": { + "ref/netstandard2.1/System.Runtime.CompilerServices.Unsafe.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.dll": { + "related": ".xml" + } + } + }, + "System.Runtime.Extensions/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.5/_._": { + "related": ".xml" + } + } + }, + "System.Runtime.Handles/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/System.Runtime.Handles.dll": { + "related": ".xml" + } + } + }, + "System.Runtime.InteropServices/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Reflection": "4.3.0", + "System.Reflection.Primitives": "4.3.0", + "System.Runtime": "4.3.0", + "System.Runtime.Handles": "4.3.0" + }, + "compile": { + "ref/netcoreapp1.1/_._": {} + } + }, + "System.Security.AccessControl/4.7.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "3.1.0", + "System.Security.Principal.Windows": "4.7.0" + }, + "compile": { + "ref/netstandard2.0/System.Security.AccessControl.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/System.Security.AccessControl.dll": { + "related": ".xml" + } + }, + "runtimeTargets": { + "runtimes/win/lib/netcoreapp2.0/System.Security.AccessControl.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.Security.Cryptography.ProtectedData/4.7.0": { + "type": "package", + "compile": { + "ref/netstandard2.0/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/System.Security.Cryptography.ProtectedData.dll": { + "related": ".xml" + } + }, + "runtimeTargets": { + "runtimes/win/lib/netstandard2.0/System.Security.Cryptography.ProtectedData.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.Security.Permissions/4.7.0": { + "type": "package", + "dependencies": { + "System.Security.AccessControl": "4.7.0", + "System.Windows.Extensions": "4.7.0" + }, + "compile": { + "ref/netcoreapp3.0/System.Security.Permissions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netcoreapp3.0/System.Security.Permissions.dll": { + "related": ".xml" + } + } + }, + "System.Security.Principal.Windows/4.7.0": { + "type": "package", + "compile": { + "ref/netcoreapp3.0/System.Security.Principal.Windows.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/System.Security.Principal.Windows.dll": { + "related": ".xml" + } + }, + "runtimeTargets": { + "runtimes/unix/lib/netcoreapp2.1/System.Security.Principal.Windows.dll": { + "assetType": "runtime", + "rid": "unix" + }, + "runtimes/win/lib/netcoreapp2.1/System.Security.Principal.Windows.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.Text.Encoding/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/System.Text.Encoding.dll": { + "related": ".xml" + } + } + }, + "System.Text.Encoding.CodePages/4.0.1": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.0.1", + "System.Collections": "4.0.11", + "System.Globalization": "4.0.11", + "System.IO": "4.1.0", + "System.Reflection": "4.1.0", + "System.Resources.ResourceManager": "4.0.1", + "System.Runtime": "4.1.0", + "System.Runtime.Extensions": "4.1.0", + "System.Runtime.Handles": "4.0.1", + "System.Runtime.InteropServices": "4.1.0", + "System.Text.Encoding": "4.0.11", + "System.Threading": "4.0.11" + }, + "compile": { + "ref/netstandard1.3/System.Text.Encoding.CodePages.dll": { + "related": ".xml" + } + }, + "runtimeTargets": { + "runtimes/unix/lib/netstandard1.3/System.Text.Encoding.CodePages.dll": { + "assetType": "runtime", + "rid": "unix" + }, + "runtimes/win/lib/netstandard1.3/System.Text.Encoding.CodePages.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "System.Threading/4.0.11": { + "type": "package", + "dependencies": { + "System.Runtime": "4.1.0", + "System.Threading.Tasks": "4.0.11" + }, + "compile": { + "ref/netstandard1.3/_._": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard1.3/System.Threading.dll": {} + } + }, + "System.Threading.Tasks/4.3.0": { + "type": "package", + "dependencies": { + "Microsoft.NETCore.Platforms": "1.1.0", + "Microsoft.NETCore.Targets": "1.1.0", + "System.Runtime": "4.3.0" + }, + "compile": { + "ref/netstandard1.3/_._": { + "related": ".xml" + } + } + }, + "System.Windows.Extensions/4.7.0": { + "type": "package", + "dependencies": { + "System.Drawing.Common": "4.7.0" + }, + "compile": { + "ref/netcoreapp3.0/System.Windows.Extensions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netcoreapp3.0/System.Windows.Extensions.dll": { + "related": ".xml" + } + }, + "runtimeTargets": { + "runtimes/win/lib/netcoreapp3.0/System.Windows.Extensions.dll": { + "assetType": "runtime", + "rid": "win" + } + } + }, + "GTKSystem.Windows.Forms/1.3.24.23": { + "type": "project", + "framework": ".NETCoreApp,Version=v8.0", + "dependencies": { + "GtkSharp": "3.24.24.95", + "System.Resources.Extensions": "8.0.0" + }, + "compile": { + "bin/placeholder/GTKSystem.Windows.Forms.dll": {} + }, + "runtime": { + "bin/placeholder/GTKSystem.Windows.Forms.dll": {} } } } }, "libraries": { - "AtkSharp/3.24.24.34": { - "sha512": "CNfTGhGDxcnow5e/u0THtOJeNWaZNDeeFmzYTMdC1tdUkmAtTFDareTGesLx+Gfj75m3415AKJSC9wQ6VyacYQ==", + "AtkSharp/3.24.24.95": { + "sha512": "LnSfsc0y11gfzczZj5bnpwcFkXFZuVTSSd92ML/FcHIM7FU+cAfm1UkAonv5BdwTRhzDbNDE39vihao/k75sUA==", "type": "package", - "path": "atksharp/3.24.24.34", + "path": "atksharp/3.24.24.95", "files": [ ".nupkg.metadata", ".signature.p7s", - "atksharp.3.24.24.34.nupkg.sha512", + "atksharp.3.24.24.95.nupkg.sha512", "atksharp.nuspec", + "lib/net6.0/AtkSharp.dll", "lib/netstandard2.0/AtkSharp.dll" ] }, - "CairoSharp/3.24.24.34": { - "sha512": "hr75uYPGFlmB3RvpL3/6ZJtb+UiKsrpkyjb5VGI+8y1/lkY405FMBhPZKlxFqoEH0iIZ9gAMPBqKzT1lSVaDqA==", + "CairoSharp/3.24.24.95": { + "sha512": "EZ9KT3pwVAol35XbZW0Uwdg2LqhDvPnWdhqIrsedhDx+Omnu56hLzxh8mZGqmQvEwJE8Opbda4w9CqDtXbX6Vw==", "type": "package", - "path": "cairosharp/3.24.24.34", + "path": "cairosharp/3.24.24.95", "files": [ ".nupkg.metadata", ".signature.p7s", - "cairosharp.3.24.24.34.nupkg.sha512", + "cairosharp.3.24.24.95.nupkg.sha512", "cairosharp.nuspec", + "lib/net6.0/CairoSharp.dll", "lib/netstandard2.0/CairoSharp.dll" ] }, - "GdkSharp/3.24.24.34": { - "sha512": "COORB6Qd4yu6HWRbzVZXrkzr1T96Gy0wO7ckJfpYxWLbDUDnZVd/g2PICp9T05a0ZvLvkE++vsSjAWobwQeS0g==", + "GdkSharp/3.24.24.95": { + "sha512": "rABpIGkxr8lOdyhEmrKXzjih3z3932kjqUmm5qaQhWVSvu9YepEk3J1FApgnKCW/EWEzlerzxnJArsyOlgMsZQ==", "type": "package", - "path": "gdksharp/3.24.24.34", + "path": "gdksharp/3.24.24.95", "files": [ ".nupkg.metadata", ".signature.p7s", - "gdksharp.3.24.24.34.nupkg.sha512", + "gdksharp.3.24.24.95.nupkg.sha512", "gdksharp.nuspec", + "lib/net6.0/GdkSharp.dll", "lib/netstandard2.0/GdkSharp.dll" ] }, - "GioSharp/3.24.24.34": { - "sha512": "Qyz8bhKjLMTWoxXu6cdNEtTLNUuw7Y1sPdXlyTfyWMP/JmsUE9smCsCC0kyQNSFW17flxdSoeDpG8l6zzJF0vQ==", + "GioSharp/3.24.24.95": { + "sha512": "avYEDFlYgbogb+Y7ZhIXQpyJfL83bnPpBKY642YEW9PQ+pRK3qf2k0opvd5oHccXfByj6kAQjmRUSIS0pj19Fg==", "type": "package", - "path": "giosharp/3.24.24.34", + "path": "giosharp/3.24.24.95", "files": [ ".nupkg.metadata", ".signature.p7s", - "giosharp.3.24.24.34.nupkg.sha512", + "giosharp.3.24.24.95.nupkg.sha512", "giosharp.nuspec", + "lib/net6.0/GioSharp.dll", "lib/netstandard2.0/GioSharp.dll" ] }, - "GLibSharp/3.24.24.34": { - "sha512": "PSA7YJbxpnpeltjekoUk93FI9HWUMc2NtkxNIaWzHz7BavkkZDFmx8EKTKtuBrqbZZmEhlv5472NwGdiycSfxw==", + "GLibSharp/3.24.24.95": { + "sha512": "1viZRMVjddf2HUCW7WDXT47rHssteHkAOimXQ2/pI8oGrPGNFuuw5MbX8BOIy73hCWVqo7JEMONv3z32OrCoCQ==", "type": "package", - "path": "glibsharp/3.24.24.34", + "path": "glibsharp/3.24.24.95", "files": [ ".nupkg.metadata", ".signature.p7s", - "glibsharp.3.24.24.34.nupkg.sha512", + "glibsharp.3.24.24.95.nupkg.sha512", "glibsharp.nuspec", + "lib/net6.0/GLibSharp.dll", "lib/netstandard2.0/GLibSharp.dll" ] }, - "GtkSharp/3.24.24.34": { - "sha512": "CVAz7ACMxW9xPhlrrg4Xe+v3jUnpN+emQl78aaXHtoiE7pf0tR8mP8mw0/eBHxMObrmg6DsLxbEFqE/7Yo4Uow==", + "GtkSharp/3.24.24.95": { + "sha512": "RRUY45hAa5gsMcadvVjcLUzMjVtmuHSYTcIwM6j8LNgKhzFFHk69qM1D5ULfGxaWmVjicqNWiFtOtk8WsvPqaQ==", "type": "package", - "path": "gtksharp/3.24.24.34", + "path": "gtksharp/3.24.24.95", "files": [ ".nupkg.metadata", ".signature.p7s", "build/GtkSharp.targets", - "gtksharp.3.24.24.34.nupkg.sha512", + "gtksharp.3.24.24.95.nupkg.sha512", "gtksharp.nuspec", + "lib/net6.0/GtkSharp.dll", "lib/netstandard2.0/GtkSharp.dll" ] }, - "PangoSharp/3.24.24.34": { - "sha512": "QpBEIiE29sxkewdW7l7rVRJR1p3SGoPauHrjm0A3yxpYxj+St5x45weHI8jquMJAZBUdVQuXYHSZDW1lQeJ+PQ==", + "GTKSystem.Windows.FormsDesigner/1.0.0.4": { + "sha512": "lv6mhLYcA6jxJhyMSFlKuDX3RZhy4jZZs3XWJXNPW+kBOjJpvWVlHAEgvQdTxtu+CzQt5EQZuaAHnXtoo25USQ==", "type": "package", - "path": "pangosharp/3.24.24.34", + "path": "gtksystem.windows.formsdesigner/1.0.0.4", "files": [ ".nupkg.metadata", ".signature.p7s", + "LICENSE.txt", + "README.md", + "build/GTKSystem.Windows.FormsDesigner.props", + "build/GTKSystem.Windows.FormsDesigner.targets", + "gtksystem.windows.formsdesigner.1.0.0.4.nupkg.sha512", + "gtksystem.windows.formsdesigner.nuspec", + "lib/netstandard2.0/GTKSystem.Windows.FormsDesigner.dll" + ] + }, + "Microsoft.Build.Framework/17.1.0": { + "sha512": "7PPEbjuL/lKQ8ftblxwBZKf5alZCA4GDvBTiO3UAVxtRe52a2jL3mc8TpKNiJZzytGz7fKdR5ClDCs7+Uw4hMg==", + "type": "package", + "path": "microsoft.build.framework/17.1.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "MSBuild-NuGet-Icon.png", + "lib/net472/Microsoft.Build.Framework.dll", + "lib/net472/Microsoft.Build.Framework.pdb", + "lib/net472/Microsoft.Build.Framework.xml", + "lib/netstandard2.0/Microsoft.Build.Framework.dll", + "lib/netstandard2.0/Microsoft.Build.Framework.pdb", + "lib/netstandard2.0/Microsoft.Build.Framework.xml", + "microsoft.build.framework.17.1.0.nupkg.sha512", + "microsoft.build.framework.nuspec", + "notices/THIRDPARTYNOTICES.txt" + ] + }, + "Microsoft.Build.Utilities.Core/17.1.0": { + "sha512": "JqhQ4q6L4IyA0Wh3PrDrxHHYMVHyOLIusyC4imAnhcnZiOC4+CwgVRSdo8fLsQmvz0Jab8FFrU1NPZFbDoxRng==", + "type": "package", + "path": "microsoft.build.utilities.core/17.1.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "MSBuild-NuGet-Icon.png", + "lib/net472/Microsoft.Build.Utilities.Core.dll", + "lib/net472/Microsoft.Build.Utilities.Core.pdb", + "lib/net472/Microsoft.Build.Utilities.Core.xml", + "lib/netstandard2.0/Microsoft.Build.Utilities.Core.dll", + "lib/netstandard2.0/Microsoft.Build.Utilities.Core.pdb", + "lib/netstandard2.0/Microsoft.Build.Utilities.Core.xml", + "microsoft.build.utilities.core.17.1.0.nupkg.sha512", + "microsoft.build.utilities.core.nuspec", + "notices/THIRDPARTYNOTICES.txt" + ] + }, + "Microsoft.NET.StringTools/1.0.0": { + "sha512": "ZYVcoDM0LnSyT5nWoRGfShYdOecCw2sOXWwP6j1Z0u48Xq3+BVvZ+EiPCX9/8Gz439giW+O1H1kWF9Eb/w6rVg==", + "type": "package", + "path": "microsoft.net.stringtools/1.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "MSBuild-NuGet-Icon.png", + "lib/net35/Microsoft.NET.StringTools.net35.dll", + "lib/net35/Microsoft.NET.StringTools.net35.pdb", + "lib/net472/Microsoft.NET.StringTools.dll", + "lib/net472/Microsoft.NET.StringTools.pdb", + "lib/netstandard2.0/Microsoft.NET.StringTools.dll", + "lib/netstandard2.0/Microsoft.NET.StringTools.pdb", + "microsoft.net.stringtools.1.0.0.nupkg.sha512", + "microsoft.net.stringtools.nuspec", + "notices/THIRDPARTYNOTICES.txt" + ] + }, + "Microsoft.NETCore.Platforms/3.1.0": { + "sha512": "z7aeg8oHln2CuNulfhiLYxCVMPEwBl3rzicjvIX+4sUuCwvXw5oXQEtbiU2c0z4qYL5L3Kmx0mMA/+t/SbY67w==", + "type": "package", + "path": "microsoft.netcore.platforms/3.1.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/netstandard1.0/_._", + "microsoft.netcore.platforms.3.1.0.nupkg.sha512", + "microsoft.netcore.platforms.nuspec", + "runtime.json", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "Microsoft.NETCore.Targets/1.1.0": { + "sha512": "aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg==", + "type": "package", + "path": "microsoft.netcore.targets/1.1.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/netstandard1.0/_._", + "microsoft.netcore.targets.1.1.0.nupkg.sha512", + "microsoft.netcore.targets.nuspec", + "runtime.json" + ] + }, + "Microsoft.Win32.Registry/4.3.0": { + "sha512": "Lw1/VwLH1yxz6SfFEjVRCN0pnflLEsWgnV4qsdJ512/HhTwnKXUG+zDQ4yTO3K/EJQemGoNaBHX5InISNKTzUQ==", + "type": "package", + "path": "microsoft.win32.registry/4.3.0", + "files": [ + ".nupkg.metadata", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/net46/Microsoft.Win32.Registry.dll", + "microsoft.win32.registry.4.3.0.nupkg.sha512", + "microsoft.win32.registry.nuspec", + "ref/net46/Microsoft.Win32.Registry.dll", + "ref/netstandard1.3/Microsoft.Win32.Registry.dll", + "ref/netstandard1.3/Microsoft.Win32.Registry.xml", + "ref/netstandard1.3/de/Microsoft.Win32.Registry.xml", + "ref/netstandard1.3/es/Microsoft.Win32.Registry.xml", + "ref/netstandard1.3/fr/Microsoft.Win32.Registry.xml", + "ref/netstandard1.3/it/Microsoft.Win32.Registry.xml", + "ref/netstandard1.3/ja/Microsoft.Win32.Registry.xml", + "ref/netstandard1.3/ko/Microsoft.Win32.Registry.xml", + "ref/netstandard1.3/ru/Microsoft.Win32.Registry.xml", + "ref/netstandard1.3/zh-hans/Microsoft.Win32.Registry.xml", + "ref/netstandard1.3/zh-hant/Microsoft.Win32.Registry.xml", + "runtimes/unix/lib/netstandard1.3/Microsoft.Win32.Registry.dll", + "runtimes/win/lib/net46/Microsoft.Win32.Registry.dll", + "runtimes/win/lib/netcore50/_._", + "runtimes/win/lib/netstandard1.3/Microsoft.Win32.Registry.dll" + ] + }, + "Microsoft.Win32.SystemEvents/4.7.0": { + "sha512": "mtVirZr++rq+XCDITMUdnETD59XoeMxSpLRIII7JRI6Yj0LEDiO1pPn0ktlnIj12Ix8bfvQqQDMMIF9wC98oCA==", + "type": "package", + "path": "microsoft.win32.systemevents/4.7.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/net461/Microsoft.Win32.SystemEvents.dll", + "lib/net461/Microsoft.Win32.SystemEvents.xml", + "lib/netstandard2.0/Microsoft.Win32.SystemEvents.dll", + "lib/netstandard2.0/Microsoft.Win32.SystemEvents.xml", + "microsoft.win32.systemevents.4.7.0.nupkg.sha512", + "microsoft.win32.systemevents.nuspec", + "ref/net461/Microsoft.Win32.SystemEvents.dll", + "ref/net461/Microsoft.Win32.SystemEvents.xml", + "ref/net472/Microsoft.Win32.SystemEvents.dll", + "ref/net472/Microsoft.Win32.SystemEvents.xml", + "ref/netstandard2.0/Microsoft.Win32.SystemEvents.dll", + "ref/netstandard2.0/Microsoft.Win32.SystemEvents.xml", + "runtimes/win/lib/netcoreapp2.0/Microsoft.Win32.SystemEvents.dll", + "runtimes/win/lib/netcoreapp2.0/Microsoft.Win32.SystemEvents.xml", + "runtimes/win/lib/netcoreapp3.0/Microsoft.Win32.SystemEvents.dll", + "runtimes/win/lib/netcoreapp3.0/Microsoft.Win32.SystemEvents.xml", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "PangoSharp/3.24.24.95": { + "sha512": "H7JeyEvLsgvsbamGpRgoNtdvzPiGwwsUuoeTobN1C/JRjw1J8Snw0yf2WBr7CKx5GLwbrwpQYOb7N/HD17ME8A==", + "type": "package", + "path": "pangosharp/3.24.24.95", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/net6.0/PangoSharp.dll", "lib/netstandard2.0/PangoSharp.dll", - "pangosharp.3.24.24.34.nupkg.sha512", + "pangosharp.3.24.24.95.nupkg.sha512", "pangosharp.nuspec" ] + }, + "System.Collections/4.3.0": { + "sha512": "3Dcj85/TBdVpL5Zr+gEEBUuFe2icOnLalmEh9hfck1PTYbbyWuZgh4fmm2ysCLTrqLQw6t3TgTyJ+VLp+Qb+Lw==", + "type": "package", + "path": "system.collections/4.3.0", + "files": [ + ".nupkg.metadata", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Collections.dll", + "ref/netcore50/System.Collections.xml", + "ref/netcore50/de/System.Collections.xml", + "ref/netcore50/es/System.Collections.xml", + "ref/netcore50/fr/System.Collections.xml", + "ref/netcore50/it/System.Collections.xml", + "ref/netcore50/ja/System.Collections.xml", + "ref/netcore50/ko/System.Collections.xml", + "ref/netcore50/ru/System.Collections.xml", + "ref/netcore50/zh-hans/System.Collections.xml", + "ref/netcore50/zh-hant/System.Collections.xml", + "ref/netstandard1.0/System.Collections.dll", + "ref/netstandard1.0/System.Collections.xml", + "ref/netstandard1.0/de/System.Collections.xml", + "ref/netstandard1.0/es/System.Collections.xml", + "ref/netstandard1.0/fr/System.Collections.xml", + "ref/netstandard1.0/it/System.Collections.xml", + "ref/netstandard1.0/ja/System.Collections.xml", + "ref/netstandard1.0/ko/System.Collections.xml", + "ref/netstandard1.0/ru/System.Collections.xml", + "ref/netstandard1.0/zh-hans/System.Collections.xml", + "ref/netstandard1.0/zh-hant/System.Collections.xml", + "ref/netstandard1.3/System.Collections.dll", + "ref/netstandard1.3/System.Collections.xml", + "ref/netstandard1.3/de/System.Collections.xml", + "ref/netstandard1.3/es/System.Collections.xml", + "ref/netstandard1.3/fr/System.Collections.xml", + "ref/netstandard1.3/it/System.Collections.xml", + "ref/netstandard1.3/ja/System.Collections.xml", + "ref/netstandard1.3/ko/System.Collections.xml", + "ref/netstandard1.3/ru/System.Collections.xml", + "ref/netstandard1.3/zh-hans/System.Collections.xml", + "ref/netstandard1.3/zh-hant/System.Collections.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.collections.4.3.0.nupkg.sha512", + "system.collections.nuspec" + ] + }, + "System.Collections.Immutable/5.0.0": { + "sha512": "FXkLXiK0sVVewcso0imKQoOxjoPAj42R8HtjjbSjVPAzwDfzoyoznWxgA3c38LDbN9SJux1xXoXYAhz98j7r2g==", + "type": "package", + "path": "system.collections.immutable/5.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/net461/System.Collections.Immutable.dll", + "lib/net461/System.Collections.Immutable.xml", + "lib/netstandard1.0/System.Collections.Immutable.dll", + "lib/netstandard1.0/System.Collections.Immutable.xml", + "lib/netstandard1.3/System.Collections.Immutable.dll", + "lib/netstandard1.3/System.Collections.Immutable.xml", + "lib/netstandard2.0/System.Collections.Immutable.dll", + "lib/netstandard2.0/System.Collections.Immutable.xml", + "lib/portable-net45+win8+wp8+wpa81/System.Collections.Immutable.dll", + "lib/portable-net45+win8+wp8+wpa81/System.Collections.Immutable.xml", + "system.collections.immutable.5.0.0.nupkg.sha512", + "system.collections.immutable.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.Configuration.ConfigurationManager/4.7.0": { + "sha512": "/anOTeSZCNNI2zDilogWrZ8pNqCmYbzGNexUnNhjW8k0sHqEZ2nHJBp147jBV3hGYswu5lINpNg1vxR7bnqvVA==", + "type": "package", + "path": "system.configuration.configurationmanager/4.7.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/net461/System.Configuration.ConfigurationManager.dll", + "lib/net461/System.Configuration.ConfigurationManager.xml", + "lib/netstandard2.0/System.Configuration.ConfigurationManager.dll", + "lib/netstandard2.0/System.Configuration.ConfigurationManager.xml", + "ref/net461/System.Configuration.ConfigurationManager.dll", + "ref/net461/System.Configuration.ConfigurationManager.xml", + "ref/netstandard2.0/System.Configuration.ConfigurationManager.dll", + "ref/netstandard2.0/System.Configuration.ConfigurationManager.xml", + "system.configuration.configurationmanager.4.7.0.nupkg.sha512", + "system.configuration.configurationmanager.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.Drawing.Common/4.7.0": { + "sha512": "v+XbyYHaZjDfn0ENmJEV1VYLgGgCTx1gnfOBcppowbpOAriglYgGCvFCPr2EEZyBvXlpxbEsTwkOlInl107ahA==", + "type": "package", + "path": "system.drawing.common/4.7.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net461/System.Drawing.Common.dll", + "lib/netstandard2.0/System.Drawing.Common.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net461/System.Drawing.Common.dll", + "ref/netcoreapp3.0/System.Drawing.Common.dll", + "ref/netcoreapp3.0/System.Drawing.Common.xml", + "ref/netstandard2.0/System.Drawing.Common.dll", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/unix/lib/netcoreapp2.0/System.Drawing.Common.dll", + "runtimes/unix/lib/netcoreapp3.0/System.Drawing.Common.dll", + "runtimes/unix/lib/netcoreapp3.0/System.Drawing.Common.xml", + "runtimes/win/lib/netcoreapp2.0/System.Drawing.Common.dll", + "runtimes/win/lib/netcoreapp3.0/System.Drawing.Common.dll", + "runtimes/win/lib/netcoreapp3.0/System.Drawing.Common.xml", + "system.drawing.common.4.7.0.nupkg.sha512", + "system.drawing.common.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.Globalization/4.3.0": { + "sha512": "kYdVd2f2PAdFGblzFswE4hkNANJBKRmsfa2X5LG2AcWE1c7/4t0pYae1L8vfZ5xvE2nK/R9JprtToA61OSHWIg==", + "type": "package", + "path": "system.globalization/4.3.0", + "files": [ + ".nupkg.metadata", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Globalization.dll", + "ref/netcore50/System.Globalization.xml", + "ref/netcore50/de/System.Globalization.xml", + "ref/netcore50/es/System.Globalization.xml", + "ref/netcore50/fr/System.Globalization.xml", + "ref/netcore50/it/System.Globalization.xml", + "ref/netcore50/ja/System.Globalization.xml", + "ref/netcore50/ko/System.Globalization.xml", + "ref/netcore50/ru/System.Globalization.xml", + "ref/netcore50/zh-hans/System.Globalization.xml", + "ref/netcore50/zh-hant/System.Globalization.xml", + "ref/netstandard1.0/System.Globalization.dll", + "ref/netstandard1.0/System.Globalization.xml", + "ref/netstandard1.0/de/System.Globalization.xml", + "ref/netstandard1.0/es/System.Globalization.xml", + "ref/netstandard1.0/fr/System.Globalization.xml", + "ref/netstandard1.0/it/System.Globalization.xml", + "ref/netstandard1.0/ja/System.Globalization.xml", + "ref/netstandard1.0/ko/System.Globalization.xml", + "ref/netstandard1.0/ru/System.Globalization.xml", + "ref/netstandard1.0/zh-hans/System.Globalization.xml", + "ref/netstandard1.0/zh-hant/System.Globalization.xml", + "ref/netstandard1.3/System.Globalization.dll", + "ref/netstandard1.3/System.Globalization.xml", + "ref/netstandard1.3/de/System.Globalization.xml", + "ref/netstandard1.3/es/System.Globalization.xml", + "ref/netstandard1.3/fr/System.Globalization.xml", + "ref/netstandard1.3/it/System.Globalization.xml", + "ref/netstandard1.3/ja/System.Globalization.xml", + "ref/netstandard1.3/ko/System.Globalization.xml", + "ref/netstandard1.3/ru/System.Globalization.xml", + "ref/netstandard1.3/zh-hans/System.Globalization.xml", + "ref/netstandard1.3/zh-hant/System.Globalization.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.globalization.4.3.0.nupkg.sha512", + "system.globalization.nuspec" + ] + }, + "System.IO/4.3.0": { + "sha512": "3qjaHvxQPDpSOYICjUoTsmoq5u6QJAFRUITgeT/4gqkF1bajbSmb1kwSxEA8AHlofqgcKJcM8udgieRNhaJ5Cg==", + "type": "package", + "path": "system.io/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.IO.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.IO.dll", + "ref/netcore50/System.IO.dll", + "ref/netcore50/System.IO.xml", + "ref/netcore50/de/System.IO.xml", + "ref/netcore50/es/System.IO.xml", + "ref/netcore50/fr/System.IO.xml", + "ref/netcore50/it/System.IO.xml", + "ref/netcore50/ja/System.IO.xml", + "ref/netcore50/ko/System.IO.xml", + "ref/netcore50/ru/System.IO.xml", + "ref/netcore50/zh-hans/System.IO.xml", + "ref/netcore50/zh-hant/System.IO.xml", + "ref/netstandard1.0/System.IO.dll", + "ref/netstandard1.0/System.IO.xml", + "ref/netstandard1.0/de/System.IO.xml", + "ref/netstandard1.0/es/System.IO.xml", + "ref/netstandard1.0/fr/System.IO.xml", + "ref/netstandard1.0/it/System.IO.xml", + "ref/netstandard1.0/ja/System.IO.xml", + "ref/netstandard1.0/ko/System.IO.xml", + "ref/netstandard1.0/ru/System.IO.xml", + "ref/netstandard1.0/zh-hans/System.IO.xml", + "ref/netstandard1.0/zh-hant/System.IO.xml", + "ref/netstandard1.3/System.IO.dll", + "ref/netstandard1.3/System.IO.xml", + "ref/netstandard1.3/de/System.IO.xml", + "ref/netstandard1.3/es/System.IO.xml", + "ref/netstandard1.3/fr/System.IO.xml", + "ref/netstandard1.3/it/System.IO.xml", + "ref/netstandard1.3/ja/System.IO.xml", + "ref/netstandard1.3/ko/System.IO.xml", + "ref/netstandard1.3/ru/System.IO.xml", + "ref/netstandard1.3/zh-hans/System.IO.xml", + "ref/netstandard1.3/zh-hant/System.IO.xml", + "ref/netstandard1.5/System.IO.dll", + "ref/netstandard1.5/System.IO.xml", + "ref/netstandard1.5/de/System.IO.xml", + "ref/netstandard1.5/es/System.IO.xml", + "ref/netstandard1.5/fr/System.IO.xml", + "ref/netstandard1.5/it/System.IO.xml", + "ref/netstandard1.5/ja/System.IO.xml", + "ref/netstandard1.5/ko/System.IO.xml", + "ref/netstandard1.5/ru/System.IO.xml", + "ref/netstandard1.5/zh-hans/System.IO.xml", + "ref/netstandard1.5/zh-hant/System.IO.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.io.4.3.0.nupkg.sha512", + "system.io.nuspec" + ] + }, + "System.Memory/4.5.4": { + "sha512": "1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw==", + "type": "package", + "path": "system.memory/4.5.4", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/net461/System.Memory.dll", + "lib/net461/System.Memory.xml", + "lib/netcoreapp2.1/_._", + "lib/netstandard1.1/System.Memory.dll", + "lib/netstandard1.1/System.Memory.xml", + "lib/netstandard2.0/System.Memory.dll", + "lib/netstandard2.0/System.Memory.xml", + "ref/netcoreapp2.1/_._", + "system.memory.4.5.4.nupkg.sha512", + "system.memory.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.Reflection/4.3.0": { + "sha512": "KMiAFoW7MfJGa9nDFNcfu+FpEdiHpWgTcS2HdMpDvt9saK3y/G4GwprPyzqjFH9NTaGPQeWNHU+iDlDILj96aQ==", + "type": "package", + "path": "system.reflection/4.3.0", + "files": [ + ".nupkg.metadata", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.Reflection.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.Reflection.dll", + "ref/netcore50/System.Reflection.dll", + "ref/netcore50/System.Reflection.xml", + "ref/netcore50/de/System.Reflection.xml", + "ref/netcore50/es/System.Reflection.xml", + "ref/netcore50/fr/System.Reflection.xml", + "ref/netcore50/it/System.Reflection.xml", + "ref/netcore50/ja/System.Reflection.xml", + "ref/netcore50/ko/System.Reflection.xml", + "ref/netcore50/ru/System.Reflection.xml", + "ref/netcore50/zh-hans/System.Reflection.xml", + "ref/netcore50/zh-hant/System.Reflection.xml", + "ref/netstandard1.0/System.Reflection.dll", + "ref/netstandard1.0/System.Reflection.xml", + "ref/netstandard1.0/de/System.Reflection.xml", + "ref/netstandard1.0/es/System.Reflection.xml", + "ref/netstandard1.0/fr/System.Reflection.xml", + "ref/netstandard1.0/it/System.Reflection.xml", + "ref/netstandard1.0/ja/System.Reflection.xml", + "ref/netstandard1.0/ko/System.Reflection.xml", + "ref/netstandard1.0/ru/System.Reflection.xml", + "ref/netstandard1.0/zh-hans/System.Reflection.xml", + "ref/netstandard1.0/zh-hant/System.Reflection.xml", + "ref/netstandard1.3/System.Reflection.dll", + "ref/netstandard1.3/System.Reflection.xml", + "ref/netstandard1.3/de/System.Reflection.xml", + "ref/netstandard1.3/es/System.Reflection.xml", + "ref/netstandard1.3/fr/System.Reflection.xml", + "ref/netstandard1.3/it/System.Reflection.xml", + "ref/netstandard1.3/ja/System.Reflection.xml", + "ref/netstandard1.3/ko/System.Reflection.xml", + "ref/netstandard1.3/ru/System.Reflection.xml", + "ref/netstandard1.3/zh-hans/System.Reflection.xml", + "ref/netstandard1.3/zh-hant/System.Reflection.xml", + "ref/netstandard1.5/System.Reflection.dll", + "ref/netstandard1.5/System.Reflection.xml", + "ref/netstandard1.5/de/System.Reflection.xml", + "ref/netstandard1.5/es/System.Reflection.xml", + "ref/netstandard1.5/fr/System.Reflection.xml", + "ref/netstandard1.5/it/System.Reflection.xml", + "ref/netstandard1.5/ja/System.Reflection.xml", + "ref/netstandard1.5/ko/System.Reflection.xml", + "ref/netstandard1.5/ru/System.Reflection.xml", + "ref/netstandard1.5/zh-hans/System.Reflection.xml", + "ref/netstandard1.5/zh-hant/System.Reflection.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.reflection.4.3.0.nupkg.sha512", + "system.reflection.nuspec" + ] + }, + "System.Reflection.Primitives/4.3.0": { + "sha512": "5RXItQz5As4xN2/YUDxdpsEkMhvw3e6aNveFXUn4Hl/udNTCNhnKp8lT9fnc3MhvGKh1baak5CovpuQUXHAlIA==", + "type": "package", + "path": "system.reflection.primitives/4.3.0", + "files": [ + ".nupkg.metadata", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Reflection.Primitives.dll", + "ref/netcore50/System.Reflection.Primitives.xml", + "ref/netcore50/de/System.Reflection.Primitives.xml", + "ref/netcore50/es/System.Reflection.Primitives.xml", + "ref/netcore50/fr/System.Reflection.Primitives.xml", + "ref/netcore50/it/System.Reflection.Primitives.xml", + "ref/netcore50/ja/System.Reflection.Primitives.xml", + "ref/netcore50/ko/System.Reflection.Primitives.xml", + "ref/netcore50/ru/System.Reflection.Primitives.xml", + "ref/netcore50/zh-hans/System.Reflection.Primitives.xml", + "ref/netcore50/zh-hant/System.Reflection.Primitives.xml", + "ref/netstandard1.0/System.Reflection.Primitives.dll", + "ref/netstandard1.0/System.Reflection.Primitives.xml", + "ref/netstandard1.0/de/System.Reflection.Primitives.xml", + "ref/netstandard1.0/es/System.Reflection.Primitives.xml", + "ref/netstandard1.0/fr/System.Reflection.Primitives.xml", + "ref/netstandard1.0/it/System.Reflection.Primitives.xml", + "ref/netstandard1.0/ja/System.Reflection.Primitives.xml", + "ref/netstandard1.0/ko/System.Reflection.Primitives.xml", + "ref/netstandard1.0/ru/System.Reflection.Primitives.xml", + "ref/netstandard1.0/zh-hans/System.Reflection.Primitives.xml", + "ref/netstandard1.0/zh-hant/System.Reflection.Primitives.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.reflection.primitives.4.3.0.nupkg.sha512", + "system.reflection.primitives.nuspec" + ] + }, + "System.Resources.Extensions/8.0.0": { + "sha512": "psnQ6GRQOvt+evda5C4nD5EuV49mz2Tv0DD2JDVDEbE/TKoMukxSkGJcsBJ0pajpPuFRr67syFYlkJ4Wj6A5Zw==", + "type": "package", + "path": "system.resources.extensions/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Resources.Extensions.targets", + "buildTransitive/net462/System.Resources.Extensions.targets", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Resources.Extensions.targets", + "lib/net462/System.Resources.Extensions.dll", + "lib/net462/System.Resources.Extensions.xml", + "lib/net6.0/System.Resources.Extensions.dll", + "lib/net6.0/System.Resources.Extensions.xml", + "lib/net7.0/System.Resources.Extensions.dll", + "lib/net7.0/System.Resources.Extensions.xml", + "lib/net8.0/System.Resources.Extensions.dll", + "lib/net8.0/System.Resources.Extensions.xml", + "lib/netstandard2.0/System.Resources.Extensions.dll", + "lib/netstandard2.0/System.Resources.Extensions.xml", + "system.resources.extensions.8.0.0.nupkg.sha512", + "system.resources.extensions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "System.Resources.ResourceManager/4.3.0": { + "sha512": "/zrcPkkWdZmI4F92gL/TPumP98AVDu/Wxr3CSJGQQ+XN6wbRZcyfSKVoPo17ilb3iOr0cCRqJInGwNMolqhS8A==", + "type": "package", + "path": "system.resources.resourcemanager/4.3.0", + "files": [ + ".nupkg.metadata", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Resources.ResourceManager.dll", + "ref/netcore50/System.Resources.ResourceManager.xml", + "ref/netcore50/de/System.Resources.ResourceManager.xml", + "ref/netcore50/es/System.Resources.ResourceManager.xml", + "ref/netcore50/fr/System.Resources.ResourceManager.xml", + "ref/netcore50/it/System.Resources.ResourceManager.xml", + "ref/netcore50/ja/System.Resources.ResourceManager.xml", + "ref/netcore50/ko/System.Resources.ResourceManager.xml", + "ref/netcore50/ru/System.Resources.ResourceManager.xml", + "ref/netcore50/zh-hans/System.Resources.ResourceManager.xml", + "ref/netcore50/zh-hant/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/System.Resources.ResourceManager.dll", + "ref/netstandard1.0/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/de/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/es/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/fr/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/it/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/ja/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/ko/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/ru/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/zh-hans/System.Resources.ResourceManager.xml", + "ref/netstandard1.0/zh-hant/System.Resources.ResourceManager.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.resources.resourcemanager.4.3.0.nupkg.sha512", + "system.resources.resourcemanager.nuspec" + ] + }, + "System.Runtime/4.3.0": { + "sha512": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==", + "type": "package", + "path": "system.runtime/4.3.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.Runtime.dll", + "lib/portable-net45+win8+wp80+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.Runtime.dll", + "ref/netcore50/System.Runtime.dll", + "ref/netcore50/System.Runtime.xml", + "ref/netcore50/de/System.Runtime.xml", + "ref/netcore50/es/System.Runtime.xml", + "ref/netcore50/fr/System.Runtime.xml", + "ref/netcore50/it/System.Runtime.xml", + "ref/netcore50/ja/System.Runtime.xml", + "ref/netcore50/ko/System.Runtime.xml", + "ref/netcore50/ru/System.Runtime.xml", + "ref/netcore50/zh-hans/System.Runtime.xml", + "ref/netcore50/zh-hant/System.Runtime.xml", + "ref/netstandard1.0/System.Runtime.dll", + "ref/netstandard1.0/System.Runtime.xml", + "ref/netstandard1.0/de/System.Runtime.xml", + "ref/netstandard1.0/es/System.Runtime.xml", + "ref/netstandard1.0/fr/System.Runtime.xml", + "ref/netstandard1.0/it/System.Runtime.xml", + "ref/netstandard1.0/ja/System.Runtime.xml", + "ref/netstandard1.0/ko/System.Runtime.xml", + "ref/netstandard1.0/ru/System.Runtime.xml", + "ref/netstandard1.0/zh-hans/System.Runtime.xml", + "ref/netstandard1.0/zh-hant/System.Runtime.xml", + "ref/netstandard1.2/System.Runtime.dll", + "ref/netstandard1.2/System.Runtime.xml", + "ref/netstandard1.2/de/System.Runtime.xml", + "ref/netstandard1.2/es/System.Runtime.xml", + "ref/netstandard1.2/fr/System.Runtime.xml", + "ref/netstandard1.2/it/System.Runtime.xml", + "ref/netstandard1.2/ja/System.Runtime.xml", + "ref/netstandard1.2/ko/System.Runtime.xml", + "ref/netstandard1.2/ru/System.Runtime.xml", + "ref/netstandard1.2/zh-hans/System.Runtime.xml", + "ref/netstandard1.2/zh-hant/System.Runtime.xml", + "ref/netstandard1.3/System.Runtime.dll", + "ref/netstandard1.3/System.Runtime.xml", + "ref/netstandard1.3/de/System.Runtime.xml", + "ref/netstandard1.3/es/System.Runtime.xml", + "ref/netstandard1.3/fr/System.Runtime.xml", + "ref/netstandard1.3/it/System.Runtime.xml", + "ref/netstandard1.3/ja/System.Runtime.xml", + "ref/netstandard1.3/ko/System.Runtime.xml", + "ref/netstandard1.3/ru/System.Runtime.xml", + "ref/netstandard1.3/zh-hans/System.Runtime.xml", + "ref/netstandard1.3/zh-hant/System.Runtime.xml", + "ref/netstandard1.5/System.Runtime.dll", + "ref/netstandard1.5/System.Runtime.xml", + "ref/netstandard1.5/de/System.Runtime.xml", + "ref/netstandard1.5/es/System.Runtime.xml", + "ref/netstandard1.5/fr/System.Runtime.xml", + "ref/netstandard1.5/it/System.Runtime.xml", + "ref/netstandard1.5/ja/System.Runtime.xml", + "ref/netstandard1.5/ko/System.Runtime.xml", + "ref/netstandard1.5/ru/System.Runtime.xml", + "ref/netstandard1.5/zh-hans/System.Runtime.xml", + "ref/netstandard1.5/zh-hant/System.Runtime.xml", + "ref/portable-net45+win8+wp80+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.runtime.4.3.0.nupkg.sha512", + "system.runtime.nuspec" + ] + }, + "System.Runtime.CompilerServices.Unsafe/5.0.0": { + "sha512": "ZD9TMpsmYJLrxbbmdvhwt9YEgG5WntEnZ/d1eH8JBX9LBp+Ju8BSBhUGbZMNVHHomWo2KVImJhTDl2hIgw/6MA==", + "type": "package", + "path": "system.runtime.compilerservices.unsafe/5.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/net45/System.Runtime.CompilerServices.Unsafe.dll", + "lib/net45/System.Runtime.CompilerServices.Unsafe.xml", + "lib/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.dll", + "lib/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.xml", + "lib/netstandard1.0/System.Runtime.CompilerServices.Unsafe.dll", + "lib/netstandard1.0/System.Runtime.CompilerServices.Unsafe.xml", + "lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll", + "lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.xml", + "ref/net461/System.Runtime.CompilerServices.Unsafe.dll", + "ref/net461/System.Runtime.CompilerServices.Unsafe.xml", + "ref/netstandard1.0/System.Runtime.CompilerServices.Unsafe.dll", + "ref/netstandard1.0/System.Runtime.CompilerServices.Unsafe.xml", + "ref/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll", + "ref/netstandard2.0/System.Runtime.CompilerServices.Unsafe.xml", + "ref/netstandard2.1/System.Runtime.CompilerServices.Unsafe.dll", + "ref/netstandard2.1/System.Runtime.CompilerServices.Unsafe.xml", + "system.runtime.compilerservices.unsafe.5.0.0.nupkg.sha512", + "system.runtime.compilerservices.unsafe.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.Runtime.Extensions/4.3.0": { + "sha512": "guW0uK0fn5fcJJ1tJVXYd7/1h5F+pea1r7FLSOz/f8vPEqbR2ZAknuRDvTQ8PzAilDveOxNjSfr0CHfIQfFk8g==", + "type": "package", + "path": "system.runtime.extensions/4.3.0", + "files": [ + ".nupkg.metadata", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.Runtime.Extensions.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.Runtime.Extensions.dll", + "ref/netcore50/System.Runtime.Extensions.dll", + "ref/netcore50/System.Runtime.Extensions.xml", + "ref/netcore50/de/System.Runtime.Extensions.xml", + "ref/netcore50/es/System.Runtime.Extensions.xml", + "ref/netcore50/fr/System.Runtime.Extensions.xml", + "ref/netcore50/it/System.Runtime.Extensions.xml", + "ref/netcore50/ja/System.Runtime.Extensions.xml", + "ref/netcore50/ko/System.Runtime.Extensions.xml", + "ref/netcore50/ru/System.Runtime.Extensions.xml", + "ref/netcore50/zh-hans/System.Runtime.Extensions.xml", + "ref/netcore50/zh-hant/System.Runtime.Extensions.xml", + "ref/netstandard1.0/System.Runtime.Extensions.dll", + "ref/netstandard1.0/System.Runtime.Extensions.xml", + "ref/netstandard1.0/de/System.Runtime.Extensions.xml", + "ref/netstandard1.0/es/System.Runtime.Extensions.xml", + "ref/netstandard1.0/fr/System.Runtime.Extensions.xml", + "ref/netstandard1.0/it/System.Runtime.Extensions.xml", + "ref/netstandard1.0/ja/System.Runtime.Extensions.xml", + "ref/netstandard1.0/ko/System.Runtime.Extensions.xml", + "ref/netstandard1.0/ru/System.Runtime.Extensions.xml", + "ref/netstandard1.0/zh-hans/System.Runtime.Extensions.xml", + "ref/netstandard1.0/zh-hant/System.Runtime.Extensions.xml", + "ref/netstandard1.3/System.Runtime.Extensions.dll", + "ref/netstandard1.3/System.Runtime.Extensions.xml", + "ref/netstandard1.3/de/System.Runtime.Extensions.xml", + "ref/netstandard1.3/es/System.Runtime.Extensions.xml", + "ref/netstandard1.3/fr/System.Runtime.Extensions.xml", + "ref/netstandard1.3/it/System.Runtime.Extensions.xml", + "ref/netstandard1.3/ja/System.Runtime.Extensions.xml", + "ref/netstandard1.3/ko/System.Runtime.Extensions.xml", + "ref/netstandard1.3/ru/System.Runtime.Extensions.xml", + "ref/netstandard1.3/zh-hans/System.Runtime.Extensions.xml", + "ref/netstandard1.3/zh-hant/System.Runtime.Extensions.xml", + "ref/netstandard1.5/System.Runtime.Extensions.dll", + "ref/netstandard1.5/System.Runtime.Extensions.xml", + "ref/netstandard1.5/de/System.Runtime.Extensions.xml", + "ref/netstandard1.5/es/System.Runtime.Extensions.xml", + "ref/netstandard1.5/fr/System.Runtime.Extensions.xml", + "ref/netstandard1.5/it/System.Runtime.Extensions.xml", + "ref/netstandard1.5/ja/System.Runtime.Extensions.xml", + "ref/netstandard1.5/ko/System.Runtime.Extensions.xml", + "ref/netstandard1.5/ru/System.Runtime.Extensions.xml", + "ref/netstandard1.5/zh-hans/System.Runtime.Extensions.xml", + "ref/netstandard1.5/zh-hant/System.Runtime.Extensions.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.runtime.extensions.4.3.0.nupkg.sha512", + "system.runtime.extensions.nuspec" + ] + }, + "System.Runtime.Handles/4.3.0": { + "sha512": "OKiSUN7DmTWeYb3l51A7EYaeNMnvxwE249YtZz7yooT4gOZhmTjIn48KgSsw2k2lYdLgTKNJw/ZIfSElwDRVgg==", + "type": "package", + "path": "system.runtime.handles/4.3.0", + "files": [ + ".nupkg.metadata", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/_._", + "ref/netstandard1.3/System.Runtime.Handles.dll", + "ref/netstandard1.3/System.Runtime.Handles.xml", + "ref/netstandard1.3/de/System.Runtime.Handles.xml", + "ref/netstandard1.3/es/System.Runtime.Handles.xml", + "ref/netstandard1.3/fr/System.Runtime.Handles.xml", + "ref/netstandard1.3/it/System.Runtime.Handles.xml", + "ref/netstandard1.3/ja/System.Runtime.Handles.xml", + "ref/netstandard1.3/ko/System.Runtime.Handles.xml", + "ref/netstandard1.3/ru/System.Runtime.Handles.xml", + "ref/netstandard1.3/zh-hans/System.Runtime.Handles.xml", + "ref/netstandard1.3/zh-hant/System.Runtime.Handles.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.runtime.handles.4.3.0.nupkg.sha512", + "system.runtime.handles.nuspec" + ] + }, + "System.Runtime.InteropServices/4.3.0": { + "sha512": "uv1ynXqiMK8mp1GM3jDqPCFN66eJ5w5XNomaK2XD+TuCroNTLFGeZ+WCmBMcBDyTFKou3P6cR6J/QsaqDp7fGQ==", + "type": "package", + "path": "system.runtime.interopservices/4.3.0", + "files": [ + ".nupkg.metadata", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/net462/System.Runtime.InteropServices.dll", + "lib/net463/System.Runtime.InteropServices.dll", + "lib/portable-net45+win8+wpa81/_._", + "lib/win8/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/net462/System.Runtime.InteropServices.dll", + "ref/net463/System.Runtime.InteropServices.dll", + "ref/netcore50/System.Runtime.InteropServices.dll", + "ref/netcore50/System.Runtime.InteropServices.xml", + "ref/netcore50/de/System.Runtime.InteropServices.xml", + "ref/netcore50/es/System.Runtime.InteropServices.xml", + "ref/netcore50/fr/System.Runtime.InteropServices.xml", + "ref/netcore50/it/System.Runtime.InteropServices.xml", + "ref/netcore50/ja/System.Runtime.InteropServices.xml", + "ref/netcore50/ko/System.Runtime.InteropServices.xml", + "ref/netcore50/ru/System.Runtime.InteropServices.xml", + "ref/netcore50/zh-hans/System.Runtime.InteropServices.xml", + "ref/netcore50/zh-hant/System.Runtime.InteropServices.xml", + "ref/netcoreapp1.1/System.Runtime.InteropServices.dll", + "ref/netstandard1.1/System.Runtime.InteropServices.dll", + "ref/netstandard1.1/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/de/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/es/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/fr/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/it/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/ja/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/ko/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/ru/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/zh-hans/System.Runtime.InteropServices.xml", + "ref/netstandard1.1/zh-hant/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/System.Runtime.InteropServices.dll", + "ref/netstandard1.2/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/de/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/es/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/fr/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/it/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/ja/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/ko/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/ru/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/zh-hans/System.Runtime.InteropServices.xml", + "ref/netstandard1.2/zh-hant/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/System.Runtime.InteropServices.dll", + "ref/netstandard1.3/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/de/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/es/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/fr/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/it/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/ja/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/ko/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/ru/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/zh-hans/System.Runtime.InteropServices.xml", + "ref/netstandard1.3/zh-hant/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/System.Runtime.InteropServices.dll", + "ref/netstandard1.5/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/de/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/es/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/fr/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/it/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/ja/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/ko/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/ru/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/zh-hans/System.Runtime.InteropServices.xml", + "ref/netstandard1.5/zh-hant/System.Runtime.InteropServices.xml", + "ref/portable-net45+win8+wpa81/_._", + "ref/win8/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.runtime.interopservices.4.3.0.nupkg.sha512", + "system.runtime.interopservices.nuspec" + ] + }, + "System.Security.AccessControl/4.7.0": { + "sha512": "JECvTt5aFF3WT3gHpfofL2MNNP6v84sxtXxpqhLBCcDRzqsPBmHhQ6shv4DwwN2tRlzsUxtb3G9M3763rbXKDg==", + "type": "package", + "path": "system.security.accesscontrol/4.7.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/net46/System.Security.AccessControl.dll", + "lib/net461/System.Security.AccessControl.dll", + "lib/net461/System.Security.AccessControl.xml", + "lib/netstandard1.3/System.Security.AccessControl.dll", + "lib/netstandard2.0/System.Security.AccessControl.dll", + "lib/netstandard2.0/System.Security.AccessControl.xml", + "lib/uap10.0.16299/_._", + "ref/net46/System.Security.AccessControl.dll", + "ref/net461/System.Security.AccessControl.dll", + "ref/net461/System.Security.AccessControl.xml", + "ref/netstandard1.3/System.Security.AccessControl.dll", + "ref/netstandard1.3/System.Security.AccessControl.xml", + "ref/netstandard1.3/de/System.Security.AccessControl.xml", + "ref/netstandard1.3/es/System.Security.AccessControl.xml", + "ref/netstandard1.3/fr/System.Security.AccessControl.xml", + "ref/netstandard1.3/it/System.Security.AccessControl.xml", + "ref/netstandard1.3/ja/System.Security.AccessControl.xml", + "ref/netstandard1.3/ko/System.Security.AccessControl.xml", + "ref/netstandard1.3/ru/System.Security.AccessControl.xml", + "ref/netstandard1.3/zh-hans/System.Security.AccessControl.xml", + "ref/netstandard1.3/zh-hant/System.Security.AccessControl.xml", + "ref/netstandard2.0/System.Security.AccessControl.dll", + "ref/netstandard2.0/System.Security.AccessControl.xml", + "ref/uap10.0.16299/_._", + "runtimes/win/lib/net46/System.Security.AccessControl.dll", + "runtimes/win/lib/net461/System.Security.AccessControl.dll", + "runtimes/win/lib/net461/System.Security.AccessControl.xml", + "runtimes/win/lib/netcoreapp2.0/System.Security.AccessControl.dll", + "runtimes/win/lib/netcoreapp2.0/System.Security.AccessControl.xml", + "runtimes/win/lib/netstandard1.3/System.Security.AccessControl.dll", + "runtimes/win/lib/uap10.0.16299/_._", + "system.security.accesscontrol.4.7.0.nupkg.sha512", + "system.security.accesscontrol.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.Security.Cryptography.ProtectedData/4.7.0": { + "sha512": "ehYW0m9ptxpGWvE4zgqongBVWpSDU/JCFD4K7krxkQwSz/sFQjEXCUqpvencjy6DYDbn7Ig09R8GFffu8TtneQ==", + "type": "package", + "path": "system.security.cryptography.protecteddata/4.7.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Security.Cryptography.ProtectedData.dll", + "lib/net461/System.Security.Cryptography.ProtectedData.dll", + "lib/net461/System.Security.Cryptography.ProtectedData.xml", + "lib/netstandard1.3/System.Security.Cryptography.ProtectedData.dll", + "lib/netstandard2.0/System.Security.Cryptography.ProtectedData.dll", + "lib/netstandard2.0/System.Security.Cryptography.ProtectedData.xml", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net46/System.Security.Cryptography.ProtectedData.dll", + "ref/net461/System.Security.Cryptography.ProtectedData.dll", + "ref/net461/System.Security.Cryptography.ProtectedData.xml", + "ref/netstandard1.3/System.Security.Cryptography.ProtectedData.dll", + "ref/netstandard2.0/System.Security.Cryptography.ProtectedData.dll", + "ref/netstandard2.0/System.Security.Cryptography.ProtectedData.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/win/lib/net46/System.Security.Cryptography.ProtectedData.dll", + "runtimes/win/lib/net461/System.Security.Cryptography.ProtectedData.dll", + "runtimes/win/lib/net461/System.Security.Cryptography.ProtectedData.xml", + "runtimes/win/lib/netstandard1.3/System.Security.Cryptography.ProtectedData.dll", + "runtimes/win/lib/netstandard2.0/System.Security.Cryptography.ProtectedData.dll", + "runtimes/win/lib/netstandard2.0/System.Security.Cryptography.ProtectedData.xml", + "system.security.cryptography.protecteddata.4.7.0.nupkg.sha512", + "system.security.cryptography.protecteddata.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.Security.Permissions/4.7.0": { + "sha512": "dkOV6YYVBnYRa15/yv004eCGRBVADXw8qRbbNiCn/XpdJSUXkkUeIvdvFHkvnko4CdKMqG8yRHC4ox83LSlMsQ==", + "type": "package", + "path": "system.security.permissions/4.7.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/net461/System.Security.Permissions.dll", + "lib/net461/System.Security.Permissions.xml", + "lib/netcoreapp3.0/System.Security.Permissions.dll", + "lib/netcoreapp3.0/System.Security.Permissions.xml", + "lib/netstandard2.0/System.Security.Permissions.dll", + "lib/netstandard2.0/System.Security.Permissions.xml", + "ref/net461/System.Security.Permissions.dll", + "ref/net461/System.Security.Permissions.xml", + "ref/netcoreapp3.0/System.Security.Permissions.dll", + "ref/netcoreapp3.0/System.Security.Permissions.xml", + "ref/netstandard2.0/System.Security.Permissions.dll", + "ref/netstandard2.0/System.Security.Permissions.xml", + "system.security.permissions.4.7.0.nupkg.sha512", + "system.security.permissions.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.Security.Principal.Windows/4.7.0": { + "sha512": "ojD0PX0XhneCsUbAZVKdb7h/70vyYMDYs85lwEI+LngEONe/17A0cFaRFqZU+sOEidcVswYWikYOQ9PPfjlbtQ==", + "type": "package", + "path": "system.security.principal.windows/4.7.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/net46/System.Security.Principal.Windows.dll", + "lib/net461/System.Security.Principal.Windows.dll", + "lib/net461/System.Security.Principal.Windows.xml", + "lib/netstandard1.3/System.Security.Principal.Windows.dll", + "lib/netstandard2.0/System.Security.Principal.Windows.dll", + "lib/netstandard2.0/System.Security.Principal.Windows.xml", + "lib/uap10.0.16299/_._", + "ref/net46/System.Security.Principal.Windows.dll", + "ref/net461/System.Security.Principal.Windows.dll", + "ref/net461/System.Security.Principal.Windows.xml", + "ref/netcoreapp3.0/System.Security.Principal.Windows.dll", + "ref/netcoreapp3.0/System.Security.Principal.Windows.xml", + "ref/netstandard1.3/System.Security.Principal.Windows.dll", + "ref/netstandard1.3/System.Security.Principal.Windows.xml", + "ref/netstandard1.3/de/System.Security.Principal.Windows.xml", + "ref/netstandard1.3/es/System.Security.Principal.Windows.xml", + "ref/netstandard1.3/fr/System.Security.Principal.Windows.xml", + "ref/netstandard1.3/it/System.Security.Principal.Windows.xml", + "ref/netstandard1.3/ja/System.Security.Principal.Windows.xml", + "ref/netstandard1.3/ko/System.Security.Principal.Windows.xml", + "ref/netstandard1.3/ru/System.Security.Principal.Windows.xml", + "ref/netstandard1.3/zh-hans/System.Security.Principal.Windows.xml", + "ref/netstandard1.3/zh-hant/System.Security.Principal.Windows.xml", + "ref/netstandard2.0/System.Security.Principal.Windows.dll", + "ref/netstandard2.0/System.Security.Principal.Windows.xml", + "ref/uap10.0.16299/_._", + "runtimes/unix/lib/netcoreapp2.0/System.Security.Principal.Windows.dll", + "runtimes/unix/lib/netcoreapp2.0/System.Security.Principal.Windows.xml", + "runtimes/unix/lib/netcoreapp2.1/System.Security.Principal.Windows.dll", + "runtimes/unix/lib/netcoreapp2.1/System.Security.Principal.Windows.xml", + "runtimes/win/lib/net46/System.Security.Principal.Windows.dll", + "runtimes/win/lib/net461/System.Security.Principal.Windows.dll", + "runtimes/win/lib/net461/System.Security.Principal.Windows.xml", + "runtimes/win/lib/netcoreapp2.0/System.Security.Principal.Windows.dll", + "runtimes/win/lib/netcoreapp2.0/System.Security.Principal.Windows.xml", + "runtimes/win/lib/netcoreapp2.1/System.Security.Principal.Windows.dll", + "runtimes/win/lib/netcoreapp2.1/System.Security.Principal.Windows.xml", + "runtimes/win/lib/netstandard1.3/System.Security.Principal.Windows.dll", + "runtimes/win/lib/uap10.0.16299/_._", + "system.security.principal.windows.4.7.0.nupkg.sha512", + "system.security.principal.windows.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.Text.Encoding/4.3.0": { + "sha512": "BiIg+KWaSDOITze6jGQynxg64naAPtqGHBwDrLaCtixsa5bKiR8dpPOHA7ge3C0JJQizJE+sfkz1wV+BAKAYZw==", + "type": "package", + "path": "system.text.encoding/4.3.0", + "files": [ + ".nupkg.metadata", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Text.Encoding.dll", + "ref/netcore50/System.Text.Encoding.xml", + "ref/netcore50/de/System.Text.Encoding.xml", + "ref/netcore50/es/System.Text.Encoding.xml", + "ref/netcore50/fr/System.Text.Encoding.xml", + "ref/netcore50/it/System.Text.Encoding.xml", + "ref/netcore50/ja/System.Text.Encoding.xml", + "ref/netcore50/ko/System.Text.Encoding.xml", + "ref/netcore50/ru/System.Text.Encoding.xml", + "ref/netcore50/zh-hans/System.Text.Encoding.xml", + "ref/netcore50/zh-hant/System.Text.Encoding.xml", + "ref/netstandard1.0/System.Text.Encoding.dll", + "ref/netstandard1.0/System.Text.Encoding.xml", + "ref/netstandard1.0/de/System.Text.Encoding.xml", + "ref/netstandard1.0/es/System.Text.Encoding.xml", + "ref/netstandard1.0/fr/System.Text.Encoding.xml", + "ref/netstandard1.0/it/System.Text.Encoding.xml", + "ref/netstandard1.0/ja/System.Text.Encoding.xml", + "ref/netstandard1.0/ko/System.Text.Encoding.xml", + "ref/netstandard1.0/ru/System.Text.Encoding.xml", + "ref/netstandard1.0/zh-hans/System.Text.Encoding.xml", + "ref/netstandard1.0/zh-hant/System.Text.Encoding.xml", + "ref/netstandard1.3/System.Text.Encoding.dll", + "ref/netstandard1.3/System.Text.Encoding.xml", + "ref/netstandard1.3/de/System.Text.Encoding.xml", + "ref/netstandard1.3/es/System.Text.Encoding.xml", + "ref/netstandard1.3/fr/System.Text.Encoding.xml", + "ref/netstandard1.3/it/System.Text.Encoding.xml", + "ref/netstandard1.3/ja/System.Text.Encoding.xml", + "ref/netstandard1.3/ko/System.Text.Encoding.xml", + "ref/netstandard1.3/ru/System.Text.Encoding.xml", + "ref/netstandard1.3/zh-hans/System.Text.Encoding.xml", + "ref/netstandard1.3/zh-hant/System.Text.Encoding.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.text.encoding.4.3.0.nupkg.sha512", + "system.text.encoding.nuspec" + ] + }, + "System.Text.Encoding.CodePages/4.0.1": { + "sha512": "h4z6rrA/hxWf4655D18IIZ0eaLRa3tQC/j+e26W+VinIHY0l07iEXaAvO0YSYq3MvCjMYy8Zs5AdC1sxNQOB7Q==", + "type": "package", + "path": "system.text.encoding.codepages/4.0.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net46/System.Text.Encoding.CodePages.dll", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/netstandard1.3/System.Text.Encoding.CodePages.dll", + "ref/netstandard1.3/System.Text.Encoding.CodePages.xml", + "ref/netstandard1.3/de/System.Text.Encoding.CodePages.xml", + "ref/netstandard1.3/es/System.Text.Encoding.CodePages.xml", + "ref/netstandard1.3/fr/System.Text.Encoding.CodePages.xml", + "ref/netstandard1.3/it/System.Text.Encoding.CodePages.xml", + "ref/netstandard1.3/ja/System.Text.Encoding.CodePages.xml", + "ref/netstandard1.3/ko/System.Text.Encoding.CodePages.xml", + "ref/netstandard1.3/ru/System.Text.Encoding.CodePages.xml", + "ref/netstandard1.3/zh-hans/System.Text.Encoding.CodePages.xml", + "ref/netstandard1.3/zh-hant/System.Text.Encoding.CodePages.xml", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/unix/lib/netstandard1.3/System.Text.Encoding.CodePages.dll", + "runtimes/win/lib/netstandard1.3/System.Text.Encoding.CodePages.dll", + "system.text.encoding.codepages.4.0.1.nupkg.sha512", + "system.text.encoding.codepages.nuspec" + ] + }, + "System.Threading/4.0.11": { + "sha512": "N+3xqIcg3VDKyjwwCGaZ9HawG9aC6cSDI+s7ROma310GQo8vilFZa86hqKppwTHleR/G0sfOzhvgnUxWCR/DrQ==", + "type": "package", + "path": "system.threading/4.0.11", + "files": [ + ".nupkg.metadata", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/netcore50/System.Threading.dll", + "lib/netstandard1.3/System.Threading.dll", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Threading.dll", + "ref/netcore50/System.Threading.xml", + "ref/netcore50/de/System.Threading.xml", + "ref/netcore50/es/System.Threading.xml", + "ref/netcore50/fr/System.Threading.xml", + "ref/netcore50/it/System.Threading.xml", + "ref/netcore50/ja/System.Threading.xml", + "ref/netcore50/ko/System.Threading.xml", + "ref/netcore50/ru/System.Threading.xml", + "ref/netcore50/zh-hans/System.Threading.xml", + "ref/netcore50/zh-hant/System.Threading.xml", + "ref/netstandard1.0/System.Threading.dll", + "ref/netstandard1.0/System.Threading.xml", + "ref/netstandard1.0/de/System.Threading.xml", + "ref/netstandard1.0/es/System.Threading.xml", + "ref/netstandard1.0/fr/System.Threading.xml", + "ref/netstandard1.0/it/System.Threading.xml", + "ref/netstandard1.0/ja/System.Threading.xml", + "ref/netstandard1.0/ko/System.Threading.xml", + "ref/netstandard1.0/ru/System.Threading.xml", + "ref/netstandard1.0/zh-hans/System.Threading.xml", + "ref/netstandard1.0/zh-hant/System.Threading.xml", + "ref/netstandard1.3/System.Threading.dll", + "ref/netstandard1.3/System.Threading.xml", + "ref/netstandard1.3/de/System.Threading.xml", + "ref/netstandard1.3/es/System.Threading.xml", + "ref/netstandard1.3/fr/System.Threading.xml", + "ref/netstandard1.3/it/System.Threading.xml", + "ref/netstandard1.3/ja/System.Threading.xml", + "ref/netstandard1.3/ko/System.Threading.xml", + "ref/netstandard1.3/ru/System.Threading.xml", + "ref/netstandard1.3/zh-hans/System.Threading.xml", + "ref/netstandard1.3/zh-hant/System.Threading.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "runtimes/aot/lib/netcore50/System.Threading.dll", + "system.threading.4.0.11.nupkg.sha512", + "system.threading.nuspec" + ] + }, + "System.Threading.Tasks/4.3.0": { + "sha512": "LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==", + "type": "package", + "path": "system.threading.tasks/4.3.0", + "files": [ + ".nupkg.metadata", + "ThirdPartyNotices.txt", + "dotnet_library_license.txt", + "lib/MonoAndroid10/_._", + "lib/MonoTouch10/_._", + "lib/net45/_._", + "lib/portable-net45+win8+wp8+wpa81/_._", + "lib/win8/_._", + "lib/wp80/_._", + "lib/wpa81/_._", + "lib/xamarinios10/_._", + "lib/xamarinmac20/_._", + "lib/xamarintvos10/_._", + "lib/xamarinwatchos10/_._", + "ref/MonoAndroid10/_._", + "ref/MonoTouch10/_._", + "ref/net45/_._", + "ref/netcore50/System.Threading.Tasks.dll", + "ref/netcore50/System.Threading.Tasks.xml", + "ref/netcore50/de/System.Threading.Tasks.xml", + "ref/netcore50/es/System.Threading.Tasks.xml", + "ref/netcore50/fr/System.Threading.Tasks.xml", + "ref/netcore50/it/System.Threading.Tasks.xml", + "ref/netcore50/ja/System.Threading.Tasks.xml", + "ref/netcore50/ko/System.Threading.Tasks.xml", + "ref/netcore50/ru/System.Threading.Tasks.xml", + "ref/netcore50/zh-hans/System.Threading.Tasks.xml", + "ref/netcore50/zh-hant/System.Threading.Tasks.xml", + "ref/netstandard1.0/System.Threading.Tasks.dll", + "ref/netstandard1.0/System.Threading.Tasks.xml", + "ref/netstandard1.0/de/System.Threading.Tasks.xml", + "ref/netstandard1.0/es/System.Threading.Tasks.xml", + "ref/netstandard1.0/fr/System.Threading.Tasks.xml", + "ref/netstandard1.0/it/System.Threading.Tasks.xml", + "ref/netstandard1.0/ja/System.Threading.Tasks.xml", + "ref/netstandard1.0/ko/System.Threading.Tasks.xml", + "ref/netstandard1.0/ru/System.Threading.Tasks.xml", + "ref/netstandard1.0/zh-hans/System.Threading.Tasks.xml", + "ref/netstandard1.0/zh-hant/System.Threading.Tasks.xml", + "ref/netstandard1.3/System.Threading.Tasks.dll", + "ref/netstandard1.3/System.Threading.Tasks.xml", + "ref/netstandard1.3/de/System.Threading.Tasks.xml", + "ref/netstandard1.3/es/System.Threading.Tasks.xml", + "ref/netstandard1.3/fr/System.Threading.Tasks.xml", + "ref/netstandard1.3/it/System.Threading.Tasks.xml", + "ref/netstandard1.3/ja/System.Threading.Tasks.xml", + "ref/netstandard1.3/ko/System.Threading.Tasks.xml", + "ref/netstandard1.3/ru/System.Threading.Tasks.xml", + "ref/netstandard1.3/zh-hans/System.Threading.Tasks.xml", + "ref/netstandard1.3/zh-hant/System.Threading.Tasks.xml", + "ref/portable-net45+win8+wp8+wpa81/_._", + "ref/win8/_._", + "ref/wp80/_._", + "ref/wpa81/_._", + "ref/xamarinios10/_._", + "ref/xamarinmac20/_._", + "ref/xamarintvos10/_._", + "ref/xamarinwatchos10/_._", + "system.threading.tasks.4.3.0.nupkg.sha512", + "system.threading.tasks.nuspec" + ] + }, + "System.Windows.Extensions/4.7.0": { + "sha512": "CeWTdRNfRaSh0pm2gDTJFwVaXfTq6Xwv/sA887iwPTneW7oMtMlpvDIO+U60+3GWTB7Aom6oQwv5VZVUhQRdPQ==", + "type": "package", + "path": "system.windows.extensions/4.7.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/netcoreapp3.0/System.Windows.Extensions.dll", + "lib/netcoreapp3.0/System.Windows.Extensions.xml", + "ref/netcoreapp3.0/System.Windows.Extensions.dll", + "ref/netcoreapp3.0/System.Windows.Extensions.xml", + "runtimes/win/lib/netcoreapp3.0/System.Windows.Extensions.dll", + "runtimes/win/lib/netcoreapp3.0/System.Windows.Extensions.xml", + "system.windows.extensions.4.7.0.nupkg.sha512", + "system.windows.extensions.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "GTKSystem.Windows.Forms/1.3.24.23": { + "type": "project", + "path": "../../Source/GTKSystem.Windows.Forms/GTKSystem.Windows.Forms.csproj", + "msbuildProject": "../../Source/GTKSystem.Windows.Forms/GTKSystem.Windows.Forms.csproj" } }, "projectFileDependencyGroups": { - ".NETCoreApp,Version=v3.1": [ - "GtkSharp >= 3.24.24.34" + "net8.0": [ + "GTKSystem.Windows.Forms >= 1.3.24.23", + "GTKSystem.Windows.FormsDesigner >= 1.0.0.4", + "GtkSharp >= 3.24.24.95" ] }, "packageFolders": { "C:\\Users\\chj\\.nuget\\packages\\": {}, + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {}, "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder": {} }, "project": { @@ -200,23 +2254,31 @@ "outputPath": "F:\\我的项目\\GTK\\gtksystem-windows-forms\\Samples\\GTKWinFormsApp\\obj\\", "projectStyle": "PackageReference", "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages", "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder" ], "configFilePaths": [ "C:\\Users\\chj\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" ], "originalTargetFrameworks": [ - "netcoreapp3.1" + "net8.0" ], "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "C:\\Users\\chj\\.nuget\\packages": {}, "https://api.nuget.org/v3/index.json": {}, "https://www.nuget.org/api/v2/": {} }, "frameworks": { - "netcoreapp3.1": { - "targetAlias": "netcoreapp3.1", - "projectReferences": {} + "net8.0": { + "targetAlias": "net8.0", + "projectReferences": { + "F:\\我的项目\\GTK\\gtksystem-windows-forms\\Source\\GTKSystem.Windows.Forms\\GTKSystem.Windows.Forms.csproj": { + "projectPath": "F:\\我的项目\\GTK\\gtksystem-windows-forms\\Source\\GTKSystem.Windows.Forms\\GTKSystem.Windows.Forms.csproj" + } + } } }, "warningProperties": { @@ -226,12 +2288,16 @@ } }, "frameworks": { - "netcoreapp3.1": { - "targetAlias": "netcoreapp3.1", + "net8.0": { + "targetAlias": "net8.0", "dependencies": { + "GTKSystem.Windows.FormsDesigner": { + "target": "Package", + "version": "[1.0.0.4, )" + }, "GtkSharp": { "target": "Package", - "version": "[3.24.24.34, )" + "version": "[3.24.24.95, )" } }, "imports": [ @@ -240,7 +2306,8 @@ "net47", "net471", "net472", - "net48" + "net48", + "net481" ], "assetTargetFallback": true, "warn": true, @@ -249,7 +2316,7 @@ "privateAssets": "all" } }, - "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\5.0.203\\RuntimeIdentifierGraph.json" + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.100/PortableRuntimeIdentifierGraph.json" } } } diff --git a/Samples/GTKWinFormsApp/obj/project.nuget.cache b/Samples/GTKWinFormsApp/obj/project.nuget.cache index c8d5ae431a689a1953f68799b942041212b5c382..e509ddd28aca1092ca253d9829044cf925cf74f3 100644 --- a/Samples/GTKWinFormsApp/obj/project.nuget.cache +++ b/Samples/GTKWinFormsApp/obj/project.nuget.cache @@ -1,16 +1,49 @@ { "version": 2, - "dgSpecHash": "aTe6uVpp8CE3Bd87XqUZ+3gxnsfshEiVJoQNkq/Le9kWMNXB/2uDLsauvL2iuCHQzk+ku51tQOOeGZjAEJfpkQ==", + "dgSpecHash": "rTS3VVnaFmVDjV1NlfLqeQ6w+ol7DxOsjQpHBertHdPgIc4I4P34twU+I9/8bHFpS2BLQO/jzz9U+ptxLwd0Zw==", "success": true, "projectFilePath": "F:\\我的项目\\GTK\\gtksystem-windows-forms\\Samples\\GTKWinFormsApp\\GTKWinFormsApp.csproj", "expectedPackageFiles": [ - "C:\\Users\\chj\\.nuget\\packages\\atksharp\\3.24.24.34\\atksharp.3.24.24.34.nupkg.sha512", - "C:\\Users\\chj\\.nuget\\packages\\cairosharp\\3.24.24.34\\cairosharp.3.24.24.34.nupkg.sha512", - "C:\\Users\\chj\\.nuget\\packages\\gdksharp\\3.24.24.34\\gdksharp.3.24.24.34.nupkg.sha512", - "C:\\Users\\chj\\.nuget\\packages\\giosharp\\3.24.24.34\\giosharp.3.24.24.34.nupkg.sha512", - "C:\\Users\\chj\\.nuget\\packages\\glibsharp\\3.24.24.34\\glibsharp.3.24.24.34.nupkg.sha512", - "C:\\Users\\chj\\.nuget\\packages\\gtksharp\\3.24.24.34\\gtksharp.3.24.24.34.nupkg.sha512", - "C:\\Users\\chj\\.nuget\\packages\\pangosharp\\3.24.24.34\\pangosharp.3.24.24.34.nupkg.sha512" + "C:\\Users\\chj\\.nuget\\packages\\atksharp\\3.24.24.95\\atksharp.3.24.24.95.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\cairosharp\\3.24.24.95\\cairosharp.3.24.24.95.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\gdksharp\\3.24.24.95\\gdksharp.3.24.24.95.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\giosharp\\3.24.24.95\\giosharp.3.24.24.95.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\glibsharp\\3.24.24.95\\glibsharp.3.24.24.95.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\gtksharp\\3.24.24.95\\gtksharp.3.24.24.95.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\gtksystem.windows.formsdesigner\\1.0.0.4\\gtksystem.windows.formsdesigner.1.0.0.4.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\microsoft.build.framework\\17.1.0\\microsoft.build.framework.17.1.0.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\microsoft.build.utilities.core\\17.1.0\\microsoft.build.utilities.core.17.1.0.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\microsoft.net.stringtools\\1.0.0\\microsoft.net.stringtools.1.0.0.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\microsoft.netcore.platforms\\3.1.0\\microsoft.netcore.platforms.3.1.0.nupkg.sha512", + "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\microsoft.netcore.targets\\1.1.0\\microsoft.netcore.targets.1.1.0.nupkg.sha512", + "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\microsoft.win32.registry\\4.3.0\\microsoft.win32.registry.4.3.0.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\microsoft.win32.systemevents\\4.7.0\\microsoft.win32.systemevents.4.7.0.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\pangosharp\\3.24.24.95\\pangosharp.3.24.24.95.nupkg.sha512", + "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.collections\\4.3.0\\system.collections.4.3.0.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\system.collections.immutable\\5.0.0\\system.collections.immutable.5.0.0.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\system.configuration.configurationmanager\\4.7.0\\system.configuration.configurationmanager.4.7.0.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\system.drawing.common\\4.7.0\\system.drawing.common.4.7.0.nupkg.sha512", + "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.globalization\\4.3.0\\system.globalization.4.3.0.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\system.io\\4.3.0\\system.io.4.3.0.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\system.memory\\4.5.4\\system.memory.4.5.4.nupkg.sha512", + "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.reflection\\4.3.0\\system.reflection.4.3.0.nupkg.sha512", + "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.reflection.primitives\\4.3.0\\system.reflection.primitives.4.3.0.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\system.resources.extensions\\8.0.0\\system.resources.extensions.8.0.0.nupkg.sha512", + "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.resources.resourcemanager\\4.3.0\\system.resources.resourcemanager.4.3.0.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\system.runtime\\4.3.0\\system.runtime.4.3.0.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\system.runtime.compilerservices.unsafe\\5.0.0\\system.runtime.compilerservices.unsafe.5.0.0.nupkg.sha512", + "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.runtime.extensions\\4.3.0\\system.runtime.extensions.4.3.0.nupkg.sha512", + "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.runtime.handles\\4.3.0\\system.runtime.handles.4.3.0.nupkg.sha512", + "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.runtime.interopservices\\4.3.0\\system.runtime.interopservices.4.3.0.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\system.security.accesscontrol\\4.7.0\\system.security.accesscontrol.4.7.0.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\system.security.cryptography.protecteddata\\4.7.0\\system.security.cryptography.protecteddata.4.7.0.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\system.security.permissions\\4.7.0\\system.security.permissions.4.7.0.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\system.security.principal.windows\\4.7.0\\system.security.principal.windows.4.7.0.nupkg.sha512", + "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.text.encoding\\4.3.0\\system.text.encoding.4.3.0.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\system.text.encoding.codepages\\4.0.1\\system.text.encoding.codepages.4.0.1.nupkg.sha512", + "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.threading\\4.0.11\\system.threading.4.0.11.nupkg.sha512", + "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder\\system.threading.tasks\\4.3.0\\system.threading.tasks.4.3.0.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\system.windows.extensions\\4.7.0\\system.windows.extensions.4.7.0.nupkg.sha512" ], "logs": [] } \ No newline at end of file diff --git "a/Samples/GTKWinFormsApp/\351\205\215\347\275\256\350\257\264\346\230\216.txt" "b/Samples/GTKWinFormsApp/\351\205\215\347\275\256\350\257\264\346\230\216.txt" deleted file mode 100644 index 5a6693ac2f6ec4d292b0384afeccdaad54b536f8..0000000000000000000000000000000000000000 --- "a/Samples/GTKWinFormsApp/\351\205\215\347\275\256\350\257\264\346\230\216.txt" +++ /dev/null @@ -1,25 +0,0 @@ - -1、新建System.Resources.ResourceManager类 -在项目下新建System.Resources.ResourceManager类,继承GTKSystem.Resources.ResourceManager,用于覆盖原生System.Resources.ResourceManager类。 -GTKSystem.Resources.ResourceManager实现了项目资源文件和图像文件读取。 -如果项目里没有使用资源图像文件,可以不用新建此文件。 - -2、新建System.ComponentModel.ComponentResourceManager类 -在项目下新建System.ComponentModel.ComponentResourceManager类,继承GTKSystem.ComponentModel.ComponentResourceManager,用于覆盖原生System.ComponentModel.ComponentResourceManager类。 -GTKSystem.ComponentModel.ComponentResourceManager实现了项目资源文件和图像文件读取(调用GTKSystem.Resources.ResourceManager)。 -如果项目里没有使用资源图像文件,可以不用新建此文件。 - -3、GTKWinFormsApp.csproj -配置UseWindowsForms为false,或者使用控制台应用程序 -false - -4、引用GTKSystem.Windows.Forms、System.Resources.Extensions -System.Resources.Extensions是空程序dll,VS加载Form界面时验证需要此dll. - -5、GTKWinFormsApp\obj\Debug\netcoreapp3.1\GTKWinFormsApp.designer.runtimeconfig.json -GTKWinFormsApp\obj\Release\netcoreapp3.1\GTKWinFormsApp.designer.runtimeconfig.json -将name设置为Microsoft.WindowsDesktop.App,用于VS支持可视化Form表单,重新加载工程或重启VS - "runtimeOptions": { - "framework": { - "name": "Microsoft.WindowsDesktop.App" - }, \ No newline at end of file diff --git a/Source/GTKSystem.Windows.Forms/Application/Application.cs b/Source/GTKSystem.Windows.Forms/Application/Application.cs index d2c07a35fe0133523716c6c59ee7ec60195ed5b4..02887b7a923ac400fb2a75bf726e17687455f5b6 100644 --- a/Source/GTKSystem.Windows.Forms/Application/Application.cs +++ b/Source/GTKSystem.Windows.Forms/Application/Application.cs @@ -1,14 +1,56 @@ using System.ComponentModel; using System.Globalization; +using System.Reflection; using System.Threading; +using System.Windows.Forms; namespace System.Windows.Forms { public sealed class Application { static Application() { - // Init(); + Init(); + } + + private static string appDataDirectory { get { + string[] assemblyFullName = Assembly.GetCallingAssembly().FullName.Split(","); + string _namespace = assemblyFullName[0]; + string _version = assemblyFullName[1].Split("=")[1]; + return $"{_namespace}\\{Assembly.GetExecutingAssembly().GetName().Name}\\{_version}"; + } + } + + public static string CommonAppDataPath { + get { + string thispath = $"{System.Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)}\\{appDataDirectory}"; + if(!System.IO.Directory.Exists(thispath)) + System.IO.Directory.CreateDirectory(thispath); + return thispath; + } + } + public static string UserAppDataPath + { + get + { + string thispath = $"{System.Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)}\\{appDataDirectory}"; + if (!System.IO.Directory.Exists(thispath)) + System.IO.Directory.CreateDirectory(thispath); + return thispath; + } + } + public static string LocalUserAppDataPath + { + get + { + string thispath = $"{System.Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)}\\{appDataDirectory}"; + if (!System.IO.Directory.Exists(thispath)) + System.IO.Directory.CreateDirectory(thispath); + return thispath; + } } + public static string ExecutablePath { get { return System.Diagnostics.Process.GetCurrentProcess().MainModule?.FileName; } } + public static string StartupPath { get { return Environment.CurrentDirectory; } } + private static readonly object internalSyncObject = new object(); public static CultureInfo CurrentCulture { @@ -34,52 +76,93 @@ namespace System.Windows.Forms } } - public static Gtk.Application App; - public static void Init() + public static Gtk.Application App { get; private set; } + public static Gtk.Application Init() { - Gtk.Application.Init(); - App = new Gtk.Application("GtkSystem.Windows.Forms", GLib.ApplicationFlags.None); - App.Register(GLib.Cancellable.Current); - var quitAction = new GLib.SimpleAction("quit", null); - quitAction.Activated += QuitActivated; - App.AddAction(quitAction); - - Gtk.CssProvider css = new Gtk.CssProvider(); - - css.LoadFromData(@" -.DefaultThemeStyle{border:solid 1px #ddaaaa;border-radius:0px;box-shadow: none;color:#993333;} -.DefaultThemeStyle.background{background-color:#ffeeee;} -.DefaultThemeStyle.titlebar{background-color:#996666;} -.DefaultThemeStyle border{border:solid 1px #ddaaaa;} -.DefaultThemeStyle button{color:#993333;border-radius:0px;} -.DefaultThemeStyle entry{border-radius:0px;} -.DefaultThemeStyle label{color:#993333;} -.DefaultThemeStyle>button{border:solid 1px #cccccc;} + if (App == null) + { + Gtk.Application.Init(); + App = new Gtk.Application("GtkSystem.Windows.Forms", GLib.ApplicationFlags.IsLauncher); + //App = new Gtk.Application("GtkSystem.Windows.Forms", GLib.ApplicationFlags.None); + //App.Register(GLib.Cancellable.Current); + var quitAction = new GLib.SimpleAction("quit", null); + quitAction.Activated += QuitActivated; + App.AddAction(quitAction); + + Gtk.CssProvider css = new Gtk.CssProvider(); + //粉红色主题 + //.DefaultThemeStyle{border:solid 1px #ddaaaa;border-radius:0px;box-shadow: none;color:#993333;} + //.DefaultThemeStyle.background{background-color:#ffeeee;} + //.DefaultThemeStyle.titlebar{background-color:#996666;} + //.DefaultThemeStyle border{border:solid 1px #ddaaaa;} + //.DefaultThemeStyle button{color:#993333;border-radius:0px;} + //.DefaultThemeStyle entry{border-radius:0px;} + //.DefaultThemeStyle label{color:#993333;} + //.DefaultThemeStyle>button{border:solid 1px #cccccc;} + //.DefaultThemeStyle>entry{border:solid 1px #cccccc;} + //.DefaultThemeStyle header.top{background-color:#ffcccc;} + //.DefaultThemeStyle header.top tab:hover{background-color:#ffeeee;} + //.DefaultThemeStyle stack{background-color:#ffeeee;padding:0px;margin:0px;} + //.DefaultThemeStyle .view button{background-color:#ffcccc;} + //.DefaultThemeStyle:focus{border-color:#000099;} + //.DefaultThemeStyle:active{border-color:#000099;} + css.LoadFromData(@" +.DefaultThemeStyle{border-radius:0px;border:solid 1px #cccccc;box-shadow: none;color:#000000;} .DefaultThemeStyle>entry{border:solid 1px #cccccc;} -.DefaultThemeStyle header.top{background-color:#ffcccc;} -.DefaultThemeStyle header.top tab:hover{background-color:#ffeeee;} -.DefaultThemeStyle stack{background-color:#ffeeee;padding:0px;margin:0px;} -.DefaultThemeStyle .view button{background-color:#ffcccc;} -.DefaultThemeStyle:focus{border-color:#000099;} -.DefaultThemeStyle:active{border-color:#000099;} - -.Form{} -.BorderRadiusStyle{ ;} +.DefaultThemeStyle>button{border:solid 1px #cccccc;} +.DefaultThemeStyle button{border-radius:0px;} +.DefaultThemeStyle border{border:solid 1px #cccccc;} +.DefaultThemeStyle entry{border-radius:0px;background-color:#ffffff;} + +.BackgroundTransparent{padding:0px;background:transparent;background-color:transparent;} +/* +.DefaultThemeStyle{border:solid 1px #cccccc;border-radius:0px;box-shadow: none;color:#000000;} +.DefaultThemeStyle .background{background-color:#F6F5F4;} +.DefaultThemeStyle .titlebar{background-color:#666655;} +.DefaultThemeStyle .view{background:#ffffff} +.DefaultThemeStyle label{color:#000000;} +.DefaultThemeStyle header.top{background-color:#CFCFCF;} +.DefaultThemeStyle header.top tab{background-color:#C7C7C7;} +.DefaultThemeStyle header.top tab:hover{background-color:#EFEFEF;} + +.DefaultThemeStyle stack{background-color:#ffffff;padding:0px;margin:0px;} +.DefaultThemeStyle .view button{background:linear-gradient(#f6f6f6,#f9f9f9)} +.DefaultThemeStyle:focus{border-color:#eeeeee;} +.DefaultThemeStyle:active{border-color:#cccccc;} +*/ + + +.Form {border-width:0px;padding:0px;margin:0px;} +.ScrollForm {border-right:solid 15px #e6e5e4;} + .MessageBox{} -.MessageBox button{margin:10px;} +.MessageBox button{margin:10px;border-radius:0px;} .MessageBox-BarTitle{font-size:20px;padding-bottom:10px;} .TabControl{padding:0px;} +.TabControl header.top{background-color:#e7e5e3;} +.TabControl header.top tab:hover{background-color:#EFEFEF;} +.TabControl header.top tab:checked{background-color:#f9f9f9;} + .DataGridView{margin:0px;} -.DataGridView treeview.view{margin:0px;padding:0px;border-bottom:solid 1px #dddddd;border-left-width:0px;border-top-width:0px;;border-right-width:0px;} +.DataGridView treeview.view{background-color:#ffffff;margin:0px;padding:0px;border-bottom:solid 1px #dddddd;border-left-width:0px;border-top-width:0px;;border-right-width:0px;} +.DataGridView treeview.view:hover{background-color:#ffff88;} +.DataGridView treeview.view:selected{background-color:#5555ff;color:#ffffff;} +.DataGridView treeview.view header{background-color:#EFEFEF;} +.DataGridView treeview.view header button{background-color:#f9f9f9; padding-top:6px;padding-bottom:6px;} +.DataGridView treeview.view header button:hover{background-color:#cccccc;} + .DataGridView button{} -.GridViewCell-Button{ font-size:12px; border:solid 1px #c0c0c0; border-radius:0px; background:linear-gradient(#eeeeee,#e2e2e2);box-shadow:0px 1px 1px 1px #eeeeee;} -.GridViewCell-Button:hover{ background:linear-gradient(#f6f6f6,#f9f9f9);} +.GridViewCell-Button{ font-size:12px; border:solid 1px #aaaaaa; border-radius:0px; background:linear-gradient(#e9e9e9,#e0e0e0);} +.GridViewCell-Button:hover{ border:solid 1px #aaaaaa;background:linear-gradient(#eeeeee,#efefef);} .GridViewCell-Button:selected{ color:blue} -.TreeView{border-bottom-width:0px;border-left-width:1px;border-top-width:1px;;border-right-width:1px;} +.TreeView{border-bottom-width:0px;border-left-width:0px;border-top-width:1px;;border-right-width:0px;} .TreeView button{border-left-width:0px;border-right-width:0px;} +.TreeView:selected{ color:blue} + .Button{padding:0px;} -.TextBox{background-color:#ffffff;padding:0px 3px 0px 3px;} -.RichTextBox .view{background-color:#ffffff;border-width:1px;} + +.TextBox{padding:0px 3px 0px 3px;caret-color:#999999;} +.RichTextBox {border-width:1px;caret-color:#999999;} .RichTextBox border.top{border-width:1px;} .RichTextBox border.left{border-width:1px;} .RichTextBox border.right{border-width:1px;} @@ -87,9 +170,10 @@ namespace System.Windows.Forms .CheckBox {border-width:0px;} .CheckedListBox {background-color:#ffffff;} .RadioButton {border-width:0px;} -.Label{border-width:0px;} + +.Label{border-width:0px;background-color:#F6F5F4;} .LinkLabel{border-width:0px;} -.NumericUpDown{padding:0px;min-height:6px;min-width:6px;} +.NumericUpDown{padding:0px;min-height:6px;min-width:6px;caret-color:#999999;} .NumericUpDown button.up{border-width:0px;padding:0px;font-size:6px;min-height:6px;min-width:6px;} .NumericUpDown button.down{border-width:0px;padding:0px;font-size:6px;min-height:6px;min-width:6px;} .NumericUpDown entry{border-width:0px;padding:0px 0px 0px 3px;min-height:6px;min-width:6px;} @@ -97,32 +181,53 @@ namespace System.Windows.Forms .ComboBox{border-width:0px;padding:0px;} .ComboBox button{padding:0px;} .ComboBox entry{padding:0px;} -.Panel{} +.Panel{border-width:0px;} .SplitContainer.horizontal{border-width:1px;} -.GroupBox{} -.ButtonFontStyle{font-size:14px;color:red;} -"); +.GroupBox{border-color:#DCDCDC;} +.TableLayoutPanel viewport{border:solid 1px #eeeeee;} +.FlowLayoutPanel{} +.ToolStrip{padding:0px;background:linear-gradient(#fefefd,#efefef);border-width:0px;background-color:#F6F5F4;} +.ToolStrip viewport{border-width:0px;} +.ToolStripMenuItemNoChecked check{color:transparent;opacity:0;} +.UserControl{border-width:0px;} + +.StatusStrip{padding:0px;background-image:linear-gradient(#ECECEC,#e7e5e3,#e7e5e3); border-width:0px; border-top:solid 1px #c6c6c6;} +.StatusStrip viewport{border-width:0px;} - Gtk.StyleContext.AddProviderForScreen(Gdk.Screen.Default, css, 800); +.MenuStrip{padding:0px;background-color:#F6F5F4;background-image:none;border-width:0px;} +.MenuStrip viewport{border-width:0px;} + +.ListBox{border-width:1px;background-color:#ffffff; padding:0px;} +.ListView{background-color:#ffffff; padding:0px;} +.ListView .Label{background-color:transparent;} +.ListViewHeader { background-color:#eeeeee;} +.ListView .Group{background-color:#fefefe; background-image:linear-gradient(#ffffff 12px,#3333bb 3px,#ffffff 14px);} +.ListView .Title{background-color:#fefefe; padding-left:5px;padding-right:5px; color:#3333bb;} +.ListView .SubTitle{padding-left:5px;padding-right:5px;color:#666666; font-size:14px; } + +"); + Gtk.StyleContext.AddProviderForScreen(Gdk.Screen.Default, css, 800); + } + return App; } private static void QuitActivated(object sender, EventArgs e) { Gtk.Application.Quit(); } public static bool SetHighDpiMode(HighDpiMode highDpiMode) { - return false; + return true; } public static void EnableVisualStyles() { } public static void SetCompatibleTextRenderingDefault(bool defaultValue) { - Init(); + } public static void Run(Form mainForm) { - mainForm.Control.Destroyed += Control_Destroyed; + mainForm.Widget.Destroyed += Control_Destroyed; mainForm.Show(); Gtk.Application.Run(); } @@ -166,4 +271,21 @@ namespace System.Windows.Forms } } + public static class InitAppliction + { + private static Gtk.Application app = Application.Init(); + static InitAppliction() + { + + } + } +} +public sealed class ApplicationConfiguration +{ + public static void Initialize() + { + global::System.Windows.Forms.Application.EnableVisualStyles(); + global::System.Windows.Forms.Application.SetCompatibleTextRenderingDefault(false); + global::System.Windows.Forms.Application.SetHighDpiMode(HighDpiMode.SystemAware); + } } diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Button.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Button.cs index 447708bdc9c5d472e5115b5f7ab3fbbdfd7aa10b..4c64c43e54b867b9bf23c4a34f562d5bd081da43 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/Button.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Button.cs @@ -1,23 +1,49 @@ -using Gdk; +/* + * 基于GTK组件开发,兼容原生C#控件winform界面的跨平台界面组件。 + * 使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows、linux、macos运行 + * 技术支持438865652@qq.com,https://gitee.com/easywebfactory, https://www.cnblogs.com/easywebfactory + * author:chenhongjin + * date: 2024/1/3 + */ + +using Atk; +using GLib; using Gtk; -using GTKSystem.Resources; -using Pango; +using GTKSystem.Windows.Forms.GTKControls.ControlBase; +using GTKSystem.Windows.Forms.Utility; +using System.Collections.Generic; using System.ComponentModel; +using System.Diagnostics; using System.Drawing; -using System.IO; -using System.Reflection; namespace System.Windows.Forms { [DesignerCategory("Component")] - public partial class Button : WidgetControl + public partial class Button : Control { - public Button() : base(new Gtk.Label()) + public readonly ButtonBase self = new ButtonBase(); + public override object GtkControl => self; + public Button() : base() { - Widget.StyleContext.AddClass("Button"); - Widget.StyleContext.AddClass("BorderRadiusStyle"); + } + public override string Text { get => self.Label; set => self.Label = value; } - public override string Text { get => base.Control.Label; set => base.Control.Label = value; } + public override event EventHandler Click + { + add { self.Clicked += value; } + remove { self.Clicked -= value; } + } + private System.Drawing.Image _image; + public System.Drawing.Image Image + { + get { return _image; } + set + { + _image = value; + self.Override.Image = new Bitmap(value.PixbufData); + } + } + public System.Drawing.ContentAlignment ImageAlign { get; set; } } } diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/CheckBox.cs b/Source/GTKSystem.Windows.Forms/GTKControls/CheckBox.cs index dac770b880184e4333c0529ab86668d6628e73cb..9fd04d02dc111c6f45ce3330300df156957000b0 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/CheckBox.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/CheckBox.cs @@ -1,32 +1,49 @@ -//基于GTK3.24.24.34版本组件开发,兼容原生C#控件winform界面的跨平台界面组件。 -//使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows和linux运行 -//技术支持438865652@qq.com,https://www.cnblogs.com/easywebfactory +/* + * 基于GTK组件开发,兼容原生C#控件winform界面的跨平台界面组件。 + * 使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows、linux、macos运行 + * 技术支持438865652@qq.com,https://gitee.com/easywebfactory, https://www.cnblogs.com/easywebfactory + * author:chenhongjin + * date: 2024/1/3 + */ +using GTKSystem.Windows.Forms.GTKControls.ControlBase; +using System.Collections.Generic; using System.ComponentModel; using System.Drawing; +using System.Runtime.CompilerServices; namespace System.Windows.Forms { [DesignerCategory("Component")] - public partial class CheckBox : WidgetControl + public partial class CheckBox : Control { + public readonly CheckBoxBase self = new CheckBoxBase(); + public override object GtkControl => self; + private EventHandlerList handerlist = new EventHandlerList(); public CheckBox() { - Widget.StyleContext.AddClass("CheckBox"); - Widget.StyleContext.AddClass("BorderRadiusStyle"); + self.Toggled += Self_Toggled; } - public override string Text { get { return base.Control.Label; } set { base.Control.Label = value; } } - public bool Checked { get { return base.Control.Active; } set { base.Control.Active = value; } } - public CheckState CheckState { get { return base.Control.Active ? CheckState.Checked : CheckState.Unchecked; } set { base.Control.Active = value != CheckState.Unchecked; } } - + private void Self_Toggled(object sender, EventArgs e) + { + if(handerlist["CheckedChanged"]!=null) + handerlist["CheckedChanged"].DynamicInvoke(this, e); + if (handerlist["CheckStateChanged"] != null) + handerlist["CheckStateChanged"].DynamicInvoke(this, e); + } + + public override string Text { get { return self.Label; } set { self.Label = value; } } + public bool Checked { get { return self.Active; } set { self.Active = value; } } + public CheckState CheckState { get { return self.Active ? CheckState.Checked : CheckState.Unchecked; } set { self.Active = value != CheckState.Unchecked; } } public event EventHandler CheckedChanged { - add { base.Control.Toggled += (object sender, EventArgs e) => { if (base.Control.IsRealized) { value.Invoke(sender, e); } }; } - remove { base.Control.Toggled -= (object sender, EventArgs e) => { if (base.Control.IsRealized) { value.Invoke(sender, e); } }; } + add { handerlist.AddHandler("CheckedChanged", value); } + remove { handerlist.RemoveHandler("CheckedChanged", value); } } + public virtual event EventHandler CheckStateChanged { - add { base.Control.Toggled += (object sender, EventArgs e) => { if (base.Control.IsRealized) { value.Invoke(sender, e); } }; } - remove { base.Control.Toggled -= (object sender, EventArgs e) => { if (base.Control.IsRealized) { value.Invoke(sender, e); } }; } + add { handerlist.AddHandler("CheckStateChanged", value); } + remove { handerlist.RemoveHandler("CheckStateChanged", value); } } } } diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/CheckedListBox.cs b/Source/GTKSystem.Windows.Forms/GTKControls/CheckedListBox.cs index 48300df41064d4382529e380e068fb6f9b42ec02..6926ba7821eb227e2c06486c50340a5491efba8e 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/CheckedListBox.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/CheckedListBox.cs @@ -1,45 +1,88 @@ -//基于GTK3.24.24.34版本组件开发,兼容原生C#控件winform界面的跨平台界面组件。 -//使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows和linux运行 -//技术支持438865652@qq.com,https://www.cnblogs.com/easywebfactory +/* + * 基于GTK组件开发,兼容原生C#控件winform界面的跨平台界面组件。 + * 使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows、linux、macos运行 + * 技术支持438865652@qq.com,https://gitee.com/easywebfactory, https://www.cnblogs.com/easywebfactory + * author:chenhongjin + * date: 2024/1/3 + */ + +using GLib; +using Gtk; +using GTKSystem.Windows.Forms.GTKControls.ControlBase; +using Pango; using System.Collections; using System.Collections.Generic; using System.ComponentModel; - namespace System.Windows.Forms { [DesignerCategory("Component")] - public partial class CheckedListBox : WidgetControl + public partial class CheckedListBox : ContainerControl { - ObjectCollection _items; - public CheckedListBox() : base()//base(Gtk.Orientation.Vertical, 0) + public readonly CheckedListBoxBase self = new CheckedListBoxBase(); + public override object GtkControl => self; + internal Gtk.FlowBox _flow = new Gtk.FlowBox(); + private ObjectCollection _items; + public CheckedListBox() : base() { - Widget.StyleContext.AddClass("CheckedListBox"); - Widget.StyleContext.AddClass("BorderRadiusStyle"); - _items = new ObjectCollection(this); + _flow.Orientation = Gtk.Orientation.Horizontal; + _flow.Halign = Gtk.Align.Start; + _flow.Valign = Gtk.Align.Start; + _items = new ObjectCollection(_flow); + _flow.ChildActivated += Control_ChildActivated; + _flow.Realized += _flow_Realized; + Gtk.ScrolledWindow scrolledWindow = new Gtk.ScrolledWindow(); + scrolledWindow.Halign = Gtk.Align.Fill; + scrolledWindow.Valign = Gtk.Align.Fill; + scrolledWindow.Hexpand = true; + scrolledWindow.Vexpand = true; + scrolledWindow.Child = _flow; + self.Child = scrolledWindow; + } + private void _flow_Realized(object sender, EventArgs e) + { + foreach(var item in _items) + { + AddItem(item, false, -1); + } } - + private void Control_ChildActivated(object o, Gtk.ChildActivatedArgs args) + { + int rowIndex = args.Child.Index; + object sender = this.Items[rowIndex]; + if (SelectedIndexChanged != null) + SelectedIndexChanged(sender, args); + if (SelectedValueChanged != null) + SelectedValueChanged(sender, args); + } + + public int ColumnWidth { get; set; } = 160; public bool MultiColumn { get; set; } + //public bool MultiColumn1 + //{ + // get { return _flow.Orientation == Gtk.Orientation.Vertical; } + // set { _flow.Orientation = value == true ? Gtk.Orientation.Vertical : Gtk.Orientation.Horizontal; } + //} + public bool HorizontalScrollbar { get; set; } public bool FormattingEnabled { get; set; } public int ItemHeight { get; set; } public SelectionMode SelectionMode { get; set; } - private bool isClearSelected; public void ClearSelected() { - isClearSelected = true; - base.Control.UnselectAll(); - foreach (object item in _items) - { - CheckBox box = (CheckBox)item; - if (box.Checked == true) - box.Checked = false; - } - isClearSelected = false; + foreach(Gtk.FlowBoxChild wi in _flow.Children) { + Gtk.Widget box = ((Gtk.Box)wi.Child).Children[0]; + if (box is Gtk.CheckButton check) + { + check.Active = false; + } + }; + _flow.UnselectAll(); } public bool CheckOnClick { get; set; } + public override Drawing.Color BackColor { get => base.BackColor; set => base.BackColor = value; } public ObjectCollection Items { get { @@ -74,65 +117,98 @@ namespace System.Windows.Forms return items; } } - public void SendEvent(object sender, EventArgs e) - { - if (isClearSelected == false) - { - CheckBox checkbox = (CheckBox)sender; - base.Control.SelectRow(base.Control.GetRowAtIndex(Convert.ToInt32(checkbox.Name))); - - if (ItemCheck != null) - ItemCheck(sender, new ItemCheckEventArgs(Convert.ToInt32(checkbox.Name), checkbox.CheckState, checkbox.CheckState == CheckState.Unchecked ? CheckState.Checked : CheckState.Unchecked)); - if (SelectedIndexChanged != null) - SelectedIndexChanged(checkbox, e); - if (SelectedValueChanged != null) - SelectedValueChanged(checkbox, e); - } - } public event ItemCheckEventHandler ItemCheck; public event EventHandler SelectedIndexChanged; public event EventHandler SelectedValueChanged; - - public class ObjectCollection : ControlCollection + internal void AddItem(object item, bool isChecked, int position) { - private CheckedListBox __owner;//CheckedListBox - public ObjectCollection(CheckedListBox owner) : base(owner,typeof(CheckBox)) + Gtk.CheckButton box = new Gtk.CheckButton(); + box.Label = " ";// item.ToString(); + box.Active = isChecked; + box.WidthRequest = 20; + box.Halign = Gtk.Align.Start; + box.Valign = Gtk.Align.Start; + box.Toggled += (object sender, EventArgs e) => + { + Gtk.CheckButton box = (Gtk.CheckButton)sender; + Gtk.FlowBoxChild item = box.Parent.Parent as Gtk.FlowBoxChild; + if (this.ItemCheck != null) + this.ItemCheck(item.TooltipText, new ItemCheckEventArgs(item.Index, box.Active == true ? CheckState.Checked : CheckState.Unchecked, box.Active == false ? CheckState.Checked : CheckState.Unchecked)); + if (this.CheckOnClick == true) + this._flow.SelectChild(item); + }; + Gtk.Box hBox = new Gtk.Box(Gtk.Orientation.Horizontal, 0); + hBox.Add(box); + hBox.Add(new Gtk.Label(item.ToString()) { Xalign = 0, Halign = Gtk.Align.Start, Valign = Gtk.Align.Start, WidthRequest = this.ColumnWidth, Ellipsize=EllipsizeMode.End }); ; + + Gtk.FlowBoxChild boxitem = new Gtk.FlowBoxChild(); + boxitem.HeightRequest = this.ItemHeight; + if (this.MultiColumn) { - __owner = owner; + boxitem.WidthRequest = this.ColumnWidth; + this._flow.MinChildrenPerLine = Convert.ToUInt32(this.Width / this.ColumnWidth); + this._flow.MaxChildrenPerLine = Convert.ToUInt32(this.Width / this.ColumnWidth); } - public override void Add(Type itemType, object item) + boxitem.Valign = Gtk.Align.Fill; + boxitem.Halign = Gtk.Align.Fill; + boxitem.TooltipText = item.ToString(); + boxitem.Add(hBox); + if (position < 0) { - CheckBox box = new CheckBox(); - box.Control.Label = item.ToString(); - box.Control.Name = Count.ToString(); - - box.Control.Toggled += (object sender, EventArgs e) => + this._flow.Add(boxitem); + if (self.IsRealized) { - __owner.SendEvent(box, e); - }; - base.Add(box); + self.ShowAll(); + } + } + else + { + this._flow.Insert(boxitem, position); + if (self.IsRealized) + { + self.ShowAll(); + } + } + } + public class ObjectCollection : ArrayList + { + public ObjectCollection(Gtk.Container ownerContainer) + { + + } + public override int Add(object value) + { + return AddCore(value, false, -1); + } + public int Add(object item, bool isChecked) + { + return AddCore(item, isChecked, -1); + } + + public int Add(object item, CheckState state) + { + return AddCore(item, state== CheckState.Checked, -1); } - /// - /// Lets the user add an item to the listbox with the given initial value - /// for the Checked portion of the item. - /// - public int Add(CheckBox item, bool isChecked) + public int AddCore(object item, bool isChecked, int position) { - item.Checked = isChecked; - return Add(item, isChecked ? CheckState.Checked : CheckState.Unchecked); + if (position < 0) + { + return base.Add(item); + } + else + { + base.Insert(position, item); + return position; + } } - /// - /// Lets the user add an item to the listbox with the given initial value - /// for the Checked portion of the item. - /// - public int Add(CheckBox item, CheckState state) + public override void AddRange(ICollection c) { - item.CheckState = state; - int index = base.Add(item); - return index; + foreach (object o in c) + AddCore(o, false, -1); + base.AddRange(c); } } diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Collection/BaseCollection.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Collection/BaseCollection.cs index 1a1380c0c6075fa2b6cd48879a54bacd481b2569..f44959bf27ff5d009b29c4ea62c8880025d327f6 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/Collection/BaseCollection.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Collection/BaseCollection.cs @@ -4,25 +4,17 @@ using System.ComponentModel; namespace System.Windows.Forms { - /// Provides the base functionality for creating data-related collections in the namespace. + public class BaseCollection : MarshalByRefObject, ICollection, IEnumerable { - private ArrayList _list = new ArrayList(); - /// Gets the total number of elements in the collection. - /// The total number of elements in the collection. [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Advanced)] public virtual int Count { - get - { - return _list.Count; - } + get; } - /// Gets a value indicating whether the collection is read-only. - /// This property is always . [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Advanced)] public bool IsReadOnly @@ -33,8 +25,6 @@ namespace System.Windows.Forms } } - /// Gets a value indicating whether access to the is synchronized. - /// This property always returns . [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Advanced)] public bool IsSynchronized @@ -45,8 +35,6 @@ namespace System.Windows.Forms } } - /// Gets an object that can be used to synchronize access to the . - /// An object that can be used to synchronize the . [Browsable(false)] [EditorBrowsable(EditorBrowsableState.Advanced)] public object SyncRoot @@ -57,33 +45,21 @@ namespace System.Windows.Forms } } - /// Gets the list of elements contained in the instance. - /// An containing the elements of the collection. This property returns unless overridden in a derived class. protected virtual ArrayList List { - get - { - return _list; - } + get; } - - /// Copies all the elements of the current one-dimensional to the specified one-dimensional starting at the specified destination index. - /// The one-dimensional that is the destination of the elements copied from the current . - /// The zero-based relative index in at which copying begins. public void CopyTo(Array ar, int index) { - _list.CopyTo(ar, index); + } - /// Gets the object that enables iterating through the members of the collection. - /// An object that implements the interface. - public IEnumerator GetEnumerator() + public virtual IEnumerator GetEnumerator() { - return _list.GetEnumerator(); + throw new NotImplementedException(); } - /// Initializes a new instance of the class. public BaseCollection() { diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Collection/Binding.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Collection/Binding.cs new file mode 100644 index 0000000000000000000000000000000000000000..5af2f7b8ce750d196286e4d1d5d54749bd52d231 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Collection/Binding.cs @@ -0,0 +1,232 @@ +using System.Collections; +using System.ComponentModel; +using System.Reflection; +using System.Runtime.CompilerServices; + +namespace System.Windows.Forms +{ + public class Binding + { + public object DataSource + { + [CompilerGenerated] + get; + internal set; + } + + public BindingMemberInfo BindingMemberInfo + { + [CompilerGenerated] + get; + internal set; + } + + [DefaultValue(null)] + public IBindableComponent BindableComponent + { + [CompilerGenerated] + get; + internal set; + } + + [DefaultValue(null)] + public Control Control + { + get; + internal set; + } + + internal bool IsBindable => + BindableComponent != null + && !string.IsNullOrEmpty(PropertyName) + && DataSource != null; + + public BindingManagerBase BindingManagerBase + { + get; + internal set; + } + + [DefaultValue("")] + public string PropertyName + { + [CompilerGenerated] + get; + internal set; + } + [DefaultValue("")] + public string DataMember + { + [CompilerGenerated] + get; + internal set; + } + [DefaultValue(false)] + public bool FormattingEnabled + { + get; set; + } + + [DefaultValue(null)] + public IFormatProvider FormatInfo + { + get; set; + } + + public string FormatString + { + get; set; + } + + public object NullValue + { + get; set; + } + + public object DataSourceNullValue + { + get; set; + } + + public ControlUpdateMode ControlUpdateMode + { + get; set; + } + + public DataSourceUpdateMode DataSourceUpdateMode + { + get;set; + } + + public event BindingCompleteEventHandler BindingComplete; + public event ConvertEventHandler Parse; + + public event ConvertEventHandler Format; + public Binding(string propertyName, object dataSource, string dataMember) : this(propertyName, dataSource, dataMember, true, DataSourceUpdateMode.OnPropertyChanged, null, null, null) + { + } + + public Binding(string propertyName, object dataSource, string dataMember, bool formattingEnabled) : this(propertyName, dataSource, dataMember, formattingEnabled, DataSourceUpdateMode.OnPropertyChanged, null, null, null) + { + } + + public Binding(string propertyName, object dataSource, string dataMember, bool formattingEnabled, DataSourceUpdateMode dataSourceUpdateMode) : this(propertyName, dataSource, dataMember, formattingEnabled, dataSourceUpdateMode, null, null, null) + { + } + + public Binding(string propertyName, object dataSource, string dataMember, bool formattingEnabled, DataSourceUpdateMode dataSourceUpdateMode, object nullValue) : this(propertyName, dataSource, dataMember, formattingEnabled, dataSourceUpdateMode, nullValue, null, null) + { + + } + + public Binding(string propertyName, object dataSource, string dataMember, bool formattingEnabled, DataSourceUpdateMode dataSourceUpdateMode, object nullValue, string formatString) : this(propertyName, dataSource, dataMember, formattingEnabled, dataSourceUpdateMode, nullValue, formatString, null) + { + + } + + public Binding(string propertyName, object dataSource, string dataMember, bool formattingEnabled, DataSourceUpdateMode dataSourceUpdateMode, object nullValue, string formatString, IFormatProvider formatInfo) + { + PropertyName = propertyName; + DataSource = dataSource; + DataMember = dataMember; + BindingMemberInfo = new BindingMemberInfo(dataMember); + FormattingEnabled = formattingEnabled; + DataSourceUpdateMode = dataSourceUpdateMode; + NullValue = nullValue; + FormatString = formatString; + FormatInfo = formatInfo; + OnPropertyChanged(PropertyName); + } + //Դ + public void WriteValue() + { + object _dataSource = DataSource ?? this.DataSourceNullValue; + if (this.Control != null && _dataSource != null) + { + WriteValueCore(_dataSource); + } + } + private void WriteValueCore(object data) + { + Type type = this.Control.GetType(); + object val = type.GetProperty(PropertyName).GetValue(this.Control) ?? this.NullValue; + if (val != null) + { + PropertyInfo propertyInfo = data.GetType().GetProperty(DataMember); + object corVal = Convert.ChangeType(val, propertyInfo.PropertyType); + if (Parse != null) + { + Parse(this, new ConvertEventArgs(corVal, propertyInfo.PropertyType)); + } + propertyInfo.SetValue(data, corVal); + } + } + //¿ͻ + public void ReadValue() + { + object _dataSource = DataSource ?? this.DataSourceNullValue; + if (this.Control != null && _dataSource != null) + { + if (_dataSource is IEnumerable list) + { + foreach (object data in list) + { + ReadValueCore(data); + } + } + else + { + ReadValueCore(_dataSource); + } + } + } + private void ReadValueCore(object data) + { + object val = data.GetType().GetProperty(DataMember).GetValue(data) ?? this.NullValue; + if (FormattingEnabled) + { + if (!string.IsNullOrEmpty(FormatString)) + { + Type oriType = val.GetType(); + val = string.Format(FormatString, val); + if (Format != null) + Format(this, new ConvertEventArgs(val, oriType)); + } + } + if (val != null) + { + Type type = this.Control.GetType(); + PropertyInfo propertyInfo = type.GetProperty(PropertyName); + if (val.GetType().Equals(propertyInfo.PropertyType)) + { + propertyInfo.SetValue(data, val); + } + else + { + object corVal = Convert.ChangeType(val, propertyInfo.PropertyType); + if (Parse != null) + { + Parse(this, new ConvertEventArgs(corVal, propertyInfo.PropertyType)); + } + propertyInfo.SetValue(this.Control, corVal); + } + } + } + public event PropertyChangedEventHandler PropertyChanged; + private void OnPropertyChanged(string propertyName) + { + if(DataSource is INotifyPropertyChanged notifyChanged) + { + notifyChanged.PropertyChanged += NotifyChanged_PropertyChanged; + } + } + + private void NotifyChanged_PropertyChanged(object sender, PropertyChangedEventArgs e) + { + if (PropertyChanged != null) + { + PropertyChanged(this, new PropertyChangedEventArgs(e.PropertyName)); + } + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Collection/BindingCompleteContext.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Collection/BindingCompleteContext.cs new file mode 100644 index 0000000000000000000000000000000000000000..a30332a3f7b74fc4fe16002c7c1ce380f8108807 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Collection/BindingCompleteContext.cs @@ -0,0 +1,8 @@ +namespace System.Windows.Forms +{ + public enum BindingCompleteContext + { + ControlUpdate, + DataSourceUpdate + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Collection/BindingCompleteEventArgs.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Collection/BindingCompleteEventArgs.cs new file mode 100644 index 0000000000000000000000000000000000000000..d2c5437e61435b25465e001daf084ed16c5ac132 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Collection/BindingCompleteEventArgs.cs @@ -0,0 +1,73 @@ +using System.ComponentModel; +using System.Runtime.CompilerServices; + +namespace System.Windows.Forms +{ + public class BindingCompleteEventArgs : CancelEventArgs + { + public Binding Binding + { + [CompilerGenerated] + get + { + throw null; + } + } + + public BindingCompleteState BindingCompleteState + { + [CompilerGenerated] + get + { + throw null; + } + } + + public BindingCompleteContext BindingCompleteContext + { + [CompilerGenerated] + get + { + throw null; + } + } + + public string ErrorText + { + [CompilerGenerated] + get + { + throw null; + } + } + + public Exception Exception + { + [CompilerGenerated] + get + { + throw null; + } + } + + public BindingCompleteEventArgs(Binding binding, BindingCompleteState state, BindingCompleteContext context, string errorText, Exception exception, bool cancel) + { + throw null; + } + + public BindingCompleteEventArgs(Binding binding, BindingCompleteState state, BindingCompleteContext context, string errorText, Exception exception) + { + throw null; + } + + public BindingCompleteEventArgs(Binding binding, BindingCompleteState state, BindingCompleteContext context, string errorText) + { + throw null; + } + + public BindingCompleteEventArgs(Binding binding, BindingCompleteState state, BindingCompleteContext context) + { + throw null; + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Collection/BindingCompleteEventHandler.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Collection/BindingCompleteEventHandler.cs new file mode 100644 index 0000000000000000000000000000000000000000..13fb402fd0b52774f04e693eb97ef4f9469d8a01 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Collection/BindingCompleteEventHandler.cs @@ -0,0 +1,4 @@ +namespace System.Windows.Forms +{ + public delegate void BindingCompleteEventHandler(object sender, BindingCompleteEventArgs e); +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Collection/BindingCompleteState.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Collection/BindingCompleteState.cs new file mode 100644 index 0000000000000000000000000000000000000000..40f8ef4553076decce3f37237d4b9173093b4e3c --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Collection/BindingCompleteState.cs @@ -0,0 +1,9 @@ +namespace System.Windows.Forms +{ + public enum BindingCompleteState + { + Success, + DataError, + Exception + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Collection/BindingManagerBase.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Collection/BindingManagerBase.cs new file mode 100644 index 0000000000000000000000000000000000000000..521851602f9bc17fe544d8de23ff14b566405dc6 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Collection/BindingManagerBase.cs @@ -0,0 +1,182 @@ +using System.Collections; +using System.ComponentModel; +using System.Diagnostics.CodeAnalysis; + +namespace System.Windows.Forms +{ + public abstract class BindingManagerBase + { + protected EventHandler onCurrentChangedHandler; + + protected EventHandler onPositionChangedHandler; + + private protected EventHandler _onCurrentItemChangedHandler; + + public BindingsCollection Bindings + { + get + { + throw null; + } + } + + public abstract object Current { get; } + + internal abstract Type BindType { get; } + + public abstract int Position { get; set; } + + internal abstract object DataSource { get; } + + internal abstract bool IsBinding { get; } + + public bool IsBindingSuspended + { + get + { + throw null; + } + } + + public abstract int Count { get; } + + public event BindingCompleteEventHandler BindingComplete + { + add + { + throw null; + } + remove + { + throw null; + } + } + + public event EventHandler CurrentChanged + { + add + { + throw null; + } + remove + { + throw null; + } + } + + public event EventHandler CurrentItemChanged + { + add + { + throw null; + } + remove + { + throw null; + } + } + + public event BindingManagerDataErrorEventHandler DataError + { + add + { + throw null; + } + remove + { + throw null; + } + } + + public event EventHandler PositionChanged + { + add + { + throw null; + } + remove + { + throw null; + } + } + + protected internal void OnBindingComplete(BindingCompleteEventArgs args) + { + throw null; + } + + protected internal abstract void OnCurrentChanged(EventArgs e); + + protected internal abstract void OnCurrentItemChanged(EventArgs e); + + protected internal void OnDataError(Exception e) + { + throw null; + } + + private protected abstract void SetDataSource(object dataSource); + + public BindingManagerBase() + { + throw null; + } + + internal BindingManagerBase(object dataSource) + { + throw null; + } + + internal abstract PropertyDescriptorCollection GetItemProperties(PropertyDescriptor[] listAccessors); + + public virtual PropertyDescriptorCollection GetItemProperties() + { + throw null; + } + + protected internal virtual PropertyDescriptorCollection GetItemProperties(ArrayList dataSources, ArrayList listAccessors) + { + throw null; + } + + //protected virtual PropertyDescriptorCollection GetItemProperties([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type listType, int offset, ArrayList dataSources, ArrayList listAccessors) + //{ + // throw null; + //} + protected virtual PropertyDescriptorCollection GetItemProperties(Type listType, int offset, ArrayList dataSources, ArrayList listAccessors) + { + throw null; + } + internal abstract string GetListName(); + + public abstract void CancelCurrentEdit(); + + public abstract void EndCurrentEdit(); + + public abstract void AddNew(); + + public abstract void RemoveAt(int index); + + protected abstract void UpdateIsBinding(); + + protected internal abstract string GetListName(ArrayList listAccessors); + + public abstract void SuspendBinding(); + + public abstract void ResumeBinding(); + + protected void PullData() + { + throw null; + } + + internal void PullData(out bool success) + { + throw null; + } + + protected void PushData() + { + throw null; + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Collection/BindingManagerDataErrorEventArgs.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Collection/BindingManagerDataErrorEventArgs.cs new file mode 100644 index 0000000000000000000000000000000000000000..bf3ccbd69f416dc7470c0e1fb104158bb6ad146d --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Collection/BindingManagerDataErrorEventArgs.cs @@ -0,0 +1,21 @@ +using System.Runtime.CompilerServices; + +namespace System.Windows.Forms +{ + public class BindingManagerDataErrorEventArgs : EventArgs + { + public Exception Exception + { + [CompilerGenerated] + get + { + throw null; + } + } + + public BindingManagerDataErrorEventArgs(Exception exception) + { + throw null; + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Collection/BindingManagerDataErrorEventHandler.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Collection/BindingManagerDataErrorEventHandler.cs new file mode 100644 index 0000000000000000000000000000000000000000..1e42026e2abaa75f23f79f4e877f707af7d64e2a --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Collection/BindingManagerDataErrorEventHandler.cs @@ -0,0 +1,4 @@ +namespace System.Windows.Forms +{ + public delegate void BindingManagerDataErrorEventHandler(object sender, BindingManagerDataErrorEventArgs e); +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Collection/BindingMemberInfo.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Collection/BindingMemberInfo.cs new file mode 100644 index 0000000000000000000000000000000000000000..f379b0444126e405595c3c2ffbf1d23984eaf9af --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Collection/BindingMemberInfo.cs @@ -0,0 +1,52 @@ +namespace System.Windows.Forms +{ + public readonly struct BindingMemberInfo : IEquatable + { + private readonly string _dataList; + + private readonly string _dataField; + + public string BindingPath => _dataList ?? string.Empty; + + public string BindingField => _dataField ?? string.Empty; + + public string BindingMember => BindingPath.Length > 0 + ? $"{BindingPath}.{BindingField}" + : BindingField; + + public BindingMemberInfo(string dataMember) + { + dataMember ??= string.Empty; + int lastDot = dataMember.LastIndexOf('.'); + if (lastDot != -1) + { + _dataList = dataMember.Substring(0, lastDot); + _dataField = dataMember.Substring(lastDot + 1); + } + else + { + _dataList = string.Empty; + _dataField = dataMember; + } + } + + public override bool Equals(object otherObject) + { + if (otherObject is BindingMemberInfo otherMember) + { + return Equals(otherMember); + + } + return false; + } + + public bool Equals(BindingMemberInfo other) + => string.Equals(BindingMember, other.BindingMember, StringComparison.OrdinalIgnoreCase); + + public static bool operator ==(BindingMemberInfo a, BindingMemberInfo b) => a.Equals(b); + + public static bool operator !=(BindingMemberInfo a, BindingMemberInfo b) => !a.Equals(b); + + public override int GetHashCode() => base.GetHashCode(); + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Collection/BindingSource.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Collection/BindingSource.cs new file mode 100644 index 0000000000000000000000000000000000000000..2445638eecde9e0de676780887d87c2a38913be9 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Collection/BindingSource.cs @@ -0,0 +1,703 @@ +using System.Collections; +using System.ComponentModel; +using System.Diagnostics.CodeAnalysis; +using System.Drawing.Design; +using System.Runtime.CompilerServices; + +namespace System.Windows.Forms +{ + [DefaultProperty("DataSource")] + [DefaultEvent("CurrentChanged")] + [ComplexBindingProperties("DataSource", "DataMember")] + public class BindingSource : Component, IBindingListView, ICollection, IEnumerable, IList, IBindingList, ITypedList, ICancelAddNew, ISupportInitializeNotification, ISupportInitialize, ICurrencyManagerProvider + { + [Browsable(false)] + public virtual CurrencyManager CurrencyManager + { + get + { + throw null; + } + } + + [Browsable(false)] + public object Current + { + get + { + throw null; + } + } + + + [DefaultValue("")] + [RefreshProperties(RefreshProperties.Repaint)] + public string DataMember + { + get + { + throw null; + } + set + { + throw null; + } + } + + [DefaultValue(null)] + [RefreshProperties(RefreshProperties.Repaint)] + [AttributeProvider(typeof(IListSource))] + public object DataSource + { + get + { + throw null; + } + set + { + throw null; + } + } + + [Browsable(false)] + public bool IsBindingSuspended + { + get + { + throw null; + } + } + + [Browsable(false)] + public IList List + { + get + { + throw null; + } + } + + [DefaultValue(-1)] + [Browsable(false)] + public int Position + { + get + { + throw null; + } + set + { + throw null; + } + } + + [DefaultValue(true)] + [Browsable(false)] + public bool RaiseListChangedEvents + { + [CompilerGenerated] + get + { + throw null; + } + [CompilerGenerated] + set + { + throw null; + } + } + + + [DefaultValue(null)] + public string Sort + { + get + { + throw null; + } + set + { + throw null; + } + } + + bool ISupportInitializeNotification.IsInitialized + { + get + { + throw null; + } + } + + [Browsable(false)] + public virtual int Count + { + get + { + throw null; + } + } + + [Browsable(false)] + public virtual bool IsSynchronized + { + get + { + throw null; + } + } + + [Browsable(false)] + public virtual object SyncRoot + { + get + { + throw null; + } + } + + [Browsable(false)] + public virtual object this[int index] + { + get + { + throw null; + } + set + { + throw null; + } + } + + [Browsable(false)] + public virtual bool IsFixedSize + { + get + { + throw null; + } + } + + [Browsable(false)] + public virtual bool IsReadOnly + { + get + { + throw null; + } + } + + [Browsable(false)] + public virtual bool AllowEdit + { + get + { + throw null; + } + } + + public virtual bool AllowNew + { + get + { + throw null; + } + set + { + throw null; + } + } + + [Browsable(false)] + public virtual bool AllowRemove + { + get + { + throw null; + } + } + + [Browsable(false)] + public virtual bool SupportsChangeNotification + { + get + { + throw null; + } + } + + [Browsable(false)] + public virtual bool SupportsSearching + { + get + { + throw null; + } + } + + [Browsable(false)] + public virtual bool SupportsSorting + { + get + { + throw null; + } + } + + [Browsable(false)] + public virtual bool IsSorted + { + get + { + throw null; + } + } + + [Browsable(false)] + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual PropertyDescriptor SortProperty + { + get + { + throw null; + } + } + + [Browsable(false)] + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ListSortDirection SortDirection + { + get + { + throw null; + } + } + + [Browsable(false)] + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual ListSortDescriptionCollection SortDescriptions + { + get + { + throw null; + } + } + + [DefaultValue(null)] + public virtual string Filter + { + get + { + throw null; + } + //[RequiresUnreferencedCode("Members of types used in the filter expression might be trimmed.")] + set + { + throw null; + } + } + + [Browsable(false)] + public virtual bool SupportsAdvancedSorting + { + get + { + throw null; + } + } + + [Browsable(false)] + public virtual bool SupportsFiltering + { + get + { + throw null; + } + } + + public event AddingNewEventHandler AddingNew + { + add + { + throw null; + } + remove + { + throw null; + } + } + + public event BindingCompleteEventHandler BindingComplete + { + add + { + throw null; + } + remove + { + throw null; + } + } + + public event BindingManagerDataErrorEventHandler DataError + { + add + { + throw null; + } + remove + { + throw null; + } + } + + public event EventHandler DataSourceChanged + { + add + { + throw null; + } + remove + { + throw null; + } + } + + public event EventHandler DataMemberChanged + { + add + { + throw null; + } + remove + { + throw null; + } + } + + public event EventHandler CurrentChanged + { + add + { + throw null; + } + remove + { + throw null; + } + } + + + public event EventHandler CurrentItemChanged + { + add + { + throw null; + } + remove + { + throw null; + } + } + + public event ListChangedEventHandler ListChanged + { + add + { + throw null; + } + remove + { + throw null; + } + } + + public event EventHandler PositionChanged + { + add + { + throw null; + } + remove + { + throw null; + } + } + + event EventHandler ISupportInitializeNotification.Initialized + { + add + { + throw null; + } + remove + { + throw null; + } + } + + public BindingSource() + { + throw null; + } + + public BindingSource(object dataSource, string dataMember) + { + throw null; + } + + public BindingSource(IContainer container) + { + throw null; + } + + public virtual CurrencyManager GetRelatedCurrencyManager(string dataMember) + { + throw null; + } + + public void CancelEdit() + { + throw null; + } + + protected override void Dispose(bool disposing) + { + throw null; + } + + public void EndEdit() + { + throw null; + } + + public int Find(string propertyName, object key) + { + throw null; + } + + public void MoveFirst() + { + throw null; + } + + public void MoveLast() + { + throw null; + } + + public void MoveNext() + { + throw null; + } + + public void MovePrevious() + { + throw null; + } + + protected virtual void OnAddingNew(AddingNewEventArgs e) + { + throw null; + } + + protected virtual void OnBindingComplete(BindingCompleteEventArgs e) + { + throw null; + } + + protected virtual void OnCurrentChanged(EventArgs e) + { + throw null; + } + + protected virtual void OnCurrentItemChanged(EventArgs e) + { + throw null; + } + + protected virtual void OnDataError(BindingManagerDataErrorEventArgs e) + { + throw null; + } + + protected virtual void OnDataMemberChanged(EventArgs e) + { + throw null; + } + + protected virtual void OnDataSourceChanged(EventArgs e) + { + throw null; + } + + protected virtual void OnListChanged(ListChangedEventArgs e) + { + throw null; + } + + protected virtual void OnPositionChanged(EventArgs e) + { + throw null; + } + + public void RemoveCurrent() + { + throw null; + } + + [EditorBrowsable(EditorBrowsableState.Advanced)] + public virtual void ResetAllowNew() + { + throw null; + } + + public void ResetBindings(bool metadataChanged) + { + throw null; + } + + public void ResetCurrentItem() + { + throw null; + } + + public void ResetItem(int itemIndex) + { + throw null; + } + + public void ResumeBinding() + { + throw null; + } + + public void SuspendBinding() + { + throw null; + } + + [EditorBrowsable(EditorBrowsableState.Never)] + internal virtual bool ShouldSerializeAllowNew() + { + throw null; + } + + void ISupportInitialize.BeginInit() + { + throw null; + } + + void ISupportInitialize.EndInit() + { + throw null; + } + + public virtual IEnumerator GetEnumerator() + { + throw null; + } + + public virtual void CopyTo(Array arr, int index) + { + throw null; + } + + public virtual int Add(object value) + { + throw null; + } + + public virtual void Clear() + { + throw null; + } + + public virtual bool Contains(object value) + { + throw null; + } + + public virtual int IndexOf(object value) + { + throw null; + } + + public virtual void Insert(int index, object value) + { + throw null; + } + + public virtual void Remove(object value) + { + throw null; + } + + public virtual void RemoveAt(int index) + { + throw null; + } + + public virtual string GetListName(PropertyDescriptor[] listAccessors) + { + throw null; + } + + public virtual PropertyDescriptorCollection GetItemProperties(PropertyDescriptor[] listAccessors) + { + throw null; + } + + public virtual object AddNew() + { + throw null; + } + + void IBindingList.AddIndex(PropertyDescriptor property) + { + throw null; + } + + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual void ApplySort(PropertyDescriptor property, ListSortDirection sort) + { + throw null; + } + + public virtual int Find(PropertyDescriptor prop, object key) + { + throw null; + } + + void IBindingList.RemoveIndex(PropertyDescriptor prop) + { + throw null; + } + + public virtual void RemoveSort() + { + throw null; + } + + [EditorBrowsable(EditorBrowsableState.Never)] + public virtual void ApplySort(ListSortDescriptionCollection sorts) + { + throw null; + } + + public virtual void RemoveFilter() + { + throw null; + } + + void ICancelAddNew.CancelNew(int position) + { + throw null; + } + + void ICancelAddNew.EndNew(int position) + { + throw null; + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Collection/BindingsCollection.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Collection/BindingsCollection.cs new file mode 100644 index 0000000000000000000000000000000000000000..76168552f5568e56ff384f54303b72b8997f76b5 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Collection/BindingsCollection.cs @@ -0,0 +1,105 @@ +using Gtk; +using System.Collections; +using System.ComponentModel; + +namespace System.Windows.Forms +{ + [DefaultEvent("CollectionChanged")] + public class BindingsCollection : BaseCollection + { + private ArrayList _array = new ArrayList(); + private Control _owner; + public BindingsCollection(Control owner) + { + _owner = owner; + } + public override int Count + { + get + { + return _array.Count; + } + } + + protected override ArrayList List + { + get + { + return _array; + } + } + + public Binding this[int index] + { + get + { + return (Binding)_array[index]; + } + } + + internal BindingsCollection() + { + + } + + protected internal void Add(Binding binding) + { + AddCore(binding); + } + + protected virtual void AddCore(Binding dataBinding) + { + _array.Add(dataBinding); + } + + protected internal void Clear() + { + ClearCore(); + } + + protected virtual void ClearCore() + { + _array.Clear(); + } + + protected virtual void OnCollectionChanging(CollectionChangeEventArgs e) + { + if(CollectionChanging!=null) + CollectionChanging(_owner, e); + } + + protected virtual void OnCollectionChanged(CollectionChangeEventArgs ccevent) + { + if (CollectionChanged != null) + CollectionChanged(_owner, ccevent); + } + + protected internal void Remove(Binding binding) + { + RemoveCore(binding); + } + + protected internal void RemoveAt(int index) + { + _array.RemoveAt(index); + } + + protected virtual void RemoveCore(Binding dataBinding) + { + _array.Remove(dataBinding); + } + + protected internal bool ShouldSerializeMyAll() + { + return true; + } + public override IEnumerator GetEnumerator() + { + return _array.GetEnumerator(); + } + public event CollectionChangeEventHandler CollectionChanging; + + public event CollectionChangeEventHandler CollectionChanged; + + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Collection/ControlBindingsCollection.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Collection/ControlBindingsCollection.cs new file mode 100644 index 0000000000000000000000000000000000000000..7ffcbedb87cccf90ef3becb6d75c92630ebfb748 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Collection/ControlBindingsCollection.cs @@ -0,0 +1,136 @@ +using Gtk; +using System.Collections; +using System.ComponentModel; +using System.Data.Common; +using System.Runtime.CompilerServices; + +namespace System.Windows.Forms +{ + [DefaultEvent("CollectionChanged")] + public class ControlBindingsCollection : BindingsCollection + { + private Control _owner; + private ListBox _listBox; + private DataGridView _dataGridView; + public ControlBindingsCollection(ListBox owner) : base(owner) + { + _owner = owner; + _listBox = owner; + _listBox.self.Shown += Control_Shown; + } + public ControlBindingsCollection(DataGridView owner) : base(owner) + { + _owner = owner; + _dataGridView = owner; + _dataGridView.self.Shown += Control_Shown; + } + + private void Control_Shown(object sender, EventArgs e) + { + foreach(Binding bin in this) + bin.ReadValue(); + } + + public IBindableComponent BindableComponent + { + get + { + throw null; + } + } + + public Control Control + { + get => _owner; + } + + public Binding this[string propertyName] + { + get + { + foreach (Binding binding in this) + { + if (binding.PropertyName == propertyName) + return binding; + } + return null; + } + } + + public DataSourceUpdateMode DefaultDataSourceUpdateMode + { + [CompilerGenerated] + get; + [CompilerGenerated] + set; + } + + public ControlBindingsCollection(IBindableComponent control) + { + } + public new void Add(Binding binding) + { + binding.Control = this.Control; + binding.PropertyChanged += (object sender, PropertyChangedEventArgs e) => + { + Binding bind = (Binding)sender; + bind.ReadValue(); + }; + base.Add(binding); + + if (_listBox != null) + { + _listBox.BindDataSource(binding.PropertyName, binding.DataSource, binding.DataMember, _listBox.SelectedIndex, binding.FormattingEnabled, binding.DataSourceUpdateMode, binding.NullValue, binding.FormatString); + _listBox.FlowBox.SelectedChildrenChanged += (object o, EventArgs args) + => { + binding.WriteValue(); + }; + } + if (_dataGridView != null) + { + _dataGridView.BindDataSource(binding.PropertyName, binding.DataSource, binding.DataMember, _dataGridView.TreeView.Selection.GetSelectedRows()[0].Indices[0], binding.FormattingEnabled, binding.DataSourceUpdateMode, binding.NullValue, binding.FormatString); + _dataGridView.TreeView.RowActivated += (object o, RowActivatedArgs args) + => { + binding.WriteValue(); + }; + } + } + + public Binding Add(string propertyName, object dataSource, string dataMember) + { + return Add(propertyName, dataSource, dataMember, true, DataSourceUpdateMode.OnPropertyChanged, null, null, null); + } + + public Binding Add(string propertyName, object dataSource, string dataMember, bool formattingEnabled) + { + return Add(propertyName, dataSource, dataMember, formattingEnabled, DataSourceUpdateMode.OnPropertyChanged, null, null, null); + } + + public Binding Add(string propertyName, object dataSource, string dataMember, bool formattingEnabled, DataSourceUpdateMode updateMode) + { + return Add(propertyName, dataSource, dataMember, formattingEnabled, updateMode, null, null, null); + } + + public Binding Add(string propertyName, object dataSource, string dataMember, bool formattingEnabled, DataSourceUpdateMode updateMode, object nullValue) + { + return Add(propertyName, dataSource, dataMember, formattingEnabled, updateMode, nullValue, null, null); + } + + public Binding Add(string propertyName, object dataSource, string dataMember, bool formattingEnabled, DataSourceUpdateMode updateMode, object nullValue, string formatString) + { + return Add(propertyName, dataSource, dataMember, formattingEnabled, updateMode, nullValue, formatString, null); + } + + public Binding Add(string propertyName, object dataSource, string dataMember, bool formattingEnabled, DataSourceUpdateMode updateMode, object nullValue, string formatString, IFormatProvider formatInfo) + { + Binding binding = new Binding(propertyName, dataSource, dataMember, formattingEnabled, updateMode, nullValue, formatString, formatInfo); + this.Add(binding); + return binding; + } + private void Binding_PropertyChanged(object sender, PropertyChangedEventArgs e) + { + Binding binding = (Binding)sender; + binding.ReadValue(); + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Collection/ControlCollection.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Collection/ControlCollection.cs index 45b2ab56b51cea7a65c633c79c89089b940f988d..c21ac56d6312eb44e13188d0b6ed6dbde17cc718 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/Collection/ControlCollection.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Collection/ControlCollection.cs @@ -1,130 +1,132 @@ using Gtk; +using Pango; using System.Collections; using System.Collections.Generic; +using System.Reflection; using System.Security.Cryptography; namespace System.Windows.Forms { public class ControlCollection : ArrayList { - Gtk.Container __owner; + Gtk.Container __ownerControl; + Control __owner; Type __itemType; CheckedListBox checkedListBox; - public ControlCollection(Gtk.Container owner) + Gtk.Fixed fixedContainer; + Gtk.Layout layoutContainer; + public ControlCollection(Control owner) { + __ownerControl = owner.GtkControl as Gtk.Container; __owner = owner; + if (owner.GtkControl is Gtk.Fixed gtkfixed) + fixedContainer = gtkfixed; + if (owner.GtkControl is Gtk.Layout gtklayout) + layoutContainer = gtklayout; + + __ownerControl.Realized += OwnerContainer_Realized; } - public ControlCollection(CheckedListBox owner, Type itemType) + public ControlCollection(Control owner, Gtk.Container ownerContainer) { - checkedListBox = owner; - __owner = owner.Container; - __itemType = itemType; + __ownerControl = ownerContainer; + __owner = owner; + if (ownerContainer is Gtk.Fixed gtkfixed) + fixedContainer = gtkfixed; + if (ownerContainer is Gtk.Layout gtklayout) + layoutContainer = gtklayout; + + __ownerControl.Realized += OwnerContainer_Realized; } - public override int Add(object item) + private void OwnerContainer_Realized(object sender, EventArgs e) { - if (item is IControl) - { - IControl widget = (IControl)item; - __owner.Add(widget.Widget); - } - else - __owner.Add((Widget)item); - - return base.Add(item); + PerformLayout(); } - public virtual void Add(Type itemType, object item) + public ControlCollection(CheckedListBox owner, Type itemType) { - //重载处理 + __ownerControl = owner.self; + checkedListBox = owner; + __owner = owner; + __itemType = itemType; } - - public virtual void AddRange(object[] items) + public virtual void PerformLayout() { - foreach (object item in items) + foreach (object item in this) { - if (item is String) - Add(__itemType, item); - else - Add(item); + AddToWidget(item); } + __ownerControl.ShowAll(); } - public virtual void AddRange(Gtk.Widget[] items) + private void AddToWidget(object item) { - foreach (Gtk.Widget item in items) - __owner.Add(item); - } - public override void Clear() - { - foreach (Widget wid in __owner.Children) - __owner.Remove(wid); - - base.Clear(); - } - - public override void Insert(int index, object item) { __owner.Add((Widget)item); base.Insert(index, item); } - - public override void Remove(object value) { __owner.Remove((Widget)value); base.Remove(value); } - public override void RemoveAt(int index) { __owner.Remove(__owner.Children[index]); base.RemoveAt(index); } - } - public class ControlCollection1 : IList, ICollection, IEnumerable - { - Gtk.Container __owner; - Type __itemType; - CheckedListBox checkedListBox; - public ControlCollection1(Gtk.Container owner) - { - __owner = owner; + if (item is StatusStrip statusbar) + { + if (__owner is Form form) + { + statusbar.self.Halign = Gtk.Align.Fill; + statusbar.self.Valign = Gtk.Align.Fill; + statusbar.self.Expand = true; + form.self.StatusBar.NoShowAll = false; + form.self.StatusBar.Visible = true; + form.self.StatusBar.HeightRequest = 35; + form.self.StatusBar.Child = statusbar.self; + form.self.StatusBar.ShowAll(); + } + } + else if (item is Control control) + { + if (fixedContainer != null) + fixedContainer.Put(control.Widget, control.Left, control.Top); + else if (layoutContainer != null) + layoutContainer.Put(control.Widget, control.Left, control.Top); + else + __ownerControl.Add(control.Widget); + } + else if (item is Gtk.Widget widget) + { + if (fixedContainer != null) + fixedContainer.Put(widget, widget.Allocation.X, widget.Allocation.Y); + else if (layoutContainer != null) + layoutContainer.Put(widget, widget.Allocation.X, widget.Allocation.Y); + else + __ownerControl.Add(widget); + } } - public ControlCollection1(CheckedListBox owner, Type itemType) + public override int Add(object item) { - checkedListBox = owner; - __owner = owner.Container; - __itemType = itemType; + if (item is Control control) + { + control.Parent = __owner; + } + if (__ownerControl.IsRealized) + { + AddToWidget(item); + __ownerControl.ShowAll(); + } + return base.Add(item); } - public object this[int index] { get { return __owner.Children[index]; } set { __owner.Children[index] = (Widget)value; } } - public int Count { get { return __owner.Children.Length; } } - - public bool IsReadOnly { get; } - - public bool IsSynchronized => throw new NotImplementedException(); - - public object SyncRoot => throw new NotImplementedException(); - public bool IsFixedSize => throw new NotImplementedException(); - - public virtual int Add(object item) + public int AddWidget(Gtk.Widget item, Control control) { - // Console.WriteLine(((Widget)item).Name); - if (item is IControl) + control.Parent = __owner; + if (__ownerControl.IsRealized) { - IControl widget = (IControl)item; - __owner.Add(widget.Widget); + AddToWidget(item); + __ownerControl.ShowAll(); } - else - __owner.Add((Widget)item); - - return Count; + return base.Add(item); } - public virtual void Add(Type itemType, object item) { - if (itemType == typeof(CheckBox) && checkedListBox != null) + //重载处理 + base.Add(item); + if (__ownerControl.IsRealized) { - CheckBox box = new CheckBox(); - box.Control.Label = item.ToString(); - box.Control.Toggled += Control_Toggled; - ArrayList all = __owner.AllChildren as ArrayList; - box.Control.Name = all.Count.ToString(); - __owner.Add(box.Widget); + __ownerControl.ShowAll(); } } - private void Control_Toggled(object sender, EventArgs e) - { - checkedListBox.SendEvent(sender,e); - } - public virtual void AddRange(object[] items) { foreach (object item in items) @@ -135,34 +137,18 @@ namespace System.Windows.Forms Add(item); } } - public virtual void AddRange(Gtk.Widget[] items) - { - foreach (Gtk.Widget item in items) - __owner.Add(item); - } - public virtual void Clear() - { - foreach (Widget wid in __owner.Children) - __owner.Remove(wid); - } - public virtual bool Contains(object value) + public override void Clear() { - return false; - } + foreach (Widget wid in __ownerControl.Children) + __ownerControl.Remove(wid); - public virtual void CopyTo(Array array, int index) - { - throw new NotImplementedException(); + base.Clear(); } - public virtual IEnumerator GetEnumerator() { return __owner.GetEnumerator(); } - - public virtual int IndexOf(object value) { return Array.IndexOf(__owner.Children, value); } - - public virtual void Insert(int index, object item) { __owner.Add((Widget)item); } + public override void Insert(int index, object item) { __ownerControl.Add((Widget)item); base.Insert(index, item); } - public virtual void Remove(object value) { __owner.Remove((Widget)value); } - public virtual void RemoveAt(int index) { __owner.Remove(__owner.Children[index]); } + public override void Remove(object value) { __ownerControl.Remove((Widget)value); base.Remove(value); } + public override void RemoveAt(int index) { __ownerControl.Remove(__ownerControl.Children[index]); base.RemoveAt(index); } } } \ No newline at end of file diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Collection/ControlUpdateMode.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Collection/ControlUpdateMode.cs new file mode 100644 index 0000000000000000000000000000000000000000..7d0e7b7c0770718a31d18c7e9b77f0fb089412e1 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Collection/ControlUpdateMode.cs @@ -0,0 +1,8 @@ +namespace System.Windows.Forms +{ + public enum ControlUpdateMode + { + OnPropertyChanged, + Never + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Collection/CurrencyManager.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Collection/CurrencyManager.cs new file mode 100644 index 0000000000000000000000000000000000000000..c35735bc290823ae98522f7f03fd509d1bc23401 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Collection/CurrencyManager.cs @@ -0,0 +1,287 @@ +using System.Collections; +using System.ComponentModel; + +namespace System.Windows.Forms +{ + public class CurrencyManager : BindingManagerBase + { + protected int listposition; + + protected Type finalType; + + internal bool AllowAdd + { + get + { + throw null; + } + } + + internal bool AllowEdit + { + get + { + throw null; + } + } + + internal bool AllowRemove + { + get + { + throw null; + } + } + + public override int Count + { + get + { + throw null; + } + } + + public override object Current + { + get + { + throw null; + } + } + + internal override Type BindType + { + get + { + throw null; + } + } + + internal override object DataSource + { + get + { + throw null; + } + } + + internal override bool IsBinding + { + get + { + throw null; + } + } + + internal bool ShouldBind + { + get + { + throw null; + } + } + + public IList List + { + get + { + throw null; + } + } + + public override int Position + { + get + { + throw null; + } + set + { + throw null; + } + } + + internal object this[int index] + { + get + { + throw null; + } + set + { + throw null; + } + } + + public event ItemChangedEventHandler ItemChanged + { + add + { + throw null; + } + remove + { + throw null; + } + } + + public event ListChangedEventHandler ListChanged + { + add + { + throw null; + } + remove + { + throw null; + } + } + + public event EventHandler MetaDataChanged + { + add + { + throw null; + } + remove + { + throw null; + } + } + + internal CurrencyManager(object dataSource) + { + throw null; + } + + private protected override void SetDataSource(object dataSource) + { + throw null; + } + + public override void AddNew() + { + throw null; + } + + public override void CancelCurrentEdit() + { + throw null; + } + + protected void CheckEmpty() + { + throw null; + } + + public override void RemoveAt(int index) + { + throw null; + } + + public override void EndCurrentEdit() + { + throw null; + } + + internal void SetSort(PropertyDescriptor property, ListSortDirection sortDirection) + { + throw null; + } + + internal PropertyDescriptor GetSortProperty() + { + throw null; + } + + internal ListSortDirection GetSortDirection() + { + throw null; + } + + internal int Find(PropertyDescriptor property, object key, bool keepIndex) + { + throw null; + } + + internal override string GetListName() + { + throw null; + } + + protected internal override string GetListName(ArrayList listAccessors) + { + throw null; + } + + internal override PropertyDescriptorCollection GetItemProperties(PropertyDescriptor[] listAccessors) + { + throw null; + } + + public override PropertyDescriptorCollection GetItemProperties() + { + throw null; + } + + protected internal override void OnCurrentChanged(EventArgs e) + { + throw null; + } + + protected internal override void OnCurrentItemChanged(EventArgs e) + { + throw null; + } + + protected virtual void OnItemChanged(ItemChangedEventArgs e) + { + throw null; + } + + protected internal void OnMetaDataChanged(EventArgs e) + { + throw null; + } + + protected virtual void OnPositionChanged(EventArgs e) + { + throw null; + } + + public void Refresh() + { + throw null; + } + + internal void Release() + { + throw null; + } + + public override void ResumeBinding() + { + throw null; + } + + public override void SuspendBinding() + { + throw null; + } + + internal void UnwireEvents(IList list) + { + throw null; + } + + protected override void UpdateIsBinding() + { + throw null; + } + + internal void WireEvents(IList list) + { + throw null; + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Collection/DataSourceUpdateMode.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Collection/DataSourceUpdateMode.cs new file mode 100644 index 0000000000000000000000000000000000000000..dd9782a37185a900ae10a0607d235eba46874067 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Collection/DataSourceUpdateMode.cs @@ -0,0 +1,9 @@ +namespace System.Windows.Forms +{ + public enum DataSourceUpdateMode + { + OnValidation, + OnPropertyChanged, + Never + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Collection/IBindableComponent.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Collection/IBindableComponent.cs new file mode 100644 index 0000000000000000000000000000000000000000..8f67e46c0da00ca00b467df0481768eb465644bc --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Collection/IBindableComponent.cs @@ -0,0 +1,11 @@ +using System.ComponentModel; + +namespace System.Windows.Forms +{ + public interface IBindableComponent : IComponent, IDisposable + { + ControlBindingsCollection DataBindings { get; } + + BindingContext BindingContext { get; set; } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Collection/ICurrencyManagerProvider.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Collection/ICurrencyManagerProvider.cs new file mode 100644 index 0000000000000000000000000000000000000000..6859e74081dc3cda5992a0afcadf4e0d42c776e0 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Collection/ICurrencyManagerProvider.cs @@ -0,0 +1,9 @@ +namespace System.Windows.Forms +{ + public interface ICurrencyManagerProvider + { + CurrencyManager CurrencyManager { get; } + + CurrencyManager GetRelatedCurrencyManager(string dataMember); + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ComboBox.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ComboBox.cs index d06a7d36ab90c4dcaf7accd9ffb302608a036514..6866f21e4c7e3499d4f77988bf13cf33c484dede 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/ComboBox.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ComboBox.cs @@ -1,55 +1,54 @@ -//基于GTK3.24.24.34版本组件开发,兼容原生C#控件winform界面的跨平台界面组件。 -//使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows和linux运行 -//技术支持438865652@qq.com,https://www.cnblogs.com/easywebfactory +/* + * 基于GTK组件开发,兼容原生C#控件winform界面的跨平台界面组件。 + * 使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows、linux、macos运行 + * 技术支持438865652@qq.com,https://gitee.com/easywebfactory, https://www.cnblogs.com/easywebfactory + * author:chenhongjin + * date: 2024/1/3 + */ +using GTKSystem.Windows.Forms.GTKControls.ControlBase; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; -using System.Runtime.InteropServices; namespace System.Windows.Forms { [DesignerCategory("Component")] - public partial class ComboBox: WidgetControl + public partial class ComboBox: Control { + public readonly ComboBoxBase self = new ComboBoxBase(); + public override object GtkControl => self; private ObjectCollection __itemsData; public ComboBox():base() { - Widget.StyleContext.AddClass("ComboBox"); - Widget.StyleContext.AddClass("BorderRadiusStyle"); - __itemsData = new ObjectCollection(this); + __itemsData = new ObjectCollection(self); } - public ComboBox(Gtk.ITreeModel model):base(model) - { - __itemsData = new ObjectCollection(this); - } - - + public bool FormattingEnabled { get; set; } public object SelectedItem { get { return __itemsData[SelectedIndex]; } } - public int SelectedIndex { get { return base.Control.Active; } } + public int SelectedIndex { get { return self.Active; } } public ObjectCollection Items { get { return __itemsData; } } public event EventHandler SelectedIndexChanged { - add { base.Control.Changed += (object sender, EventArgs e) => { if (base.Control.IsRealized) { value.Invoke(sender, e); } }; } - remove { base.Control.Changed -= (object sender, EventArgs e) => { if (base.Control.IsRealized) { value.Invoke(sender, e); } }; } + add { self.Changed += (object sender, EventArgs e) => { if (self.IsRealized) { value.Invoke(this, e); } }; } + remove { self.Changed -= (object sender, EventArgs e) => { if (self.IsRealized) { value.Invoke(this, e); } }; } } public event EventHandler SelectedValueChanged { - add { base.Control.Changed += (object sender, EventArgs e) => { if (base.Control.IsRealized) { value.Invoke(sender, e); } }; } - remove { base.Control.Changed -= (object sender, EventArgs e) => { if (base.Control.IsRealized) { value.Invoke(sender, e); } }; } + add { self.Changed += (object sender, EventArgs e) => { if (self.IsRealized) { value.Invoke(this, e); } }; } + remove { self.Changed -= (object sender, EventArgs e) => { if (self.IsRealized) { value.Invoke(this, e); } }; } } [ListBindable(false)] public class ObjectCollection : Gtk.TreeStore,IList { Gtk.ComboBox __owner; - public ObjectCollection(ComboBox owner):base(typeof(string)) + public ObjectCollection(Gtk.ComboBox owner) :base(typeof(string)) { - __owner = owner.Control; + __owner = owner; __owner.Model = this; var textCell = new Gtk.CellRendererText(); __owner.PackStart(textCell, true); diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ContextMenuStrip.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ContextMenuStrip.cs similarity index 48% rename from Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ContextMenuStrip.cs rename to Source/GTKSystem.Windows.Forms/GTKControls/ContextMenuStrip.cs index d831c1b14183dd4784de60b1d5fde55bc3e93fba..8ad4d5e8fef86b2287733ee6d32947d35b5e2f9c 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ContextMenuStrip.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ContextMenuStrip.cs @@ -1,4 +1,11 @@ -using System; +/* + * 基于GTK组件开发,兼容原生C#控件winform界面的跨平台界面组件。 + * 使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows、linux、macos运行 + * 技术支持438865652@qq.com,https://gitee.com/easywebfactory, https://www.cnblogs.com/easywebfactory + * author:chenhongjin + * date: 2024/1/3 + */ +using System; using System.Collections.Generic; using System.ComponentModel; using System.Text; diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Control/AsyncResult.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Control/AsyncResult.cs deleted file mode 100644 index 5add76ece94b4c9e0383975b00c5de58c8ae724b..0000000000000000000000000000000000000000 --- a/Source/GTKSystem.Windows.Forms/GTKControls/Control/AsyncResult.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System.Threading; - -namespace System.Windows.Forms -{ - public class AsyncResult : IAsyncResult - { - public object AsyncState => throw new NotImplementedException(); - - public WaitHandle AsyncWaitHandle => throw new NotImplementedException(); - - public bool CompletedSynchronously => throw new NotImplementedException(); - - public bool IsCompleted => throw new NotImplementedException(); - } -} \ No newline at end of file diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Control/ControlBindingsCollection.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Control/ControlBindingsCollection.cs deleted file mode 100644 index 64a0804f45fc7496e5f1e2cbb1a2df618d2d1c32..0000000000000000000000000000000000000000 --- a/Source/GTKSystem.Windows.Forms/GTKControls/Control/ControlBindingsCollection.cs +++ /dev/null @@ -1,8 +0,0 @@ -using System.Collections.Generic; - -namespace System.Windows.Forms -{ - public class ControlBindingsCollection:List - { - } -} \ No newline at end of file diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/BoxBase.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/BoxBase.cs new file mode 100644 index 0000000000000000000000000000000000000000..f50b8abce3f6d2d55b997afeb876238f1dcf678d --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/BoxBase.cs @@ -0,0 +1,22 @@ +using Gtk; +using System; +using System.Drawing; + + +namespace GTKSystem.Windows.Forms.GTKControls.ControlBase +{ + public sealed class BoxBase: Gtk.Box, IControlGtk + { + public GtkControlOverride Override { get; set; } + internal BoxBase(Orientation orientation, int spacing) : base(orientation, spacing) + { + this.Override = new GtkControlOverride(this); + } + protected override bool OnDrawn(Cairo.Context cr) + { + Gdk.Rectangle rec = new Gdk.Rectangle(0, 0, this.AllocatedWidth, this.AllocatedHeight); + Override.DrawnBackColor(cr, rec); + return base.OnDrawn(cr); + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/ButtonBase.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/ButtonBase.cs new file mode 100644 index 0000000000000000000000000000000000000000..c01ed9351dbf8e17c1e8cf3aeb49df255eef2145 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/ButtonBase.cs @@ -0,0 +1,34 @@ +using Gtk; +using System; + + +namespace GTKSystem.Windows.Forms.GTKControls.ControlBase +{ + public sealed class ButtonBase: Gtk.Button, IControlGtk + { + public GtkControlOverride Override { get; set; } + internal ButtonBase() : base() + { + this.Override = new GtkControlOverride(this); + this.Override.AddClass("Button"); + } + internal ButtonBase(Widget widget) : base(widget) + { + this.Override = new GtkControlOverride(this); + this.Override.AddClass("Button"); + } + protected override void OnShown() + { + Override.OnAddClass(); + base.OnShown(); + } + protected override bool OnDrawn(Cairo.Context cr) + { + Gdk.Rectangle rec = new Gdk.Rectangle(0, 0, this.AllocatedWidth, this.AllocatedHeight); + Override.OnDrawnBackground(cr, rec); + Override.OnDrawnImage(cr, rec); + Override.OnPaint(cr, rec); + return base.OnDrawn(cr); + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/CheckBoxBase.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/CheckBoxBase.cs new file mode 100644 index 0000000000000000000000000000000000000000..5a1fa559c74b08dd55346196291a6785e2c8470c --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/CheckBoxBase.cs @@ -0,0 +1,28 @@ +using Gtk; +using System; +using System.Collections.Generic; + +namespace GTKSystem.Windows.Forms.GTKControls.ControlBase +{ + public sealed class CheckBoxBase : Gtk.CheckButton, IControlGtk + { + public GtkControlOverride Override { get; set; } + internal CheckBoxBase() : base() + { + this.Override = new GtkControlOverride(this); + this.Override.AddClass("CheckBox"); + } + protected override void OnShown() + { + Override.OnAddClass(); + base.OnShown(); + } + protected override bool OnDrawn(Cairo.Context cr) + { + Gdk.Rectangle rec = new Gdk.Rectangle(0, 0, this.AllocatedWidth, this.AllocatedHeight); + Override.OnDrawnBackground(cr, rec); + Override.OnPaint(cr, rec); + return base.OnDrawn(cr); + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/CheckedListBoxBase.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/CheckedListBoxBase.cs new file mode 100644 index 0000000000000000000000000000000000000000..4c0e9d98e4433ecd4af099125a17bc9d3f0d3d2c --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/CheckedListBoxBase.cs @@ -0,0 +1,35 @@ +using Gtk; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace GTKSystem.Windows.Forms.GTKControls.ControlBase +{ + public sealed class CheckedListBoxBase : Gtk.Viewport, IControlGtk + { + public GtkControlOverride Override { get; set; } + internal CheckedListBoxBase() : base() + { + this.Override = new GtkControlOverride(this); + this.Override.AddClass("CheckedListBox"); + this.Override.BackColor = System.Drawing.Color.White; + + } + protected override void OnShown() + { + Override.OnAddClass(); + base.OnShown(); + } + + protected override bool OnDrawn(Cairo.Context cr) + { + Gdk.Rectangle rec = new Gdk.Rectangle(0, 0, this.AllocatedWidth, this.AllocatedHeight); + Override.OnDrawnBackground(cr, rec); + Override.OnPaint(cr, rec); + return base.OnDrawn(cr); + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/ComboBoxBase.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/ComboBoxBase.cs new file mode 100644 index 0000000000000000000000000000000000000000..56bec8ab369893e38493aa748688373eaa33ea2b --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/ComboBoxBase.cs @@ -0,0 +1,37 @@ +using Gtk; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace GTKSystem.Windows.Forms.GTKControls.ControlBase +{ + public sealed class ComboBoxBase : Gtk.ComboBox, IControlGtk + { + public GtkControlOverride Override { get; set; } + internal ComboBoxBase() : base() + { + this.Override = new GtkControlOverride(this); + this.Override.AddClass("ComboBox"); + } + internal ComboBoxBase(Gtk.ITreeModel model) : base(model) + { + this.Override = new GtkControlOverride(this); + this.Override.AddClass("ComboBox"); + } + protected override void OnShown() + { + Override.OnAddClass(); + base.OnShown(); + } + protected override bool OnDrawn(Cairo.Context cr) + { + Gdk.Rectangle rec = new Gdk.Rectangle(0, 0, this.AllocatedWidth, this.AllocatedHeight); + Override.OnDrawnBackground(cr, rec); + Override.OnPaint(cr, rec); + return base.OnDrawn(cr); + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/DataGridViewBase.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/DataGridViewBase.cs new file mode 100644 index 0000000000000000000000000000000000000000..d6bc32b54e17f168e291e2c06f74cda4d182e9ef --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/DataGridViewBase.cs @@ -0,0 +1,34 @@ +using Gtk; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace GTKSystem.Windows.Forms.GTKControls.ControlBase +{ + public sealed class DataGridViewBase : Gtk.Viewport, IControlGtk + { + public GtkControlOverride Override { get; set; } + internal DataGridViewBase() : base() + { + this.Override = new GtkControlOverride(this); + this.Override.AddClass("DataGridView"); + this.Override.BackColor = System.Drawing.Color.White; + + } + protected override void OnShown() + { + Override.OnAddClass(); + base.OnShown(); + } + protected override bool OnDrawn(Cairo.Context cr) + { + Gdk.Rectangle rec = new Gdk.Rectangle(0, 0, this.AllocatedWidth, this.AllocatedHeight); + Override.OnDrawnBackground(cr, rec); + Override.OnPaint(cr, rec); + return base.OnDrawn(cr); + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/FlowLayoutPanelBase.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/FlowLayoutPanelBase.cs new file mode 100644 index 0000000000000000000000000000000000000000..b0c025f0c35470c9a1f22fbb5c9c20025cd817ee --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/FlowLayoutPanelBase.cs @@ -0,0 +1,32 @@ +using Gtk; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace GTKSystem.Windows.Forms.GTKControls.ControlBase +{ + public sealed class FlowLayoutPanelBase : Gtk.FlowBox, IControlGtk + { + public GtkControlOverride Override { get; set; } + internal FlowLayoutPanelBase() : base() + { + this.Override = new GtkControlOverride(this); + this.Override.AddClass("FlowLayoutPanel"); + } + protected override void OnShown() + { + Override.OnAddClass(); + base.OnShown(); + } + protected override bool OnDrawn(Cairo.Context cr) + { + Gdk.Rectangle rec = new Gdk.Rectangle(0, 0, this.AllocatedWidth, this.AllocatedHeight); + Override.OnDrawnBackground(cr, rec); + Override.OnPaint(cr, rec); + return base.OnDrawn(cr); + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/FormBase.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/FormBase.cs new file mode 100644 index 0000000000000000000000000000000000000000..bf677d9725897e86789e4e07c44300546ede2516 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/FormBase.cs @@ -0,0 +1,66 @@ +using Cairo; +using Gtk; +using System; +using System.Drawing.Drawing2D; + + +namespace GTKSystem.Windows.Forms.GTKControls.ControlBase +{ + public sealed class FormBase : Gtk.Dialog, IControlGtk + { + public readonly Gtk.ScrolledWindow ScrollArea = new Gtk.ScrolledWindow(); + public readonly Gtk.Layout StatusBar = new Gtk.Layout(new Gtk.Adjustment(1, 1, 100, 1, 0, 1), new Gtk.Adjustment(1, 1, 100, 1, 0, 1)); + private readonly Gtk.Viewport StatusBarView = new Gtk.Viewport(); + + public GtkControlOverride Override { get; set; } + public FormBase() : base() + { + this.Override = new GtkControlOverride(this); + this.Override.AddClass("Form"); + this.WindowPosition = Gtk.WindowPosition.Center; + this.BorderWidth = 0; + this.SetDefaultSize(100, 100); + this.TypeHint = Gdk.WindowTypeHint.Normal; + this.Response += FormBase_Response; + ScrollArea.BorderWidth = 0; + ScrollArea.Valign = Gtk.Align.Fill; + ScrollArea.Halign = Gtk.Align.Fill; + ScrollArea.HscrollbarPolicy = PolicyType.Always; + ScrollArea.VscrollbarPolicy = PolicyType.Always; + this.ContentArea.PackStart(ScrollArea, true, true, 0); + StatusBar.Hexpand = true; + StatusBar.Vexpand = false; + StatusBar.Halign = Gtk.Align.Fill; + StatusBar.Valign = Gtk.Align.Fill; + StatusBar.NoShowAll = true; + StatusBar.Visible = false; + StatusBarView.StyleContext.AddClass("StatusStrip"); + StatusBarView.Child = StatusBar; + this.ContentArea.PackEnd(StatusBarView, false, true, 0); + // this.Decorated = false; //删除工具栏 + } + + public FormBase(string title, Gtk.Window parent, DialogFlags flags, params object[] button_data) : base(title, parent, flags, button_data) + { + this.Override = new GtkControlOverride(this); + this.Override.AddClass("Form"); + this.WindowPosition = Gtk.WindowPosition.Center; + this.BorderWidth = 0; + this.SetDefaultSize(100, 100); + this.TypeHint = Gdk.WindowTypeHint.Normal; + this.Response += FormBase_Response; + } + private void FormBase_Response(object o, ResponseArgs args) + { + //Console.WriteLine(args.ResponseId); + if (args.ResponseId == ResponseType.DeleteEvent) + if (this.IsActive) + this.Destroy(); + } + + public void CloseWindow() + { + this.OnClose(); + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/GroupBoxBase.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/GroupBoxBase.cs new file mode 100644 index 0000000000000000000000000000000000000000..12e5cb6648426d9382b9accdb363dbb24b97445e --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/GroupBoxBase.cs @@ -0,0 +1,33 @@ +using Gtk; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace GTKSystem.Windows.Forms.GTKControls.ControlBase +{ + public sealed class GroupBoxBase : Gtk.Frame, IControlGtk + { + public GtkControlOverride Override { get; set; } + internal GroupBoxBase() : base() + { + this.Override = new GtkControlOverride(this); + this.Override.AddClass("GroupBox"); + this.LabelXalign = 0.03f; + } + protected override void OnShown() + { + Override.OnAddClass(); + base.OnShown(); + } + protected override bool OnDrawn(Cairo.Context cr) + { + Gdk.Rectangle rec = new Gdk.Rectangle(0, 0, this.AllocatedWidth, this.AllocatedHeight); + Override.OnDrawnBackground(cr, rec); + Override.OnPaint(cr, rec); + return base.OnDrawn(cr); + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/GtkControlOverride.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/GtkControlOverride.cs new file mode 100644 index 0000000000000000000000000000000000000000..4d9f240ba52fe5c46007aa6a50830fcffc92cd85 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/GtkControlOverride.cs @@ -0,0 +1,104 @@ + +using Gtk; +using GTKSystem.Windows.Forms.Utility; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Windows.Forms; + +namespace GTKSystem.Windows.Forms.GTKControls.ControlBase +{ + public sealed class GtkControlOverride: IControlOverride + { + private Widget container; + public GtkControlOverride(Widget container) + { + this.container = container; + } + + public event DrawnHandler DrawnBackground; + public event PaintEventHandler Paint; + public System.Drawing.Color? BackColor { get; set; } + public System.Drawing.Image BackgroundImage { get; set; } + public ImageLayout BackgroundImageLayout { get; set; } + public System.Drawing.Image Image { get; set; } + public System.Drawing.ContentAlignment ImageAlign { get; set; } + + private List cssList = new List(); + public void AddClass(string cssClass) + { + cssList.Add(cssClass); + } + public void RemoveClass(string cssClass) + { + cssList.Remove(cssClass); + } + public void OnAddClass() + { + foreach (string cssClass in cssList) + { + container.StyleContext.RemoveClass(cssClass); + container.StyleContext.AddClass(cssClass); + } + if (BackgroundImage != null || BackColor.HasValue || Image != null) + { + container.StyleContext.RemoveClass("BGTransparent"); + container.StyleContext.AddClass("BGTransparent"); + } + } + private Gdk.Pixbuf backgroundPixbuf; + public void DrawnBackColor(Cairo.Context cr, Gdk.Rectangle area) + { + if (BackColor.HasValue) + { + cr.Save(); + cr.SetSourceRGBA(BackColor.Value.R / 255f, BackColor.Value.G / 255f, BackColor.Value.B / 255f, BackColor.Value.A / 255f); + cr.Paint(); + cr.Restore(); + } + } + public void OnDrawnBackground(Cairo.Context cr, Gdk.Rectangle area) + { + if (BackColor.HasValue) + { + cr.Save(); + cr.SetSourceRGBA(BackColor.Value.R / 255f, BackColor.Value.G / 255f, BackColor.Value.B / 255f, BackColor.Value.A / 255f); + cr.Paint(); + cr.Restore(); + } + if (BackgroundImage != null && BackgroundImage.PixbufData != null) + { + if (backgroundPixbuf == null || backgroundPixbuf.Width != area.Width || backgroundPixbuf.Height != area.Height) + { + ImageUtility.ScaleImageByImageLayout(BackgroundImage.PixbufData, area.Width, area.Height, out backgroundPixbuf, BackgroundImageLayout); + } + ImageUtility.DrawImage(cr, backgroundPixbuf, area, ContentAlignment.TopLeft); + } + + if (DrawnBackground != null) + { + DrawnArgs args = new DrawnArgs() { Args = new object[] { cr } }; + DrawnBackground(this.container, args); + } + } + private Gdk.Pixbuf imagePixbuf; + public void OnDrawnImage(Cairo.Context cr, Gdk.Rectangle area) + { + if (Image != null && Image.PixbufData != null) + { + if (imagePixbuf == null || imagePixbuf.Width != area.Width || imagePixbuf.Height != area.Height) + { + Gdk.Pixbuf imagepixbuf = new Gdk.Pixbuf(Image.PixbufData); + imagePixbuf = imagepixbuf.ScaleSimple(area.Width, area.Height, Gdk.InterpType.Nearest); + } + ImageUtility.DrawImage(cr, imagePixbuf, area, ImageAlign); + } + } + public void OnPaint(Cairo.Context cr, Gdk.Rectangle area) + { + if (Paint != null) + Paint(this.container, new PaintEventArgs(new Graphics(container, cr, area), new Rectangle(area.X, area.Y, area.Width, area.Height))); + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/GtkLib.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/GtkLib.cs new file mode 100644 index 0000000000000000000000000000000000000000..429cf84125f2eb6ad3c2d0f6c7a9a0d054e08eb3 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/GtkLib.cs @@ -0,0 +1,223 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Runtime.InteropServices; +using GLib; + +namespace GTKSystem.Windows.Forms.GTKControls.ControlBase +{ + + internal class FuncLoader + { + private class Windows + { + [DllImport("kernel32", CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)] + public static extern IntPtr GetProcAddress(IntPtr hModule, string procName); + + [DllImport("kernel32", CharSet = CharSet.Unicode, SetLastError = true)] + public static extern IntPtr LoadLibraryW(string lpszLib); + } + + private class Linux + { + [DllImport("libdl.so.2")] + public static extern IntPtr dlopen(string path, int flags); + + [DllImport("libdl.so.2")] + public static extern IntPtr dlsym(IntPtr handle, string symbol); + } + + private class OSX + { + [DllImport("/usr/lib/libSystem.dylib")] + public static extern IntPtr dlopen(string path, int flags); + + [DllImport("/usr/lib/libSystem.dylib")] + public static extern IntPtr dlsym(IntPtr handle, string symbol); + } + + private const int RTLD_LAZY = 1; + + private const int RTLD_GLOBAL = 256; + + public static bool IsWindows; + + public static bool IsOSX; + + [DllImport("libc")] + private static extern int uname(IntPtr buf); + + static FuncLoader() + { + switch (Environment.OSVersion.Platform) + { + case PlatformID.Win32S: + case PlatformID.Win32Windows: + case PlatformID.Win32NT: + case PlatformID.WinCE: + IsWindows = true; + break; + case PlatformID.MacOSX: + IsOSX = true; + break; + case PlatformID.Unix: + try + { + IntPtr intPtr = Marshal.AllocHGlobal(8192); + if (uname(intPtr) == 0 && Marshal.PtrToStringAnsi(intPtr) == "Darwin") + { + IsOSX = true; + } + + Marshal.FreeHGlobal(intPtr); + } + catch + { + } + + break; + case PlatformID.Xbox: + break; + } + } + + public static IntPtr LoadLibrary(string libname) + { + if (IsWindows) + { + return Windows.LoadLibraryW(libname); + } + + if (IsOSX) + { + return OSX.dlopen(libname, 257); + } + + return Linux.dlopen(libname, 257); + } + + public static IntPtr GetProcAddress(IntPtr library, string function) + { + IntPtr zero = IntPtr.Zero; + if (IsWindows) + { + return Windows.GetProcAddress(library, function); + } + + if (IsOSX) + { + return OSX.dlsym(library, function); + } + + return Linux.dlsym(library, function); + } + + public static T LoadFunction(IntPtr procaddress) + { + if (procaddress == IntPtr.Zero) + { + return default; + } + + return Marshal.GetDelegateForFunctionPointer(procaddress); + } + } + + + internal class GLibrary + { + private static Dictionary _libraries; + + private static Dictionary _customlibraries; + + private static Dictionary _libraryDefinitions; + + [DllImport("kernel32.dll", SetLastError = true)] + private static extern bool SetDllDirectory(string lpPathName); + + static GLibrary() + { + _customlibraries = new Dictionary(); + _libraries = new Dictionary(); + _libraryDefinitions = new Dictionary(); + _libraryDefinitions[Library.GLib] = new string[4] { "libglib-2.0-0.dll", "libglib-2.0.so.0", "libglib-2.0.0.dylib", "glib-2.dll" }; + _libraryDefinitions[Library.GObject] = new string[4] { "libgobject-2.0-0.dll", "libgobject-2.0.so.0", "libgobject-2.0.0.dylib", "gobject-2.dll" }; + _libraryDefinitions[Library.Cairo] = new string[4] { "libcairo-2.dll", "libcairo.so.2", "libcairo.2.dylib", "cairo.dll" }; + _libraryDefinitions[Library.Gio] = new string[4] { "libgio-2.0-0.dll", "libgio-2.0.so.0", "libgio-2.0.0.dylib", "gio-2.dll" }; + _libraryDefinitions[Library.Atk] = new string[4] { "libatk-1.0-0.dll", "libatk-1.0.so.0", "libatk-1.0.0.dylib", "atk-1.dll" }; + _libraryDefinitions[Library.Pango] = new string[4] { "libpango-1.0-0.dll", "libpango-1.0.so.0", "libpango-1.0.0.dylib", "pango-1.dll" }; + _libraryDefinitions[Library.Gdk] = new string[4] { "libgdk-3-0.dll", "libgdk-3.so.0", "libgdk-3.0.dylib", "gdk-3.dll" }; + _libraryDefinitions[Library.GdkPixbuf] = new string[4] { "libgdk_pixbuf-2.0-0.dll", "libgdk_pixbuf-2.0.so.0", "libgdk_pixbuf-2.0.dylib", "gdk_pixbuf-2.dll" }; + _libraryDefinitions[Library.Gtk] = new string[4] { "libgtk-3-0.dll", "libgtk-3.so.0", "libgtk-3.0.dylib", "gtk-3.dll" }; + _libraryDefinitions[Library.PangoCairo] = new string[4] { "libpangocairo-1.0-0.dll", "libpangocairo-1.0.so.0", "libpangocairo-1.0.0.dylib", "pangocairo-1.dll" }; + _libraryDefinitions[Library.GtkSource] = new string[4] { "libgtksourceview-4-0.dll", "libgtksourceview-4.so.0", "libgtksourceview-4.0.dylib", "gtksourceview-4.dll" }; + } + + public static IntPtr Load(Library library) + { + IntPtr value = IntPtr.Zero; + if (_libraries.TryGetValue(library, out value)) + { + return value; + } + + if (FuncLoader.IsWindows) + { + value = FuncLoader.LoadLibrary(_libraryDefinitions[library][0]); + if (value == IntPtr.Zero) + { + SetDllDirectory(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Gtk", "3.24.24")); + value = FuncLoader.LoadLibrary(_libraryDefinitions[library][0]); + } + } + else if (FuncLoader.IsOSX) + { + value = FuncLoader.LoadLibrary(_libraryDefinitions[library][2]); + if (value == IntPtr.Zero) + { + value = FuncLoader.LoadLibrary("/usr/local/lib/" + _libraryDefinitions[library][2]); + } + } + else + { + value = FuncLoader.LoadLibrary(_libraryDefinitions[library][1]); + } + + if (value == IntPtr.Zero) + { + for (int i = 0; i < _libraryDefinitions[library].Length; i++) + { + value = FuncLoader.LoadLibrary(_libraryDefinitions[library][i]); + if (value != IntPtr.Zero) + { + break; + } + } + } + + if (value == IntPtr.Zero) + { + throw new DllNotFoundException(library.ToString() + ": " + string.Join(", ", _libraryDefinitions[library])); + } + + _libraries[library] = value; + return value; + } + } + + internal enum Library + { + GLib, + GObject, + Cairo, + Gio, + Atk, + Pango, + PangoCairo, + Gdk, + GdkPixbuf, + Gtk, + GtkSource + } + +} \ No newline at end of file diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/IControlGtk.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/IControlGtk.cs new file mode 100644 index 0000000000000000000000000000000000000000..6a4f9a3c44b4685da5587f9391972dc46e93716c --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/IControlGtk.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; + + +namespace GTKSystem.Windows.Forms.GTKControls.ControlBase +{ + public interface IControlGtk : IDisposable + { + GtkControlOverride Override { get; set; } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/IControlOverride.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/IControlOverride.cs new file mode 100644 index 0000000000000000000000000000000000000000..359b14d095fbe1a150cfb30ed6fd210ad3345662 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/IControlOverride.cs @@ -0,0 +1,24 @@ +using Gtk; +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace GTKSystem.Windows.Forms.GTKControls.ControlBase +{ + public interface IControlOverride + { + event DrawnHandler DrawnBackground; + event PaintEventHandler Paint; + Color? BackColor { get; set; } + System.Drawing.Image BackgroundImage { get; set; } + ImageLayout BackgroundImageLayout { get; set; } + void AddClass(string cssClass); + void OnAddClass(); + void OnDrawnBackground(Cairo.Context cr, Gdk.Rectangle area); + void OnPaint(Cairo.Context cr, Gdk.Rectangle area); + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/LabelBase.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/LabelBase.cs new file mode 100644 index 0000000000000000000000000000000000000000..69db807989b1b112ce55a7dea1c17fb1b5b9eaa6 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/LabelBase.cs @@ -0,0 +1,42 @@ +using Gtk; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace GTKSystem.Windows.Forms.GTKControls.ControlBase +{ + public sealed class LabelBase : Gtk.Label, IControlGtk + { + public GtkControlOverride Override { get; set; } + internal LabelBase() : base() + { + this.Override = new GtkControlOverride(this); + this.Override.AddClass("Label"); + this.Xalign = 0.08f; + this.Yalign = 0.08f; + } + + internal LabelBase(string text) : base(text) + { + this.Override = new GtkControlOverride(this); + this.Override.AddClass("Label"); + this.Xalign = 0.08f; + this.Yalign = 0.08f; + } + protected override void OnShown() + { + Override.OnAddClass(); + base.OnShown(); + } + protected override bool OnDrawn(Cairo.Context cr) + { + Gdk.Rectangle rec = new Gdk.Rectangle(0, 0, this.AllocatedWidth, this.AllocatedHeight); + Override.OnDrawnBackground(cr, rec); + Override.OnPaint(cr, rec); + return base.OnDrawn(cr); + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/LayoutBase.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/LayoutBase.cs new file mode 100644 index 0000000000000000000000000000000000000000..8a66225bc87d1e6cbf634eb19c893dcbd8ada6d2 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/LayoutBase.cs @@ -0,0 +1,22 @@ +using Gtk; +using System; +using System.Drawing; + + +namespace GTKSystem.Windows.Forms.GTKControls.ControlBase +{ + public sealed class LayoutBase: Gtk.Layout, IControlGtk + { + public GtkControlOverride Override { get; set; } + internal LayoutBase(Adjustment hadjustment, Adjustment vadjustment) : base(hadjustment, vadjustment) + { + this.Override = new GtkControlOverride(this); + } + protected override bool OnDrawn(Cairo.Context cr) + { + Gdk.Rectangle rec = new Gdk.Rectangle(0, 0, this.AllocatedWidth, this.AllocatedHeight); + Override.DrawnBackColor(cr, rec); + return base.OnDrawn(cr); + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/LinkLabelBase.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/LinkLabelBase.cs new file mode 100644 index 0000000000000000000000000000000000000000..d0b769dc5ee30279f2cfa66417d962a365cea9b4 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/LinkLabelBase.cs @@ -0,0 +1,32 @@ +using Gtk; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace GTKSystem.Windows.Forms.GTKControls.ControlBase +{ + public sealed class LinkLabelBase : Gtk.LinkButton, IControlGtk + { + public GtkControlOverride Override { get; set; } + internal LinkLabelBase() : base("") + { + this.Override = new GtkControlOverride(this); + this.Override.AddClass("LinkLabel"); + } + protected override void OnShown() + { + Override.OnAddClass(); + base.OnShown(); + } + protected override bool OnDrawn(Cairo.Context cr) + { + Gdk.Rectangle rec = new Gdk.Rectangle(0, 0, this.AllocatedWidth, this.AllocatedHeight); + Override.OnDrawnBackground(cr, rec); + Override.OnPaint(cr, rec); + return base.OnDrawn(cr); + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/ListBoxBase.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/ListBoxBase.cs new file mode 100644 index 0000000000000000000000000000000000000000..77fd3fab97c9cc8fdb0ebf0f57949639252f7ec3 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/ListBoxBase.cs @@ -0,0 +1,32 @@ +using Gtk; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace GTKSystem.Windows.Forms.GTKControls.ControlBase +{ + public sealed class ListBoxBase : Gtk.Viewport, IControlGtk + { + public GtkControlOverride Override { get; set; } + internal ListBoxBase() : base() + { + this.Override = new GtkControlOverride(this); + this.Override.AddClass("ListBox"); + } + protected override void OnShown() + { + Override.OnAddClass(); + base.OnShown(); + } + protected override bool OnDrawn(Cairo.Context cr) + { + Gdk.Rectangle rec = new Gdk.Rectangle(0, 0, this.AllocatedWidth, this.AllocatedHeight); + Override.OnDrawnBackground(cr, rec); + Override.OnPaint(cr, rec); + return base.OnDrawn(cr); + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/ListViewBase.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/ListViewBase.cs new file mode 100644 index 0000000000000000000000000000000000000000..1449f0c637602465e262322d87accebbd6141ff8 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/ListViewBase.cs @@ -0,0 +1,32 @@ +using Gtk; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace GTKSystem.Windows.Forms.GTKControls.ControlBase +{ + public sealed class ListViewBase : Gtk.Box, IControlGtk + { + public GtkControlOverride Override { get; set; } + internal ListViewBase() : base(Gtk.Orientation.Vertical, 0) + { + this.Override = new GtkControlOverride(this); + this.Override.AddClass("ListView"); + } + protected override void OnShown() + { + Override.OnAddClass(); + base.OnShown(); + } + protected override bool OnDrawn(Cairo.Context cr) + { + Gdk.Rectangle rec = new Gdk.Rectangle(0, 0, this.AllocatedWidth, this.AllocatedHeight); + Override.OnDrawnBackground(cr, rec); + Override.OnPaint(cr, rec); + return base.OnDrawn(cr); + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/MonthCalendarBase.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/MonthCalendarBase.cs new file mode 100644 index 0000000000000000000000000000000000000000..650d6b70ba2c022bdeba442d2f94679e27ccb248 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/MonthCalendarBase.cs @@ -0,0 +1,36 @@ +using Gtk; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace GTKSystem.Windows.Forms.GTKControls.ControlBase +{ + public sealed class MonthCalendarBase : Gtk.Calendar, IControlGtk + { + public GtkControlOverride Override { get; set; } + internal MonthCalendarBase() : base() + { + this.Override = new GtkControlOverride(this); + this.Override.AddClass("MonthCalendar"); + } + public void AddClass(string cssClass) + { + this.Override.AddClass(cssClass); + } + protected override void OnShown() + { + Override.OnAddClass(); + base.OnShown(); + } + protected override bool OnDrawn(Cairo.Context cr) + { + Gdk.Rectangle rec = new Gdk.Rectangle(0, 0, this.AllocatedWidth, this.AllocatedHeight); + Override.OnDrawnBackground(cr, rec); + Override.OnPaint(cr, rec); + return base.OnDrawn(cr); + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/NumericUpDownBase.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/NumericUpDownBase.cs new file mode 100644 index 0000000000000000000000000000000000000000..64451e5da985a6a33f4bacbe34a53c0aa62f0a23 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/NumericUpDownBase.cs @@ -0,0 +1,39 @@ +using Gtk; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace GTKSystem.Windows.Forms.GTKControls.ControlBase +{ + public sealed class NumericUpDownBase : Gtk.SpinButton, IControlGtk + { + public GtkControlOverride Override { get; set; } + internal NumericUpDownBase() : base(0, 100, 1) + { + this.Override = new GtkControlOverride(this); + this.Override.AddClass("NumericUpDown"); + this.Value = 0; + this.Orientation = Gtk.Orientation.Horizontal; + } + public void AddClass(string cssClass) + { + this.Override.AddClass(cssClass); + } + protected override void OnShown() + { + Override.OnAddClass(); + base.OnShown(); + } + + protected override bool OnDrawn(Cairo.Context cr) + { + Gdk.Rectangle rec = new Gdk.Rectangle(0, 0, this.AllocatedWidth, this.AllocatedHeight); + Override.OnDrawnBackground(cr, rec); + Override.OnPaint(cr, rec); + return base.OnDrawn(cr); + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/PanelBase.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/PanelBase.cs new file mode 100644 index 0000000000000000000000000000000000000000..d390d58d9b0d87854bf874b5fb5be8758f3c28d0 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/PanelBase.cs @@ -0,0 +1,30 @@ + +using System; + + +namespace GTKSystem.Windows.Forms.GTKControls.ControlBase +{ + public sealed class PanelBase: Gtk.Viewport, IControlGtk + { + public GtkControlOverride Override { get; set; } + internal PanelBase() : base() + { + this.Override = new GtkControlOverride(this); + this.Override.AddClass("Panel"); + this.ShadowType = Gtk.ShadowType.In; + this.BorderWidth = 0; + } + protected override void OnShown() + { + Override.OnAddClass(); + base.OnShown(); + } + protected override bool OnDrawn(Cairo.Context cr) + { + Gdk.Rectangle rec = new Gdk.Rectangle(0, 0, this.AllocatedWidth, this.AllocatedHeight); + Override.OnDrawnBackground(cr, rec); + Override.OnPaint(cr, rec); + return base.OnDrawn(cr); + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/PictureBoxBase.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/PictureBoxBase.cs new file mode 100644 index 0000000000000000000000000000000000000000..207625fd0f6a6d90123ab30361800c715d0c6e0d --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/PictureBoxBase.cs @@ -0,0 +1,36 @@ +using Gtk; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace GTKSystem.Windows.Forms.GTKControls.ControlBase +{ + public sealed class PictureBoxBase : Gtk.Image, IControlGtk + { + public GtkControlOverride Override { get; set; } + internal PictureBoxBase() : base() + { + this.Override = new GtkControlOverride(this); + this.Override.AddClass("PictureBox"); + this.Halign = Gtk.Align.Center; + this.Valign = Gtk.Align.Center; + this.Xalign = 0.5f; + this.Yalign = 0.5f; + } + protected override void OnShown() + { + Override.OnAddClass(); + base.OnShown(); + } + protected override bool OnDrawn(Cairo.Context cr) + { + Gdk.Rectangle rec = new Gdk.Rectangle(0, 0, this.AllocatedWidth, this.AllocatedHeight); + Override.OnDrawnBackground(cr, rec); + Override.OnPaint(cr, rec); + return base.OnDrawn(cr); + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/ProgressBarBase.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/ProgressBarBase.cs new file mode 100644 index 0000000000000000000000000000000000000000..78116248c50a12a65a093ca329499de3bdac2fc5 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/ProgressBarBase.cs @@ -0,0 +1,32 @@ +using Gtk; +using System; + + +namespace GTKSystem.Windows.Forms.GTKControls.ControlBase +{ + public sealed class ProgressBarBase : Gtk.LevelBar, IControlGtk + { + public GtkControlOverride Override { get; set; } + internal ProgressBarBase() : base() + { + this.Override = new GtkControlOverride(this); + this.Override.AddClass("ProgressBar"); + } + public void AddClass(string cssClass) + { + this.Override.AddClass(cssClass); + } + protected override void OnShown() + { + Override.OnAddClass(); + base.OnShown(); + } + protected override bool OnDrawn(Cairo.Context cr) + { + Gdk.Rectangle rec = new Gdk.Rectangle(0, 0, this.AllocatedWidth, this.AllocatedHeight); + Override.OnDrawnBackground(cr, rec); + Override.OnPaint(cr, rec); + return base.OnDrawn(cr); + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/RadioButtonBase.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/RadioButtonBase.cs new file mode 100644 index 0000000000000000000000000000000000000000..b6f200bc573e66eb717dc6cd7cdfddb354ebb681 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/RadioButtonBase.cs @@ -0,0 +1,41 @@ +using Gtk; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace GTKSystem.Windows.Forms.GTKControls.ControlBase +{ + public sealed class RadioButtonBase : Gtk.RadioButton, IControlGtk + { + public GtkControlOverride Override { get; set; } + internal RadioButtonBase() : base(new Gtk.RadioButton("baseradio")) + { + this.Override = new GtkControlOverride(this); + this.Override.AddClass("RadioButton"); + } + internal RadioButtonBase(Gtk.RadioButton radio_group_member) : base(radio_group_member) + { + this.Override = new GtkControlOverride(this); + this.Override.AddClass("RadioButton"); + } + public void AddClass(string cssClass) + { + this.Override.AddClass(cssClass); + } + protected override void OnShown() + { + Override.OnAddClass(); + base.OnShown(); + } + protected override bool OnDrawn(Cairo.Context cr) + { + Gdk.Rectangle rec = new Gdk.Rectangle(0, 0, this.AllocatedWidth, this.AllocatedHeight); + Override.OnDrawnBackground(cr, rec); + Override.OnPaint(cr, rec); + return base.OnDrawn(cr); + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/RichTextBoxBase.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/RichTextBoxBase.cs new file mode 100644 index 0000000000000000000000000000000000000000..ca47f16e12e224b74df7d87971d9f1818d58a892 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/RichTextBoxBase.cs @@ -0,0 +1,36 @@ +using Gtk; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace GTKSystem.Windows.Forms.GTKControls.ControlBase +{ + public sealed class RichTextBoxBase : Gtk.Viewport, IControlGtk + { + public GtkControlOverride Override { get; set; } + internal RichTextBoxBase() : base() + { + this.Override = new GtkControlOverride(this); + this.Override.AddClass("RichTextBox"); + } + public void AddClass(string cssClass) + { + this.Override.AddClass(cssClass); + } + protected override void OnShown() + { + Override.OnAddClass(); + base.OnShown(); + } + protected override bool OnDrawn(Cairo.Context cr) + { + Gdk.Rectangle rec = new Gdk.Rectangle(0, 0, this.AllocatedWidth, this.AllocatedHeight); + Override.OnDrawnBackground(cr, rec); + Override.OnPaint(cr, rec); + return base.OnDrawn(cr); + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/SplitContainerBase.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/SplitContainerBase.cs new file mode 100644 index 0000000000000000000000000000000000000000..567cf9f63fac4bb9d16103c995f991cf6ee0422c --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/SplitContainerBase.cs @@ -0,0 +1,40 @@ +using Gtk; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace GTKSystem.Windows.Forms.GTKControls.ControlBase +{ + public sealed class SplitContainerBase : Gtk.Paned, IControlGtk + { + public GtkControlOverride Override { get; set; } + internal SplitContainerBase() : base(Gtk.Orientation.Vertical) + { + this.Override = new GtkControlOverride(this); + this.Override.AddClass("SplitContainer"); + this.BorderWidth = 1; + this.WideHandle = true; + this.Orientation = Gtk.Orientation.Horizontal; + } + + public void AddClass(string cssClass) + { + this.Override.AddClass(cssClass); + } + protected override void OnShown() + { + Override.OnAddClass(); + base.OnShown(); + } + protected override bool OnDrawn(Cairo.Context cr) + { + Gdk.Rectangle rec = new Gdk.Rectangle(0, 0, this.AllocatedWidth, this.AllocatedHeight); + Override.OnDrawnBackground(cr, rec); + Override.OnPaint(cr, rec); + return base.OnDrawn(cr); + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/TabControlBase.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/TabControlBase.cs new file mode 100644 index 0000000000000000000000000000000000000000..9be961adeb6dafbbe865ff3ebdc00ad7b48a3a0f --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/TabControlBase.cs @@ -0,0 +1,36 @@ +using Gtk; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace GTKSystem.Windows.Forms.GTKControls.ControlBase +{ + public sealed class TabControlBase : Gtk.Notebook, IControlGtk + { + public GtkControlOverride Override { get; set; } + internal TabControlBase() : base() + { + this.Override = new GtkControlOverride(this); + this.Override.AddClass("TabControl"); + } + public void AddClass(string cssClass) + { + this.Override.AddClass(cssClass); + } + protected override void OnShown() + { + Override.OnAddClass(); + base.OnShown(); + } + protected override bool OnDrawn(Cairo.Context cr) + { + Gdk.Rectangle rec = new Gdk.Rectangle(0, 0, this.AllocatedWidth, this.AllocatedHeight); + Override.OnDrawnBackground(cr, rec); + Override.OnPaint(cr, rec); + return base.OnDrawn(cr); + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/TabPageBase.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/TabPageBase.cs new file mode 100644 index 0000000000000000000000000000000000000000..352277cf1f692a591083e771509dd8e1e833ad36 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/TabPageBase.cs @@ -0,0 +1,33 @@ +using Gtk; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace GTKSystem.Windows.Forms.GTKControls.ControlBase +{ + public sealed class TabPageBase : Gtk.Layout, IControlGtk + { + public GtkControlOverride Override { get; set; } + internal TabPageBase() : base(new Gtk.Adjustment(IntPtr.Zero), new Gtk.Adjustment(IntPtr.Zero)) + { + this.Override = new GtkControlOverride(this); + this.Override.AddClass("TabPage"); + this.BorderWidth = 0; + } + protected override void OnShown() + { + Override.OnAddClass(); + base.OnShown(); + } + protected override bool OnDrawn(Cairo.Context cr) + { + Gdk.Rectangle rec = new Gdk.Rectangle(0, 0, this.AllocatedWidth, this.AllocatedHeight); + Override.OnDrawnBackground(cr, rec); + Override.OnPaint(cr, rec); + return base.OnDrawn(cr); + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/TableLayoutPanelBase.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/TableLayoutPanelBase.cs new file mode 100644 index 0000000000000000000000000000000000000000..5a1e02946af4a83ce5d3c1807f266d921bc5d196 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/TableLayoutPanelBase.cs @@ -0,0 +1,38 @@ +using Gtk; +using System; + + +namespace GTKSystem.Windows.Forms.GTKControls.ControlBase +{ + public sealed class TableLayoutPanelBase : Gtk.Grid, IControlGtk + { + public GtkControlOverride Override { get; set; } + internal TableLayoutPanelBase() : base() + { + this.Override = new GtkControlOverride(this); + this.Override.AddClass("TableLayoutPanel"); + this.RowHomogeneous = false; + this.ColumnHomogeneous = false; + this.BorderWidth = 1; + this.BaselineRow = 0; + this.ColumnSpacing = 0; + this.RowSpacing = 0; + } + public void AddClass(string cssClass) + { + this.Override.AddClass(cssClass); + } + protected override void OnShown() + { + Override.OnAddClass(); + base.OnShown(); + } + protected override bool OnDrawn(Cairo.Context cr) + { + Gdk.Rectangle rec = new Gdk.Rectangle(0, 0, this.AllocatedWidth, this.AllocatedHeight); + Override.OnDrawnBackground(cr, rec); + Override.OnPaint(cr, rec); + return base.OnDrawn(cr); + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/TextBoxBase.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/TextBoxBase.cs new file mode 100644 index 0000000000000000000000000000000000000000..1cf11eabbf09f5f0cf15e97616d8ec50af149755 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/TextBoxBase.cs @@ -0,0 +1,37 @@ +using Gtk; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace GTKSystem.Windows.Forms.GTKControls.ControlBase +{ + public sealed class TextBoxBase : Gtk.Entry, IControlGtk + { + public GtkControlOverride Override { get; set; } + internal TextBoxBase() : base() + { + this.Override = new GtkControlOverride(this); + this.Override.AddClass("TextBox"); + } + public void AddClass(string cssClass) + { + this.Override.AddClass(cssClass); + } + protected override void OnShown() + { + Override.OnAddClass(); + base.OnShown(); + } + + protected override bool OnDrawn(Cairo.Context cr) + { + Gdk.Rectangle rec = new Gdk.Rectangle(0, 0, this.AllocatedWidth, this.AllocatedHeight); + Override.OnDrawnBackground(cr, rec); + Override.OnPaint(cr, rec); + return base.OnDrawn(cr); + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/ToolStripBase.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/ToolStripBase.cs new file mode 100644 index 0000000000000000000000000000000000000000..8e2bf900eb8cbb49367d5bc39b09a846a5e8fabb --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/ToolStripBase.cs @@ -0,0 +1,42 @@ +using Gtk; +using System; + + +namespace GTKSystem.Windows.Forms.GTKControls.ControlBase +{ + public sealed class ToolStripBase : Gtk.MenuBar, IControlGtk + { + public GtkControlOverride Override { get; set; } + internal ToolStripBase() : base() + { + this.Override = new GtkControlOverride(this); + this.Override.AddClass("ToolStrip"); + this.Hexpand = false; + this.Vexpand = false; + this.Valign = Gtk.Align.Start; + this.Halign = Gtk.Align.Start; + this.HeightRequest = 20; + } + public void AddClass(string cssClass) + { + this.Override.AddClass(cssClass); + } + protected override void OnShown() + { + Override.OnAddClass(); + base.OnShown(); + } + //protected override void OnResizeChecked() + //{ + // base.OnResizeChecked(); + // Override.OnResizeChecked(this.Allocation); + //} + //protected override bool OnDrawn(Cairo.Context cr) + //{ + // Gdk.Rectangle rec = new Gdk.Rectangle(0, 0, this.AllocatedWidth, this.AllocatedHeight); + // Override.OnDrawnBackground(cr, rec); + // Override.OnPaint(cr, rec); + // return base.OnDrawn(cr); + //} + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/ToolStripDropDownBase.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/ToolStripDropDownBase.cs new file mode 100644 index 0000000000000000000000000000000000000000..2db6bfd229d5cbf5494f578cc399cb4d77387d35 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/ToolStripDropDownBase.cs @@ -0,0 +1,36 @@ +using Gtk; +using System; + + +namespace GTKSystem.Windows.Forms.GTKControls.ControlBase +{ + public sealed class ToolStripDropDownBase : Gtk.Menu, IControlGtk + { + public GtkControlOverride Override { get; set; } + internal ToolStripDropDownBase() : base() + { + this.Override = new GtkControlOverride(this); + } + public void AddClass(string cssClass) + { + this.Override.AddClass(cssClass); + } + protected override void OnShown() + { + Override.OnAddClass(); + base.OnShown(); + } + //protected override void OnResizeChecked() + //{ + // base.OnResizeChecked(); + // Override.OnResizeChecked(this.Allocation); + //} + //protected override bool OnDrawn(Cairo.Context cr) + //{ + // Gdk.Rectangle rec = new Gdk.Rectangle(0, 0, this.AllocatedWidth, this.AllocatedHeight); + // Override.OnDrawnBackground(cr, rec); + // Override.OnPaint(cr, rec); + // return base.OnDrawn(cr); + //} + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/TrackBarBase.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/TrackBarBase.cs new file mode 100644 index 0000000000000000000000000000000000000000..bc76949fa7537e2729965ade423acb63a4999552 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/TrackBarBase.cs @@ -0,0 +1,32 @@ +using Gtk; +using System; + + +namespace GTKSystem.Windows.Forms.GTKControls.ControlBase +{ + public sealed class TrackBarBase : Gtk.Viewport, IControlGtk + { + public GtkControlOverride Override { get; set; } + internal TrackBarBase() : base() + { + this.Override = new GtkControlOverride(this); + this.Override.AddClass("TrackBar"); + } + public void AddClass(string cssClass) + { + this.Override.AddClass(cssClass); + } + protected override void OnShown() + { + Override.OnAddClass(); + base.OnShown(); + } + protected override bool OnDrawn(Cairo.Context cr) + { + Gdk.Rectangle rec = new Gdk.Rectangle(0, 0, this.AllocatedWidth, this.AllocatedHeight); + Override.OnDrawnBackground(cr, rec); + Override.OnPaint(cr, rec); + return base.OnDrawn(cr); + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/TreeViewBase.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/TreeViewBase.cs new file mode 100644 index 0000000000000000000000000000000000000000..4ffe65421f3d3b84c610adc0518fb1d6cb5a3fd0 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/TreeViewBase.cs @@ -0,0 +1,36 @@ +using Gtk; +using System; + + +namespace GTKSystem.Windows.Forms.GTKControls.ControlBase +{ + public sealed class TreeViewBase : Gtk.TreeView, IControlGtk + { + public GtkControlOverride Override { get; set; } + internal TreeViewBase() : base() + { + this.Override = new GtkControlOverride(this); + this.Override.AddClass("TreeView"); + this.BorderWidth = 0; + this.Expand = true; + this.HeadersVisible = false; + this.ActivateOnSingleClick = true; + } + public void AddClass(string cssClass) + { + this.Override.AddClass(cssClass); + } + protected override void OnShown() + { + Override.OnAddClass(); + base.OnShown(); + } + protected override bool OnDrawn(Cairo.Context cr) + { + Gdk.Rectangle rec = new Gdk.Rectangle(0, 0, this.AllocatedWidth, this.AllocatedHeight); + Override.OnDrawnBackground(cr, rec); + Override.OnPaint(cr, rec); + return base.OnDrawn(cr); + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/UserControlBase.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/UserControlBase.cs new file mode 100644 index 0000000000000000000000000000000000000000..ea1c33d048ffee0acd464b7f1af7ad8bd96e1ca4 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/UserControlBase.cs @@ -0,0 +1,40 @@ +using Gtk; +using System; + + +namespace GTKSystem.Windows.Forms.GTKControls.ControlBase +{ + public sealed class UserControlBase : Gtk.Viewport, IControlGtk + { + public GtkControlOverride Override { get; set; } + internal UserControlBase() : base() + { + this.Override = new GtkControlOverride(this); + this.Override.AddClass("UserControl"); + this.MarginStart = 0; + this.MarginTop = 0; + this.BorderWidth = 0; + this.Halign = Align.Start; + this.Valign = Align.Start; + this.Expand = false; + this.Hexpand = false; + this.Vexpand = false; + } + public void AddClass(string cssClass) + { + this.Override.AddClass(cssClass); + } + protected override void OnShown() + { + Override.OnAddClass(); + base.OnShown(); + } + protected override bool OnDrawn(Cairo.Context cr) + { + Gdk.Rectangle rec = new Gdk.Rectangle(0, 0, this.AllocatedWidth, this.AllocatedHeight); + Override.OnDrawnBackground(cr, rec); + Override.OnPaint(cr, rec); + return base.OnDrawn(cr); + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/ViewportBase.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/ViewportBase.cs new file mode 100644 index 0000000000000000000000000000000000000000..767b94dab9e599566396bd35f4318c91781c2a2e --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ControlBase/ViewportBase.cs @@ -0,0 +1,22 @@ +using Gtk; +using System; +using System.ComponentModel; + + +namespace GTKSystem.Windows.Forms.GTKControls.ControlBase +{ + public sealed class ViewportBase : Gtk.Viewport, IControlGtk + { + public GtkControlOverride Override { get; set; } + internal ViewportBase() : base() + { + this.Override = new GtkControlOverride(this); + } + protected override bool OnDrawn(Cairo.Context cr) + { + Gdk.Rectangle rec = new Gdk.Rectangle(0, 0, this.AllocatedWidth, this.AllocatedHeight); + Override.OnDrawnBackground(cr, rec); + return base.OnDrawn(cr); + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/DataGridView.cs b/Source/GTKSystem.Windows.Forms/GTKControls/DataGridView.cs index ae5f9860f6744f8e3787616c6770fd99c3cd1d76..27c149c44194ad5bee22293d839990ef17b70467 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/DataGridView.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/DataGridView.cs @@ -1,7 +1,13 @@ -//基于GTK3.24.24.34版本组件开发,兼容原生C#控件winform界面的跨平台界面组件。 -//使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows和linux运行 -//技术支持438865652@qq.com,https://www.cnblogs.com/easywebfactory +/* + * 基于GTK组件开发,兼容原生C#控件winform界面的跨平台界面组件。 + * 使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows、linux、macos运行 + * 技术支持438865652@qq.com,https://gitee.com/easywebfactory, https://www.cnblogs.com/easywebfactory + * author:chenhongjin + * date: 2024/1/3 + */ +using GLib; using Gtk; +using GTKSystem.Windows.Forms.GTKControls.ControlBase; using System; using System.Collections; using System.Collections.Generic; @@ -16,79 +22,56 @@ using System.Windows.Forms.GtkRender; namespace System.Windows.Forms { [DesignerCategory("Component")] - public partial class DataGridView : WidgetControl + public partial class DataGridView : Control { - private Gtk.TreeView _treeView; + public readonly DataGridViewBase self = new DataGridViewBase(); + public override object GtkControl => self; + private Gtk.TreeView _treeView = new Gtk.TreeView(); private DataGridViewColumnCollection _columns; private DataGridViewRowCollection _rows; - private Gtk.TreeStore _store; - internal Gtk.TreeStore Store { get { return _store; } } + private ControlBindingsCollection _collect; + + internal Gtk.TreeStore Store = new TreeStore(typeof(CellValue)); internal Gtk.TreeView TreeView { get { return _treeView; } } - public DataGridView():base(Gtk.Orientation.Vertical,0) + + public DataGridView():base() { - Widget.StyleContext.AddClass("DataGridView"); - Widget.StyleContext.AddClass("BorderRadiusStyle"); - - _treeView = new Gtk.TreeView(); _treeView.Valign = Gtk.Align.Fill; _treeView.Halign = Gtk.Align.Fill; - - _columns = new DataGridViewColumnCollection(this); - _rows = new DataGridViewRowCollection(this); - - Gtk.ScrolledWindow scroll = new Gtk.ScrolledWindow(); - scroll.Child = _treeView; - this.Control.PackStart(scroll, true, true, 1); - _treeView.Selection.Mode = Gtk.SelectionMode.Multiple; _treeView.HeadersClickable = true; _treeView.HeadersVisible = true; - _treeView.ActivateOnSingleClick = true; - // _treeView.RowActivated += DataGridView_RowActivated;//此事件必须ActivateOnSingleClick = true; - - _treeView.Realized += _treeView_Realized; - } + // _treeView.RowActivated += DataGridView_RowActivated;//此事件必须ActivateOnSingleClick = true; - private void _treeView_Realized(object sender, EventArgs e) - { - _store = new Gtk.TreeStore(Array.ConvertAll(_treeView.Columns, o => typeof(CellValue))); - _treeView.Model = _store; - updateListStore(); - _columns.Invalidate(); - } - - private void DataGridView_RowActivated(object o, Gtk.RowActivatedArgs args) - { - //Console.WriteLine("--DataGridView_RowActivated"); - - TreePath path = args.Path; - DataGridViewColumn column = args.Column as DataGridViewColumn; - var model = _treeView.Model; - model.GetIter(out TreeIter iter, path); - CellValue val = (CellValue)(model.GetValue(iter, column.Index)); + _columns = new DataGridViewColumnCollection(this); + _rows = new DataGridViewRowCollection(this); + _collect = new ControlBindingsCollection(this); + Gtk.ScrolledWindow scroll = new Gtk.ScrolledWindow(); + scroll.Child = _treeView; + self.Child = scroll; } public event EventHandler MultiSelectChanged { - add { _treeView.RowActivated += (object sender, RowActivatedArgs e) => { if (base.Control.IsRealized) { value.Invoke(sender, e); } }; } - remove { _treeView.RowActivated -= (object sender, RowActivatedArgs e) => { if (base.Control.IsRealized) { value.Invoke(sender, e); } }; } + add { _treeView.RowActivated += (object sender, RowActivatedArgs e) => { if (self.IsRealized) { value.Invoke(this, e); } }; } + remove { _treeView.RowActivated -= (object sender, RowActivatedArgs e) => { if (self.IsRealized) { value.Invoke(this, e); } }; } } public event DataGridViewCellEventHandler CellClick { - add { _treeView.RowActivated += (object sender, RowActivatedArgs e) => { if (base.Control.IsRealized) { DataGridViewColumn column = e.Column as DataGridViewColumn; value.Invoke(sender, new DataGridViewCellEventArgs(column.Index, e.Path.Indices[0])); } }; } - remove { _treeView.RowActivated -= (object sender, RowActivatedArgs e) => { if (base.Control.IsRealized) { DataGridViewColumn column = e.Column as DataGridViewColumn; value.Invoke(sender, new DataGridViewCellEventArgs(column.Index, e.Path.Indices[0])); } }; } + add { _treeView.RowActivated += (object sender, RowActivatedArgs e) => { if (self.IsRealized) { DataGridViewColumn column = e.Column as DataGridViewColumn; value.Invoke(this, new DataGridViewCellEventArgs(column.Index, e.Path.Indices[0])); } }; } + remove { _treeView.RowActivated -= (object sender, RowActivatedArgs e) => { if (self.IsRealized) { DataGridViewColumn column = e.Column as DataGridViewColumn; value.Invoke(this, new DataGridViewCellEventArgs(column.Index, e.Path.Indices[0])); } }; } } public event DataGridViewCellEventHandler CellEnter { - add { _treeView.RowActivated += (object sender, RowActivatedArgs e) => { if (base.Control.IsRealized) { DataGridViewColumn column = e.Column as DataGridViewColumn; value.Invoke(sender, new DataGridViewCellEventArgs(column.Index, e.Path.Indices[0])); } }; } - remove { _treeView.RowActivated -= (object sender, RowActivatedArgs e) => { if (base.Control.IsRealized) { DataGridViewColumn column = e.Column as DataGridViewColumn; value.Invoke(sender, new DataGridViewCellEventArgs(column.Index, e.Path.Indices[0])); } }; } + add { _treeView.RowActivated += (object sender, RowActivatedArgs e) => { if (self.IsRealized) { DataGridViewColumn column = e.Column as DataGridViewColumn; value.Invoke(this, new DataGridViewCellEventArgs(column.Index, e.Path.Indices[0])); } }; } + remove { _treeView.RowActivated -= (object sender, RowActivatedArgs e) => { if (self.IsRealized) { DataGridViewColumn column = e.Column as DataGridViewColumn; value.Invoke(this, new DataGridViewCellEventArgs(column.Index, e.Path.Indices[0])); } }; } } public event DataGridViewCellEventHandler CellLeave { - add { _treeView.RowActivated += (object sender, RowActivatedArgs e) => { if (base.Control.IsRealized) { DataGridViewColumn column = e.Column as DataGridViewColumn; value.Invoke(sender, new DataGridViewCellEventArgs(column.Index, e.Path.Indices[0])); } }; } - remove { _treeView.RowActivated -= (object sender, RowActivatedArgs e) => { if (base.Control.IsRealized) { DataGridViewColumn column = e.Column as DataGridViewColumn; value.Invoke(sender, new DataGridViewCellEventArgs(column.Index, e.Path.Indices[0])); } }; } + add { _treeView.RowActivated += (object sender, RowActivatedArgs e) => { if (self.IsRealized) { DataGridViewColumn column = e.Column as DataGridViewColumn; value.Invoke(this, new DataGridViewCellEventArgs(column.Index, e.Path.Indices[0])); } }; } + remove { _treeView.RowActivated -= (object sender, RowActivatedArgs e) => { if (self.IsRealized) { DataGridViewColumn column = e.Column as DataGridViewColumn; value.Invoke(this, new DataGridViewCellEventArgs(column.Index, e.Path.Indices[0])); } }; } } public event DataGridViewCellEventHandler CellValidated { @@ -96,11 +79,11 @@ namespace System.Windows.Forms { _treeView.WidgetEventAfter += (object sender, WidgetEventAfterArgs e) => { - if (base.Control.IsRealized) { + if (self.IsRealized) { if (isCellValidating) { isCellValidating = false; - value.Invoke(sender, new DataGridViewCellEventArgs(columnid, rowid)); + value.Invoke(this, new DataGridViewCellEventArgs(columnid, rowid)); } } }; @@ -109,12 +92,12 @@ namespace System.Windows.Forms { _treeView.WidgetEventAfter -= (object sender, WidgetEventAfterArgs e) => { - if (base.Control.IsRealized) + if (self.IsRealized) { if (isCellValidating) { isCellValidating = false; - value.Invoke(sender, new DataGridViewCellEventArgs(columnid, rowid)); + value.Invoke(this, new DataGridViewCellEventArgs(columnid, rowid)); } } }; @@ -129,13 +112,13 @@ namespace System.Windows.Forms { _treeView.RowActivated += (object sender, RowActivatedArgs e) => { - if (base.Control.IsRealized) + if (self.IsRealized) { DataGridViewColumn column = e.Column as DataGridViewColumn; var model = _treeView.Model; model.GetIter(out TreeIter iter, e.Path); CellValue val = (CellValue)(model.GetValue(iter, column.Index)); - value.Invoke(sender, new DataGridViewCellValidatingEventArgs(column.Index, e.Path.Indices[0], val?.Text)); + value.Invoke(this, new DataGridViewCellValidatingEventArgs(column.Index, e.Path.Indices[0], val?.Text)); columnid = column.Index; rowid = e.Path.Indices[0]; isCellValidating = true; @@ -145,14 +128,14 @@ namespace System.Windows.Forms remove { _treeView.RowActivated -= (object sender, RowActivatedArgs e) => { - if (base.Control.IsRealized) + if (self.IsRealized) { DataGridViewColumn column = e.Column as DataGridViewColumn; var model = _treeView.Model; model.GetIter(out TreeIter iter, e.Path); CellValue val = (CellValue)(model.GetValue(iter, column.Index)); - value.Invoke(sender, new DataGridViewCellValidatingEventArgs(column.Index, e.Path.Indices[0], val?.Text)); + value.Invoke(this, new DataGridViewCellValidatingEventArgs(column.Index, e.Path.Indices[0], val?.Text)); columnid = column.Index; rowid = e.Path.Indices[0]; isCellValidating = true; @@ -161,8 +144,14 @@ namespace System.Windows.Forms } } - public void CellValueChanagedHandler(int column, int row) + internal void CellValueChanagedHandler(int column, int row, CellValue val) { + var cells = _rows[row].Cells; + if(cells.Count>column) + { + cells[column].Value = val?.Text; + } + if (CellValueChanged != null) { CellValueChanged(this, new DataGridViewCellEventArgs(column, row)); @@ -175,8 +164,8 @@ namespace System.Windows.Forms public event EventHandler SelectionChanged { - add { _treeView.RowActivated += (object sender, RowActivatedArgs e) => { if (base.Control.IsRealized) { DataGridViewColumn column = e.Column as DataGridViewColumn; value.Invoke(sender, new DataGridViewCellEventArgs(column.Index, e.Path.Indices[0])); } }; } - remove { _treeView.RowActivated -= (object sender, RowActivatedArgs e) => { if (base.Control.IsRealized) { DataGridViewColumn column = e.Column as DataGridViewColumn; value.Invoke(sender, new DataGridViewCellEventArgs(column.Index, e.Path.Indices[0])); } }; } + add { _treeView.RowActivated += (object sender, RowActivatedArgs e) => { if (self.IsRealized) { DataGridViewColumn column = e.Column as DataGridViewColumn; value.Invoke(this, new DataGridViewCellEventArgs(column.Index, e.Path.Indices[0])); } }; } + remove { _treeView.RowActivated -= (object sender, RowActivatedArgs e) => { if (self.IsRealized) { DataGridViewColumn column = e.Column as DataGridViewColumn; value.Invoke(this, new DataGridViewCellEventArgs(column.Index, e.Path.Indices[0])); } }; } } @@ -194,7 +183,22 @@ namespace System.Windows.Forms get { return new DataGridViewRow(); } set { } } + internal void BindDataSource(string propertyName, object datasource, string dataMember, int selectindex, bool formattingEnabled, DataSourceUpdateMode dataSourceUpdateMode, object nullValue, string formatString) + { + if (datasource == null || string.IsNullOrWhiteSpace(propertyName) || string.IsNullOrWhiteSpace(dataMember)) + return; + + this.TreeView.SelectionNotifyEvent += (object o, SelectionNotifyEventArgs args) => { + datasource.GetType().GetProperty(propertyName).SetValue(datasource, dataMember); + }; + + this.TreeView.RowActivated += (object o, RowActivatedArgs args) + => { + datasource.GetType().GetProperty(propertyName).SetValue(datasource, dataMember); + }; + } + public override ControlBindingsCollection DataBindings { get => _collect; } private object _DataSource; public object DataSource { @@ -202,16 +206,21 @@ namespace System.Windows.Forms set { _DataSource = value; - if (base.Visible && _treeView.IsRealized) - { - updateListStore(); - } + Store.Clear(); + Store = new Gtk.TreeStore(Array.ConvertAll(_treeView.Columns, o => typeof(CellValue))); + _treeView.Model = Store; + updateListStore(); + _columns.Invalidate(); } - } + private void updateListStore() { - _store.Clear(); + if (Store != null) + { + Store.Clear(); + } + if (_DataSource == null) { } @@ -236,6 +245,7 @@ namespace System.Windows.Forms else Columns.Add(new DataGridViewColumn() { Name = col.ColumnName, HeaderText = col.ColumnName, ValueType = col.DataType }); } + _columns.Invalidate(); } int ncolumns = Columns.Count; if (ncolumns > 0) @@ -281,7 +291,9 @@ namespace System.Windows.Forms else Columns.Add(new DataGridViewColumn() { Name = pro.Name, HeaderText = pro.Name, ValueType = pro.PropertyType }); } + _columns.Invalidate(); } + int ncolumns = Columns.Count; if (ncolumns > 0) { @@ -359,24 +371,18 @@ namespace System.Windows.Forms } public new void Add(DataGridViewColumn column) { + column.DataGridView = __owner; base.Add(column); _treeview.AppendColumn(column); - if (_treeview.IsRealized && __owner.Visible) - { - Invalidate(); - } } public new void AddRange(IEnumerable columns) { foreach (DataGridViewColumn column in columns) { + column.DataGridView = __owner; _treeview.AppendColumn(column); } base.AddRange(columns); - if(_treeview.IsRealized && __owner.Visible) - { - Invalidate(); - } } public new void Clear() { @@ -387,22 +393,38 @@ namespace System.Windows.Forms } public void Invalidate() { - int idx = 0; - foreach (DataGridViewColumn column in this) + if (__owner.TreeView.Columns.Length > __owner.Store.NColumns) { - column.Index = idx; - column.DisplayIndex = column.Index; - column.DataGridView = __owner; - column.Renderer(); - __owner.Store.SetSortFunc(idx, new Gtk.TreeIterCompareFunc((Gtk.ITreeModel m, Gtk.TreeIter t1, Gtk.TreeIter t2) => + CellValue[] columnTypes = new CellValue[__owner.TreeView.Columns.Length]; + __owner.Store.Clear(); + __owner.Store = new TreeStore(Array.ConvertAll(columnTypes, o => typeof(CellValue))); + __owner.TreeView.Model = __owner.Store; + } + else if (__owner.TreeView.Model == null) + { + __owner.TreeView.Model = __owner.Store; + } + if (__owner.TreeView.Columns.Length <= __owner.Store.NColumns) + { + int idx = 0; + foreach (DataGridViewColumn column in this) { - __owner.Store.GetSortColumnId(out int sortid, out Gtk.SortType order); - if (m.GetValue(t1, sortid) == null || m.GetValue(t2, sortid) == null) - return 0; - else - return m.GetValue(t1, sortid).ToString().CompareTo(m.GetValue(t2, sortid).ToString()); - })); - idx++; + column.Index = idx; + column.DisplayIndex = column.Index; + column.DataGridView = __owner; + column.Clear(); + column.Renderer(); + + __owner.Store.SetSortFunc(idx, new Gtk.TreeIterCompareFunc((Gtk.ITreeModel m, Gtk.TreeIter t1, Gtk.TreeIter t2) => + { + __owner.Store.GetSortColumnId(out int sortid, out Gtk.SortType order); + if (m.GetValue(t1, sortid) == null || m.GetValue(t2, sortid) == null) + return 0; + else + return m.GetValue(t1, sortid).ToString().CompareTo(m.GetValue(t2, sortid).ToString()); + })); + idx++; + } } } public int GetColumnCount(DataGridViewElementStates includeFilter) diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/DataGridViewBase/CellRendererValue.cs b/Source/GTKSystem.Windows.Forms/GTKControls/DataGridViewBase/CellRendererValue.cs index d7f96dd1c91bf6aa2a423d62d445015aaf201bc9..853f7f9740ba6e2bc9cdaa09a0a97db8217b99ba 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/DataGridViewBase/CellRendererValue.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/DataGridViewBase/CellRendererValue.cs @@ -1,9 +1,10 @@ -using GLib; +using Cairo; +using Gdk; +using GLib; using Gtk; using System; using System.Diagnostics.CodeAnalysis; -using System.Reflection; - + namespace System.Windows.Forms.GtkRender { public class CellRendererValue : CellRendererText @@ -13,7 +14,6 @@ namespace System.Windows.Forms.GtkRender { set { - this.CellBackgroundRgba = new Gdk.RGBA() { Alpha = 0, Blue = 255, Green = 255, Red = 255 }; if (value == null) { this.Text = string.Empty; @@ -21,7 +21,7 @@ namespace System.Windows.Forms.GtkRender else { this.Text = value.Text; - if (value.Background != null) + if (value.Background.Name != "0" && value.Background.Name != "transparent") { this.CellBackgroundRgba = new Gdk.RGBA() { Alpha = Math.Min(0.6, value.Background.A), Blue = value.Background.B, Green = value.Background.G, Red = value.Background.R }; } @@ -36,7 +36,6 @@ namespace System.Windows.Forms.GtkRender { set { - this.CellBackgroundRgba = new Gdk.RGBA() { Alpha = 0, Blue = 255, Green = 255, Red = 255 }; if (value == null) { this.Active = false; @@ -44,7 +43,7 @@ namespace System.Windows.Forms.GtkRender else { this.Active = (value.Text == "1" || value.Text.ToLower() == "true") ? true : false; - if (value.Background != null) + if (value.Background.Name != "0" && value.Background.Name != "transparent") { this.CellBackgroundRgba = new Gdk.RGBA() { Alpha = Math.Min(0.6, value.Background.A), Blue = value.Background.B, Green = value.Background.G, Red = value.Background.R }; } @@ -59,7 +58,6 @@ namespace System.Windows.Forms.GtkRender { set { - this.CellBackgroundRgba = new Gdk.RGBA() { Alpha = 0, Blue = 255, Green = 255, Red = 255 }; if (value == null) { this.Text = string.Empty; @@ -67,7 +65,7 @@ namespace System.Windows.Forms.GtkRender else { this.Text = value.Text; - if (value.Background != null) + if (value.Background.Name != "0" && value.Background.Name != "transparent") { this.CellBackgroundRgba = new Gdk.RGBA() { Alpha = Math.Min(0.6, value.Background.A), Blue = value.Background.B, Green = value.Background.G, Red = value.Background.R }; } @@ -82,39 +80,43 @@ namespace System.Windows.Forms.GtkRender { set { - this.CellBackgroundRgba = new Gdk.RGBA() { Alpha = 0, Blue = 255, Green = 255, Red = 255 }; if (value != null) { - if (value.Background != null) + if (value.Background.Name != "0" && value.Background.Name != "transparent") { this.CellBackgroundRgba = new Gdk.RGBA() { Alpha = Math.Min(0.6, value.Background.A), Blue = value.Background.B, Green = value.Background.G, Red = value.Background.R }; } - if (string.IsNullOrEmpty(value.Text) == false && value.Text.IndexOf("/") > 0) + if (string.IsNullOrEmpty(value.Text) == false && value.Text.Contains(".")) { try { this.Pixbuf = new Gdk.Pixbuf(value.Text); } - catch { } + catch { + this.IconName = "image-missing"; + } } else { this.IconName = value.Text; } - } } } } - public class CellRendererButtonValue : CellRendererText { + public CellRendererButtonValue() + { + this.Alignment=Pango.Alignment.Center; + this.Ellipsize = Pango.EllipsizeMode.End; + this.WrapMode = Pango.WrapMode.Char; + } [Property("cellvalue")] public CellValue CellValue { set { - this.CellBackgroundRgba = new Gdk.RGBA() { Alpha = 0, Blue = 255, Green = 255, Red = 255 }; if (value == null) { this.Text = string.Empty; @@ -122,7 +124,7 @@ namespace System.Windows.Forms.GtkRender else { this.Text = value.Text; - if (value.Background != null) + if (value.Background.Name != "transparent" && value.Background.Name != "0") { this.CellBackgroundRgba = new Gdk.RGBA() { Alpha = Math.Min(0.6, value.Background.A), Blue = value.Background.B, Green = value.Background.G, Red = value.Background.R }; } @@ -132,38 +134,27 @@ namespace System.Windows.Forms.GtkRender protected override void OnRender(Cairo.Context cr, Widget widget, Gdk.Rectangle background_area, Gdk.Rectangle cell_area, CellRendererState flags) { - int x = (int)(cell_area.X + this.Xpad); - int y = (int)(cell_area.Y + this.Ypad); - int width = (int)(cell_area.Width - this.Xpad * 2); - int height = (int)(cell_area.Height - this.Ypad * 2); - width = Math.Max(10, width - 10); - x = Math.Max(5, x + 5); - widget.StyleContext.AddClass("GridViewCell-Button"); - widget.StyleContext.AddClass("BorderRadiusStyle"); widget.StyleContext.Save(); - widget.StyleContext.RenderHandle(cr, x, y - 2, width, height + 4); - widget.StyleContext.Restore(); - - if (string.IsNullOrEmpty(this.Text)) - this.Text = "button"; - float textleng = 0; - foreach (char w in this.Text) + if (widget.StyleContext.HasClass("GridViewCell-Button") == false) + widget.StyleContext.AddClass("GridViewCell-Button"); + int height = cell_area.Height; + int y = cell_area.Y; + if (height > 36) { - if (char.IsLower(w) && char.IsLetter(w)) - textleng += 0.5f; - else if (char.IsDigit(w)) - textleng += 0.5f; - else - textleng += 1f; + y = y + (cell_area.Height - 36) / 2; + height = 36; } - int space = (int)Math.Max(16f, width - textleng*12-6); - base.OnRender(cr, widget, new Gdk.Rectangle(background_area.X, background_area.Y, background_area.Width, background_area.Height), new Gdk.Rectangle(cell_area.X + space/2, cell_area.Y, cell_area.Width- space, cell_area.Height), flags); - + widget.StyleContext.RenderHandle(cr, cell_area.X + 3, y, cell_area.Width - 6, height); + widget.StyleContext.Restore(); + var textExt = cr.TextExtents(this.Text ?? string.Empty); + int space = (int)(Math.Max(6f, cell_area.Width - textExt.Width) / 2 - 6); + base.OnRender(cr, widget, new Gdk.Rectangle(background_area.X, background_area.Y, background_area.Width, background_area.Height), new Gdk.Rectangle(cell_area.X + space, cell_area.Y, cell_area.Width - space, cell_area.Height), flags); } + } public class CellValue : IComparable, IComparable, IEquatable { - public Drawing.Color Background { get; set; } = Drawing.Color.Transparent; + public Drawing.Color Background { get; set; }// = Drawing.Color.Transparent; public string Text { get; set; } = string.Empty; diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/DataGridViewBase/DataGridViewCellCollection.cs b/Source/GTKSystem.Windows.Forms/GTKControls/DataGridViewBase/DataGridViewCellCollection.cs index 0873dfbbf46c13503bda56d7f4e814d52d49cc35..4505cf5fbf1b4bd4e8156c9a200fd7fc414d3880 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/DataGridViewBase/DataGridViewCellCollection.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/DataGridViewBase/DataGridViewCellCollection.cs @@ -121,10 +121,6 @@ namespace System.Windows.Forms return items.Add(dataGridViewCell); } - //public void Clear() - //{ - // items.Clear(); - //} public virtual void AddRange(params DataGridViewCell[] dataGridViewCells) { if (dataGridViewCells == null) @@ -152,6 +148,10 @@ namespace System.Windows.Forms items.Add(dataGridViewCell2); } } + public override int Count + { + get { return items.Count; } + } public virtual void Clear() { if (owner.DataGridView != null) diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/DataGridViewBase/DataGridViewColumn.cs b/Source/GTKSystem.Windows.Forms/GTKControls/DataGridViewBase/DataGridViewColumn.cs index 66e2ee68c7e17b75ba331b42c8a9c499459600e7..01e30450020018eb09d2f20a0087e7a45fc02675 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/DataGridViewBase/DataGridViewColumn.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/DataGridViewBase/DataGridViewColumn.cs @@ -1,6 +1,6 @@ using Gtk; +using System.Collections; using System.ComponentModel; -using System.Reflection; using System.Windows.Forms.GtkRender; namespace System.Windows.Forms @@ -29,7 +29,8 @@ namespace System.Windows.Forms public override void Renderer() { var renderer = new CellRendererToggleValue(); - renderer.Activatable = true; + renderer.Activatable = this.ReadOnly == false; + renderer.Mode = CellRendererMode.Activatable; renderer.Toggled += CellName_Toggled; base.PackStart(renderer, true); @@ -44,17 +45,18 @@ namespace System.Windows.Forms TreePath path = new TreePath(args.Path); var model = _treeView.Model; model.GetIter(out TreeIter iter, path); - CellValue val = (CellValue)(model.GetValue(iter, this.DisplayIndex)); - if (val == null) - { - } - else + object cell = model.GetValue(iter, this.DisplayIndex); + if (cell is CellValue val) { Boolean.TryParse(val.Text, out bool result); val.Text = result == true ? "False" : "True"; model.SetValue(iter, this.DisplayIndex, val); + _gridview.CellValueChanagedHandler(this.DisplayIndex, path.Indices[0], val); + } + else + { + _gridview.CellValueChanagedHandler(this.DisplayIndex, path.Indices[0], new CellValue() { Text = cell?.ToString() }); } - _gridview.CellValueChanagedHandler(this.DisplayIndex, path.Indices[0]); } } @@ -73,8 +75,9 @@ namespace System.Windows.Forms public override void Renderer() { var renderer = new CellRendererToggleValue(); + renderer.Activatable = this.ReadOnly == false; + renderer.Mode = CellRendererMode.Activatable; renderer.Radio = true; - renderer.Activatable = true; renderer.Toggled += CellName_Toggled; base.PackStart(renderer, true); @@ -89,38 +92,51 @@ namespace System.Windows.Forms TreePath path = new TreePath(args.Path); var model = _treeView.Model; model.GetIter(out TreeIter iter, path); - CellValue val = (CellValue)(model.GetValue(iter, this.DisplayIndex)); - if (val == null) - { - } - else + object cell = model.GetValue(iter, this.DisplayIndex); + if (cell is CellValue val) { Boolean.TryParse(val.Text, out bool result); val.Text = result == true ? "False" : "True"; model.SetValue(iter, this.DisplayIndex, val); + _gridview.CellValueChanagedHandler(this.DisplayIndex, path.Indices[0], val); + } + else + { + _gridview.CellValueChanagedHandler(this.DisplayIndex, path.Indices[0], new CellValue() { Text = cell?.ToString() }); } - _gridview.CellValueChanagedHandler(this.DisplayIndex, path.Indices[0]); } } public class DataGridViewComboBoxColumn : DataGridViewColumn { + ObjectCollection _items; public DataGridViewComboBoxColumn() : base(new DataGridViewComboBoxCell()) { this.SortMode = DataGridViewColumnSortMode.NotSortable; + _items = new ObjectCollection(this); } public DataGridViewComboBoxColumn(DataGridView owningDataGridView) : base(owningDataGridView, new DataGridViewComboBoxCell()) { this.SortMode = DataGridViewColumnSortMode.NotSortable; + _items = new ObjectCollection(this); } public override void Renderer() { - var renderer = new CellRendererComboValue(); - renderer.Editable = true; + CellRendererComboValue renderer = new CellRendererComboValue(); + renderer.Editable = this.ReadOnly == false; renderer.Edited += Renderer_Edited; //renderer.Changed += Renderer_Changed; + //renderer.WidthChars = 10; + renderer.TextColumn = 0; + Gtk.ListStore model = new Gtk.ListStore(typeof(string)); + foreach(var item in _items) + { + model.AppendValues(item); + } + renderer.Model = model; base.PackStart(renderer, true); base.AddAttribute(renderer, "cellvalue", this.DisplayIndex); + base.Sizing = TreeViewColumnSizing.GrowOnly; if (this.SortMode != DataGridViewColumnSortMode.NotSortable) base.SortColumnId = this.DisplayIndex; @@ -128,19 +144,46 @@ namespace System.Windows.Forms private void Renderer_Changed(object o, ChangedArgs args) { - Console.WriteLine("CellRendererToggle Renderer_Changed"); - + CellRendererCombo combo = (CellRendererCombo)o; + TreePath path = new TreePath(args.Args[0].ToString()); + TreeIter iter = (TreeIter)args.Args[1]; + object val = combo.Model.GetValue(iter, 0); + _gridview.CellValueChanagedHandler(this.DisplayIndex, path.Indices[0], new CellValue() { Text = val?.ToString() }); } private void Renderer_Edited(object o, EditedArgs args) { - //Console.WriteLine("CellRendererToggle Renderer_Edited"); - TreePath path = new TreePath(args.Path); - _gridview.CellValueChanagedHandler(this.DisplayIndex, path.Indices[0]); + var model = _treeView.Model; + model.GetIter(out TreeIter iter, path); + object cell = model.GetValue(iter, this.DisplayIndex); + if (cell is CellValue val) + { + val.Text = args.NewText; + model.SetValue(iter, this.DisplayIndex, val); + _gridview.CellValueChanagedHandler(this.DisplayIndex, path.Indices[0], val); + } + else + { + _gridview.CellValueChanagedHandler(this.DisplayIndex, path.Indices[0], new CellValue() { Text = cell?.ToString() }); + } + } + public ObjectCollection Items => _items; + public class ObjectCollection : ArrayList + { + private DataGridViewColumn _owner; + public ObjectCollection(DataGridViewColumn owner) + { + _owner = owner; + } + public void AddRange(object[] items) + { + foreach (object item in items) + Add(item); + } } } - + public class DataGridViewButtonColumn : DataGridViewColumn { public DataGridViewButtonColumn():base(new DataGridViewButtonCell()) @@ -151,24 +194,30 @@ namespace System.Windows.Forms { this.SortMode = DataGridViewColumnSortMode.NotSortable; } + + private void TreeView_RowActivated(object o, RowActivatedArgs args) + { + if (args.Column.Handle == this.Handle) + { + TreePath path = args.Path; + if(args.Column.Cells[0] is CellRendererText cell) + { + _gridview.CellValueChanagedHandler(this.DisplayIndex, path.Indices[0], new CellValue() { Text = cell.Text?.ToString() }); + } + } + } + public override void Renderer() { var renderer = new CellRendererButtonValue(); - // renderer.Pixbuf = new Gdk.Pixbuf(Assembly.GetExecutingAssembly(), "CodePrintImg/button.png"); - // renderer.IconName = "document-edit-symbolic.symbolic"; - // renderer.IconName = "zoom-original"; - - // renderer.EditingStarted += Renderer_EditingStarted; + renderer.Editable = false; base.PackStart(renderer, true); base.AddAttribute(renderer, "cellvalue", this.DisplayIndex); base.Sizing = TreeViewColumnSizing.GrowOnly; if (this.SortMode != DataGridViewColumnSortMode.NotSortable) base.SortColumnId = this.DisplayIndex; - } - - private void Renderer_EditingStarted(object o, EditingStartedArgs args) - { - Console.WriteLine("CellRendererToggle Renderer_EditingStarted"); + if (this.DataGridView != null) + this.DataGridView.TreeView.RowActivated += TreeView_RowActivated; } } public class DataGridViewImageColumn : DataGridViewColumn @@ -184,20 +233,13 @@ namespace System.Windows.Forms public override void Renderer() { var renderer = new CellRendererPixbufValue(); - renderer.IconName = "face-smile"; - //renderer.EditingStarted += Renderer_EditingStarted; - + renderer.IconName = "face-smile"; base.PackStart(renderer, true); base.AddAttribute(renderer, "cellvalue", this.DisplayIndex); base.Sizing = TreeViewColumnSizing.GrowOnly; if (this.SortMode != DataGridViewColumnSortMode.NotSortable) base.SortColumnId = this.DisplayIndex; } - - private void Renderer_EditingStarted(object o, EditingStartedArgs args) - { - Console.WriteLine("CellRendererToggle Renderer_EditingStarted"); - } } public class DataGridViewLinkColumn : DataGridViewColumn { @@ -233,19 +275,19 @@ namespace System.Windows.Forms _treeView = owningDataGridView?.TreeView; _gridview = owningDataGridView; _cellTemplate = cellTemplate; - base.Resizable = true; + base.Resizable = this.Resizable == DataGridViewTriState.True; this.SortMode = DataGridViewColumnSortMode.Automatic; } public DataGridViewColumn(string title, CellRenderer cell, params object[] attrs) : base(title, cell, attrs) { _cellTemplate = new DataGridViewTextBoxCell(); - base.Resizable = true; + base.Resizable = this.Resizable == DataGridViewTriState.True; } public virtual void Renderer() { var renderer = new CellRendererValue(); - renderer.Editable = false; + renderer.Editable = this.ReadOnly == false; renderer.Edited += Renderer_Edited; renderer.Mode = CellRendererMode.Editable; renderer.PlaceholderText = "---"; @@ -262,9 +304,21 @@ namespace System.Windows.Forms private void Renderer_Edited(object o, EditedArgs args) { - //Console.WriteLine("CellRendererToggle Renderer_Edited"); TreePath path = new TreePath(args.Path); - _gridview.CellValueChanagedHandler(this.DisplayIndex, path.Indices[0]); + var model = _treeView.Model; + model.GetIter(out TreeIter iter, path); + object cell = model.GetValue(iter, this.DisplayIndex); + if (cell is CellValue val) + { + val.Text = args.NewText; + model.SetValue(iter, this.DisplayIndex, val); + _gridview.CellValueChanagedHandler(this.DisplayIndex, path.Indices[0], val); + } + else + { + _gridview.CellValueChanagedHandler(this.DisplayIndex, path.Indices[0], new CellValue() { Text = cell?.ToString() }); + } + } public DataGridView DataGridView { get { return _gridview; } set { _gridview = value; _treeView = value.TreeView; } } diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/DataGridViewBase/DataGridViewHeaderCell.cs b/Source/GTKSystem.Windows.Forms/GTKControls/DataGridViewBase/DataGridViewHeaderCell.cs new file mode 100644 index 0000000000000000000000000000000000000000..164e2b84b35bc8d91405ae0a44fdcc67747e99f4 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/DataGridViewBase/DataGridViewHeaderCell.cs @@ -0,0 +1,78 @@ +using System.ComponentModel; +using System.Drawing; + +namespace System.Windows.Forms +{ + public class DataGridViewHeaderCell : DataGridViewCell + { + protected ButtonState ButtonState + { + get; + } + + [Browsable(false)] + public override bool Displayed + { + get; + } + + internal Bitmap FlipXPThemesBitmap + { + get; + set; + } + + public override Type FormattedValueType + { + get; + } + + [Browsable(false)] + public override bool Frozen + { + get; + } + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool ReadOnly + { + get; + set; + } + + [Browsable(false)] + public override bool Resizable + { + get; + } + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public override bool Selected + { + get; + set; + } + + public override Type ValueType + { + get; + set; + } + + [Browsable(false)] + public override bool Visible + { + get + { + return true; + } + } + + public DataGridViewHeaderCell() + { + + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/DataGridViewBase/DataGridViewRow.cs b/Source/GTKSystem.Windows.Forms/GTKControls/DataGridViewBase/DataGridViewRow.cs index 270976238cb3e0938ac286f327b46db4cc3bb66c..2847bc594daa027a2908c72d152592be5bf2a599 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/DataGridViewBase/DataGridViewRow.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/DataGridViewBase/DataGridViewRow.cs @@ -3,6 +3,7 @@ public class DataGridViewRow { public int Index { get; internal set; } + public IntPtr Handler { get; internal set; } public DataGridView DataGridView { get; set; } private DataGridViewCellCollection _cell; public DataGridViewRow() diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/DataGridViewBase/DataGridViewRowCollection.cs b/Source/GTKSystem.Windows.Forms/GTKControls/DataGridViewBase/DataGridViewRowCollection.cs index de60cf61cccfcf170d19730c51016c6a07609c05..fe83200864ac8bdb57484cdb881b76f2797251bc 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/DataGridViewBase/DataGridViewRowCollection.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/DataGridViewBase/DataGridViewRowCollection.cs @@ -1,7 +1,12 @@ using System.Collections; +using System.Collections.Generic; using System.ComponentModel; using System.Windows.Forms.GtkRender; +using System.Linq; using Gtk; +using System.Data; +using GLib; + namespace System.Windows.Forms { @@ -13,48 +18,61 @@ namespace System.Windows.Forms public DataGridViewRowCollection(DataGridView dataGridView) { this.dataGridView = dataGridView; + this.dataGridView.Columns.Invalidate(); } - private void AddGtkStore(params CellValue[] values) + private TreeIter AddGtkStore(List values) { - this.dataGridView.Store.AppendValues(values); + TreeIter iter = this.dataGridView.Store.AppendNode(); + int columnscount = this.dataGridView.Store.NColumns; + for (int idx = 0; idx < columnscount; idx++) + { + this.dataGridView.Store.SetValue(iter, idx, idx < values.Count ? values[idx] : new CellValue()); + } + return iter; } + private void AddGtkStore(params DataGridViewRow[] dataGridViewRows) { foreach (DataGridViewRow row in dataGridViewRows) - AddGtkStore(row.Cells.ConvertAll(c => + { + row.DataGridView = dataGridView; + TreeIter iter = AddGtkStore(row.Cells.ConvertAll(c => { - if (row.DefaultCellStyle != null && row.DefaultCellStyle.BackColor != null) + if (row.DefaultCellStyle != null && row.DefaultCellStyle.BackColor.Name != "0" && row.DefaultCellStyle.BackColor.Name != "") return new CellValue() { Text = Convert.ToString(c.Value), Background = row.DefaultCellStyle.BackColor }; else return new CellValue() { Text = Convert.ToString(c.Value) }; - }).ToArray()); + })); + row.Handler = iter.UserData; + } + if (this.dataGridView.Store.NColumns < this.dataGridView.TreeView.Columns.Length) + this.dataGridView.Columns.Invalidate(); } - private void AddGtkStore() + private TreeIter InsertGtkStore(int rowIndex, List values) { - Gtk.TreeIter iter = dataGridView.Store.AppendNode(); - for (int i = 0; i < dataGridView.Store.NColumns; i++) + TreeIter iter = this.dataGridView.Store.InsertNode(rowIndex); + int columnscount = this.dataGridView.Store.NColumns; + for (int idx = 0; idx < columnscount && idx < values.Count; idx++) { - dataGridView.Store.SetValue(iter, i, new CellValue() { Text = "" }); + this.dataGridView.Store.SetValue(iter, idx, values[idx]); } - } - private void InsertGtkStore(int rowIndex, params CellValue[] values) - { - dataGridView.Store.InsertWithValues(rowIndex, values); + return iter; } private void InsertGtkStore(int rowIndex, params DataGridViewRow[] dataGridViewRows) { int idx = rowIndex; foreach (DataGridViewRow row in dataGridViewRows) { - InsertGtkStore(idx, row.Cells.ConvertAll(c => + TreeIter iter = InsertGtkStore(idx, row.Cells.ConvertAll(c => { - if (row.DefaultCellStyle != null && row.DefaultCellStyle.BackColor != null) + if (row.DefaultCellStyle != null && row.DefaultCellStyle.BackColor.Name != "0") return new CellValue() { Text = Convert.ToString(c.Value), Background = row.DefaultCellStyle.BackColor }; else return new CellValue() { Text = Convert.ToString(c.Value) }; - }).ToArray()); + })); idx++; + row.Handler = iter.UserData; } } public DataGridViewRow this[int index] @@ -86,8 +104,9 @@ namespace System.Windows.Forms [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public virtual int Add() { - AddGtkStore(); - items.Add(new DataGridViewRow() { Index = items.Count }); + DataGridViewRow row = new DataGridViewRow() { Index = items.Count }; + AddGtkStore(row); + items.Add(row); return 1; } public virtual int Add(DataGridViewRow dataGridViewRow) @@ -114,8 +133,9 @@ namespace System.Windows.Forms { for (int i = 0; i < count; i++) { - AddGtkStore(); - items.Add(new DataGridViewRow() { Index = items.Count }); + DataGridViewRow row = new DataGridViewRow() { Index = items.Count }; + AddGtkStore(row); + items.Add(row); } return count; @@ -331,6 +351,15 @@ namespace System.Windows.Forms } public DataGridViewRow SharedRow(int rowIndex) { + bool hasiter = dataGridView.Store.GetIter(out TreeIter iter,new TreePath(new int[] { rowIndex })); + if (hasiter) + { + foreach (DataGridViewRow item in items) + { + if(item.Handler==iter.UserData) + return item; + } + } return (DataGridViewRow)SharedList[rowIndex]; } //************************************** diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/DataGridViewBase/DataGridViewRowHeaderCell.cs b/Source/GTKSystem.Windows.Forms/GTKControls/DataGridViewBase/DataGridViewRowHeaderCell.cs index 2983d7335609b84bccd553a65f3571ba161a931b..71bc917f09a0bc6132e20c634524e4cd69bda8dd 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/DataGridViewBase/DataGridViewRowHeaderCell.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/DataGridViewBase/DataGridViewRowHeaderCell.cs @@ -1,6 +1,13 @@ -namespace System.Windows.Forms +using System.Drawing; + +namespace System.Windows.Forms { - public class DataGridViewRowHeaderCell + public class DataGridViewRowHeaderCell //: DataGridViewHeaderCell { + public DataGridViewRowHeaderCell() + { + + } + } -} \ No newline at end of file +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/DateTimePicker.cs b/Source/GTKSystem.Windows.Forms/GTKControls/DateTimePicker.cs index 4f0c7587793e909d7381bbe7d7ca28d3263dfc96..1e4fdb281d56411d311dbea5c4a48bc0536e24b9 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/DateTimePicker.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/DateTimePicker.cs @@ -1,6 +1,11 @@ -//基于GTK3.24.24.34版本组件开发,兼容原生C#控件winform界面的跨平台界面组件。 -//使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows和linux运行 -//技术支持438865652@qq.com,https://www.cnblogs.com/easywebfactory +/* + * 基于GTK组件开发,兼容原生C#控件winform界面的跨平台界面组件。 + * 使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows、linux、macos运行 + * 技术支持438865652@qq.com,https://gitee.com/easywebfactory, https://www.cnblogs.com/easywebfactory + * author:chenhongjin + * date: 2024/1/3 + */ +using Atk; using System.ComponentModel; using System.Drawing; @@ -12,18 +17,17 @@ namespace System.Windows.Forms public DateTimePicker() : base() { Widget.StyleContext.AddClass("DateTimePicker"); - Widget.StyleContext.AddClass("BorderRadiusStyle"); - base.Mask = "____年__月__日"; - //base.Control.PrimaryIconActivatable = true; - //base.Control.PrimaryIconStock = "gtk-index"; - base.Control.SecondaryIconActivatable = true; - //base.Control.SecondaryIconStock= "gtk-index"; - //base.Control.SecondaryIconName = "DateTimePicker.ico"; + base.Mask = "____年__月__日"; + //self.PrimaryIconActivatable = true; + //self.PrimaryIconStock = "gtk-index"; - //base.Control.SecondaryIconPixbuf = new Gdk.Pixbuf(WindowsFormsApp1.Properties.Resources.DateTimePicker); - base.Control.SecondaryIconName = "x-office-calendar"; - base.Control.IconRelease += DateTimePicker_IconRelease; + self.SecondaryIconActivatable = true; + self.SecondaryIconStock= "gtk-index"; + // self.SecondaryIconName = "x-office-calendar"; + System.IO.Stream sm = this.GetType().Assembly.GetManifestResourceStream("GTKSystem.Windows.Forms.Resources.System.DateTimePicker.ico"); + self.SecondaryIconPixbuf = new Gdk.Pixbuf(sm); + self.IconRelease += DateTimePicker_IconRelease; } private void DateTimePicker_IconRelease(object o, Gtk.IconReleaseArgs args) @@ -50,7 +54,7 @@ namespace System.Windows.Forms Gtk.Calendar calendar = sender as Gtk.Calendar; DateTime dt = calendar.GetDate(); - base.Control.DeleteSelection(); + self.DeleteSelection(); base.Mask = ""; this.Text = dt.ToString("yyyy年MM月dd日"); base.Mask = "____年__月__日"; @@ -88,8 +92,8 @@ namespace System.Windows.Forms public event EventHandler ValueChanged { - add { base.Control.Changed += (object sender, EventArgs e) => { if (base.Control.IsRealized) { value.Invoke(sender, e); } }; } - remove { base.Control.Changed -= (object sender, EventArgs e) => { if (base.Control.IsRealized) { value.Invoke(sender, e); } }; } + add { self.Changed += (object sender, EventArgs e) => { if (self.IsRealized) { value.Invoke(this, e); } }; } + remove { self.Changed -= (object sender, EventArgs e) => { if (self.IsRealized) { value.Invoke(this, e); } }; } } } } diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Designer/AssemblyRef.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Designer/AssemblyRef.cs new file mode 100644 index 0000000000000000000000000000000000000000..7e4cbc86d21d6b92f137844cc668fe946d6d6714 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Designer/AssemblyRef.cs @@ -0,0 +1,18 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +internal static class FXAssembly +{ + // NB: this must never-ever change to facilitate type-forwarding from + // .NET Framework, if those are referenced in .NET project. + internal const string Version = "4.0.0.0"; +} + +internal static class AssemblyRef +{ + internal const string MicrosoftPublicKey = "b03f5f7f11d50a3a"; + internal const string EnvDTE = "EnvDTE, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"; + // internal const string SystemDesign = $"System.Design, Version={FXAssembly.Version}, Culture=neutral, PublicKeyToken={MicrosoftPublicKey}"; + internal const string SystemDesign = "System.Windows.Forms"; + +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Designer/ComponentDesigner.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Designer/ComponentDesigner.cs new file mode 100644 index 0000000000000000000000000000000000000000..4dcd386c94e94632dad163c45f88866324b83b6c --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Designer/ComponentDesigner.cs @@ -0,0 +1,86 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Collections; +using System.Configuration; +using System.Windows.Forms.Design; + +namespace System.ComponentModel.Design +{ + /// + /// The default designer for all components. + /// + public partial class ComponentDesigner : ITreeDesigner, IDesignerFilter, IComponentInitializer + { + private InheritanceAttribute? _inheritanceAttribute; + + private DesignerVerbCollection? _verbs; + private bool _settingsKeyExplicitlySet; + private IComponent? _component; + + private protected const string SettingsKeyName = "SettingsKey"; + + public ICollection Children => throw new NotImplementedException(); + + public IDesigner Parent => throw new NotImplementedException(); + + public IComponent Component => throw new NotImplementedException(); + + public DesignerVerbCollection Verbs => throw new NotImplementedException(); + + public void DoDefaultAction() + { + + } + + public void Initialize(IComponent component) + { + + } + + public void Dispose() + { + + } + + public void PostFilterAttributes(IDictionary attributes) + { + + } + + public void PostFilterEvents(IDictionary events) + { + + } + + public void PostFilterProperties(IDictionary properties) + { + + } + + public void PreFilterAttributes(IDictionary attributes) + { + + } + + public void PreFilterEvents(IDictionary events) + { + + } + + public void PreFilterProperties(IDictionary properties) + { + + } + + public void InitializeExistingComponent(IDictionary defaultValues) + { + + } + + public void InitializeNewComponent(IDictionary defaultValues) + { + + } + } +} \ No newline at end of file diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Designer/ControlDesigner.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Designer/ControlDesigner.cs new file mode 100644 index 0000000000000000000000000000000000000000..85f3e3c63b13a72cb86f77cc928dc12d36d64867 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Designer/ControlDesigner.cs @@ -0,0 +1,61 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Collections; +using System.ComponentModel; +using System.ComponentModel.Design; +using System.ComponentModel.Design.Serialization; +using System.Drawing; +using System.Drawing.Design; + +namespace System.Windows.Forms.Design +{ + /// + /// Provides a designer that can design components that extend Control. + /// + public partial class ControlDesigner : ComponentDesigner + { +#pragma warning disable IDE1006 // Naming Styles - Public API + protected static readonly Point InvalidPoint = new Point(int.MinValue, int.MinValue); +#pragma warning restore IDE1006 + + private static uint s_currentProcessId; + private IDesignerHost _host; // the host for our designer + + private bool _liveRegion; // is the mouse is over a live region of the control? + private bool _inHitTest; // A popular way to implement GetHitTest is by WM_NCHITTEST + // ...which would cause a cycle. + private bool _hasLocation; // Do we have a location property? + private bool _locationChecked; // And did we check it + private bool _locked; // Signifies if this control is locked or not + private bool _enabledchangerecursionguard; + + + // Transient values that are used during mouse drags + private Point _mouseDragLast = InvalidPoint; // the last position of the mouse during a drag. + private bool _mouseDragMoved; // has the mouse been moved during this drag? + private int _lastMoveScreenX; + private int _lastMoveScreenY; + + // Values used to simulate double clicks for controls that don't support them. + private uint _lastClickMessageTime; + private int _lastClickMessagePositionX; + private int _lastClickMessagePositionY; + + private Point _downPos = Point.Empty; // point used to track first down of a double click + private event EventHandler DisposingHandler; + private CollectionChangeEventHandler _dataBindingsCollectionChanged; + private Exception _thrownException; + + private bool _ctrlSelect; // if the CTRL key was down at the mouse down + private bool _toolPassThrough; // a tool is selected, allow the parent to draw a rect for it. + private bool _removalNotificationHooked; + private bool _revokeDragDrop = true; + private bool _hadDragDrop; + + private static bool s_inContextMenu; + + internal bool ForceVisible { get; set; } = true; + + } +} \ No newline at end of file diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Designer/DocumentDesigner.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Designer/DocumentDesigner.cs new file mode 100644 index 0000000000000000000000000000000000000000..bb8df613744471241a98eef191b3c2f88678df87 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Designer/DocumentDesigner.cs @@ -0,0 +1,101 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Collections; +using System.ComponentModel; +using System.ComponentModel.Design; +using System.ComponentModel.Design.Serialization; +using System.Drawing; +using System.Drawing.Design; + + +namespace System.Windows.Forms.Design +{ + /// + /// Provides a designer that extends the ScrollableControlDesigner and implements + /// IRootDesigner. + /// + [ToolboxItemFilter("System.Windows.Forms")] + public partial class DocumentDesigner : ScrollableControlDesigner, IRootDesigner, IToolboxUser, IOleDragClient + { + + private bool initializing; // is the designer initializing? + + // used to keep the state of the tab order view + // + private bool queriedTabOrder; + private MenuCommand tabOrderCommand; + + internal static IDesignerSerializationManager manager; + + + private int trayHeight = 80; + private bool trayLargeIcon; + private bool trayAutoArrange; + private bool trayLayoutSuspended; + + // ActiveX support + // + private static readonly Guid htmlDesignTime = new Guid("73CEF3DD-AE85-11CF-A406-00AA00C00940"); + + private const string AxClipFormat = "CLSID"; + + public ViewTechnology[] SupportedTechnologies => throw new NotImplementedException(); + + public IComponent Component => throw new NotImplementedException(); + + public DesignerVerbCollection Verbs => throw new NotImplementedException(); + + public bool CanModifyComponents => throw new NotImplementedException(); + + public object GetView(ViewTechnology technology) + { + throw new NotImplementedException(); + } + + public void DoDefaultAction() + { + throw new NotImplementedException(); + } + + public void Initialize(IComponent component) + { + throw new NotImplementedException(); + } + + public void Dispose() + { + throw new NotImplementedException(); + } + + public bool GetToolSupported(ToolboxItem tool) + { + throw new NotImplementedException(); + } + + public void ToolPicked(ToolboxItem tool) + { + throw new NotImplementedException(); + } + + public bool AddComponent(IComponent component, string name, bool firstAdd) + { + throw new NotImplementedException(); + } + + public bool IsDropOk(IComponent component) + { + throw new NotImplementedException(); + } + + public Control GetDesignerControl() + { + throw new NotImplementedException(); + } + + public Control GetControlForComponent(object component) + { + throw new NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Designer/IOleDragClient.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Designer/IOleDragClient.cs new file mode 100644 index 0000000000000000000000000000000000000000..9af548516792dfb76d8a16cc2dc7df6d3c62e2df --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Designer/IOleDragClient.cs @@ -0,0 +1,41 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.ComponentModel; + +namespace System.Windows.Forms.Design +{ + internal interface IOleDragClient + { + IComponent Component { get; } + + /// + /// Checks if the client is read only. That is, if components can + /// be added or removed from the designer. + /// + bool CanModifyComponents { get; } + + /// + /// Retrieves the control view instance for the designer that + /// is hosting the drag. + /// + bool AddComponent(IComponent component, string name, bool firstAdd); + + /// + /// Checks if it is valid to drop this type of a component on this client. + /// + bool IsDropOk(IComponent component); + + /// + /// Retrieves the control view instance for the designer that + /// is hosting the drag. + /// + Control GetDesignerControl(); + + /// + /// Retrieves the control view instance for the given component. + /// For Win32 designer, this will often be the component itself. + /// + Control GetControlForComponent(object component); + } +} \ No newline at end of file diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Designer/IToolboxUser.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Designer/IToolboxUser.cs new file mode 100644 index 0000000000000000000000000000000000000000..2dbc1a72597b63f7f25554a93a2cbe27ce25bde5 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Designer/IToolboxUser.cs @@ -0,0 +1,23 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + + +namespace System.Drawing.Design +{ + /// + /// Provides notifications of toolbox actions to designers which implement this interface. + /// + public interface IToolboxUser + { + /// + /// Gets a value indicating whether the specified tool is supported by the current designer + /// + bool GetToolSupported(ToolboxItem tool); + + /// + /// Selects the specified tool. + /// + /// toolbox item + void ToolPicked(ToolboxItem tool); + } +} \ No newline at end of file diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Designer/ParentControlDesigner.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Designer/ParentControlDesigner.cs new file mode 100644 index 0000000000000000000000000000000000000000..a65860c0057731e6987750886057b0a27051be48 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Designer/ParentControlDesigner.cs @@ -0,0 +1,41 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Collections; +using System.ComponentModel; +using System.ComponentModel.Design; +using System.Drawing; +using System.Drawing.Design; + +namespace System.Windows.Forms.Design +{ + /// + /// The ParentControlDesigner class builds on the ControlDesigner. It adds the ability + /// to manipulate child components, and provides a selection UI handler for all + /// components it contains. + /// + public partial class ParentControlDesigner : ControlDesigner, IOleDragClient + { + public bool CanModifyComponents => throw new NotImplementedException(); + + public bool AddComponent(IComponent component, string name, bool firstAdd) + { + throw new NotImplementedException(); + } + + public Control GetControlForComponent(object component) + { + throw new NotImplementedException(); + } + + public Control GetDesignerControl() + { + throw new NotImplementedException(); + } + + public bool IsDropOk(IComponent component) + { + throw new NotImplementedException(); + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Designer/ScrollableControlDesigner.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Designer/ScrollableControlDesigner.cs new file mode 100644 index 0000000000000000000000000000000000000000..35697967ed1e347bbe0da97bca01484d454fdc66 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Designer/ScrollableControlDesigner.cs @@ -0,0 +1,16 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Drawing; + +namespace System.Windows.Forms.Design +{ + /// + /// The ScrollableControlDesigner class builds on the ParentControlDesigner, and adds the implementation + /// of IWinFormsDesigner so that the designer can be hosted as a document. + /// + public class ScrollableControlDesigner : ParentControlDesigner + { + + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Designer/ToolboxItem.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Designer/ToolboxItem.cs new file mode 100644 index 0000000000000000000000000000000000000000..0219f6f03eccf348eb9d74ddddd81051e98f83e3 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Designer/ToolboxItem.cs @@ -0,0 +1,46 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Collections; +using System.ComponentModel; +using System.ComponentModel.Design; +using System.Reflection; +using System.Runtime.Serialization; +using System.Windows.Forms; + +namespace System.Drawing.Design +{ + /// + /// Provides a base implementation of a toolbox item. + /// + public class ToolboxItem : ISerializable + { + + private static bool s_isScalingInitialized; + private const int ICON_DIMENSION = 16; + private static int s_iconWidth = ICON_DIMENSION; + private static int s_iconHeight = ICON_DIMENSION; + + + /// + /// Initializes a new instance of the ToolboxItem class. + /// + public ToolboxItem() + { + + } + + /// + /// Initializes a new instance of the ToolboxItem class using the specified type. + /// + public ToolboxItem(Type? toolType) : this() + { + + } + + public void GetObjectData(SerializationInfo info, StreamingContext context) + { + + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Designer/UserControlDocumentDesigner.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Designer/UserControlDocumentDesigner.cs new file mode 100644 index 0000000000000000000000000000000000000000..8e18452a7c3c987b10830844c6dbfcc46d6324df --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Designer/UserControlDocumentDesigner.cs @@ -0,0 +1,17 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.ComponentModel; +using System.Collections; +using System.Drawing; + +namespace System.Windows.Forms.Design +{ + /// + /// Provides a base implementation of a designer for user controls. + /// + [ToolboxItemFilter("System.Windows.Forms.UserControl", ToolboxItemFilterType.Custom)] + internal class UserControlDocumentDesigner : DocumentDesigner + { + } +} \ No newline at end of file diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Dialog/ColorDialog.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Dialog/ColorDialog.cs index 77cb940c03fa6b4fee8caad47879af27c932ba6b..ca8c2cbad2d8bb0bff6562420eba6dbbc1576e1f 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/Dialog/ColorDialog.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Dialog/ColorDialog.cs @@ -1,4 +1,10 @@ -using GLib; +/* + * 基于GTK组件开发,兼容原生C#控件winform界面的跨平台界面组件。 + * 使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows、linux、macos运行 + * 技术支持438865652@qq.com,https://gitee.com/easywebfactory, https://www.cnblogs.com/easywebfactory + * author:chenhongjin + * date: 2024/1/3 + */ using Gtk; using System; using System.Collections.Generic; diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Dialog/FileDialog.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Dialog/FileDialog.cs index dd117bda958c68cc302706fa5744b7477ac079ce..e5971ee9e055a5324af386c10bfb08d39f275ebe 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/Dialog/FileDialog.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Dialog/FileDialog.cs @@ -1,7 +1,10 @@ -using Cairo; -using System; -using System.Collections; -using System.Collections.Generic; +/* + * 基于GTK组件开发,兼容原生C#控件winform界面的跨平台界面组件。 + * 使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows、linux、macos运行 + * 技术支持438865652@qq.com,https://gitee.com/easywebfactory, https://www.cnblogs.com/easywebfactory + * author:chenhongjin + * date: 2024/1/3 + */ using System.ComponentModel; using System.Text; diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Dialog/FolderBrowserDialog.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Dialog/FolderBrowserDialog.cs index 4ef50bbfcbd52c92fbeca954bb38eaf61c518f05..a3d86444f505208ee2dbff43f6fca358f8b9951c 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/Dialog/FolderBrowserDialog.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Dialog/FolderBrowserDialog.cs @@ -1,8 +1,10 @@ -using Cairo; -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; +/* + * 基于GTK组件开发,兼容原生C#控件winform界面的跨平台界面组件。 + * 使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows、linux、macos运行 + * 技术支持438865652@qq.com,https://gitee.com/easywebfactory, https://www.cnblogs.com/easywebfactory + * author:chenhongjin + * date: 2024/1/3 + */ namespace System.Windows.Forms { diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Dialog/MessageBox/MessageBox.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Dialog/MessageBox/MessageBox.cs index c6af915bbc45f8db7869dbcc301e681a7a81ad47..e11a0b1515b67003046f9e651dce2d7600cb12db 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/Dialog/MessageBox/MessageBox.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Dialog/MessageBox/MessageBox.cs @@ -1,4 +1,11 @@ -using Gtk; +/* + * 基于GTK组件开发,兼容原生C#控件winform界面的跨平台界面组件。 + * 使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows、linux、macos运行 + * 技术支持438865652@qq.com,https://gitee.com/easywebfactory, https://www.cnblogs.com/easywebfactory + * author:chenhongjin + * date: 2024/1/3 + */ +using Gtk; namespace System.Windows.Forms { @@ -215,13 +222,13 @@ namespace System.Windows.Forms int irun = 0; if (owner is System.Windows.Forms.Form control) { - //irun = ShowMessageDialogCore(control.Control, text, caption, buttons, icon, defaultButton, options, showHelp); - irun = ShowCore(control.Control, Gtk.WindowPosition.CenterOnParent, text, caption, buttons, icon); + //irun = ShowMessageDialogCore(control.self, Gtk.WindowPosition.CenterOnParent, text, caption, buttons, icon, defaultButton, options, showHelp); + irun = ShowCore((Gtk.Window)control.Widget, Gtk.WindowPosition.CenterOnParent, text, caption, buttons, icon); } else { - //irun = ShowMessageDialogCore(new Gtk.Window(Gtk.WindowType.Popup), text, caption, buttons, icon, defaultButton, options, showHelp); - irun = ShowCore(new Gtk.Window(Gtk.WindowType.Popup), Gtk.WindowPosition.Center, text, caption, buttons, icon); + //irun = ShowMessageDialogCore(new Gtk.Window(Gtk.WindowType.Toplevel), Gtk.WindowPosition.Center, text, caption, buttons, icon, defaultButton, options, showHelp); + irun = ShowCore(new Gtk.Window(Gtk.WindowType.Toplevel), Gtk.WindowPosition.Center, text, caption, buttons, icon); } Gtk.ResponseType resp = Enum.Parse(irun.ToString()); @@ -247,7 +254,7 @@ namespace System.Windows.Forms return DialogResult.None; } - private static int ShowMessageDialogCore(Gtk.Window owner, string text, string caption, MessageBoxButtons buttons, params object[] icon) + private static int ShowMessageDialogCore(Gtk.Window owner, Gtk.WindowPosition position, string text, string caption, MessageBoxButtons buttons, params object[] icon) { Gtk.ButtonsType buttonsType = Gtk.ButtonsType.Close; if (buttons == MessageBoxButtons.OK) @@ -261,31 +268,33 @@ namespace System.Windows.Forms else if (buttons == MessageBoxButtons.AbortRetryIgnore) buttonsType = Gtk.ButtonsType.OkCancel; else if (buttons == MessageBoxButtons.RetryCancel) - buttonsType = Gtk.ButtonsType.YesNo; + buttonsType = Gtk.ButtonsType.Cancel; - Gtk.MessageDialog dia = new Gtk.MessageDialog(owner, Gtk.DialogFlags.DestroyWithParent | Gtk.DialogFlags.UseHeaderBar, Gtk.MessageType.Warning, buttonsType, ""); - dia.SetPosition(Gtk.WindowPosition.Center); + Gtk.MessageDialog dia = new Gtk.MessageDialog(owner, Gtk.DialogFlags.DestroyWithParent, Gtk.MessageType.Info, buttonsType, text); + dia.SetPosition(position); dia.StyleContext.AddClass("MessageBox"); dia.StyleContext.AddClass("BorderRadiusStyle"); dia.BorderWidth = 10; + dia.KeepAbove = true; + dia.KeepBelow = false; dia.Title = caption; - var content = new Gtk.Label(text); - content.MarginBottom = 20; - dia.ContentArea.Add(content); dia.Response += Dia_Response; - dia.ShowAll(); return dia.Run(); } private static int ShowCore(Gtk.Window owner, Gtk.WindowPosition position, string text, string caption, MessageBoxButtons buttons, params object[] icon) { - Gtk.Dialog dia = new Gtk.Dialog(caption, owner, Gtk.DialogFlags.DestroyWithParent | DialogFlags.Modal); + Gtk.Dialog dia = new Gtk.Dialog(caption, owner, Gtk.DialogFlags.DestroyWithParent); + dia.KeepAbove = true; + dia.KeepBelow = false; + dia.TypeHint = Gdk.WindowTypeHint.Dialog; dia.SetPosition(position); dia.StyleContext.AddClass("MessageBox"); dia.StyleContext.AddClass("BorderRadiusStyle"); // dia.SetSizeRequest(300, 160); dia.BorderWidth = 10; + dia.Response += Dia_Response; var content = new Gtk.Label(text); diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Dialog/OpenFileDialog.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Dialog/OpenFileDialog.cs index 1c0d821eb4aaf2f51c04b5baea66629dfb342164..9a540e7888d18cd03552bbb46e7038cd9241e226 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/Dialog/OpenFileDialog.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Dialog/OpenFileDialog.cs @@ -1,8 +1,10 @@ -using Cairo; -using System; -using System.Collections; -using System.Collections.Generic; -using System.ComponentModel; +/* + * 基于GTK组件开发,兼容原生C#控件winform界面的跨平台界面组件。 + * 使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows、linux、macos运行 + * 技术支持438865652@qq.com,https://gitee.com/easywebfactory, https://www.cnblogs.com/easywebfactory + * author:chenhongjin + * date: 2024/1/3 + */ using System.IO; using System.Text; diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Dialog/SaveFileDialog.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Dialog/SaveFileDialog.cs index 1f0fb9aa6b58d06c28794cbb337ce237eeb18a6b..212cf6cf7f543042ce0f60cb92566739a577b54c 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/Dialog/SaveFileDialog.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Dialog/SaveFileDialog.cs @@ -1,8 +1,11 @@ -using Cairo; -using System; -using System.Collections; -using System.Collections.Generic; -using System.Text; +/* + * 基于GTK组件开发,兼容原生C#控件winform界面的跨平台界面组件。 + * 使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows、linux、macos运行 + * 技术支持438865652@qq.com,https://gitee.com/easywebfactory, https://www.cnblogs.com/easywebfactory + * author:chenhongjin + * date: 2024/1/3 + */ + namespace System.Windows.Forms { diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/Bitmap.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/Bitmap.cs index 7627fed6188d7fccf6e142d1eaebba131d403ea6..ae24bffcb01303e0d36322e1ce15f199488a8eb1 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/Bitmap.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/Bitmap.cs @@ -1,9 +1,6 @@ -//using GLib; -using Gdk; -using System.ComponentModel; +using System.ComponentModel; using System.Drawing.Imaging; using System.IO; -using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Serialization; @@ -15,7 +12,7 @@ namespace System.Drawing { private static readonly Color s_defaultTransparentColor = Color.LightGray; - public Bitmap(byte[] pixbuf):base(pixbuf) + internal Bitmap(byte[] pixbuf):base(pixbuf) { } @@ -107,9 +104,9 @@ namespace System.Drawing /// The object that specifies the resolution for the new . /// /// is . - public Bitmap(int width, int height, Graphics g) + public Bitmap(int width, int height, Graphics g) : this(width, height, PixelFormat.Format32bppArgb) { - + } /// Initializes a new instance of the class with the specified size, pixel format, and pixel data. @@ -119,7 +116,7 @@ namespace System.Drawing /// The pixel format for the new . This must specify a value that begins with Format. /// Pointer to an array of bytes that contains the pixel data. /// A value is specified whose name does not start with Format. For example, specifying will cause an , but will not. - public Bitmap(int width, int height, int stride, PixelFormat format, IntPtr scan0) + public Bitmap(int width, int height, int stride, PixelFormat format, IntPtr scan0) : this(width, height, PixelFormat.Format32bppArgb) { } @@ -131,7 +128,9 @@ namespace System.Drawing /// A value is specified whose name does not start with Format. For example, specifying will cause an , but will not. public Bitmap(int width, int height, PixelFormat format) { - + this.Width = width; + this.Height= height; + this.PixelFormat = format; } /// Initializes a new instance of the class from the specified existing image. diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/Blend.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/Blend.cs new file mode 100644 index 0000000000000000000000000000000000000000..e4fac58c929a3cf0dc96e7fd513932d713fd06a0 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/Blend.cs @@ -0,0 +1,43 @@ +namespace System.Drawing.Drawing2D +{ + /// Defines a blend pattern for a object. This class cannot be inherited. + public sealed class Blend + { + /// Gets or sets an array of blend factors for the gradient. + /// An array of blend factors that specify the percentages of the starting color and the ending color to be used at the corresponding position. + public float[] Factors + { + get + { + throw null; + } + set + { + } + } + + /// Gets or sets an array of blend positions for the gradient. + /// An array of blend positions that specify the percentages of distance along the gradient line. + public float[] Positions + { + get + { + throw null; + } + set + { + } + } + + /// Initializes a new instance of the class. + public Blend() + { + } + + /// Initializes a new instance of the class with the specified number of factors and positions. + /// The number of elements in the and arrays. + public Blend(int count) + { + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/ColorBlend.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/ColorBlend.cs new file mode 100644 index 0000000000000000000000000000000000000000..3e3228246fabdc5a71821b393a0cb4a7cdd0d442 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/ColorBlend.cs @@ -0,0 +1,43 @@ +namespace System.Drawing.Drawing2D +{ + /// Defines arrays of colors and positions used for interpolating color blending in a multicolor gradient. This class cannot be inherited. + public sealed class ColorBlend + { + /// Gets or sets an array of colors that represents the colors to use at corresponding positions along a gradient. + /// An array of structures that represents the colors to use at corresponding positions along a gradient. + public Color[] Colors + { + get + { + throw null; + } + set + { + } + } + + /// Gets or sets the positions along a gradient line. + /// An array of values that specify percentages of distance along the gradient line. + public float[] Positions + { + get + { + throw null; + } + set + { + } + } + + /// Initializes a new instance of the class. + public ColorBlend() + { + } + + /// Initializes a new instance of the class with the specified number of colors and positions. + /// The number of colors and positions in this . + public ColorBlend(int count) + { + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/GraphicsPath.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/GraphicsPath.cs index 6e18c9e48b211ec1f5781449c897079f6f2f93ef..d3076a2a14975f830c70d9a79b228146fc31e37c 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/GraphicsPath.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/GraphicsPath.cs @@ -1,3 +1,7 @@ +using Pango; +using System.Collections; +using System.Collections.Generic; + namespace System.Drawing.Drawing2D { /// Represents a series of connected lines and curves. This class cannot be inherited. @@ -42,15 +46,102 @@ namespace System.Drawing.Drawing2D get; private set; } - - /// Initializes a new instance of the class with a value of . - public GraphicsPath() - { - } - - /// Initializes a new instance of the class with the specified enumeration. - /// The enumeration that determines how the interior of this is filled. - public GraphicsPath(FillMode fillMode) : this(new PointF[0], null, FillMode.Alternate) + public List SizePoints = new List(); + private void AddPathPoints(params PointF[] points) { + foreach (var p in points) + SizePoints.Add(p); + } + public class ArcMode + { + public RectangleF rect { get; set; } + public float startAngle { get; set; } + public float sweepAngle { get; set; } + } + public class BezierMode + { + public PointF pt1 { get; set; } + public PointF pt2 { get; set; } + public PointF pt3 { get; set; } + public PointF pt4 { get; set; } + } + public class BeziersMode + { + public PointF[] points { get; set; } + } + public class ClosedCurveMode + { + public PointF[] points { get; set; } + public float tension { get; set; } + public FillMode fillmode { get; set; } + } + public class CurveMode + { + public PointF[] points { get; set; } + public int offset { get; set; } + public int numberOfSegments { get; set; } + public float tension { get; set; } + } + public class EllipseMode + { + public RectangleF rect { get; set; } + } + public class LineMode + { + public PointF pt1 { get; set; } + public PointF pt2 { get; set; } + } + public class LinesMode + { + public PointF[] points { get; set; } + } + public class PathMode + { + public GraphicsPath path { get; set; } + public bool connect { get; set; } + } + public class PieMode + { + public RectangleF rect { get; set; } + public float startAngle { get; set; } + public float sweepAngle { get; set; } + } + public class PolygonMode + { + public PointF[] points { get; set; } + } + public class RectangleMode + { + public RectangleF rect { get; set; } + } + public class RectanglesMode + { + public RectangleF[] rects { get; set; } + } + public class StringMode + { + public string text { get; set; } + public FontFamily family { get; set; } + public int style { get; set; } + public float emSize { get; set; } + public RectangleF layoutRect { get; set; } + public StringFormat? format { get; set; } + } + public class FigureMode + { + public bool start { get; set; } + public bool close { get; set; } + } + internal Cairo.Context Context { get; set; } + internal ArrayList list = new ArrayList(); + + /// Initializes a new instance of the class with a value of . + public GraphicsPath() + { + } + + /// Initializes a new instance of the class with the specified enumeration. + /// The enumeration that determines how the interior of this is filled. + public GraphicsPath(FillMode fillMode) : this(new PointF[0], null, fillMode) { } @@ -70,7 +161,8 @@ namespace System.Drawing.Drawing2D this.PathPoints = pts; this.PointCount = pts.Length; this.PathTypes = types; - this.FillMode = FillMode; + this.FillMode = fillMode; + this.PathData = new PathData() { Points = pts, Types = types }; } /// Initializes a new instance of the class with the specified and arrays. @@ -84,12 +176,8 @@ namespace System.Drawing.Drawing2D /// An array of structures that defines the coordinates of the points that make up this . /// An array of enumeration elements that specifies the type of each corresponding point in the array. /// A enumeration that specifies how the interiors of shapes in this are filled. - public GraphicsPath(Point[] pts, byte[] types, FillMode fillMode) - { - this.PathPoints = Array.ConvertAll(pts, o => new PointF(o.X, o.Y)); - this.PointCount = pts.Length; - this.PathTypes = types; - this.FillMode = FillMode; + public GraphicsPath(Point[] pts, byte[] types, FillMode fillMode) : this(Array.ConvertAll(pts, o => new PointF(o.X, o.Y)), types, fillMode) + { } /// Appends an elliptical arc to the current figure. @@ -98,15 +186,19 @@ namespace System.Drawing.Drawing2D /// The angle between and the end of the arc. public void AddArc(Rectangle rect, float startAngle, float sweepAngle) { - } + AddPathPoints(new PointF(rect.Left, rect.Top), new PointF(rect.Right, rect.Bottom)); + list.Add(new ArcMode() { rect = new RectangleF(rect.X, rect.Y, rect.Width, rect.Height), startAngle = startAngle, sweepAngle = sweepAngle }); + } - /// Appends an elliptical arc to the current figure. - /// A that represents the rectangular bounds of the ellipse from which the arc is taken. - /// The starting angle of the arc, measured in degrees clockwise from the x-axis. - /// The angle between and the end of the arc. - public void AddArc(RectangleF rect, float startAngle, float sweepAngle) + /// Appends an elliptical arc to the current figure. + /// A that represents the rectangular bounds of the ellipse from which the arc is taken. + /// The starting angle of the arc, measured in degrees clockwise from the x-axis. + /// The angle between and the end of the arc. + public void AddArc(RectangleF rect, float startAngle, float sweepAngle) { - } + AddPathPoints(new PointF(rect.Left, rect.Top), new PointF(rect.Right, rect.Bottom)); + list.Add(new ArcMode() { rect = rect, startAngle = startAngle, sweepAngle = sweepAngle }); + } /// Appends an elliptical arc to the current figure. /// The x-coordinate of the upper-left corner of the rectangular region that defines the ellipse from which the arc is drawn. @@ -117,7 +209,9 @@ namespace System.Drawing.Drawing2D /// The angle between and the end of the arc. public void AddArc(int x, int y, int width, int height, float startAngle, float sweepAngle) { - } + AddPathPoints(new PointF(x, y), new PointF(x + width, y + height)); + list.Add(new ArcMode() { rect = new RectangleF(x, y, width, height), startAngle = startAngle, sweepAngle = sweepAngle }); + } /// Appends an elliptical arc to the current figure. /// The x-coordinate of the upper-left corner of the rectangular region that defines the ellipse from which the arc is drawn. @@ -128,7 +222,9 @@ namespace System.Drawing.Drawing2D /// The angle between and the end of the arc. public void AddArc(float x, float y, float width, float height, float startAngle, float sweepAngle) { - } + AddPathPoints(new PointF(x, y), new PointF(x + width, y + height)); + list.Add(new ArcMode() { rect = new RectangleF(x, y, width, height), startAngle = startAngle, sweepAngle = sweepAngle }); + } /// Adds a cubic Bézier curve to the current figure. /// A that represents the starting point of the curve. @@ -137,7 +233,9 @@ namespace System.Drawing.Drawing2D /// A that represents the endpoint of the curve. public void AddBezier(Point pt1, Point pt2, Point pt3, Point pt4) { - } + AddPathPoints(new PointF(pt1.X, pt1.Y), new PointF(pt2.X, pt2.Y), new PointF(pt3.X, pt3.Y), new PointF(pt4.X, pt4.Y)); + list.Add(new BezierMode() { pt1 = new PointF(pt1.X, pt1.Y), pt2 = new PointF(pt2.X, pt2.Y), pt3 = new PointF(pt3.X, pt3.Y), pt4 = new PointF(pt4.X, pt4.Y) }); + } /// Adds a cubic Bézier curve to the current figure. /// A that represents the starting point of the curve. @@ -145,263 +243,335 @@ namespace System.Drawing.Drawing2D /// A that represents the second control point for the curve. /// A that represents the endpoint of the curve. public void AddBezier(PointF pt1, PointF pt2, PointF pt3, PointF pt4) - { - } - - /// Adds a cubic Bézier curve to the current figure. - /// The x-coordinate of the starting point of the curve. - /// The y-coordinate of the starting point of the curve. - /// The x-coordinate of the first control point for the curve. - /// The y-coordinate of the first control point for the curve. - /// The x-coordinate of the second control point for the curve. - /// The y-coordinate of the second control point for the curve. - /// The x-coordinate of the endpoint of the curve. - /// The y-coordinate of the endpoint of the curve. - public void AddBezier(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4) - { - } - - /// Adds a cubic Bézier curve to the current figure. - /// The x-coordinate of the starting point of the curve. - /// The y-coordinate of the starting point of the curve. - /// The x-coordinate of the first control point for the curve. - /// The y-coordinate of the first control point for the curve. - /// The x-coordinate of the second control point for the curve. - /// The y-coordinate of the second control point for the curve. - /// The x-coordinate of the endpoint of the curve. - /// The y-coordinate of the endpoint of the curve. - public void AddBezier(float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4) - { - } - - /// Adds a sequence of connected cubic Bézier curves to the current figure. - /// An array of structures that represents the points that define the curves. - public void AddBeziers(PointF[] points) - { - } + { + AddPathPoints(new PointF(pt1.X, pt1.Y), new PointF(pt2.X, pt2.Y), new PointF(pt3.X, pt3.Y), new PointF(pt4.X, pt4.Y)); + list.Add(new BezierMode() { pt1 = new PointF(pt1.X, pt1.Y), pt2 = new PointF(pt2.X, pt2.Y), pt3 = new PointF(pt3.X, pt3.Y), pt4 = new PointF(pt4.X, pt4.Y) }); + } + + /// Adds a cubic Bézier curve to the current figure. + /// The x-coordinate of the starting point of the curve. + /// The y-coordinate of the starting point of the curve. + /// The x-coordinate of the first control point for the curve. + /// The y-coordinate of the first control point for the curve. + /// The x-coordinate of the second control point for the curve. + /// The y-coordinate of the second control point for the curve. + /// The x-coordinate of the endpoint of the curve. + /// The y-coordinate of the endpoint of the curve. + public void AddBezier(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4) + { + AddPathPoints(new PointF(x1, y1), new PointF(x2, y2), new PointF(x3, y3), new PointF(x4, y4)); + list.Add(new BezierMode() { pt1 = new PointF(x1, y1), pt2 = new PointF(x2, y2), pt3 = new PointF(x3, y3), pt4 = new PointF(x4, y4) }); + } + + /// Adds a cubic Bézier curve to the current figure. + /// The x-coordinate of the starting point of the curve. + /// The y-coordinate of the starting point of the curve. + /// The x-coordinate of the first control point for the curve. + /// The y-coordinate of the first control point for the curve. + /// The x-coordinate of the second control point for the curve. + /// The y-coordinate of the second control point for the curve. + /// The x-coordinate of the endpoint of the curve. + /// The y-coordinate of the endpoint of the curve. + public void AddBezier(float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4) + { + AddPathPoints(new PointF(x1, y1), new PointF(x2, y2), new PointF(x3, y3), new PointF(x4, y4)); + list.Add(new BezierMode() { pt1 = new PointF(x1, y1), pt2 = new PointF(x2, y2), pt3 = new PointF(x3, y3), pt4 = new PointF(x4, y4) }); + } + + /// Adds a sequence of connected cubic Bézier curves to the current figure. + /// An array of structures that represents the points that define the curves. + public void AddBeziers(PointF[] points) + { + AddPathPoints(points); + list.Add(new BeziersMode() { points = points }); + } /// Adds a sequence of connected cubic Bézier curves to the current figure. /// An array of structures that represents the points that define the curves. public void AddBeziers(params Point[] points) - { - } - - /// Adds a closed curve to this path. A cardinal spline curve is used because the curve travels through each of the points in the array. - /// An array of structures that represents the points that define the curve. - public void AddClosedCurve(PointF[] points) - { - } - - /// Adds a closed curve to this path. A cardinal spline curve is used because the curve travels through each of the points in the array. - /// An array of structures that represents the points that define the curve. - /// A value between from 0 through 1 that specifies the amount that the curve bends between points, with 0 being the smallest curve (sharpest corner) and 1 being the smoothest curve. - public void AddClosedCurve(PointF[] points, float tension) - { - } + { + AddPathPoints(Array.ConvertAll(points, p => new PointF(p.X, p.Y))); + list.Add(new BeziersMode() { points = Array.ConvertAll(points, p => new PointF(p.X, p.Y)) }); + } + + /// Adds a closed curve to this path. A cardinal spline curve is used because the curve travels through each of the points in the array. + /// An array of structures that represents the points that define the curve. + public void AddClosedCurve(PointF[] points) + { + AddPathPoints(points); + list.Add(new ClosedCurveMode() { points = points }); + } + + /// Adds a closed curve to this path. A cardinal spline curve is used because the curve travels through each of the points in the array. + /// An array of structures that represents the points that define the curve. + /// A value between from 0 through 1 that specifies the amount that the curve bends between points, with 0 being the smallest curve (sharpest corner) and 1 being the smoothest curve. + public void AddClosedCurve(PointF[] points, float tension) + { + AddPathPoints(points); + list.Add(new ClosedCurveMode() { points = points, tension = tension }); + } /// Adds a closed curve to this path. A cardinal spline curve is used because the curve travels through each of the points in the array. /// An array of structures that represents the points that define the curve. public void AddClosedCurve(Point[] points) { - } + AddPathPoints(Array.ConvertAll(points, p => new PointF(p.X, p.Y))); + list.Add(new ClosedCurveMode() { points = Array.ConvertAll(points, p => new PointF(p.X, p.Y)) }); + } /// Adds a closed curve to this path. A cardinal spline curve is used because the curve travels through each of the points in the array. /// An array of structures that represents the points that define the curve. /// A value between from 0 through 1 that specifies the amount that the curve bends between points, with 0 being the smallest curve (sharpest corner) and 1 being the smoothest curve. public void AddClosedCurve(Point[] points, float tension) - { - } - - /// Adds a spline curve to the current figure. A cardinal spline curve is used because the curve travels through each of the points in the array. - /// An array of structures that represents the points that define the curve. - public void AddCurve(PointF[] points) - { - } - - /// Adds a spline curve to the current figure. - /// An array of structures that represents the points that define the curve. - /// The index of the element in the array that is used as the first point in the curve. - /// The number of segments used to draw the curve. A segment can be thought of as a line connecting two points. - /// A value that specifies the amount that the curve bends between control points. Values greater than 1 produce unpredictable results. - public void AddCurve(PointF[] points, int offset, int numberOfSegments, float tension) - { - } - - /// Adds a spline curve to the current figure. - /// An array of structures that represents the points that define the curve. - /// A value that specifies the amount that the curve bends between control points. Values greater than 1 produce unpredictable results. - public void AddCurve(PointF[] points, float tension) - { - } - - /// Adds a spline curve to the current figure. A cardinal spline curve is used because the curve travels through each of the points in the array. - /// An array of structures that represents the points that define the curve. - public void AddCurve(Point[] points) - { - } - - /// Adds a spline curve to the current figure. - /// An array of structures that represents the points that define the curve. - /// The index of the element in the array that is used as the first point in the curve. - /// A value that specifies the amount that the curve bends between control points. Values greater than 1 produce unpredictable results. - /// A value that specifies the amount that the curve bends between control points. Values greater than 1 produce unpredictable results. - public void AddCurve(Point[] points, int offset, int numberOfSegments, float tension) - { - } - - /// Adds a spline curve to the current figure. - /// An array of structures that represents the points that define the curve. - /// A value that specifies the amount that the curve bends between control points. Values greater than 1 produce unpredictable results. - public void AddCurve(Point[] points, float tension) - { - } - - /// Adds an ellipse to the current path. - /// A that represents the bounding rectangle that defines the ellipse. - public void AddEllipse(Rectangle rect) - { - } - - /// Adds an ellipse to the current path. - /// A that represents the bounding rectangle that defines the ellipse. - public void AddEllipse(RectangleF rect) - { - } - - /// Adds an ellipse to the current path. - /// The x-coordinate of the upper-left corner of the bounding rectangle that defines the ellipse. - /// The y-coordinate of the upper-left corner of the bounding rectangle that defines the ellipse. - /// The width of the bounding rectangle that defines the ellipse. - /// The height of the bounding rectangle that defines the ellipse. - public void AddEllipse(int x, int y, int width, int height) - { - } - - /// Adds an ellipse to the current path. - /// The x-coordinate of the upper-left corner of the bounding rectangle that defines the ellipse. - /// The y-coordinate of the upper left corner of the bounding rectangle that defines the ellipse. - /// The width of the bounding rectangle that defines the ellipse. - /// The height of the bounding rectangle that defines the ellipse. - public void AddEllipse(float x, float y, float width, float height) - { - } - - /// Appends a line segment to this . - /// A that represents the starting point of the line. - /// A that represents the endpoint of the line. - public void AddLine(Point pt1, Point pt2) - { - } - - /// Appends a line segment to this . - /// A that represents the starting point of the line. - /// A that represents the endpoint of the line. - public void AddLine(PointF pt1, PointF pt2) - { - } - - /// Appends a line segment to the current figure. - /// The x-coordinate of the starting point of the line. - /// The y-coordinate of the starting point of the line. - /// The x-coordinate of the endpoint of the line. - /// The y-coordinate of the endpoint of the line. - public void AddLine(int x1, int y1, int x2, int y2) - { - } - - /// Appends a line segment to this . - /// The x-coordinate of the starting point of the line. - /// The y-coordinate of the starting point of the line. - /// The x-coordinate of the endpoint of the line. - /// The y-coordinate of the endpoint of the line. - public void AddLine(float x1, float y1, float x2, float y2) - { - } - - /// Appends a series of connected line segments to the end of this . - /// An array of structures that represents the points that define the line segments to add. - public void AddLines(PointF[] points) - { - } - - /// Appends a series of connected line segments to the end of this . - /// An array of structures that represents the points that define the line segments to add. - public void AddLines(Point[] points) - { - } - - /// Appends the specified to this path. - /// The to add. - /// A Boolean value that specifies whether the first figure in the added path is part of the last figure in this path. A value of specifies that (if possible) the first figure in the added path is part of the last figure in this path. A value of specifies that the first figure in the added path is separate from the last figure in this path. - public void AddPath(GraphicsPath addingPath, bool connect) - { - } - - /// Adds the outline of a pie shape to this path. - /// A that represents the bounding rectangle that defines the ellipse from which the pie is drawn. - /// The starting angle for the pie section, measured in degrees clockwise from the x-axis. - /// The angle between and the end of the pie section, measured in degrees clockwise from . - public void AddPie(Rectangle rect, float startAngle, float sweepAngle) - { - } - - /// Adds the outline of a pie shape to this path. - /// The x-coordinate of the upper-left corner of the bounding rectangle that defines the ellipse from which the pie is drawn. - /// The y-coordinate of the upper-left corner of the bounding rectangle that defines the ellipse from which the pie is drawn. - /// The width of the bounding rectangle that defines the ellipse from which the pie is drawn. - /// The height of the bounding rectangle that defines the ellipse from which the pie is drawn. - /// The starting angle for the pie section, measured in degrees clockwise from the x-axis. - /// The angle between and the end of the pie section, measured in degrees clockwise from . - public void AddPie(int x, int y, int width, int height, float startAngle, float sweepAngle) - { - } - - /// Adds the outline of a pie shape to this path. - /// The x-coordinate of the upper-left corner of the bounding rectangle that defines the ellipse from which the pie is drawn. - /// The y-coordinate of the upper-left corner of the bounding rectangle that defines the ellipse from which the pie is drawn. - /// The width of the bounding rectangle that defines the ellipse from which the pie is drawn. - /// The height of the bounding rectangle that defines the ellipse from which the pie is drawn. - /// The starting angle for the pie section, measured in degrees clockwise from the x-axis. - /// The angle between and the end of the pie section, measured in degrees clockwise from . - public void AddPie(float x, float y, float width, float height, float startAngle, float sweepAngle) - { - } - - /// Adds a polygon to this path. - /// An array of structures that defines the polygon to add. - public void AddPolygon(PointF[] points) - { - } - - /// Adds a polygon to this path. - /// An array of structures that defines the polygon to add. - public void AddPolygon(Point[] points) - { - } - - /// Adds a rectangle to this path. - /// A that represents the rectangle to add. - public void AddRectangle(Rectangle rect) - { - } - - /// Adds a rectangle to this path. - /// A that represents the rectangle to add. - public void AddRectangle(RectangleF rect) - { - } - - /// Adds a series of rectangles to this path. - /// An array of structures that represents the rectangles to add. - public void AddRectangles(RectangleF[] rects) - { - } - - /// Adds a series of rectangles to this path. - /// An array of structures that represents the rectangles to add. - public void AddRectangles(Rectangle[] rects) - { - } + { + AddPathPoints(Array.ConvertAll(points, p => new PointF(p.X, p.Y))); + list.Add(new ClosedCurveMode() { points = Array.ConvertAll(points, p => new PointF(p.X, p.Y)), tension = tension }); + } + + /// Adds a spline curve to the current figure. A cardinal spline curve is used because the curve travels through each of the points in the array. + /// An array of structures that represents the points that define the curve. + public void AddCurve(PointF[] points) + { + AddPathPoints(points); + list.Add(new CurveMode() { points = points }); + } + + /// Adds a spline curve to the current figure. + /// An array of structures that represents the points that define the curve. + /// The index of the element in the array that is used as the first point in the curve. + /// The number of segments used to draw the curve. A segment can be thought of as a line connecting two points. + /// A value that specifies the amount that the curve bends between control points. Values greater than 1 produce unpredictable results. + public void AddCurve(PointF[] points, int offset, int numberOfSegments, float tension) + { + AddPathPoints(points); + list.Add(new CurveMode() { points = points, offset = offset, numberOfSegments = numberOfSegments, tension = tension }); + } + + /// Adds a spline curve to the current figure. + /// An array of structures that represents the points that define the curve. + /// A value that specifies the amount that the curve bends between control points. Values greater than 1 produce unpredictable results. + public void AddCurve(PointF[] points, float tension) + { + AddPathPoints(points); + list.Add(new CurveMode() { points = points, tension = tension }); + } + + /// Adds a spline curve to the current figure. A cardinal spline curve is used because the curve travels through each of the points in the array. + /// An array of structures that represents the points that define the curve. + public void AddCurve(Point[] points) + { + AddPathPoints(Array.ConvertAll(points, p => new PointF(p.X, p.Y))); + list.Add(new CurveMode() { points = Array.ConvertAll(points, p => new PointF(p.X, p.Y)) }); + } + + /// Adds a spline curve to the current figure. + /// An array of structures that represents the points that define the curve. + /// The index of the element in the array that is used as the first point in the curve. + /// A value that specifies the amount that the curve bends between control points. Values greater than 1 produce unpredictable results. + /// A value that specifies the amount that the curve bends between control points. Values greater than 1 produce unpredictable results. + public void AddCurve(Point[] points, int offset, int numberOfSegments, float tension) + { + AddPathPoints(Array.ConvertAll(points, p => new PointF(p.X, p.Y))); + list.Add(new CurveMode() { points = Array.ConvertAll(points, p => new PointF(p.X, p.Y)), offset = offset, numberOfSegments = numberOfSegments, tension = tension }); + } + + /// Adds a spline curve to the current figure. + /// An array of structures that represents the points that define the curve. + /// A value that specifies the amount that the curve bends between control points. Values greater than 1 produce unpredictable results. + public void AddCurve(Point[] points, float tension) + { + AddPathPoints(Array.ConvertAll(points, p => new PointF(p.X, p.Y))); + list.Add(new CurveMode() { points = Array.ConvertAll(points, p => new PointF(p.X, p.Y)), tension = tension }); + } + + /// Adds an ellipse to the current path. + /// A that represents the bounding rectangle that defines the ellipse. + public void AddEllipse(Rectangle rect) + { + AddPathPoints(new PointF(rect.X, rect.Y), new PointF(rect.Right, rect.Bottom)); + list.Add(new EllipseMode() { rect = new RectangleF(rect.X, rect.Y, rect.Width, rect.Height) }); + } + + /// Adds an ellipse to the current path. + /// A that represents the bounding rectangle that defines the ellipse. + public void AddEllipse(RectangleF rect) + { + AddPathPoints(new PointF(rect.X, rect.Y), new PointF(rect.Right, rect.Bottom)); + list.Add(new EllipseMode() { rect = new RectangleF(rect.X, rect.Y, rect.Width, rect.Height) }); + } + + /// Adds an ellipse to the current path. + /// The x-coordinate of the upper-left corner of the bounding rectangle that defines the ellipse. + /// The y-coordinate of the upper-left corner of the bounding rectangle that defines the ellipse. + /// The width of the bounding rectangle that defines the ellipse. + /// The height of the bounding rectangle that defines the ellipse. + public void AddEllipse(int x, int y, int width, int height) + { + AddPathPoints(new PointF(x, y), new PointF(width, height)); + list.Add(new EllipseMode() { rect = new RectangleF(x, y, width, height) }); + } + + /// Adds an ellipse to the current path. + /// The x-coordinate of the upper-left corner of the bounding rectangle that defines the ellipse. + /// The y-coordinate of the upper left corner of the bounding rectangle that defines the ellipse. + /// The width of the bounding rectangle that defines the ellipse. + /// The height of the bounding rectangle that defines the ellipse. + public void AddEllipse(float x, float y, float width, float height) + { + AddPathPoints(new PointF(x, y), new PointF(width, height)); + list.Add(new EllipseMode() { rect = new RectangleF(x, y, width, height) }); + } + + /// Appends a line segment to this . + /// A that represents the starting point of the line. + /// A that represents the endpoint of the line. + public void AddLine(Point pt1, Point pt2) + { + AddPathPoints(new PointF(pt1.X, pt1.Y), new PointF(pt2.X, pt2.Y)); + list.Add(new LineMode() { pt1 = new PointF(pt1.X, pt1.Y), pt2 = new PointF(pt2.X, pt2.Y) }); + } + + /// Appends a line segment to this . + /// A that represents the starting point of the line. + /// A that represents the endpoint of the line. + public void AddLine(PointF pt1, PointF pt2) + { + AddPathPoints(new PointF(pt1.X, pt1.Y), new PointF(pt2.X, pt2.Y)); + list.Add(new LineMode() { pt1 = new PointF(pt1.X, pt1.Y), pt2 = new PointF(pt2.X, pt2.Y) }); + } + + /// Appends a line segment to the current figure. + /// The x-coordinate of the starting point of the line. + /// The y-coordinate of the starting point of the line. + /// The x-coordinate of the endpoint of the line. + /// The y-coordinate of the endpoint of the line. + public void AddLine(int x1, int y1, int x2, int y2) + { + AddPathPoints(new PointF(x1, y1), new PointF(x2, y2)); + list.Add(new LineMode() { pt1 = new PointF(x1, y1), pt2 = new PointF(x2, y2) }); + } + + /// Appends a line segment to this . + /// The x-coordinate of the starting point of the line. + /// The y-coordinate of the starting point of the line. + /// The x-coordinate of the endpoint of the line. + /// The y-coordinate of the endpoint of the line. + public void AddLine(float x1, float y1, float x2, float y2) + { + AddPathPoints(new PointF(x1, y1), new PointF(x2, y2)); + list.Add(new LineMode() { pt1 = new PointF(x1, y1), pt2 = new PointF(x2, y2) }); + } + + /// Appends a series of connected line segments to the end of this . + /// An array of structures that represents the points that define the line segments to add. + public void AddLines(PointF[] points) + { + AddPathPoints(points); + list.Add(new LinesMode() { points = points }); + } + + /// Appends a series of connected line segments to the end of this . + /// An array of structures that represents the points that define the line segments to add. + public void AddLines(Point[] points) + { + AddPathPoints(Array.ConvertAll(points, p => new PointF(p.X, p.Y))); + list.Add(new LinesMode() { points = Array.ConvertAll(points, p => new PointF(p.X, p.Y)) }); + } + + /// Appends the specified to this path. + /// The to add. + /// A Boolean value that specifies whether the first figure in the added path is part of the last figure in this path. A value of specifies that (if possible) the first figure in the added path is part of the last figure in this path. A value of specifies that the first figure in the added path is separate from the last figure in this path. + public void AddPath(GraphicsPath addingPath, bool connect) + { + list.Add(new PathMode() { path = addingPath, connect= connect }); + } + + /// Adds the outline of a pie shape to this path. + /// A that represents the bounding rectangle that defines the ellipse from which the pie is drawn. + /// The starting angle for the pie section, measured in degrees clockwise from the x-axis. + /// The angle between and the end of the pie section, measured in degrees clockwise from . + public void AddPie(Rectangle rect, float startAngle, float sweepAngle) + { + AddPathPoints(new PointF(rect.Left, rect.Top),new PointF(rect.Right, rect.Bottom)); + list.Add(new PieMode() { rect = new RectangleF(rect.X, rect.Y, rect.Width, rect.Height), startAngle = startAngle, sweepAngle = sweepAngle }); + } + + /// Adds the outline of a pie shape to this path. + /// The x-coordinate of the upper-left corner of the bounding rectangle that defines the ellipse from which the pie is drawn. + /// The y-coordinate of the upper-left corner of the bounding rectangle that defines the ellipse from which the pie is drawn. + /// The width of the bounding rectangle that defines the ellipse from which the pie is drawn. + /// The height of the bounding rectangle that defines the ellipse from which the pie is drawn. + /// The starting angle for the pie section, measured in degrees clockwise from the x-axis. + /// The angle between and the end of the pie section, measured in degrees clockwise from . + public void AddPie(int x, int y, int width, int height, float startAngle, float sweepAngle) + { + AddPathPoints(new PointF(x, y), new PointF(x + width, y + height)); + list.Add(new PieMode() { rect = new RectangleF(x, y, width, height), startAngle = startAngle, sweepAngle = sweepAngle }); + } + + /// Adds the outline of a pie shape to this path. + /// The x-coordinate of the upper-left corner of the bounding rectangle that defines the ellipse from which the pie is drawn. + /// The y-coordinate of the upper-left corner of the bounding rectangle that defines the ellipse from which the pie is drawn. + /// The width of the bounding rectangle that defines the ellipse from which the pie is drawn. + /// The height of the bounding rectangle that defines the ellipse from which the pie is drawn. + /// The starting angle for the pie section, measured in degrees clockwise from the x-axis. + /// The angle between and the end of the pie section, measured in degrees clockwise from . + public void AddPie(float x, float y, float width, float height, float startAngle, float sweepAngle) + { + AddPathPoints(new PointF(x, y), new PointF(x + width, y + height)); + list.Add(new PieMode() { rect = new RectangleF(x, y, width, height), startAngle = startAngle, sweepAngle = sweepAngle }); + } + + /// Adds a polygon to this path. + /// An array of structures that defines the polygon to add. + public void AddPolygon(PointF[] points) + { + AddPathPoints(points); + list.Add(new PolygonMode() { points = Array.ConvertAll(points, r => new PointF(r.X, r.Y)) }); + } + + /// Adds a polygon to this path. + /// An array of structures that defines the polygon to add. + public void AddPolygon(Point[] points) + { + AddPathPoints(Array.ConvertAll(points, r => new PointF(r.X, r.Y))); + list.Add(new PolygonMode() { points = Array.ConvertAll(points, r => new PointF(r.X, r.Y)) }); + } + + /// Adds a rectangle to this path. + /// A that represents the rectangle to add. + public void AddRectangle(Rectangle rect) + { + AddPathPoints(new PointF(rect.Left, rect.Top), new PointF(rect.Right, rect.Bottom)); + list.Add(new RectangleMode() { rect = new RectangleF(rect.X, rect.Y, rect.Width, rect.Height) }); + } + + /// Adds a rectangle to this path. + /// A that represents the rectangle to add. + public void AddRectangle(RectangleF rect) + { + AddPathPoints(new PointF(rect.Left, rect.Top), new PointF(rect.Right, rect.Bottom)); + list.Add(new RectangleMode() { rect = new RectangleF(rect.X, rect.Y, rect.Width, rect.Height) }); + } + + /// Adds a series of rectangles to this path. + /// An array of structures that represents the rectangles to add. + public void AddRectangles(RectangleF[] rects) + { + foreach(RectangleF rect in rects) + AddPathPoints(new PointF(rect.Left, rect.Top), new PointF(rect.Right, rect.Bottom)); + + list.Add(new RectanglesMode() { rects = rects }); + } + + /// Adds a series of rectangles to this path. + /// An array of structures that represents the rectangles to add. + public void AddRectangles(Rectangle[] rects) + { + foreach (RectangleF rect in rects) + AddPathPoints(new PointF(rect.Left, rect.Top), new PointF(rect.Right, rect.Bottom)); + list.Add(new RectanglesMode() { rects = Array.ConvertAll(rects,r=>new RectangleF(r.X, r.Y, r.Width, r.Height)) }); + } /// Adds a text string to this path. /// The to add. @@ -411,44 +581,52 @@ namespace System.Drawing.Drawing2D /// A that represents the point where the text starts. /// A that specifies text formatting information, such as line spacing and alignment. public void AddString(string s, FontFamily family, int style, float emSize, Point origin, StringFormat format) - { - } - - /// Adds a text string to this path. - /// The to add. - /// A that represents the name of the font with which the test is drawn. - /// A enumeration that represents style information about the text (bold, italic, and so on). This must be cast as an integer (see the example code later in this section). - /// The height of the em square box that bounds the character. - /// A that represents the point where the text starts. - /// A that specifies text formatting information, such as line spacing and alignment. - public void AddString(string s, FontFamily family, int style, float emSize, PointF origin, StringFormat format) - { - } - - /// Adds a text string to this path. - /// The to add. - /// A that represents the name of the font with which the test is drawn. - /// A enumeration that represents style information about the text (bold, italic, and so on). This must be cast as an integer (see the example code later in this section). - /// The height of the em square box that bounds the character. - /// A that represents the rectangle that bounds the text. - /// A that specifies text formatting information, such as line spacing and alignment. - public void AddString(string s, FontFamily family, int style, float emSize, Rectangle layoutRect, StringFormat format) - { - } - - /// Adds a text string to this path. - /// The to add. - /// A that represents the name of the font with which the test is drawn. - /// A enumeration that represents style information about the text (bold, italic, and so on). This must be cast as an integer (see the example code later in this section). - /// The height of the em square box that bounds the character. - /// A that represents the rectangle that bounds the text. - /// A that specifies text formatting information, such as line spacing and alignment. - public void AddString(string s, FontFamily family, int style, float emSize, RectangleF layoutRect, StringFormat format) - { - } - - /// Clears all markers from this path. - public void ClearMarkers() + { + AddPathPoints(new PointF(0, 0), new PointF(emSize * s.Length, emSize)); + list.Add(new StringMode() { text = s, family = family, style = style, emSize = emSize, layoutRect = new RectangleF(origin.X, origin.Y, 0, 0), format = format }); + } + + /// Adds a text string to this path. + /// The to add. + /// A that represents the name of the font with which the test is drawn. + /// A enumeration that represents style information about the text (bold, italic, and so on). This must be cast as an integer (see the example code later in this section). + /// The height of the em square box that bounds the character. + /// A that represents the point where the text starts. + /// A that specifies text formatting information, such as line spacing and alignment. + public void AddString(string s, FontFamily family, int style, float emSize, PointF origin, StringFormat format) + { + AddPathPoints(new PointF(0, 0), new PointF(emSize * s.Length, emSize)); + list.Add(new StringMode() { text = s, family = family, style = style, emSize = emSize, layoutRect = new RectangleF(origin.X, origin.Y, 0, 0), format = format }); + } + + /// Adds a text string to this path. + /// The to add. + /// A that represents the name of the font with which the test is drawn. + /// A enumeration that represents style information about the text (bold, italic, and so on). This must be cast as an integer (see the example code later in this section). + /// The height of the em square box that bounds the character. + /// A that represents the rectangle that bounds the text. + /// A that specifies text formatting information, such as line spacing and alignment. + public void AddString(string s, FontFamily family, int style, float emSize, Rectangle layoutRect, StringFormat format) + { + AddPathPoints(new PointF(layoutRect.Left, layoutRect.Top), new PointF(layoutRect.Right, layoutRect.Bottom)); + list.Add(new StringMode() { text = s, family = family, style = style, emSize = emSize, layoutRect = new RectangleF(layoutRect.X, layoutRect.Y, layoutRect.Width, layoutRect.Height), format = format }); + } + + /// Adds a text string to this path. + /// The to add. + /// A that represents the name of the font with which the test is drawn. + /// A enumeration that represents style information about the text (bold, italic, and so on). This must be cast as an integer (see the example code later in this section). + /// The height of the em square box that bounds the character. + /// A that represents the rectangle that bounds the text. + /// A that specifies text formatting information, such as line spacing and alignment. + public void AddString(string s, FontFamily family, int style, float emSize, RectangleF layoutRect, StringFormat format) + { + AddPathPoints(new PointF(layoutRect.Left, layoutRect.Top), new PointF(layoutRect.Right, layoutRect.Bottom)); + list.Add(new StringMode() { text = s, family = family, style = style, emSize = emSize, layoutRect = new RectangleF(layoutRect.X, layoutRect.Y, layoutRect.Width, layoutRect.Height), format = format }); + } + + /// Clears all markers from this path. + public void ClearMarkers() { } @@ -459,15 +637,23 @@ namespace System.Drawing.Drawing2D throw null; } - /// Closes all open figures in this path and starts a new figure. It closes each open figure by connecting a line from its endpoint to its starting point. - public void CloseAllFigures() - { - } + /// Starts a new figure without closing the current figure. All subsequent points added to the path are added to this new figure. + public void StartFigure() + { + list.Add(new FigureMode() { start = true, close = false }); + } + internal bool IsCloseAllFigures { get; set; } + /// Closes all open figures in this path and starts a new figure. It closes each open figure by connecting a line from its endpoint to its starting point. + public void CloseAllFigures() + { + IsCloseAllFigures = true; + } /// Closes the current figure and starts a new figure. If the current figure contains a sequence of connected lines and curves, the method closes the loop by connecting a line from the endpoint to the starting point. public void CloseFigure() { - } + list.Add(new FigureMode() { start = false, close = true }); + } /// Releases all resources used by this . public void Dispose() @@ -682,8 +868,11 @@ namespace System.Drawing.Drawing2D /// Empties the and arrays and sets the to . public void Reset() - { - } + { + this.PathPoints = null; + this.PathTypes = null; + this.FillMode = FillMode.Alternate; + } /// Reverses the order of points in the array of this . public void Reverse() @@ -695,31 +884,32 @@ namespace System.Drawing.Drawing2D { } - /// Starts a new figure without closing the current figure. All subsequent points added to the path are added to this new figure. - public void StartFigure() - { - } - /// Applies a transform matrix to this . /// A that represents the transformation to apply. public void Transform(Matrix matrix) - { - } + { + this.matrix = matrix; + } /// Applies a warp transform, defined by a rectangle and a parallelogram, to this . /// An array of structures that define a parallelogram to which the rectangle defined by is transformed. The array can contain either three or four elements. If the array contains three elements, the lower-right corner of the parallelogram is implied by the first three points. /// A that represents the rectangle that is transformed to the parallelogram defined by . public void Warp(PointF[] destPoints, RectangleF srcRect) - { - } + { + this.destPoints = destPoints; + this.srcRect = srcRect; + } /// Applies a warp transform, defined by a rectangle and a parallelogram, to this . /// An array of structures that define a parallelogram to which the rectangle defined by is transformed. The array can contain either three or four elements. If the array contains three elements, the lower-right corner of the parallelogram is implied by the first three points. /// A that represents the rectangle that is transformed to the parallelogram defined by . /// A that specifies a geometric transform to apply to the path. public void Warp(PointF[] destPoints, RectangleF srcRect, Matrix matrix) - { - } + { + this.destPoints = destPoints; + this.srcRect = srcRect; + this.matrix = matrix; + } /// Applies a warp transform, defined by a rectangle and a parallelogram, to this . /// An array of structures that defines a parallelogram to which the rectangle defined by is transformed. The array can contain either three or four elements. If the array contains three elements, the lower-right corner of the parallelogram is implied by the first three points. @@ -727,8 +917,12 @@ namespace System.Drawing.Drawing2D /// A that specifies a geometric transform to apply to the path. /// A enumeration that specifies whether this warp operation uses perspective or bilinear mode. public void Warp(PointF[] destPoints, RectangleF srcRect, Matrix matrix, WarpMode warpMode) - { - } + { + this.destPoints = destPoints; + this.srcRect = srcRect; + this.matrix = matrix; + this.warpMode = warpMode; + } /// Applies a warp transform, defined by a rectangle and a parallelogram, to this . /// An array of structures that define a parallelogram to which the rectangle defined by is transformed. The array can contain either three or four elements. If the array contains three elements, the lower-right corner of the parallelogram is implied by the first three points. @@ -737,21 +931,29 @@ namespace System.Drawing.Drawing2D /// A enumeration that specifies whether this warp operation uses perspective or bilinear mode. /// A value from 0 through 1 that specifies how flat the resulting path is. For more information, see the methods. public void Warp(PointF[] destPoints, RectangleF srcRect, Matrix matrix, WarpMode warpMode, float flatness) - { - } + { + this.destPoints = destPoints; + this.srcRect = srcRect; + this.matrix = matrix; + this.warpMode = warpMode; + this.flatness = flatness; + } /// Adds an additional outline to the path. /// A that specifies the width between the original outline of the path and the new outline this method creates. public void Widen(Pen pen) - { - } + { + this.pen = pen; + } /// Adds an additional outline to the . /// A that specifies the width between the original outline of the path and the new outline this method creates. /// A that specifies a transform to apply to the path before widening. public void Widen(Pen pen, Matrix matrix) - { - } + { + this.pen = pen; + this.matrix = matrix; + } /// Replaces this with curves that enclose the area that is filled when this path is drawn by the specified pen. /// A that specifies the width between the original outline of the path and the new outline this method creates. @@ -759,6 +961,15 @@ namespace System.Drawing.Drawing2D /// A value that specifies the flatness for curves. public void Widen(Pen pen, Matrix matrix, float flatness) { - } - } + this.pen= pen; + this.matrix= matrix; + this.flatness= flatness; + } + internal PointF[] destPoints { get; set; } + internal RectangleF srcRect { get; set; } + internal WarpMode warpMode { get; set; } + internal Pen pen { get; set; } + internal Matrix matrix { get; set; } + internal float flatness { get; set; } + } } diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/HatchBrush.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/HatchBrush.cs new file mode 100644 index 0000000000000000000000000000000000000000..a1d463a5e927feb7fb9c2a0772a04cfec5bc0959 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/HatchBrush.cs @@ -0,0 +1,55 @@ +namespace System.Drawing.Drawing2D +{ + /// Defines a rectangular brush with a hatch style, a foreground color, and a background color. This class cannot be inherited. + public sealed class HatchBrush : Brush + { + /// Gets the color of spaces between the hatch lines drawn by this object. + /// A structure that represents the background color for this . + public Color BackgroundColor + { + get; + private set; + } + + /// Gets the color of hatch lines drawn by this object. + /// A structure that represents the foreground color for this . + public Color ForegroundColor + { + get; + private set; + } + + /// Gets the hatch style of this object. + /// One of the values that represents the pattern of this . + public HatchStyle HatchStyle + { + get; + private set; + } + + /// Initializes a new instance of the class with the specified enumeration and foreground color. + /// One of the values that represents the pattern drawn by this . + /// The structure that represents the color of lines drawn by this . + public HatchBrush(HatchStyle hatchstyle, Color foreColor) : this(hatchstyle, foreColor, Color.Transparent) + { + } + + /// Initializes a new instance of the class with the specified enumeration, foreground color, and background color. + /// One of the values that represents the pattern drawn by this . + /// The structure that represents the color of lines drawn by this . + /// The structure that represents the color of spaces between the lines drawn by this . + public HatchBrush(HatchStyle hatchstyle, Color foreColor, Color backColor) + { + this.HatchStyle = hatchstyle; + this.ForegroundColor = foreColor; + this.BackgroundColor = backColor; + } + + /// Creates an exact copy of this object. + /// The this method creates, cast as an object. + public override object Clone() + { + throw null; + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/HatchStyle.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/HatchStyle.cs new file mode 100644 index 0000000000000000000000000000000000000000..9fbbcc2a126d6b53f66d1528b485ebd0ee6c75c6 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/HatchStyle.cs @@ -0,0 +1,119 @@ +namespace System.Drawing.Drawing2D +{ + /// Specifies the different patterns available for objects. + public enum HatchStyle + { + /// A pattern of horizontal lines. + Horizontal = 0, + /// Specifies hatch style . + Min = 0, + /// A pattern of vertical lines. + Vertical = 1, + /// A pattern of lines on a diagonal from upper left to lower right. + ForwardDiagonal = 2, + /// A pattern of lines on a diagonal from upper right to lower left. + BackwardDiagonal = 3, + /// Specifies horizontal and vertical lines that cross. + Cross = 4, + /// Specifies the hatch style . + LargeGrid = 4, + /// Specifies hatch style . + Max = 4, + /// A pattern of crisscross diagonal lines. + DiagonalCross = 5, + /// Specifies a 5-percent hatch. The ratio of foreground color to background color is 5:95. + Percent05 = 6, + /// Specifies a 10-percent hatch. The ratio of foreground color to background color is 10:90. + Percent10 = 7, + /// Specifies a 20-percent hatch. The ratio of foreground color to background color is 20:80. + Percent20 = 8, + /// Specifies a 25-percent hatch. The ratio of foreground color to background color is 25:75. + Percent25 = 9, + /// Specifies a 30-percent hatch. The ratio of foreground color to background color is 30:70. + Percent30 = 10, + /// Specifies a 40-percent hatch. The ratio of foreground color to background color is 40:60. + Percent40 = 11, + /// Specifies a 50-percent hatch. The ratio of foreground color to background color is 50:50. + Percent50 = 12, + /// Specifies a 60-percent hatch. The ratio of foreground color to background color is 60:40. + Percent60 = 13, + /// Specifies a 70-percent hatch. The ratio of foreground color to background color is 70:30. + Percent70 = 14, + /// Specifies a 75-percent hatch. The ratio of foreground color to background color is 75:25. + Percent75 = 0xF, + /// Specifies a 80-percent hatch. The ratio of foreground color to background color is 80:100. + Percent80 = 0x10, + /// Specifies a 90-percent hatch. The ratio of foreground color to background color is 90:10. + Percent90 = 17, + /// Specifies diagonal lines that slant to the right from top points to bottom points and are spaced 50 percent closer together than , but are not antialiased. + LightDownwardDiagonal = 18, + /// Specifies diagonal lines that slant to the left from top points to bottom points and are spaced 50 percent closer together than , but they are not antialiased. + LightUpwardDiagonal = 19, + /// Specifies diagonal lines that slant to the right from top points to bottom points, are spaced 50 percent closer together than, and are twice the width of . This hatch pattern is not antialiased. + DarkDownwardDiagonal = 20, + /// Specifies diagonal lines that slant to the left from top points to bottom points, are spaced 50 percent closer together than , and are twice its width, but the lines are not antialiased. + DarkUpwardDiagonal = 21, + /// Specifies diagonal lines that slant to the right from top points to bottom points, have the same spacing as hatch style , and are triple its width, but are not antialiased. + WideDownwardDiagonal = 22, + /// Specifies diagonal lines that slant to the left from top points to bottom points, have the same spacing as hatch style , and are triple its width, but are not antialiased. + WideUpwardDiagonal = 23, + /// Specifies vertical lines that are spaced 50 percent closer together than . + LightVertical = 24, + /// Specifies horizontal lines that are spaced 50 percent closer together than . + LightHorizontal = 25, + /// Specifies vertical lines that are spaced 75 percent closer together than hatch style (or 25 percent closer together than ). + NarrowVertical = 26, + /// Specifies horizontal lines that are spaced 75 percent closer together than hatch style (or 25 percent closer together than ). + NarrowHorizontal = 27, + /// Specifies vertical lines that are spaced 50 percent closer together than and are twice its width. + DarkVertical = 28, + /// Specifies horizontal lines that are spaced 50 percent closer together than and are twice the width of . + DarkHorizontal = 29, + /// Specifies dashed diagonal lines, that slant to the right from top points to bottom points. + DashedDownwardDiagonal = 30, + /// Specifies dashed diagonal lines, that slant to the left from top points to bottom points. + DashedUpwardDiagonal = 0x1F, + /// Specifies dashed horizontal lines. + DashedHorizontal = 0x20, + /// Specifies dashed vertical lines. + DashedVertical = 33, + /// Specifies a hatch that has the appearance of confetti. + SmallConfetti = 34, + /// Specifies a hatch that has the appearance of confetti, and is composed of larger pieces than . + LargeConfetti = 35, + /// Specifies horizontal lines that are composed of zigzags. + ZigZag = 36, + /// Specifies horizontal lines that are composed of tildes. + Wave = 37, + /// Specifies a hatch that has the appearance of layered bricks that slant to the left from top points to bottom points. + DiagonalBrick = 38, + /// Specifies a hatch that has the appearance of horizontally layered bricks. + HorizontalBrick = 39, + /// Specifies a hatch that has the appearance of a woven material. + Weave = 40, + /// Specifies a hatch that has the appearance of a plaid material. + Plaid = 41, + /// Specifies a hatch that has the appearance of divots. + Divot = 42, + /// Specifies horizontal and vertical lines, each of which is composed of dots, that cross. + DottedGrid = 43, + /// Specifies forward diagonal and backward diagonal lines, each of which is composed of dots, that cross. + DottedDiamond = 44, + /// Specifies a hatch that has the appearance of diagonally layered shingles that slant to the right from top points to bottom points. + Shingle = 45, + /// Specifies a hatch that has the appearance of a trellis. + Trellis = 46, + /// Specifies a hatch that has the appearance of spheres laid adjacent to one another. + Sphere = 47, + /// Specifies horizontal and vertical lines that cross and are spaced 50 percent closer together than hatch style . + SmallGrid = 48, + /// Specifies a hatch that has the appearance of a checkerboard. + SmallCheckerBoard = 49, + /// Specifies a hatch that has the appearance of a checkerboard with squares that are twice the size of . + LargeCheckerBoard = 50, + /// Specifies forward diagonal and backward diagonal lines that cross but are not antialiased. + OutlinedDiamond = 51, + /// Specifies a hatch that has the appearance of a checkerboard placed diagonally. + SolidDiamond = 52 + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/Image.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/Image.cs index e7c363a9573fc7cbe6504f58e10c68e82337fa3f..73b5472eebfb8e2ef8c6d43850e5a860f34f6733 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/Image.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/Image.cs @@ -1,26 +1,25 @@ -using System.Buffers; using System.ComponentModel; using System.Diagnostics.CodeAnalysis; using System.Drawing.Imaging; using System.Globalization; -//using System.Drawing.Internal; using System.IO; -using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Serialization; namespace System.Drawing { - /// An abstract base class that provides functionality for the and descended classes. - [Serializable] + [Serializable] public abstract class Image : MarshalByRefObject, IDisposable, ICloneable, ISerializable { - #region ֻȡͼbyte[] - public Image(byte[] pixbuf) + #region ֻȡͼbyte[] + internal Image(byte[] pixbuf) { PixbufData = pixbuf; } public byte[] PixbufData { get; set; } + [NonSerialized()] + private Gdk.Pixbuf pixbuf; + public Gdk.Pixbuf Pixbuf { get => pixbuf; set => pixbuf = value; } public string FileName { get; set; } #endregion @@ -38,7 +37,7 @@ namespace System.Drawing /// The that provides additional data about the image. [Localizable(false)] [DefaultValue(null)] - public object? Tag + public object Tag { get { @@ -73,11 +72,8 @@ namespace System.Drawing [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public int Width { - get - { - int width = 10; - return width; - } + get; + internal set; } /// Gets the height, in pixels, of this . @@ -86,17 +82,14 @@ namespace System.Drawing [Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public int Height - { - get - { - int height = 10; - return height; - } - } + { + get; + internal set; + } - /// Gets the horizontal resolution, in pixels per inch, of this . - /// The horizontal resolution, in pixels per inch, of this . - public float HorizontalResolution + /// Gets the horizontal resolution, in pixels per inch, of this . + /// The horizontal resolution, in pixels per inch, of this . + public float HorizontalResolution { get { @@ -132,21 +125,16 @@ namespace System.Drawing /// The that represents the file format of this . public ImageFormat RawFormat { - get - { - Guid format = default(Guid); - return new ImageFormat(format); - } - } + get; + internal set; + } /// Gets the pixel format for this . /// A that represents the pixel format for this . public PixelFormat PixelFormat { - get - { - return PixelFormat.Undefined; - } + get; + internal set; } /// Gets IDs of the property items stored in this . @@ -154,58 +142,36 @@ namespace System.Drawing [Browsable(false)] public int[] PropertyIdList { - get - { - - return Array.Empty(); - - } - } + get; + internal set; + } /// Gets all the property items (pieces of metadata) stored in this . /// An array of objects, one for each property item stored in the image. [Browsable(false)] public PropertyItem[] PropertyItems { - get - { - - return Array.Empty(); - - } - } + get; + internal set; + } /// Gets or sets the color palette used for this . /// A that represents the color palette used for this . [Browsable(false)] public ColorPalette Palette { - get - { - - ColorPalette colorPalette = new ColorPalette(10000); - - return colorPalette; - - } - set - { - - } - } + get; + internal set; + } /// Gets an array of GUIDs that represent the dimensions of frames within this . /// An array of GUIDs that specify the dimensions of frames within this from most significant to least significant. [Browsable(false)] public Guid[] FrameDimensionsList { - get - { - - return Array.Empty(); - - } - } + get; + internal set; + } private protected Image() { @@ -280,8 +246,8 @@ namespace System.Drawing throw new FileNotFoundException(filename); } filename = System.IO.Path.GetFullPath(filename); - - return null; + byte[] filebytes =File.ReadAllBytes(filename); + return new Bitmap(filebytes); } /// Creates an from the specified data stream. @@ -318,13 +284,16 @@ namespace System.Drawing /// The stream does not have a valid image format. public static Image FromStream(Stream stream, bool useEmbeddedColorManagement, bool validateImageData) { - + if (stream != null) + { + return new Bitmap(stream); + } return null; } private IntPtr InitializeFromStream(Stream stream) { - + return IntPtr.Zero; } @@ -406,10 +375,12 @@ namespace System.Drawing /// The image was saved with the wrong image format. /// -or- /// The image was saved to the same file it was created from. - public void Save(string filename, ImageCodecInfo encoder, EncoderParameters? encoderParams) + public void Save(string filename, ImageCodecInfo encoder, EncoderParameters encoderParams) { - - } + Gdk.Pixbuf pixbuf = new Gdk.Pixbuf(PixbufData); + pixbuf.Save(filename, "image"); + + } private void Save(MemoryStream stream) { @@ -442,14 +413,18 @@ namespace System.Drawing /// /// is . /// The image was saved with the wrong image format. - public void Save(Stream stream, ImageCodecInfo encoder, EncoderParameters? encoderParams) + public void Save(Stream stream, ImageCodecInfo encoder, EncoderParameters encoderParams) { - - } + if (PixbufData != null) + { + foreach (byte b in PixbufData) + stream.WriteByte(b); + } + } /// Adds a frame to the file or stream specified in a previous call to the method. Use this method to save selected frames from a multiple-frame image to another multiple-frame image. /// An that holds parameters required by the image encoder that is used by the save-add operation. - public void SaveAdd(EncoderParameters? encoderParams) + public void SaveAdd(EncoderParameters encoderParams) { } @@ -459,7 +434,7 @@ namespace System.Drawing /// An that holds parameters required by the image encoder that is used by the save-add operation. /// /// is . - public void SaveAdd(Image image, EncoderParameters? encoderParams) + public void SaveAdd(Image image, EncoderParameters encoderParams) { } @@ -484,7 +459,7 @@ namespace System.Drawing /// Note You must create a delegate and pass a reference to the delegate as the parameter, but the delegate is not used. /// Must be . /// An that represents the thumbnail. - public Image GetThumbnailImage(int thumbWidth, int thumbHeight, GetThumbnailImageAbort? callback, IntPtr callbackData) + public Image GetThumbnailImage(int thumbWidth, int thumbHeight, GetThumbnailImageAbort callback, IntPtr callbackData) { return null; } @@ -507,7 +482,7 @@ namespace System.Drawing /// The ID of the property item to get. /// The this method gets. /// The image format of this image does not support property items. - public PropertyItem? GetPropertyItem(int propid) + public PropertyItem GetPropertyItem(int propid) { return null; @@ -552,7 +527,7 @@ namespace System.Drawing /// Returns information about the parameters supported by the specified image encoder. /// A GUID that specifies the image encoder. /// An that contains an array of objects. Each contains information about one of the parameters supported by the specified image encoder. - public EncoderParameters? GetEncoderParameterList(Guid encoder) + public EncoderParameters GetEncoderParameterList(Guid encoder) { return null; @@ -636,12 +611,12 @@ namespace System.Drawing public class GtkImageConverter : TypeConverter { - public override bool CanConvertFrom(ITypeDescriptorContext? context, Type? sourceType) + public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) { return true; } - public override bool CanConvertTo(ITypeDescriptorContext? context, [NotNullWhen(true)] Type? destinationType) + public override bool CanConvertTo(ITypeDescriptorContext context, [NotNullWhen(true)] Type destinationType) { if (!(destinationType == typeof(byte[]))) { @@ -650,23 +625,23 @@ namespace System.Drawing return true; } - public override object? ConvertFrom(ITypeDescriptorContext? context, CultureInfo? culture, object value) + public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { return base.ConvertFrom(context, culture, value); } - public override object ConvertTo(ITypeDescriptorContext? context, CultureInfo? culture, object? value, Type destinationType) + public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { return value; } - public override PropertyDescriptorCollection GetProperties(ITypeDescriptorContext? context, object? value, Attribute[]? attributes) + public override PropertyDescriptorCollection GetProperties(ITypeDescriptorContext context, object value, Attribute[] attributes) { return TypeDescriptor.GetProperties(typeof(Image), attributes); } - public override bool GetPropertiesSupported(ITypeDescriptorContext? context) + public override bool GetPropertiesSupported(ITypeDescriptorContext context) { return true; } diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/ImageAnimator.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/ImageAnimator.cs index ad3bf5eb6208718b29fa4e4f7d977b938ea6a4c4..2408c8194194bdb9b080261ebc333eaf39f01a4d 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/ImageAnimator.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/ImageAnimator.cs @@ -204,7 +204,7 @@ namespace System.Drawing /// Advances the frame in the specified image. The new frame is drawn the next time the image is rendered. This method applies only to images with time-based frames. /// The object for which to update frames. - public static void UpdateFrames(Image? image) + public static void UpdateFrames(Image image) { if (image == null || s_imageInfoList == null || t_threadWriterLockWaitCount > 0) { @@ -338,7 +338,7 @@ namespace System.Drawing /// Returns a Boolean value indicating whether the specified image contains time-based frames. /// The object to test. /// This method returns if the specified image contains time-based frames; otherwise, . - public static bool CanAnimate([NotNullWhen(true)] Image? image) + public static bool CanAnimate([NotNullWhen(true)] Image image) { if (image == null) { diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/ImageConverter.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/ImageConverter.cs index 70828a5e734c51ad3df40e7bab41cd8b804b5414..e5842aabaf8711cf0bd65d4ba9b76073c62a3e15 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/ImageConverter.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/ImageConverter.cs @@ -9,7 +9,7 @@ namespace System.Drawing { public class ImageConverter : TypeConverter { - public override bool CanConvertFrom(ITypeDescriptorContext? context, Type? sourceType) + public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) { //if (!(sourceType == typeof(byte[]))) //{ @@ -18,7 +18,7 @@ namespace System.Drawing return true; } - public override bool CanConvertTo(ITypeDescriptorContext? context, [NotNullWhen(true)] Type? destinationType) + public override bool CanConvertTo(ITypeDescriptorContext context, [NotNullWhen(true)] Type destinationType) { if (!(destinationType == typeof(byte[]))) { @@ -27,7 +27,7 @@ namespace System.Drawing return true; } - public override object? ConvertFrom(ITypeDescriptorContext? context, CultureInfo? culture, object value) + public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { //Icon icon = value as Icon; //if (icon != null) @@ -43,7 +43,7 @@ namespace System.Drawing return base.ConvertFrom(context, culture, value); } - public override object ConvertTo(ITypeDescriptorContext? context, CultureInfo? culture, object? value, Type destinationType) + public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { if (destinationType == typeof(string)) { @@ -96,12 +96,12 @@ namespace System.Drawing } //[RequiresUnreferencedCode("The Type of value cannot be statically discovered. The public parameterless constructor or the 'Default' static field may be trimmed from the Attribute's Type.")] - public override PropertyDescriptorCollection GetProperties(ITypeDescriptorContext? context, object? value, Attribute[]? attributes) + public override PropertyDescriptorCollection GetProperties(ITypeDescriptorContext context, object value, Attribute[] attributes) { return TypeDescriptor.GetProperties(typeof(Image), attributes); } - public override bool GetPropertiesSupported(ITypeDescriptorContext? context) + public override bool GetPropertiesSupported(ITypeDescriptorContext context) { return true; } diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/ImageFormatConverter.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/ImageFormatConverter.cs index ee5ebca190d81000415aad78282084b96e8e3150..30d52a05d7b95294b5491363639716e24ad91d3c 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/ImageFormatConverter.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/ImageFormatConverter.cs @@ -9,7 +9,7 @@ namespace System.Drawing { public class ImageFormatConverter : TypeConverter { - public override bool CanConvertFrom(ITypeDescriptorContext? context, Type sourceType) + public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) { if (!(sourceType == typeof(string))) { @@ -18,7 +18,7 @@ namespace System.Drawing return true; } - public override bool CanConvertTo(ITypeDescriptorContext? context, [NotNullWhen(true)] Type? destinationType) + public override bool CanConvertTo(ITypeDescriptorContext context, [NotNullWhen(true)] Type destinationType) { if (destinationType == typeof(string) || destinationType == typeof(InstanceDescriptor)) { @@ -27,7 +27,7 @@ namespace System.Drawing return base.CanConvertTo(context, destinationType); } - public override object? ConvertFrom(ITypeDescriptorContext? context, CultureInfo? culture, object value) + public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { string text = value as string; if (text == null) @@ -89,7 +89,7 @@ namespace System.Drawing throw new FormatException("ImageFormat err"); } - public override object? ConvertTo(ITypeDescriptorContext? context, CultureInfo? culture, object? value, Type destinationType) + public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { ImageFormat imageFormat = value as ImageFormat; if (imageFormat != null) @@ -152,7 +152,7 @@ namespace System.Drawing return base.ConvertTo(context, culture, value, destinationType); } - public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext? context) + public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) { return new StandardValuesCollection(new ImageFormat[12] { @@ -171,7 +171,7 @@ namespace System.Drawing }); } - public override bool GetStandardValuesSupported(ITypeDescriptorContext? context) + public override bool GetStandardValuesSupported(ITypeDescriptorContext context) { return true; } diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/Imaging/FrameDimension.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/Imaging/FrameDimension.cs index a628bef05c2fecd9d8ebfc0245db963d1fa3dbaa..7fcd9ee14a29a0fb40698fb9aa0f68dc47b1ee92 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/Imaging/FrameDimension.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/Imaging/FrameDimension.cs @@ -41,7 +41,7 @@ namespace System.Drawing.Imaging /// The object to test. /// /// if is a equivalent to this object; otherwise, . - public override bool Equals([NotNullWhen(true)] object? o) + public override bool Equals([NotNullWhen(true)] object o) { FrameDimension frameDimension = o as FrameDimension; if (frameDimension == null) diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/Imaging/ImageAttributes.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/Imaging/ImageAttributes.cs index a700ec25e60420580239c4018906d9ac758f3a20..5d98c8b24f31c04c05a43b9a8a91690776888e67 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/Imaging/ImageAttributes.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/Imaging/ImageAttributes.cs @@ -92,7 +92,7 @@ namespace System.Drawing.Imaging /// Sets the color-adjustment matrix and the grayscale-adjustment matrix for the default category. /// The color-adjustment matrix. /// The grayscale-adjustment matrix. - public void SetColorMatrices(ColorMatrix newColorMatrix, ColorMatrix? grayMatrix) + public void SetColorMatrices(ColorMatrix newColorMatrix, ColorMatrix grayMatrix) { SetColorMatrices(newColorMatrix, grayMatrix, ColorMatrixFlag.Default, ColorAdjustType.Default); } @@ -101,7 +101,7 @@ namespace System.Drawing.Imaging /// The color-adjustment matrix. /// The grayscale-adjustment matrix. /// An element of that specifies the type of image and color that will be affected by the color-adjustment and grayscale-adjustment matrices. - public void SetColorMatrices(ColorMatrix newColorMatrix, ColorMatrix? grayMatrix, ColorMatrixFlag flags) + public void SetColorMatrices(ColorMatrix newColorMatrix, ColorMatrix grayMatrix, ColorMatrixFlag flags) { SetColorMatrices(newColorMatrix, grayMatrix, flags, ColorAdjustType.Default); } @@ -111,7 +111,7 @@ namespace System.Drawing.Imaging /// The grayscale-adjustment matrix. /// An element of that specifies the type of image and color that will be affected by the color-adjustment and grayscale-adjustment matrices. /// An element of that specifies the category for which the color-adjustment and grayscale-adjustment matrices are set. - public void SetColorMatrices(ColorMatrix newColorMatrix, ColorMatrix? grayMatrix, ColorMatrixFlag mode, ColorAdjustType type) + public void SetColorMatrices(ColorMatrix newColorMatrix, ColorMatrix grayMatrix, ColorMatrixFlag mode, ColorAdjustType type) { } diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/Imaging/ImageCodecInfo.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/Imaging/ImageCodecInfo.cs index 163131db03ba6c34882670a512ea9f5c3a217056..6cac784bfb6fe15e4dfe8d79f77fe59d96bc4dc9 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/Imaging/ImageCodecInfo.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/Imaging/ImageCodecInfo.cs @@ -57,7 +57,7 @@ namespace System.Drawing.Imaging /// Gets or sets a string that contains the name of the codec. /// A string that contains the name of the codec. - public string? CodecName + public string CodecName { get { @@ -71,7 +71,7 @@ namespace System.Drawing.Imaging /// Gets or sets string that contains the path name of the DLL that holds the codec. If the codec is not in a DLL, this pointer is . /// A string that contains the path name of the DLL that holds the codec. - public string? DllName + public string DllName { get { @@ -85,7 +85,7 @@ namespace System.Drawing.Imaging /// Gets or sets a string that describes the codec's file format. /// A string that describes the codec's file format. - public string? FormatDescription + public string FormatDescription { get { @@ -99,7 +99,7 @@ namespace System.Drawing.Imaging /// Gets or sets string that contains the file name extension(s) used in the codec. The extensions are separated by semicolons. /// A string that contains the file name extension(s) used in the codec. - public string? FilenameExtension + public string FilenameExtension { get { @@ -113,7 +113,7 @@ namespace System.Drawing.Imaging /// Gets or sets a string that contains the codec's Multipurpose Internet Mail Extensions (MIME) type. /// A string that contains the codec's Multipurpose Internet Mail Extensions (MIME) type. - public string? MimeType + public string MimeType { get { @@ -156,7 +156,7 @@ namespace System.Drawing.Imaging /// Gets or sets a two dimensional array of bytes that represents the signature of the codec. /// A two dimensional array of bytes that represents the signature of the codec. [CLSCompliant(false)] - public byte[][]? SignaturePatterns + public byte[][] SignaturePatterns { get { @@ -171,7 +171,7 @@ namespace System.Drawing.Imaging /// Gets or sets a two dimensional array of bytes that can be used as a filter. /// A two dimensional array of bytes that can be used as a filter. [CLSCompliant(false)] - public byte[][]? SignatureMasks + public byte[][] SignatureMasks { get { diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/Imaging/ImageFormat.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/Imaging/ImageFormat.cs index 50525b998950b34fd1e2634e96c8b0f237562cea..8da1cab4bb00591055380de18021a18948700162 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/Imaging/ImageFormat.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/Imaging/ImageFormat.cs @@ -96,7 +96,7 @@ namespace System.Drawing.Imaging /// The object to test. /// /// if is an object that is equivalent to this object; otherwise, . - public override bool Equals([NotNullWhen(true)] object? o) + public override bool Equals([NotNullWhen(true)] object o) { ImageFormat imageFormat = o as ImageFormat; if (imageFormat == null) diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/Imaging/Metafile.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/Imaging/Metafile.cs index c8f8762c91e11add9adc358bcf3c7a3d24697c50..63294ac7b000f9c6a686042a9b092c2e15beab8e 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/Imaging/Metafile.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/Imaging/Metafile.cs @@ -90,7 +90,7 @@ namespace System.Drawing.Imaging /// A that specifies the unit of measure for . /// An that specifies the format of the . /// A that contains a descriptive name for the new . - public Metafile(IntPtr referenceHdc, RectangleF frameRect, MetafileFrameUnit frameUnit, EmfType type, string? description) + public Metafile(IntPtr referenceHdc, RectangleF frameRect, MetafileFrameUnit frameUnit, EmfType type, string description) { } @@ -167,7 +167,7 @@ namespace System.Drawing.Imaging /// A that represents the rectangle that bounds the new . /// A that specifies the unit of measure for . /// A that contains a descriptive name for the new . - public Metafile(string fileName, IntPtr referenceHdc, RectangleF frameRect, MetafileFrameUnit frameUnit, string? desc) + public Metafile(string fileName, IntPtr referenceHdc, RectangleF frameRect, MetafileFrameUnit frameUnit, string desc) : this(fileName, referenceHdc, frameRect, frameUnit, EmfType.EmfPlusDual, desc) { } @@ -179,7 +179,7 @@ namespace System.Drawing.Imaging /// A that specifies the unit of measure for . /// An that specifies the format of the . /// A that contains a descriptive name for the new . - public Metafile(string fileName, IntPtr referenceHdc, RectangleF frameRect, MetafileFrameUnit frameUnit, EmfType type, string? description) + public Metafile(string fileName, IntPtr referenceHdc, RectangleF frameRect, MetafileFrameUnit frameUnit, EmfType type, string description) { } @@ -220,7 +220,7 @@ namespace System.Drawing.Imaging /// A that represents the rectangle that bounds the new . /// A that specifies the unit of measure for . /// A that contains a descriptive name for the new . - public Metafile(string fileName, IntPtr referenceHdc, Rectangle frameRect, MetafileFrameUnit frameUnit, string? description) + public Metafile(string fileName, IntPtr referenceHdc, Rectangle frameRect, MetafileFrameUnit frameUnit, string description) : this(fileName, referenceHdc, frameRect, frameUnit, EmfType.EmfPlusDual, description) { } @@ -323,7 +323,7 @@ namespace System.Drawing.Imaging /// The handle to a device context. /// An that specifies the format of the . /// A descriptive name for the new . - public Metafile(IntPtr referenceHdc, EmfType emfType, string? description) + public Metafile(IntPtr referenceHdc, EmfType emfType, string description) { } @@ -334,7 +334,7 @@ namespace System.Drawing.Imaging /// A that specifies the unit of measure for . /// An that specifies the format of the . /// A that contains a descriptive name for the new . - public Metafile(IntPtr referenceHdc, Rectangle frameRect, MetafileFrameUnit frameUnit, EmfType type, string? desc) + public Metafile(IntPtr referenceHdc, Rectangle frameRect, MetafileFrameUnit frameUnit, EmfType type, string desc) { } @@ -344,7 +344,7 @@ namespace System.Drawing.Imaging /// A Windows handle to a device context. /// An that specifies the format of the . /// A that contains a descriptive name for the new . - public Metafile(string fileName, IntPtr referenceHdc, EmfType type, string? description) + public Metafile(string fileName, IntPtr referenceHdc, EmfType type, string description) { } @@ -356,7 +356,7 @@ namespace System.Drawing.Imaging /// A that specifies the unit of measure for . /// An that specifies the format of the . /// A that contains a descriptive name for the new . - public Metafile(string fileName, IntPtr referenceHdc, Rectangle frameRect, MetafileFrameUnit frameUnit, EmfType type, string? description) + public Metafile(string fileName, IntPtr referenceHdc, Rectangle frameRect, MetafileFrameUnit frameUnit, EmfType type, string description) { } @@ -366,7 +366,7 @@ namespace System.Drawing.Imaging /// A Windows handle to a device context. /// An that specifies the format of the . /// A that contains a descriptive name for the new . - public Metafile(Stream stream, IntPtr referenceHdc, EmfType type, string? description) + public Metafile(Stream stream, IntPtr referenceHdc, EmfType type, string description) { } @@ -378,7 +378,7 @@ namespace System.Drawing.Imaging /// A that specifies the unit of measure for . /// An that specifies the format of the . /// A that contains a descriptive name for the new . - public Metafile(Stream stream, IntPtr referenceHdc, RectangleF frameRect, MetafileFrameUnit frameUnit, EmfType type, string? description) + public Metafile(Stream stream, IntPtr referenceHdc, RectangleF frameRect, MetafileFrameUnit frameUnit, EmfType type, string description) { } @@ -390,7 +390,7 @@ namespace System.Drawing.Imaging /// A that specifies the unit of measure for . /// An that specifies the format of the . /// A that contains a descriptive name for the new . - public Metafile(Stream stream, IntPtr referenceHdc, Rectangle frameRect, MetafileFrameUnit frameUnit, EmfType type, string? description) + public Metafile(Stream stream, IntPtr referenceHdc, Rectangle frameRect, MetafileFrameUnit frameUnit, EmfType type, string description) { } diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/Imaging/PropertyItem.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/Imaging/PropertyItem.cs index 9b8e40ee9801290c97b2b0489dafa4aed3bbc088..ae8bf961a4b078a275cdad1bf33362335adf1332 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/Imaging/PropertyItem.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/Imaging/PropertyItem.cs @@ -17,7 +17,7 @@ namespace System.Drawing.Imaging /// Gets or sets the value of the property item. /// A byte array that represents the value of the property item. - public byte[]? Value { get; set; } + public byte[] Value { get; set; } internal PropertyItem() { diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/LinearGradientBrush.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/LinearGradientBrush.cs new file mode 100644 index 0000000000000000000000000000000000000000..9635db39dffdd57cba72097d7cbfc75fcd8aa742 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/LinearGradientBrush.cs @@ -0,0 +1,265 @@ +namespace System.Drawing.Drawing2D +{ + /// Encapsulates a with a linear gradient. This class cannot be inherited. + public sealed class LinearGradientBrush : Brush + { + /// Gets or sets a that specifies positions and factors that define a custom falloff for the gradient. + /// A that represents a custom falloff for the gradient. + public Blend Blend + { + get; + set; + } + + /// Gets or sets a value indicating whether gamma correction is enabled for this . + /// The value is if gamma correction is enabled for this ; otherwise, . + public bool GammaCorrection + { + get; + set; + } + + /// Gets or sets a that defines a multicolor linear gradient. + /// A that defines a multicolor linear gradient. + public ColorBlend InterpolationColors + { + get; + set; + } + + /// Gets or sets the starting and ending colors of the gradient. + /// An array of two structures that represents the starting and ending colors of the gradient. + public Color[] LinearColors + { + get; + set; + } + + /// Gets a rectangular region that defines the starting and ending points of the gradient. + /// A structure that specifies the starting and ending points of the gradient. + public RectangleF Rectangle + { + get; + private set; + } + + /// Gets or sets a copy that defines a local geometric transform for this . + /// A copy of the that defines a geometric transform that applies only to fills drawn with this . + public Matrix Transform + { + get; + set; + } + + /// Gets or sets a enumeration that indicates the wrap mode for this . + /// A that specifies how fills drawn with this are tiled. + public WrapMode WrapMode + { + get; + set; + } = WrapMode.Tile; + public LinearGradientMode LinearGradientMode + { + get; + set; + } + public float Angle + { + get; + set; + } + /// Initializes a new instance of the class with the specified points and colors. + /// A structure that represents the starting point of the linear gradient. + /// A structure that represents the endpoint of the linear gradient. + /// A structure that represents the starting color of the linear gradient. + /// A structure that represents the ending color of the linear gradient. + public LinearGradientBrush(Point point1, Point point2, Color color1, Color color2) + { + this.Rectangle = new RectangleF(point1.X, point1.Y, Math.Abs(point2.X - point1.X), Math.Abs(point2.Y - point1.Y)); + this.LinearColors = new Color[2] { color1, color2 }; + } + + /// Initializes a new instance of the class with the specified points and colors. + /// A structure that represents the starting point of the linear gradient. + /// A structure that represents the endpoint of the linear gradient. + /// A structure that represents the starting color of the linear gradient. + /// A structure that represents the ending color of the linear gradient. + public LinearGradientBrush(PointF point1, PointF point2, Color color1, Color color2) + { + this.Rectangle = new RectangleF(point1.X, point1.Y, Math.Abs(point2.X - point1.X), Math.Abs(point2.Y - point1.Y)); + this.LinearColors = new Color[2] { color1, color2 }; + } + + /// Creates a new instance of the class based on a rectangle, starting and ending colors, and orientation. + /// A structure that specifies the bounds of the linear gradient. + /// A structure that represents the starting color for the gradient. + /// A structure that represents the ending color for the gradient. + /// A enumeration element that specifies the orientation of the gradient. The orientation determines the starting and ending points of the gradient. For example, specifies that the starting point is the upper-left corner of the rectangle and the ending point is the lower-right corner of the rectangle. + public LinearGradientBrush(Rectangle rect, Color color1, Color color2, LinearGradientMode linearGradientMode) + { + this.Rectangle = new RectangleF(rect.X, rect.Y, rect.Width, rect.Height); + this.LinearColors = new Color[2] { color1, color2 }; + this.LinearGradientMode = linearGradientMode; + } + + /// Creates a new instance of the class based on a rectangle, starting and ending colors, and an orientation angle. + /// A structure that specifies the bounds of the linear gradient. + /// A structure that represents the starting color for the gradient. + /// A structure that represents the ending color for the gradient. + /// The angle, measured in degrees clockwise from the x-axis, of the gradient's orientation line. + public LinearGradientBrush(Rectangle rect, Color color1, Color color2, float angle) + { + this.Rectangle = new RectangleF(rect.X, rect.Y, rect.Width, rect.Height); + this.LinearColors = new Color[2] { color1, color2 }; + this.Angle = angle; + this.WrapMode = WrapMode.Clamp; + } + + /// Creates a new instance of the class based on a rectangle, starting and ending colors, and an orientation angle. + /// A structure that specifies the bounds of the linear gradient. + /// A structure that represents the starting color for the gradient. + /// A structure that represents the ending color for the gradient. + /// The angle, measured in degrees clockwise from the x-axis, of the gradient's orientation line. + /// Set to to specify that the angle is affected by the transform associated with this ; otherwise, . + public LinearGradientBrush(Rectangle rect, Color color1, Color color2, float angle, bool isAngleScaleable) + { + this.Rectangle = new RectangleF(rect.X, rect.Y, rect.Width, rect.Height); + this.LinearColors = new Color[2] { color1, color2 }; + this.Angle = angle; + this.WrapMode = WrapMode.Clamp; + } + + /// Creates a new instance of the based on a rectangle, starting and ending colors, and an orientation mode. + /// A structure that specifies the bounds of the linear gradient. + /// A structure that represents the starting color for the gradient. + /// A structure that represents the ending color for the gradient. + /// A enumeration element that specifies the orientation of the gradient. The orientation determines the starting and ending points of the gradient. For example, specifies that the starting point is the upper-left corner of the rectangle and the ending point is the lower-right corner of the rectangle. + public LinearGradientBrush(RectangleF rect, Color color1, Color color2, LinearGradientMode linearGradientMode) + { + this.Rectangle = new RectangleF(rect.X, rect.Y, rect.Width, rect.Height); + this.LinearColors = new Color[2] { color1, color2 }; + this.LinearGradientMode = linearGradientMode; + } + + /// Creates a new instance of the class based on a rectangle, starting and ending colors, and an orientation angle. + /// A structure that specifies the bounds of the linear gradient. + /// A structure that represents the starting color for the gradient. + /// A structure that represents the ending color for the gradient. + /// The angle, measured in degrees clockwise from the x-axis, of the gradient's orientation line. + public LinearGradientBrush(RectangleF rect, Color color1, Color color2, float angle) + { + this.Rectangle = new RectangleF(rect.X, rect.Y, rect.Width, rect.Height); + this.LinearColors = new Color[2] { color1, color2 }; + this.Angle = angle; + this.WrapMode = WrapMode.Clamp; + } + + /// Creates a new instance of the class based on a rectangle, starting and ending colors, and an orientation angle. + /// A structure that specifies the bounds of the linear gradient. + /// A structure that represents the starting color for the gradient. + /// A structure that represents the ending color for the gradient. + /// The angle, measured in degrees clockwise from the x-axis, of the gradient's orientation line. + /// Set to to specify that the angle is affected by the transform associated with this ; otherwise, . + public LinearGradientBrush(RectangleF rect, Color color1, Color color2, float angle, bool isAngleScaleable) + { + this.Rectangle = new RectangleF(rect.X, rect.Y, rect.Width, rect.Height); + this.LinearColors = new Color[2] { color1, color2 }; + this.Angle = angle; + this.WrapMode = WrapMode.Clamp; + } + + /// Creates an exact copy of this . + /// The this method creates, cast as an object. + public override object Clone() + { + throw null; + } + + /// Multiplies the that represents the local geometric transform of this by the specified by prepending the specified . + /// The by which to multiply the geometric transform. + public void MultiplyTransform(Matrix matrix) + { + } + + /// Multiplies the that represents the local geometric transform of this by the specified in the specified order. + /// The by which to multiply the geometric transform. + /// A that specifies in which order to multiply the two matrices. + public void MultiplyTransform(Matrix matrix, MatrixOrder order) + { + } + + /// Resets the property to identity. + public void ResetTransform() + { + } + + /// Rotates the local geometric transform by the specified amount. This method prepends the rotation to the transform. + /// The angle of rotation. + public void RotateTransform(float angle) + { + } + + /// Rotates the local geometric transform by the specified amount in the specified order. + /// The angle of rotation. + /// A that specifies whether to append or prepend the rotation matrix. + public void RotateTransform(float angle, MatrixOrder order) + { + } + + /// Scales the local geometric transform by the specified amounts. This method prepends the scaling matrix to the transform. + /// The amount by which to scale the transform in the x-axis direction. + /// The amount by which to scale the transform in the y-axis direction. + public void ScaleTransform(float sx, float sy) + { + } + + /// Scales the local geometric transform by the specified amounts in the specified order. + /// The amount by which to scale the transform in the x-axis direction. + /// The amount by which to scale the transform in the y-axis direction. + /// A that specifies whether to append or prepend the scaling matrix. + public void ScaleTransform(float sx, float sy, MatrixOrder order) + { + } + + /// Creates a linear gradient with a center color and a linear falloff to a single color on both ends. + /// A value from 0 through 1 that specifies the center of the gradient (the point where the gradient is composed of only the ending color). + public void SetBlendTriangularShape(float focus) + { + } + + /// Creates a linear gradient with a center color and a linear falloff to a single color on both ends. + /// A value from 0 through 1 that specifies the center of the gradient (the point where the gradient is composed of only the ending color). + /// A value from 0 through1 that specifies how fast the colors falloff from the starting color to (ending color) + public void SetBlendTriangularShape(float focus, float scale) + { + } + + /// Creates a gradient falloff based on a bell-shaped curve. + /// A value from 0 through 1 that specifies the center of the gradient (the point where the starting color and ending color are blended equally). + public void SetSigmaBellShape(float focus) + { + } + + /// Creates a gradient falloff based on a bell-shaped curve. + /// A value from 0 through 1 that specifies the center of the gradient (the point where the gradient is composed of only the ending color). + /// A value from 0 through 1 that specifies how fast the colors falloff from the . + public void SetSigmaBellShape(float focus, float scale) + { + } + + /// Translates the local geometric transform by the specified dimensions. This method prepends the translation to the transform. + /// The value of the translation in x. + /// The value of the translation in y. + public void TranslateTransform(float dx, float dy) + { + } + + /// Translates the local geometric transform by the specified dimensions in the specified order. + /// The value of the translation in x. + /// The value of the translation in y. + /// The order (prepend or append) in which to apply the translation. + public void TranslateTransform(float dx, float dy, MatrixOrder order) + { + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/LinearGradientMode.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/LinearGradientMode.cs new file mode 100644 index 0000000000000000000000000000000000000000..61b5ac38f810f8d1af4b68713be684e56c7ac960 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/LinearGradientMode.cs @@ -0,0 +1,15 @@ +namespace System.Drawing.Drawing2D +{ + /// Specifies the direction of a linear gradient. + public enum LinearGradientMode + { + /// Specifies a gradient from left to right. + Horizontal, + /// Specifies a gradient from top to bottom. + Vertical, + /// Specifies a gradient from upper left to lower right. + ForwardDiagonal, + /// Specifies a gradient from upper right to lower left. + BackwardDiagonal + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/Matrix.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/Matrix.cs index ccb834fba3244770ba3a372d8b13a659df967e37..02e9190eabbf1dee9a16704b8c479ded6a8920a9 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/Matrix.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/Matrix.cs @@ -1,3 +1,5 @@ +using Gtk; + namespace System.Drawing.Drawing2D { /// Encapsulates a 3-by-3 affine matrix that represents a geometric transform. This class cannot be inherited. @@ -37,21 +39,17 @@ namespace System.Drawing.Drawing2D /// The x translation value of this . public float OffsetX { - get - { - throw null; - } + get; + internal set; } /// Gets the y translation value (the dy value, or the element in the third row and second column) of this . /// The y translation value of this . public float OffsetY { - get - { - throw null; - } - } + get; + internal set; + } /// Initializes a new instance of the class as the identity matrix. public Matrix() @@ -62,15 +60,21 @@ namespace System.Drawing.Drawing2D /// A structure that represents the rectangle to be transformed. /// An array of three structures that represents the points of a parallelogram to which the upper-left, upper-right, and lower-left corners of the rectangle is to be transformed. The lower-right corner of the parallelogram is implied by the first three corners. public Matrix(Rectangle rect, Point[] plgpts) - { - } + { + //plgptsһ PointF ṹɵ飬ʾεϽǡϽǺ½ǽ任Ϊƽıε㡣 ƽıε½ǵλÿɴǰǵλõ + //˷ʼµ Matrix ʹʾתת rect ָľӳ䵽 plgpts 㶨IJıΡ εϽӳ䵽е plgpts һ㣬Ͻӳ䵽ڶ㣬½ӳ䵽㡣 ǰƽı½ǵ - /// Initializes a new instance of the class to the geometric transform defined by the specified rectangle and array of points. - /// A structure that represents the rectangle to be transformed. - /// An array of three structures that represents the points of a parallelogram to which the upper-left, upper-right, and lower-left corners of the rectangle is to be transformed. The lower-right corner of the parallelogram is implied by the first three corners. - public Matrix(RectangleF rect, PointF[] plgpts) - { - } + } + + /// Initializes a new instance of the class to the geometric transform defined by the specified rectangle and array of points. + /// A structure that represents the rectangle to be transformed. + /// An array of three structures that represents the points of a parallelogram to which the upper-left, upper-right, and lower-left corners of the rectangle is to be transformed. The lower-right corner of the parallelogram is implied by the first three corners. + public Matrix(RectangleF rect, PointF[] plgpts) + { + //plgptsһ PointF ṹɵ飬ʾεϽǡϽǺ½ǽ任Ϊƽıε㡣 ƽıε½ǵλÿɴǰǵλõ + //˷ʼµ Matrix ʹʾתת rect ָľӳ䵽 plgpts 㶨IJıΡ εϽӳ䵽е plgpts һ㣬Ͻӳ䵽ڶ㣬½ӳ䵽㡣 ǰƽı½ǵ + + } /// Initializes a new instance of the class with the specified elements. /// The value in the first row and first column of the new . @@ -81,49 +85,114 @@ namespace System.Drawing.Drawing2D /// The value in the third row and second column of the new . public Matrix(float m11, float m12, float m21, float m22, float dx, float dy) { - } - - /// Creates an exact copy of this . - /// The that this method creates. - public Matrix Clone() - { - throw null; + //[m11,m12,0] + //[m21,m22,0] + //[dx,dy,1] + // ĵ[0,0,1]̶ֵ + //M11,M22Ӱţdx=OffsetX,dy=OffsetYӰƽƣM12,M21(M11M22)һӰתȡ + + this.m11 = m11; + this.m12 = m12; + this.m21 = m21; + this.m22 = m22; + this.dx = dx; + this.dy = dy; + } + public float m11 { get; set; } = 1; + public float m12 { get; set; } = 0; + public float m21 { get; set; } = 0; + public float m22 { get; set; } = 1; + public float dx { get; set; } = 0; + public float dy { get; set; } = 0; + public MatrixOrder order { get; set; } = MatrixOrder.Prepend; + + public float angle { get; set; } + public PointF rotateAtPoint { get; set; } + public float scaleX { get; set; } + public float scaleY { get; set; } + public float shearX { get; set; } + public float shearY { get; set; } + public PointF[] transformPoints { get; set; } + public PointF[] transformVectors{ get; set; } + public Point[] vectorTransformPoints{ get; set; } + public RectangleF initRectangle { get; set; } + public PointF[] initPointF { get; set; } + public Matrix initMatrix { get; set; } + public bool invert { get; set; } + public Matrix multiply { get; set; } + + /// Creates an exact copy of this . + /// The that this method creates. + public Matrix Clone() + { + Matrix m = new Matrix(); + m.initMatrix = this.initMatrix; + m.initRectangle = this.initRectangle; + m.initPointF = this.initPointF; + m.vectorTransformPoints = this.vectorTransformPoints; + m.transformVectors = this.transformVectors; + m.transformPoints = this.transformPoints; + m.shearX = this.shearX; + m.shearY = this.shearY; + m.angle = this.angle; + m.scaleX = this.scaleX; + m.scaleY = this.scaleY; + m.rotateAtPoint = this.rotateAtPoint; + m.order = this.order; + m.dx = this.dx; + m.dy = this.dy; + m.m11 = this.m11; + m.m12 = this.m12; + m.m21 = this.m21; + m.m22 = this.m22; + + return m; } /// Releases all resources used by this . public void Dispose() - { - } + { + this.initMatrix = null; + this.initRectangle = new RectangleF(); + this.initPointF = new PointF[0]; + this.vectorTransformPoints = new Point[0]; + this.transformVectors = new PointF[0]; + this.transformPoints = new PointF[0]; + this.shearX = 0; + this.shearY = 0; + this.angle = 0; + this.scaleX = 0; + this.scaleY = 0; + this.rotateAtPoint = new PointF(); + this.order = MatrixOrder.Prepend; + this.dx = 0; + this.dy = 0; + this.m11 = 1; + this.m12 = 0; + this.m21 = 0; + this.m22 = 1; + this.multiply = null; + } /// Tests whether the specified object is a and is identical to this . /// The object to test. /// This method returns if is the specified identical to this ; otherwise, . public override bool Equals(object obj) { - throw null; - } - - /// Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection. - ~Matrix() - { - } - - /// Returns a hash code. - /// The hash code for this . - public override int GetHashCode() - { - throw null; + return this.GetHashCode() == obj.GetHashCode(); } /// Inverts this , if it is invertible. public void Invert() { + this.invert = true; } /// Multiplies this by the matrix specified in the parameter, by prepending the specified . /// The by which this is to be multiplied. public void Multiply(Matrix matrix) { + this.initMatrix = matrix; } /// Multiplies this by the matrix specified in the parameter, and in the order specified in the parameter. @@ -131,61 +200,103 @@ namespace System.Drawing.Drawing2D /// The that represents the order of the multiplication. public void Multiply(Matrix matrix, MatrixOrder order) { + this.multiply = matrix; + this.order = order; } /// Resets this to have the elements of the identity matrix. public void Reset() { - } + this.initMatrix = null; + this.initRectangle = new RectangleF(); + this.initPointF=new PointF[0]; + this.vectorTransformPoints = new Point[0]; + this.transformVectors = new PointF[0]; + this.transformPoints = new PointF[0]; + this.shearX = 0; + this.shearY = 0; + this.angle = 0; + this.scaleX = 0; + this.scaleY = 0; + this.rotateAtPoint = new PointF(); + this.order = MatrixOrder.Prepend; + this.dx = 0; + this.dy = 0; + this.m11 = 1; + this.m12 = 0; + this.m21 = 0; + this.m22 = 1; + this.multiply = null; + } /// Prepend to this a clockwise rotation, around the origin and by the specified angle. /// The angle of the rotation, in degrees. public void Rotate(float angle) - { - } + { + //this.m11 = (float)Math.Cos(angle * Math.PI / 180.0); + //this.m12 = -(float)Math.Sin(angle * Math.PI / 180.0); + + //this.m21 = (float)Math.Sin(angle * Math.PI / 180.0); + //this.m22 = (float)Math.Cos(angle * Math.PI / 180.0); + + this.angle = angle; + } /// Applies a clockwise rotation of an amount specified in the parameter, around the origin (zero x and y coordinates) for this . /// The angle (extent) of the rotation, in degrees. /// A that specifies the order (append or prepend) in which the rotation is applied to this . public void Rotate(float angle, MatrixOrder order) - { - } + { + this.order = order; + Rotate(angle); + } /// Applies a clockwise rotation to this around the point specified in the parameter, and by prepending the rotation. /// The angle (extent) of the rotation, in degrees. /// A that represents the center of the rotation. public void RotateAt(float angle, PointF point) { - } + this.rotateAtPoint = point; + Rotate(angle); + } /// Applies a clockwise rotation about the specified point to this in the specified order. /// The angle of the rotation, in degrees. /// A that represents the center of the rotation. /// A that specifies the order (append or prepend) in which the rotation is applied. public void RotateAt(float angle, PointF point, MatrixOrder order) - { - } + { + this.rotateAtPoint = point; + this.order = order; + Rotate(angle); + } /// Applies the specified scale vector to this by prepending the scale vector. /// The value by which to scale this in the x-axis direction. /// The value by which to scale this in the y-axis direction. public void Scale(float scaleX, float scaleY) { - } + this.scaleX = scaleX; + this.scaleY = scaleY; + } /// Applies the specified scale vector ( and ) to this using the specified order. /// The value by which to scale this in the x-axis direction. /// The value by which to scale this in the y-axis direction. /// A that specifies the order (append or prepend) in which the scale vector is applied to this . public void Scale(float scaleX, float scaleY, MatrixOrder order) - { - } + { + this.order = order; + Scale(scaleX, scaleY); + } /// Applies the specified shear vector to this by prepending the shear transformation. /// The horizontal shear factor. /// The vertical shear factor. public void Shear(float shearX, float shearY) { + this.shearX = shearX; + this.shearY = shearY; } /// Applies the specified shear vector to this in the specified order. @@ -193,52 +304,77 @@ namespace System.Drawing.Drawing2D /// The vertical shear factor. /// A that specifies the order (append or prepend) in which the shear is applied. public void Shear(float shearX, float shearY, MatrixOrder order) - { - } + { + this.shearX = shearX; + this.shearY = shearY; + this.order = order; + } /// Applies the geometric transform represented by this to a specified array of points. /// An array of structures that represents the points to transform. public void TransformPoints(PointF[] pts) { - } + this.transformPoints = pts; + } /// Applies the geometric transform represented by this to a specified array of points. /// An array of structures that represents the points to transform. public void TransformPoints(Point[] pts) - { - } + { + this.transformPoints = Array.ConvertAll(pts, p => new PointF(p.X, p.Y)); + } /// Multiplies each vector in an array by the matrix. The translation elements of this matrix (third row) are ignored. /// An array of structures that represents the points to transform. public void TransformVectors(PointF[] pts) - { + { + //еÿʸˡ þתԪأУԡ + // this.m11 = this.m11 * pts[0].X + this.m11 * pts[1].X; + //this.m12 = this.m12 * pts[0].Y + this.m12 * pts[1].Y; + + //this.m21 = this.m21 * pts[0].X + this.m21 * pts[1].X; + //this.m22 = this.m22 * pts[0].Y + this.m22 * pts[1].Y; + + this.transformVectors = pts; } - /// Applies only the scale and rotate components of this to the specified array of points. - /// An array of structures that represents the points to transform. - public void TransformVectors(Point[] pts) + /// Applies only the scale and rotate components of this to the specified array of points. + /// An array of structures that represents the points to transform. + public void TransformVectors(Point[] pts) { - } + this.transformVectors = Array.ConvertAll(pts, p => new PointF(p.X, p.Y)); + } /// Applies the specified translation vector ( and ) to this by prepending the translation vector. /// The x value by which to translate this . /// The y value by which to translate this . public void Translate(float offsetX, float offsetY) { - } + this.OffsetX = offsetX; + this.OffsetY = offsetY; + } /// Applies the specified translation vector to this in the specified order. /// The x value by which to translate this . /// The y value by which to translate this . /// A that specifies the order (append or prepend) in which the translation is applied to this . public void Translate(float offsetX, float offsetY, MatrixOrder order) - { - } + { + this.order = order; + Translate(offsetX, offsetY); + } /// Multiplies each vector in an array by the matrix. The translation elements of this matrix (third row) are ignored. /// An array of structures that represents the points to transform. public void VectorTransformPoints(Point[] pts) { + //еÿʸˡ þתԪأУԡ + // this.m11 = this.m11 * pts[0].X + this.m11 * pts[1].X; + //this.m12 = this.m12 * pts[0].Y + this.m12 * pts[1].Y; + + //this.m21 = this.m21 * pts[0].X + this.m21 * pts[1].X; + //this.m22 = this.m22 * pts[0].Y + this.m22 * pts[1].Y; + this.vectorTransformPoints = pts; } - } + } } diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/PathData.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/PathData.cs index c4af5d8883e9318e648dd462c13ba2814e27338a..a411d352db7f853679f8d04b8c1246f135a43149 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/PathData.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/PathData.cs @@ -7,26 +7,16 @@ namespace System.Drawing.Drawing2D /// An array of objects that represents the points through which the path is constructed. public PointF[] Points { - get - { - throw null; - } - set - { - } - } + get; + set; + } /// Gets or sets the types of the corresponding points in the path. /// An array of bytes that specify the types of the corresponding points in the path. public byte[] Types { - get - { - throw null; - } - set - { - } + get; + set; } /// Initializes a new instance of the class. diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/PathGradientBrush.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/PathGradientBrush.cs new file mode 100644 index 0000000000000000000000000000000000000000..611d5f3c9b898f4529b667e0548f34c0d3e498c9 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Drawing2D/PathGradientBrush.cs @@ -0,0 +1,222 @@ +using System.Linq; + +namespace System.Drawing.Drawing2D +{ + /// Encapsulates a object that fills the interior of a object with a gradient. This class cannot be inherited. + public sealed class PathGradientBrush : Brush + { + /// Gets or sets a that specifies positions and factors that define a custom falloff for the gradient. + /// A that represents a custom falloff for the gradient. + public Blend Blend + { + get; + set; + } + + /// Gets or sets the color at the center of the path gradient. + /// A that represents the color at the center of the path gradient. + public Color CenterColor + { + get; + set; + } = Color.Black; + + /// Gets or sets the center point of the path gradient. + /// A that represents the center point of the path gradient. + public PointF CenterPoint + { + get; + set; + } + + /// Gets or sets the focus point for the gradient falloff. + /// A that represents the focus point for the gradient falloff. + public PointF FocusScales + { + get; + set; + } + + /// Gets or sets a that defines a multicolor linear gradient. + /// A that defines a multicolor linear gradient. + public ColorBlend InterpolationColors + { + get; + set; + } + + /// Gets a bounding rectangle for this . + /// A that represents a rectangular region that bounds the path this fills. + public RectangleF Rectangle + { + get; + private set; + } + + /// Gets or sets an array of colors that correspond to the points in the path this fills. + /// An array of structures that represents the colors associated with each point in the path this fills. + public Color[] SurroundColors + { + get; + set; + } + + /// Gets or sets a copy of the that defines a local geometric transform for this . + /// A copy of the that defines a geometric transform that applies only to fills drawn with this . + public Matrix Transform + { + get; + set; + } + + /// Gets or sets a that indicates the wrap mode for this . + /// A that specifies how fills drawn with this are tiled. + public WrapMode WrapMode + { + get; + set; + } + + /// Initializes a new instance of the class with the specified path. + /// The that defines the area filled by this . + public PathGradientBrush(GraphicsPath path) + { + float left = path.SizePoints.Select(o => o.X).Min(); + float top = path.SizePoints.Select(o => o.Y).Min(); + float right = path.SizePoints.Select(o => o.X).Max(); + float bottom = path.SizePoints.Select(o => o.Y).Max(); + this.Rectangle = new RectangleF(left, top, right - left, bottom - top); + } + + /// Initializes a new instance of the class with the specified points. + /// An array of structures that represents the points that make up the vertices of the path. + public PathGradientBrush(PointF[] points) : this(points, WrapMode.Clamp) + { + + } + + /// Initializes a new instance of the class with the specified points and wrap mode. + /// An array of structures that represents the points that make up the vertices of the path. + /// A that specifies how fills drawn with this are tiled. + public PathGradientBrush(PointF[] points, WrapMode wrapMode) + { + float left = points.Select(o => o.X).Min(); + float top = points.Select(o => o.Y).Min(); + float right = points.Select(o => o.X).Max(); + float bottom = points.Select(o => o.Y).Max(); + this.Rectangle = new RectangleF(left, top, right - left, bottom - top); + } + + /// Initializes a new instance of the class with the specified points. + /// An array of structures that represents the points that make up the vertices of the path. + public PathGradientBrush(Point[] points) : this(points, WrapMode.Clamp) + { + } + + /// Initializes a new instance of the class with the specified points and wrap mode. + /// An array of structures that represents the points that make up the vertices of the path. + /// A that specifies how fills drawn with this are tiled. + public PathGradientBrush(Point[] points, WrapMode wrapMode) + { + float left = points.Select(o => o.X).Min(); + float top = points.Select(o => o.Y).Min(); + float right = points.Select(o => o.X).Max(); + float bottom = points.Select(o => o.Y).Max(); + this.Rectangle = new RectangleF(left, top, right - left, bottom - top); + } + + /// Creates an exact copy of this . + /// The this method creates, cast as an object. + public override object Clone() + { + throw null; + } + + /// Updates the brush's transformation matrix with the product of brush's transformation matrix multiplied by another matrix. + /// The that will be multiplied by the brush's current transformation matrix. + public void MultiplyTransform(Matrix matrix) + { + } + + /// Updates the brush's transformation matrix with the product of the brush's transformation matrix multiplied by another matrix. + /// The that will be multiplied by the brush's current transformation matrix. + /// A that specifies in which order to multiply the two matrices. + public void MultiplyTransform(Matrix matrix, MatrixOrder order) + { + } + + /// Resets the property to identity. + public void ResetTransform() + { + } + + /// Rotates the local geometric transform by the specified amount. This method prepends the rotation to the transform. + /// The angle (extent) of rotation. + public void RotateTransform(float angle) + { + } + + /// Rotates the local geometric transform by the specified amount in the specified order. + /// The angle (extent) of rotation. + /// A that specifies whether to append or prepend the rotation matrix. + public void RotateTransform(float angle, MatrixOrder order) + { + } + + /// Scales the local geometric transform by the specified amounts. This method prepends the scaling matrix to the transform. + /// The transform scale factor in the x-axis direction. + /// The transform scale factor in the y-axis direction. + public void ScaleTransform(float sx, float sy) + { + } + + /// Scales the local geometric transform by the specified amounts in the specified order. + /// The transform scale factor in the x-axis direction. + /// The transform scale factor in the y-axis direction. + /// A that specifies whether to append or prepend the scaling matrix. + public void ScaleTransform(float sx, float sy, MatrixOrder order) + { + } + + /// Creates a gradient with a center color and a linear falloff to one surrounding color. + /// A value from 0 through 1 that specifies where, along any radial from the center of the path to the path's boundary, the center color will be at its highest intensity. A value of 1 (the default) places the highest intensity at the center of the path. + public void SetBlendTriangularShape(float focus) + { + } + + /// Creates a gradient with a center color and a linear falloff to each surrounding color. + /// A value from 0 through 1 that specifies where, along any radial from the center of the path to the path's boundary, the center color will be at its highest intensity. A value of 1 (the default) places the highest intensity at the center of the path. + /// A value from 0 through 1 that specifies the maximum intensity of the center color that gets blended with the boundary color. A value of 1 causes the highest possible intensity of the center color, and it is the default value. + public void SetBlendTriangularShape(float focus, float scale) + { + } + + /// Creates a gradient brush that changes color starting from the center of the path outward to the path's boundary. The transition from one color to another is based on a bell-shaped curve. + /// A value from 0 through 1 that specifies where, along any radial from the center of the path to the path's boundary, the center color will be at its highest intensity. A value of 1 (the default) places the highest intensity at the center of the path. + public void SetSigmaBellShape(float focus) + { + } + + /// Creates a gradient brush that changes color starting from the center of the path outward to the path's boundary. The transition from one color to another is based on a bell-shaped curve. + /// A value from 0 through 1 that specifies where, along any radial from the center of the path to the path's boundary, the center color will be at its highest intensity. A value of 1 (the default) places the highest intensity at the center of the path. + /// A value from 0 through 1 that specifies the maximum intensity of the center color that gets blended with the boundary color. A value of 1 causes the highest possible intensity of the center color, and it is the default value. + public void SetSigmaBellShape(float focus, float scale) + { + } + + /// Applies the specified translation to the local geometric transform. This method prepends the translation to the transform. + /// The value of the translation in x. + /// The value of the translation in y. + public void TranslateTransform(float dx, float dy) + { + } + + /// Applies the specified translation to the local geometric transform in the specified order. + /// The value of the translation in x. + /// The value of the translation in y. + /// The order (prepend or append) in which to apply the translation. + public void TranslateTransform(float dx, float dy, MatrixOrder order) + { + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Font.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Font.cs index 08b93bf397831b028d241557524920c47c3fa198..4c07f6ee9ff5bac537c54334ccff67e7bc6cc77f 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Font.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Font.cs @@ -313,7 +313,7 @@ namespace System.Drawing // T:System.ArgumentNullException: // family is null public Font(FontFamily family, float emSize, FontStyle style, GraphicsUnit unit, byte gdiCharSet, bool gdiVerticalFont) { - this.Name = family.Name; + this.Name = family?.Name; this.FontFamily = family; this.Size = emSize; this.Style = style; diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Graphics.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Graphics.cs index 334ae36ca79272f491048532af9d7f8a7501d179..7261c9c30edd595287c7019246b95c94f266139f 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Graphics.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Graphics.cs @@ -1,48 +1,46 @@ +using Cairo; +using Gtk; +using System; +using System.Collections.Generic; using System.ComponentModel; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.Drawing.Text; +using System.IO; +using System.Linq; +using static System.Drawing.Drawing2D.GraphicsPath; namespace System.Drawing { - /// Encapsulates a GDI+ drawing surface. This class cannot be inherited. public sealed class Graphics : MarshalByRefObject, IDeviceContext, IDisposable { private Cairo.Context context; private Gdk.Rectangle rectangle; private Gtk.Widget widget; - internal Graphics(Gtk.Widget widget, Cairo.Context context, Gdk.Rectangle rectangle) + #region ֵֵ + internal double diff_left { get; set; } + internal double diff_top { get; set; } + //internal int diff_right { get; set; } + //internal int diff_bottom { get; set; } + #endregion + internal Graphics(Gtk.Widget widget, Cairo.Context context, Gdk.Rectangle rectangle) { this.widget = widget; this.context = context; this.rectangle = rectangle; - this.Clip= new Region(new Rectangle(this.rectangle.X, this.rectangle.Y, this.rectangle.Width, this.rectangle.Height)); + this.Clip = new Region(new Rectangle(this.rectangle.X, this.rectangle.Y, this.rectangle.Width, this.rectangle.Height)); } - /// Provides a callback method for deciding when the method should prematurely cancel execution and stop drawing an image. - /// Internal pointer that specifies data for the callback method. This parameter is not passed by all overloads. You can test for its absence by checking for the value . - /// This method returns if it decides that the method should prematurely stop execution. Otherwise it returns to indicate that the method should continue execution. public delegate bool DrawImageAbort(IntPtr callbackdata); - /// Provides a callback method for the method. - /// Member of the enumeration that specifies the type of metafile record. - /// Set of flags that specify attributes of the record. - /// Number of bytes in the record data. - /// Pointer to a buffer that contains the record data. - /// Not used. - /// Return if you want to continue enumerating records; otherwise, . public delegate bool EnumerateMetafileProc(EmfPlusRecordType recordType, int flags, int dataSize, IntPtr data, PlayRecordCallback callbackData); - /// Gets or sets a that limits the drawing region of this . - /// A that limits the portion of this that is currently available for drawing. public Region Clip { get; set; } - /// Gets a structure that bounds the clipping region of this . - /// A structure that represents a bounding rectangle for the clipping region of this . public RectangleF ClipBounds { get @@ -51,53 +49,34 @@ namespace System.Drawing } } - /// Gets a value that specifies how composited images are drawn to this . - /// This property specifies a member of the enumeration. The default is . public CompositingMode CompositingMode { get; set; } - /// Gets or sets the rendering quality of composited images drawn to this . - /// This property specifies a member of the enumeration. The default is . public CompositingQuality CompositingQuality { get; set; } - /// Gets the horizontal resolution of this . - /// The value, in dots per inch, for the horizontal resolution supported by this . public float DpiX { - get - { - throw null; - } + get; } - /// Gets the vertical resolution of this . - /// The value, in dots per inch, for the vertical resolution supported by this . public float DpiY { - get - { - throw null; - } + get; } - /// Gets or sets the interpolation mode associated with this . - /// One of the values. public InterpolationMode InterpolationMode { get; set; } - /// Gets a value indicating whether the clipping region of this is empty. - /// - /// if the clipping region of this is empty; otherwise, . public bool IsClipEmpty { get @@ -106,81 +85,41 @@ namespace System.Drawing } } - /// Gets a value indicating whether the visible clipping region of this is empty. - /// - /// if the visible portion of the clipping region of this is empty; otherwise, . public bool IsVisibleClipEmpty { - get - { - throw null; - } + get; } - /// Gets or sets the scaling between world units and page units for this . - /// This property specifies a value for the scaling between world units and page units for this . public float PageScale { - get - { - throw null; - } - set - { - } - } + get; + set; + } - /// Gets or sets the unit of measure used for page coordinates in this . - /// One of the values other than . - /// - /// is set to , which is not a physical unit. public GraphicsUnit PageUnit { - get - { - throw null; - } - set - { - } + get; + set; } - /// Gets or sets a value specifying how pixels are offset during rendering of this . - /// This property specifies a member of the enumeration public PixelOffsetMode PixelOffsetMode { - get - { - throw null; - } - set - { - } + get; + set; } - /// Gets or sets the rendering origin of this for dithering and for hatch brushes. - /// A structure that represents the dither origin for 8-bits-per-pixel and 16-bits-per-pixel dithering and is also used to set the origin for hatch brushes. public Point RenderingOrigin { - get - { - throw null; - } - set - { - } - } + get; + set; + } - /// Gets or sets the rendering quality for this . - /// One of the values. public SmoothingMode SmoothingMode { get; set; } - /// Gets or sets the gamma correction value for rendering text. - /// The gamma correction value used for rendering antialiased and ClearType text. public int TextContrast { get @@ -192,8 +131,6 @@ namespace System.Drawing } } - /// Gets or sets the rendering mode for text associated with this . - /// One of the values. public TextRenderingHint TextRenderingHint { get @@ -205,9 +142,7 @@ namespace System.Drawing } } - /// Gets or sets a copy of the geometric world transformation for this . - /// A copy of the that represents the geometric world transformation for this . - public Matrix Transform + public Drawing2D.Matrix Transform { get { @@ -218,1407 +153,1132 @@ namespace System.Drawing } } - /// Gets the bounding rectangle of the visible clipping region of this . - /// A structure that represents a bounding rectangle for the visible clipping region of this . public RectangleF VisibleClipBounds { - get - { - throw null; - } - } + get + { + return new RectangleF(this.rectangle.X, this.rectangle.Y, this.rectangle.Width, this.rectangle.Height); + } + } - /// Adds a comment to the current . - /// Array of bytes that contains the comment. public void AddMetafileComment(byte[] data) { } - /// Saves a graphics container with the current state of this and opens and uses a new graphics container. - /// This method returns a that represents the state of this at the time of the method call. public GraphicsContainer BeginContainer() { throw null; } - /// Saves a graphics container with the current state of this and opens and uses a new graphics container with the specified scale transformation. - /// - /// structure that, together with the parameter, specifies a scale transformation for the container. - /// - /// structure that, together with the parameter, specifies a scale transformation for the container. - /// Member of the enumeration that specifies the unit of measure for the container. - /// This method returns a that represents the state of this at the time of the method call. public GraphicsContainer BeginContainer(Rectangle dstrect, Rectangle srcrect, GraphicsUnit unit) { throw null; } - /// Saves a graphics container with the current state of this and opens and uses a new graphics container with the specified scale transformation. - /// - /// structure that, together with the parameter, specifies a scale transformation for the new graphics container. - /// - /// structure that, together with the parameter, specifies a scale transformation for the new graphics container. - /// Member of the enumeration that specifies the unit of measure for the container. - /// This method returns a that represents the state of this at the time of the method call. public GraphicsContainer BeginContainer(RectangleF dstrect, RectangleF srcrect, GraphicsUnit unit) { throw null; } - - /// Clears the entire drawing surface and fills it with the specified background color. - /// - /// structure that represents the background color of the drawing surface. + //internal void ContextTranslateWithDifference(double x,double y) + //{ + // this.context.Translate(diff_left + x, diff_top + y); + // } + internal void SetTranslateWithDifference(double x, double y) + { + this.context.Translate(diff_left + x, diff_top + y); + } + internal void SetSourceColor(Pen pen) + { + if (pen.Brush is SolidBrush sbrush) + { + this.context.SetSourceRGBA(sbrush.Color.R / 255f, sbrush.Color.G / 255f, sbrush.Color.B / 255f, 1); + } + else if (pen.Brush is LinearGradientBrush lbrush) + { + double maxsize = Math.Max(diff_left + lbrush.Rectangle.Right, diff_top + lbrush.Rectangle.Bottom); //ǶȶΪ45 + using Cairo.LinearGradient gradient = new Cairo.LinearGradient(diff_left + lbrush.Rectangle.Left, diff_top + lbrush.Rectangle.Top, maxsize, maxsize); + int linearcount = lbrush.LinearColors.Length; + int idx = 0; + foreach (Color color in lbrush.LinearColors) + gradient.AddColorStop((++idx) / linearcount, new Cairo.Color(color.R / 255f, color.G / 255f, color.B / 255f, color.A)); + + Cairo.Matrix matrix = new Cairo.Matrix(1, 0, 0, 1, 0, 0); + matrix.Rotate(Math.PI * 45 / 180);// + gradient.Matrix = matrix; + using Cairo.Pattern pattern = Cairo.Pattern.Lookup(gradient.Handle, false); + this.context.SetSource(pattern); + } + else if (pen.Brush is HatchBrush hbrush) + { + this.context.SetSourceRGBA(hbrush.ForegroundColor.R / 255f, hbrush.ForegroundColor.G / 255f, hbrush.ForegroundColor.B / 255f, 1); + } + else if (pen.Brush is PathGradientBrush pbrush) + { + double maxsize = Math.Max(diff_left + pbrush.Rectangle.Right, diff_top + pbrush.Rectangle.Bottom); //ǶȶΪ45 + using Cairo.LinearGradient gradient = new Cairo.LinearGradient(diff_left + pbrush.Rectangle.Left, diff_top + pbrush.Rectangle.Top, maxsize, maxsize); + int linearcount = pbrush.SurroundColors.Length; + double centeridx = Math.Floor((double)linearcount / 2); + int idx = 0; + foreach (Color color in pbrush.SurroundColors) + { + if(idx == centeridx) + gradient.AddColorStop((++idx) / linearcount, new Cairo.Color(pbrush.CenterColor.R / 255f, pbrush.CenterColor.G / 255f, pbrush.CenterColor.B / 255f, pbrush.CenterColor.A)); + else + gradient.AddColorStop((++idx) / linearcount, new Cairo.Color(color.R / 255f, color.G / 255f, color.B / 255f, color.A)); + } + Cairo.Matrix matrix = new Cairo.Matrix(1, 0, 0, 1, 0, 0); + matrix.Rotate(Math.PI * 45 / 180);// + gradient.Matrix = matrix; + using Cairo.Pattern pattern = Cairo.Pattern.Lookup(gradient.Handle, false); + this.context.SetSource(pattern); + } + } public void Clear(Color color) { - this.context.Save(); + this.context.Save(); this.context.SetSourceRGB(color.R / 255f, color.G / 255f, color.B / 255f); - this.context.Translate(0, 0); - this.context.Rectangle(this.rectangle.X, rectangle.Y, rectangle.Width, rectangle.Height); + this.SetTranslateWithDifference(0, 0); + this.context.Rectangle(this.rectangle.X, rectangle.Y, rectangle.Width, rectangle.Height); this.context.Fill(); this.context.Paint(); this.context.Restore(); } - /// Performs a bit-block transfer of color data, corresponding to a rectangle of pixels, from the screen to the drawing surface of the . - /// The point at the upper-left corner of the source rectangle. - /// The point at the upper-left corner of the destination rectangle. - /// The size of the area to be transferred. - /// The operation failed. public void CopyFromScreen(Point upperLeftSource, Point upperLeftDestination, Size blockRegionSize) { } - /// Performs a bit-block transfer of color data, corresponding to a rectangle of pixels, from the screen to the drawing surface of the . - /// The point at the upper-left corner of the source rectangle. - /// The point at the upper-left corner of the destination rectangle. - /// The size of the area to be transferred. - /// One of the values. - /// - /// is not a member of . - /// The operation failed. public void CopyFromScreen(Point upperLeftSource, Point upperLeftDestination, Size blockRegionSize, CopyPixelOperation copyPixelOperation) { } - /// Performs a bit-block transfer of the color data, corresponding to a rectangle of pixels, from the screen to the drawing surface of the . - /// The x-coordinate of the point at the upper-left corner of the source rectangle. - /// The y-coordinate of the point at the upper-left corner of the source rectangle. - /// The x-coordinate of the point at the upper-left corner of the destination rectangle. - /// The y-coordinate of the point at the upper-left corner of the destination rectangle. - /// The size of the area to be transferred. - /// The operation failed. public void CopyFromScreen(int sourceX, int sourceY, int destinationX, int destinationY, Size blockRegionSize) { } - /// Performs a bit-block transfer of the color data, corresponding to a rectangle of pixels, from the screen to the drawing surface of the . - /// The x-coordinate of the point at the upper-left corner of the source rectangle. - /// The y-coordinate of the point at the upper-left corner of the source rectangle - /// The x-coordinate of the point at the upper-left corner of the destination rectangle. - /// The y-coordinate of the point at the upper-left corner of the destination rectangle. - /// The size of the area to be transferred. - /// One of the values. - /// - /// is not a member of . - /// The operation failed. public void CopyFromScreen(int sourceX, int sourceY, int destinationX, int destinationY, Size blockRegionSize, CopyPixelOperation copyPixelOperation) { } - /// Releases all resources used by this . public void Dispose() { } - - /// Draws an arc representing a portion of an ellipse specified by a structure. - /// - /// that determines the color, width, and style of the arc. - /// - /// structure that defines the boundaries of the ellipse. - /// Angle in degrees measured clockwise from the x-axis to the starting point of the arc. - /// Angle in degrees measured clockwise from the parameter to ending point of the arc. - /// - /// is . - public void DrawArc(Pen pen, Rectangle rect, float startAngle, float sweepAngle) + private void DrawArcCore(Pen pen, float x, float y, float width, float height, float startAngle, float sweepAngle) + { + this.context.Save(); + this.SetTranslateWithDifference(0, 0); + this.SetSourceColor(pen); + this.context.LineWidth = pen.Width; + this.context.LineJoin = Cairo.LineJoin.Round; + this.context.NewPath(); + this.context.Arc(x, y, Math.Min(width / 2, height / 2), Math.PI * startAngle / 180, Math.PI * (startAngle + sweepAngle) / 180); + //this.context.ArcNegative(x, y, Math.Min(width / 2, height / 2), Math.PI * startAngle / 180, Math.PI * sweepAngle / 180); //෴λ + this.context.Stroke(); + this.context.Restore(); + } + public void DrawArc(Pen pen, Rectangle rect, float startAngle, float sweepAngle) { - DrawArc(pen, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle); + DrawArcCore(pen, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle); } - /// Draws an arc representing a portion of an ellipse specified by a structure. - /// - /// that determines the color, width, and style of the arc. - /// - /// structure that defines the boundaries of the ellipse. - /// Angle in degrees measured clockwise from the x-axis to the starting point of the arc. - /// Angle in degrees measured clockwise from the parameter to ending point of the arc. - /// - /// is public void DrawArc(Pen pen, RectangleF rect, float startAngle, float sweepAngle) { - DrawArc(pen, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle); + DrawArcCore(pen, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle); } - /// Draws an arc representing a portion of an ellipse specified by a pair of coordinates, a width, and a height. - /// - /// that determines the color, width, and style of the arc. - /// The x-coordinate of the upper-left corner of the rectangle that defines the ellipse. - /// The y-coordinate of the upper-left corner of the rectangle that defines the ellipse. - /// Width of the rectangle that defines the ellipse. - /// Height of the rectangle that defines the ellipse. - /// Angle in degrees measured clockwise from the x-axis to the starting point of the arc. - /// Angle in degrees measured clockwise from the parameter to ending point of the arc. - /// - /// is . public void DrawArc(Pen pen, int x, int y, int width, int height, int startAngle, int sweepAngle) { - DrawArc(pen, (float)x, (float)y, (float)width, (float)height, (float)startAngle, (float)sweepAngle); - } + DrawArcCore(pen, x, y, width, height, startAngle, sweepAngle); + } - /// Draws an arc representing a portion of an ellipse specified by a pair of coordinates, a width, and a height. - /// - /// that determines the color, width, and style of the arc. - /// The x-coordinate of the upper-left corner of the rectangle that defines the ellipse. - /// The y-coordinate of the upper-left corner of the rectangle that defines the ellipse. - /// Width of the rectangle that defines the ellipse. - /// Height of the rectangle that defines the ellipse. - /// Angle in degrees measured clockwise from the x-axis to the starting point of the arc. - /// Angle in degrees measured clockwise from the parameter to ending point of the arc. - /// - /// is . public void DrawArc(Pen pen, float x, float y, float width, float height, float startAngle, float sweepAngle) { - this.context.Save(); - this.context.ResetClip(); - this.context.LineWidth = pen.Width; - this.context.LineJoin = Cairo.LineJoin.Round; - this.context.SetSourceRGB(pen.Color.R / 255f, pen.Color.G / 255f, pen.Color.B / 255f); - this.context.Arc(x + width / 2, y + height / 2, Math.Min(width / 2, height / 2), 3, 300); - this.context.Stroke(); - this.context.Restore(); - } + DrawArcCore(pen, x, y, width, height, startAngle, sweepAngle); + } + + #region + /// + /// ռȫλü + /// + /// + /// + private List GetBezierPoints(List points) + { + float seedNum = 0; + for (int i = 1; i < points.Count; i++) + { + seedNum += Math.Abs(points[i].X - points[i - 1].X) + Math.Abs(points[i].Y - points[i - 1].Y); + } + seedNum += seedNum * 0.2f; + float pStep = 1 / seedNum; + List rpoint = new List(); + for (float pTime = 0; pTime <= 1; pTime += pStep) + { + List lfpr = CalculateBezier(points, pTime); + PointF fpr = lfpr[0]; + rpoint.Add(fpr); + } + return rpoint; + } + /// + /// 㱴㵥λ + /// + /// 꼯 + /// ʱ + /// + private List CalculateBezier(List points, float time) + { + List nList = new List { }; + int listNum = points.Count; + if (listNum < 2) + { + return points.ToList(); + } + for (int n = 1; n < listNum; n++) + { + float nowX = (points[n].X - points[n - 1].X) * time + points[n - 1].X; + float nowY = (points[n].Y - points[n - 1].Y) * time + points[n - 1].Y; + PointF nowP = new PointF(nowX, nowY); + nList.Add(nowP); + } + + List p = CalculateBezier(nList, time); + return p; + } + + private void DrawBeziersCore(Pen pen, PointF[] points) + { + List data = GetBezierPoints(points.ToList()); + DrawLinesCore(pen, data.ToArray()); + } + public void DrawBezier(Pen pen, Point pt1, Point pt2, Point pt3, Point pt4) + { + DrawBeziersCore(pen, new PointF[] { new PointF(pt1.X, pt1.Y), new PointF(pt2.X, pt2.Y), new PointF(pt3.X, pt3.Y), new PointF(pt4.X, pt4.Y) }); + } - /// Draws a Bézier spline defined by four structures. - /// - /// structure that determines the color, width, and style of the curve. - /// - /// structure that represents the starting point of the curve. - /// - /// structure that represents the first control point for the curve. - /// - /// structure that represents the second control point for the curve. - /// - /// structure that represents the ending point of the curve. - /// - /// is . - public void DrawBezier(Pen pen, Point pt1, Point pt2, Point pt3, Point pt4) - { - } - - /// Draws a Bézier spline defined by four structures. - /// - /// that determines the color, width, and style of the curve. - /// - /// structure that represents the starting point of the curve. - /// - /// structure that represents the first control point for the curve. - /// - /// structure that represents the second control point for the curve. - /// - /// structure that represents the ending point of the curve. - /// - /// is . public void DrawBezier(Pen pen, PointF pt1, PointF pt2, PointF pt3, PointF pt4) { + DrawBeziersCore(pen, new PointF[] { pt1, pt2, pt3, pt4 }); + } - } - - /// Draws a Bézier spline defined by four ordered pairs of coordinates that represent points. - /// - /// that determines the color, width, and style of the curve. - /// The x-coordinate of the starting point of the curve. - /// The y-coordinate of the starting point of the curve. - /// The x-coordinate of the first control point of the curve. - /// The y-coordinate of the first control point of the curve. - /// The x-coordinate of the second control point of the curve. - /// The y-coordinate of the second control point of the curve. - /// The x-coordinate of the ending point of the curve. - /// The y-coordinate of the ending point of the curve. - /// - /// is . public void DrawBezier(Pen pen, float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4) { + DrawBeziersCore(pen, new PointF[] { new PointF(x1, y1), new PointF(x2, y2), new PointF(x3, y3), new PointF(x4, y4) }); + } - } - - /// Draws a series of Bézier splines from an array of structures. - /// - /// that determines the color, width, and style of the curve. - /// Array of structures that represent the points that determine the curve. The number of points in the array should be a multiple of 3 plus 1, such as 4, 7, or 10. - /// - /// is . - /// -or- - /// is . public void DrawBeziers(Pen pen, PointF[] points) { - } + DrawBeziersCore(pen, points); + } - /// Draws a series of Bézier splines from an array of structures. - /// - /// that determines the color, width, and style of the curve. - /// Array of structures that represent the points that determine the curve. The number of points in the array should be a multiple of 3 plus 1, such as 4, 7, or 10. - /// - /// is . - /// -or- - /// is . public void DrawBeziers(Pen pen, Point[] points) { - } + DrawBeziersCore(pen, Array.ConvertAll(points, p => new PointF(p.X, p.Y))); + } + #endregion + + private void DrawCurveCore(bool isClosePath, bool isfill, Pen pen, PointF[] points, int offset, int numberOfSegments, float tension, FillMode fillmode) + { + if (points.Length > 1) + { + this.context.Save(); + this.SetTranslateWithDifference(offset, offset); + this.SetSourceColor(pen); + this.context.LineWidth = pen.Width; + this.context.NewPath(); + this.context.CurveTo(points[0].X, points[0].Y, points[1].X, points[1].Y, points[2].X, points[2].Y); + if (isClosePath) + this.context.ClosePath(); + if (isfill) + { + this.context.FillRule = fillmode == FillMode.Winding ? Cairo.FillRule.Winding : Cairo.FillRule.EvenOdd; + this.context.Fill(); + } + else + this.context.Stroke(); - /// Draws a closed cardinal spline defined by an array of structures. - /// - /// that determines the color, width, and height of the curve. - /// Array of structures that define the spline. - /// - /// is . - /// -or- - /// is . - public void DrawClosedCurve(Pen pen, PointF[] points) + this.context.Restore(); + } + } + public void DrawClosedCurve(Pen pen, PointF[] points) { - } + DrawCurveCore(true, false, pen, points, 0, 0, 0, FillMode.Winding); + } - /// Draws a closed cardinal spline defined by an array of structures using a specified tension. - /// - /// that determines the color, width, and height of the curve. - /// Array of structures that define the spline. - /// Value greater than or equal to 0.0F that specifies the tension of the curve. - /// Member of the enumeration that determines how the curve is filled. This parameter is required but is ignored. - /// - /// is . - /// -or- - /// is . public void DrawClosedCurve(Pen pen, PointF[] points, float tension, FillMode fillmode) { - } + DrawCurveCore(true, false, pen, Array.ConvertAll(points, p => new PointF(p.X, p.Y)), 0, 0, tension, fillmode); + } - /// Draws a closed cardinal spline defined by an array of structures. - /// - /// that determines the color, width, and height of the curve. - /// Array of structures that define the spline. - /// - /// is . - /// -or- - /// is . public void DrawClosedCurve(Pen pen, Point[] points) { - } + DrawCurveCore(true, false, pen, Array.ConvertAll(points, p => new PointF(p.X, p.Y)), 0, 0, 0, FillMode.Winding); + } - /// Draws a closed cardinal spline defined by an array of structures using a specified tension. - /// - /// that determines the color, width, and height of the curve. - /// Array of structures that define the spline. - /// Value greater than or equal to 0.0F that specifies the tension of the curve. - /// Member of the enumeration that determines how the curve is filled. This parameter is required but ignored. - /// - /// is . - /// -or- - /// is . public void DrawClosedCurve(Pen pen, Point[] points, float tension, FillMode fillmode) - { - } + { + DrawCurveCore(true, false, pen, Array.ConvertAll(points, p => new PointF(p.X, p.Y)), 0, 0, tension, fillmode); + } - /// Draws a cardinal spline through a specified array of structures. - /// - /// that determines the color, width, and style of the curve. - /// Array of structures that define the spline. - /// - /// is . - /// -or- - /// is . public void DrawCurve(Pen pen, PointF[] points) { - } + DrawCurveCore(false, false, pen, points, 0, 0, 0, FillMode.Winding); + } - /// Draws a cardinal spline through a specified array of structures. The drawing begins offset from the beginning of the array. - /// - /// that determines the color, width, and style of the curve. - /// Array of structures that define the spline. - /// Offset from the first element in the array of the parameter to the starting point in the curve. - /// Number of segments after the starting point to include in the curve. - /// - /// is . - /// -or- - /// is . public void DrawCurve(Pen pen, PointF[] points, int offset, int numberOfSegments) { - } + DrawCurveCore(false, false, pen, points, offset, numberOfSegments, 0, FillMode.Winding); + } - /// Draws a cardinal spline through a specified array of structures using a specified tension. The drawing begins offset from the beginning of the array. - /// - /// that determines the color, width, and style of the curve. - /// Array of structures that define the spline. - /// Offset from the first element in the array of the parameter to the starting point in the curve. - /// Number of segments after the starting point to include in the curve. - /// Value greater than or equal to 0.0F that specifies the tension of the curve. - /// - /// is . - /// -or- - /// is . public void DrawCurve(Pen pen, PointF[] points, int offset, int numberOfSegments, float tension) + { + DrawCurveCore(false,false, pen, points, offset, numberOfSegments, tension, FillMode.Winding); + } + + public void DrawCurve(Pen pen, PointF[] points, float tension) { - } - - /// Draws a cardinal spline through a specified array of structures using a specified tension. - /// - /// that determines the color, width, and style of the curve. - /// Array of structures that represent the points that define the curve. - /// Value greater than or equal to 0.0F that specifies the tension of the curve. - /// - /// is . - /// -or- - /// is . - public void DrawCurve(Pen pen, PointF[] points, float tension) - { - } + DrawCurveCore(false, false, pen, points, 0, 0, tension, FillMode.Winding); + } - /// Draws a cardinal spline through a specified array of structures. - /// - /// that determines the color, width, and height of the curve. - /// Array of structures that define the spline. - /// - /// is . - /// -or- - /// is . public void DrawCurve(Pen pen, Point[] points) { - } + DrawCurveCore(false, false, pen, Array.ConvertAll(points,p=> new PointF(p.X, p.Y)), 0, 0, 0, FillMode.Winding); + } - /// Draws a cardinal spline through a specified array of structures using a specified tension. - /// - /// that determines the color, width, and style of the curve. - /// Array of structures that define the spline. - /// Offset from the first element in the array of the parameter to the starting point in the curve. - /// Number of segments after the starting point to include in the curve. - /// Value greater than or equal to 0.0F that specifies the tension of the curve. - /// - /// is . - /// -or- - /// is . public void DrawCurve(Pen pen, Point[] points, int offset, int numberOfSegments, float tension) { - } + DrawCurveCore(false, false, pen, Array.ConvertAll(points, p => new PointF(p.X, p.Y)), offset, numberOfSegments, tension, FillMode.Winding); + } - /// Draws a cardinal spline through a specified array of structures using a specified tension. - /// - /// that determines the color, width, and style of the curve. - /// Array of structures that define the spline. - /// Value greater than or equal to 0.0F that specifies the tension of the curve. - /// - /// is . - /// -or- - /// is . public void DrawCurve(Pen pen, Point[] points, float tension) { - } + DrawCurveCore(false, false, pen, Array.ConvertAll(points, p => new PointF(p.X, p.Y)), 0, 0, tension, FillMode.Winding); + } - /// Draws an ellipse specified by a bounding structure. - /// - /// that determines the color, width, and style of the ellipse. - /// - /// structure that defines the boundaries of the ellipse. - /// - /// is . public void DrawEllipse(Pen pen, Rectangle rect) - { - } + { + DrawEllipseCore(pen, rect.X, rect.Y, rect.Width, rect.Height, false, FillMode.Winding); + } - /// Draws an ellipse defined by a bounding . - /// - /// that determines the color, width, and style of the ellipse. - /// - /// structure that defines the boundaries of the ellipse. - /// - /// is . public void DrawEllipse(Pen pen, RectangleF rect) { - } + DrawEllipseCore(pen, rect.X, rect.Y, rect.Width, rect.Height, false, FillMode.Winding); + } - /// Draws an ellipse defined by a bounding rectangle specified by coordinates for the upper-left corner of the rectangle, a height, and a width. - /// - /// that determines the color, width, and style of the ellipse. - /// The x-coordinate of the upper-left corner of the bounding rectangle that defines the ellipse. - /// The y-coordinate of the upper-left corner of the bounding rectangle that defines the ellipse. - /// Width of the bounding rectangle that defines the ellipse. - /// Height of the bounding rectangle that defines the ellipse. - /// - /// is . public void DrawEllipse(Pen pen, int x, int y, int width, int height) { - } + DrawEllipseCore(pen, x, y, width, height, false, FillMode.Winding); + } - /// Draws an ellipse defined by a bounding rectangle specified by a pair of coordinates, a height, and a width. - /// - /// that determines the color, width, and style of the ellipse. - /// The x-coordinate of the upper-left corner of the bounding rectangle that defines the ellipse. - /// The y-coordinate of the upper-left corner of the bounding rectangle that defines the ellipse. - /// Width of the bounding rectangle that defines the ellipse. - /// Height of the bounding rectangle that defines the ellipse. - /// - /// is . public void DrawEllipse(Pen pen, float x, float y, float width, float height) { - } + DrawEllipseCore(pen, x, y, width, height, false, FillMode.Winding); + } + private void DrawEllipseCore(Pen pen, float x, float y, float width, float height, bool isfill, FillMode fillmode) + { + this.context.Save(); + this.SetTranslateWithDifference(x + width / 2, y + height / 2); + this.SetSourceColor(pen); + this.context.LineWidth = pen.Width; + this.context.LineJoin = Cairo.LineJoin.Round; + this.context.NewPath(); + float r = (width + height) / 4; + double rs = Math.Min(0.1, 2 / r); + for (double t = 0; t < 2 * Math.PI; t += rs) + { + double x2_1 = width * Math.Cos(t) / 2; + double y2_1 = height * Math.Sin(t) / 2; + this.context.LineTo(x2_1, y2_1); + } + this.context.ClosePath(); + if (isfill) + { + this.context.FillRule = fillmode == FillMode.Winding ? Cairo.FillRule.Winding : Cairo.FillRule.EvenOdd; + this.context.Fill(); + } + else + { + this.context.Stroke(); + } + this.context.Restore(); - /// Draws the image represented by the specified within the area specified by a structure. - /// - /// to draw. - /// - /// structure that specifies the location and size of the resulting image on the display surface. The image contained in the parameter is scaled to the dimensions of this rectangular area. - /// - /// is . - public void DrawIcon(Icon icon, Rectangle targetRect) + } + public void DrawIcon(Icon icon, Rectangle targetRect) { - } + DrawImage(new Bitmap(icon.PixbufData), targetRect); + } - /// Draws the image represented by the specified at the specified coordinates. - /// - /// to draw. - /// The x-coordinate of the upper-left corner of the drawn image. - /// The y-coordinate of the upper-left corner of the drawn image. - /// - /// is . public void DrawIcon(Icon icon, int x, int y) { - } + DrawImage(new Bitmap(icon.PixbufData), new Point(x,y)); + } - /// Draws the image represented by the specified without scaling the image. - /// - /// to draw. - /// - /// structure that specifies the location and size of the resulting image. The image is not scaled to fit this rectangle, but retains its original size. If the image is larger than the rectangle, it is clipped to fit inside it. - /// - /// is . public void DrawIconUnstretched(Icon icon, Rectangle targetRect) { - } + DrawImage(new Bitmap(icon.PixbufData), targetRect); + } - /// Draws the specified , using its original physical size, at the specified location. - /// - /// to draw. - /// - /// structure that represents the location of the upper-left corner of the drawn image. - /// - /// is . public void DrawImage(Image image, Point point) { - DrawImage(image, new PointF[] { new PointF(point.X,point.Y) }, new RectangleF(0, 0, 0, 0), GraphicsUnit.Pixel, null, null, 0); - } + DrawImageScaledCore(image, new Rectangle(0, 0, image.Width, image.Height), point.X, point.Y, image.Width, image.Height, GraphicsUnit.Pixel, null, null, IntPtr.Zero); + } - /// Draws the specified , using its original physical size, at the specified location. - /// - /// to draw. - /// - /// structure that represents the upper-left corner of the drawn image. - /// - /// is . public void DrawImage(Image image, PointF point) { - DrawImage(image, new PointF[] { point }, new RectangleF(0,0,0,0), GraphicsUnit.Pixel, null, null, 0); - } + DrawImageScaledCore(image, new Rectangle(0, 0, image.Width, image.Height), point.X, point.Y, image.Width, image.Height, GraphicsUnit.Pixel, null, null, IntPtr.Zero); + } - /// Draws the specified at the specified location and with the specified shape and size. - /// - /// to draw. - /// Array of three structures that define a parallelogram. - /// - /// is . public void DrawImage(Image image, PointF[] destPoints) { - DrawImage(image, destPoints, new RectangleF(0,0,image.Width,image.Height), GraphicsUnit.Pixel, null, null, 0); - } - - /// Draws the specified portion of the specified at the specified location and with the specified size. - /// - /// to draw. - /// Array of three structures that define a parallelogram. - /// - /// structure that specifies the portion of the object to draw. - /// Member of the enumeration that specifies the units of measure used by the parameter. - /// - /// is . - public void DrawImage(Image image, PointF[] destPoints, RectangleF srcRect, GraphicsUnit srcUnit) - { - DrawImage(image, destPoints, srcRect, srcUnit, null, null, 0); - } - - /// Draws the specified portion of the specified at the specified location and with the specified size. - /// - /// to draw. - /// Array of three structures that define a parallelogram. - /// - /// structure that specifies the portion of the object to draw. - /// Member of the enumeration that specifies the units of measure used by the parameter. - /// - /// that specifies recoloring and gamma information for the object. - /// - /// is . - public void DrawImage(Image image, PointF[] destPoints, RectangleF srcRect, GraphicsUnit srcUnit, ImageAttributes imageAttr) - { - DrawImage(image, destPoints, srcRect, srcUnit, imageAttr, null, 0); - } - - /// Draws the specified portion of the specified at the specified location and with the specified size. - /// - /// to draw. - /// Array of three structures that define a parallelogram. - /// - /// structure that specifies the portion of the object to draw. - /// Member of the enumeration that specifies the units of measure used by the parameter. - /// - /// that specifies recoloring and gamma information for the object. - /// - /// delegate that specifies a method to call during the drawing of the image. This method is called frequently to check whether to stop execution of the method according to application-determined criteria. - /// - /// is . - public void DrawImage(Image image, PointF[] destPoints, RectangleF srcRect, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback) - { - DrawImage(image, destPoints, srcRect, srcUnit, imageAttr, callback, 0); - } - - /// Draws the specified portion of the specified at the specified location and with the specified size. - /// - /// to draw. - /// Array of three structures that define a parallelogram. - /// - /// structure that specifies the portion of the object to draw. - /// Member of the enumeration that specifies the units of measure used by the parameter. - /// - /// that specifies recoloring and gamma information for the object. - /// - /// delegate that specifies a method to call during the drawing of the image. This method is called frequently to check whether to stop execution of the method according to application-determined criteria. - /// Value specifying additional data for the delegate to use when checking whether to stop execution of the method. - /// - /// is . - public void DrawImage(Image image, PointF[] destPoints, RectangleF srcRect, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback, int callbackData) - { - Gdk.Pixbuf img = new Gdk.Pixbuf(image.PixbufData); - this.context.Save(); - this.context.Translate(destPoints[0].X, destPoints[0].Y); - Gdk.CairoHelper.SetSourcePixbuf(this.context, img, srcRect.X, srcRect.Y); - - using (var p = this.context.GetSource()) + DrawImageScaledCore(image, new Rectangle((int)destPoints[0].X, (int)destPoints[0].Y, (int)destPoints[1].X - (int)destPoints[0].X, (int)destPoints[2].Y - (int)destPoints[0].Y), 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, null, null, IntPtr.Zero); + } + private void DrawImageUnscaledCore(Image image, int x, int y, int width, int height, bool clipped = false) + { + Gdk.Pixbuf img = new Gdk.Pixbuf(image.PixbufData); + if (width == 0) + width = img.Width; + if (height == 0) + height = img.Height; + using (var surface = new Cairo.ImageSurface(Cairo.Format.Argb32, width, height)) { - if (p is Cairo.SurfacePattern pattern) + Gdk.Pixbuf newimg = new Gdk.Pixbuf(surface, 0, 0, width, height); + img.CopyArea(x, y, width, height, newimg, 0, 0); + this.context.Save(); + this.SetTranslateWithDifference(x, y); + Gdk.CairoHelper.SetSourcePixbuf(this.context, newimg, x, y); + + using (var p = this.context.GetSource()) { - if (this.CompositingQuality == CompositingQuality.HighSpeed) - { - pattern.Filter = Cairo.Filter.Fast; - } - else if (this.CompositingQuality == CompositingQuality.HighQuality) + if (p is Cairo.SurfacePattern pattern) { - pattern.Filter = Cairo.Filter.Good; + if (this.CompositingQuality == CompositingQuality.HighSpeed) + { + pattern.Filter = Cairo.Filter.Fast; + } + else if (this.CompositingQuality == CompositingQuality.HighQuality) + { + pattern.Filter = Cairo.Filter.Good; + } + else + pattern.Filter = Cairo.Filter.Best; } - else - pattern.Filter = Cairo.Filter.Best; } + this.context.Paint(); + this.context.Restore(); } - this.context.Paint(); - this.context.Restore(); - } + } + private void DrawImageScaledCore(Image image, Rectangle destRect, float srcX, float srcY, float srcWidth, float srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttrs, DrawImageAbort callback, IntPtr callbackData) + { + Gdk.Pixbuf img = new Gdk.Pixbuf(image.PixbufData); + if (srcWidth == 0) + srcWidth = img.Width; + if (srcHeight == 0) + srcHeight = img.Height; + if (destRect.Width == 0) + destRect.Width = img.Width; + if (destRect.Height == 0) + destRect.Height = img.Height; + using (var surface = new Cairo.ImageSurface(Cairo.Format.Argb32, destRect.Width, destRect.Height)) + { + Gdk.Pixbuf scaleimg = new Gdk.Pixbuf(surface, 0, 0, destRect.Width, destRect.Height); + + img.Scale(scaleimg, 0, 0, destRect.Width, destRect.Height, srcX, srcY, destRect.Width / srcWidth, destRect.Height / srcHeight, Gdk.InterpType.Tiles); + this.context.Save(); + this.SetTranslateWithDifference(destRect.X, destRect.Y); + Gdk.CairoHelper.SetSourcePixbuf(this.context, scaleimg, 0, 0); + using (var p = this.context.GetSource()) + { + if (p is Cairo.SurfacePattern pattern) + { + if (this.CompositingQuality == CompositingQuality.HighSpeed) + { + pattern.Filter = Cairo.Filter.Fast; + } + else if (this.CompositingQuality == CompositingQuality.HighQuality) + { + pattern.Filter = Cairo.Filter.Good; + } + else + pattern.Filter = Cairo.Filter.Best; + } + } + + this.context.Paint(); + this.context.Restore(); + + } + + } + public void DrawImage(Image image, PointF[] destPoints, RectangleF srcRect, GraphicsUnit srcUnit) + { + DrawImageScaledCore(image, new Rectangle((int)destPoints[0].X, (int)destPoints[0].Y, (int)destPoints[1].X - (int)destPoints[0].X, (int)destPoints[2].Y - (int)destPoints[0].Y), 0, 0, srcRect.Width, srcRect.Height, srcUnit, null, null, IntPtr.Zero); + } + + public void DrawImage(Image image, PointF[] destPoints, RectangleF srcRect, GraphicsUnit srcUnit, ImageAttributes imageAttr) + { + DrawImageScaledCore(image, new Rectangle((int)destPoints[0].X, (int)destPoints[0].Y, (int)destPoints[1].X - (int)destPoints[0].X, (int)destPoints[2].Y - (int)destPoints[0].Y), 0, 0, srcRect.Width, srcRect.Height, srcUnit, imageAttr, null, IntPtr.Zero); + } + + public void DrawImage(Image image, PointF[] destPoints, RectangleF srcRect, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback) + { + DrawImageScaledCore(image, new Rectangle((int)destPoints[0].X, (int)destPoints[0].Y, (int)destPoints[1].X - (int)destPoints[0].X, (int)destPoints[2].Y - (int)destPoints[0].Y), 0, 0, srcRect.Width, srcRect.Height, srcUnit, imageAttr, callback, IntPtr.Zero); + } + + public void DrawImage(Image image, PointF[] destPoints, RectangleF srcRect, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback, int callbackData) + { + DrawImageScaledCore(image, new Rectangle((int)destPoints[0].X, (int)destPoints[0].Y, (int)destPoints[1].X - (int)destPoints[0].X, (int)destPoints[2].Y - (int)destPoints[0].Y), 0, 0, srcRect.Width, srcRect.Height, srcUnit, imageAttr, callback, new IntPtr(callbackData)); + } - /// Draws the specified at the specified location and with the specified shape and size. - /// - /// to draw. - /// Array of three structures that define a parallelogram. - /// - /// is . public void DrawImage(Image image, Point[] destPoints) { - DrawImage(image, destPoints, new Rectangle(0, 0, 0, 0), GraphicsUnit.Pixel, null, null, 0); - } + DrawImageScaledCore(image, new Rectangle(destPoints[0].X, destPoints[0].Y, destPoints[1].X - destPoints[0].X, destPoints[2].Y - destPoints[0].Y), 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, null, null, IntPtr.Zero); + } - /// Draws the specified portion of the specified at the specified location and with the specified size. - /// - /// to draw. - /// Array of three structures that define a parallelogram. - /// - /// structure that specifies the portion of the object to draw. - /// Member of the enumeration that specifies the units of measure used by the parameter. - /// - /// is . public void DrawImage(Image image, Point[] destPoints, Rectangle srcRect, GraphicsUnit srcUnit) { - DrawImage(image, destPoints, srcRect, srcUnit, null, null, 0); - } + DrawImageScaledCore(image, new Rectangle(destPoints[0].X, destPoints[0].Y, destPoints[1].X - destPoints[0].X, destPoints[2].Y - destPoints[0].Y), 0, 0, srcRect.Width, srcRect.Height, srcUnit, null, null, IntPtr.Zero); + } - /// Draws the specified portion of the specified at the specified location. - /// - /// to draw. - /// Array of three structures that define a parallelogram. - /// - /// structure that specifies the portion of the object to draw. - /// Member of the enumeration that specifies the units of measure used by the parameter. - /// - /// that specifies recoloring and gamma information for the object. - /// - /// is . public void DrawImage(Image image, Point[] destPoints, Rectangle srcRect, GraphicsUnit srcUnit, ImageAttributes imageAttr) { - DrawImage(image, destPoints, srcRect, srcUnit, imageAttr, null, 0); - } - - /// Draws the specified portion of the specified at the specified location and with the specified size. - /// - /// to draw. - /// Array of three structures that define a parallelogram. - /// - /// structure that specifies the portion of the object to draw. - /// Member of the enumeration that specifies the units of measure used by the parameter. - /// - /// that specifies recoloring and gamma information for the object. - /// - /// delegate that specifies a method to call during the drawing of the image. This method is called frequently to check whether to stop execution of the method according to application-determined criteria. - /// - /// is . + DrawImageScaledCore(image, new Rectangle(destPoints[0].X, destPoints[0].Y, destPoints[1].X - destPoints[0].X, destPoints[2].Y - destPoints[0].Y), 0, 0, srcRect.Width, srcRect.Height, srcUnit, imageAttr, null, IntPtr.Zero); + } + public void DrawImage(Image image, Point[] destPoints, Rectangle srcRect, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback) - { - DrawImage(image, destPoints, srcRect, srcUnit, imageAttr, callback, 0); - } - - /// Draws the specified portion of the specified at the specified location and with the specified size. - /// - /// to draw. - /// Array of three structures that define a parallelogram. - /// - /// structure that specifies the portion of the object to draw. - /// Member of the enumeration that specifies the units of measure used by the parameter. - /// - /// that specifies recoloring and gamma information for the object. - /// - /// delegate that specifies a method to call during the drawing of the image. This method is called frequently to check whether to stop execution of the method according to application-determined criteria. - /// Value specifying additional data for the delegate to use when checking whether to stop execution of the method. + { + DrawImageScaledCore(image, new Rectangle(destPoints[0].X, destPoints[0].Y, destPoints[1].X - destPoints[0].X, destPoints[2].Y - destPoints[0].Y), 0, 0, srcRect.Width, srcRect.Height, srcUnit, imageAttr, callback, IntPtr.Zero); + } + public void DrawImage(Image image, Point[] destPoints, Rectangle srcRect, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback, int callbackData) { - DrawImage(image, Array.ConvertAll(destPoints, o => new PointF(o.X, o.Y)), srcRect, srcUnit, imageAttr, callback, callbackData); - } + DrawImageScaledCore(image, new Rectangle(destPoints[0].X, destPoints[0].Y, destPoints[1].X- destPoints[0].X, destPoints[2].Y- destPoints[0].Y), 0, 0, srcRect.Width, srcRect.Height, srcUnit, imageAttr, callback, new IntPtr(callbackData)); + } - /// Draws the specified at the specified location and with the specified size. - /// - /// to draw. - /// - /// structure that specifies the location and size of the drawn image. - /// - /// is . public void DrawImage(Image image, Rectangle rect) { - DrawImage(image, rect, 0, 0, rect.Width, rect.Height, GraphicsUnit.Pixel, null, null, IntPtr.Zero); + DrawImageScaledCore(image, rect, 0, 0, rect.Width, rect.Height, GraphicsUnit.Pixel, null, null, IntPtr.Zero); } - /// Draws the specified portion of the specified at the specified location and with the specified size. - /// - /// to draw. - /// - /// structure that specifies the location and size of the drawn image. The image is scaled to fit the rectangle. - /// - /// structure that specifies the portion of the object to draw. - /// Member of the enumeration that specifies the units of measure used by the parameter. - /// - /// is . public void DrawImage(Image image, Rectangle destRect, Rectangle srcRect, GraphicsUnit srcUnit) { - DrawImage(image, destRect, srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height, srcUnit, null, null, IntPtr.Zero); - } - - /// Draws the specified portion of the specified at the specified location and with the specified size. - /// - /// to draw. - /// - /// structure that specifies the location and size of the drawn image. The image is scaled to fit the rectangle. - /// The x-coordinate of the upper-left corner of the portion of the source image to draw. - /// The y-coordinate of the upper-left corner of the portion of the source image to draw. - /// Width of the portion of the source image to draw. - /// Height of the portion of the source image to draw. - /// Member of the enumeration that specifies the units of measure used to determine the source rectangle. - /// - /// is . + DrawImageScaledCore(image, destRect, srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height, srcUnit, null, null, IntPtr.Zero); + } + public void DrawImage(Image image, Rectangle destRect, int srcX, int srcY, int srcWidth, int srcHeight, GraphicsUnit srcUnit) { - DrawImage(image, destRect, srcX, srcY, srcWidth, srcHeight, srcUnit, null, null, IntPtr.Zero); - } - - /// Draws the specified portion of the specified at the specified location and with the specified size. - /// - /// to draw. - /// - /// structure that specifies the location and size of the drawn image. The image is scaled to fit the rectangle. - /// The x-coordinate of the upper-left corner of the portion of the source image to draw. - /// The y-coordinate of the upper-left corner of the portion of the source image to draw. - /// Width of the portion of the source image to draw. - /// Height of the portion of the source image to draw. - /// Member of the enumeration that specifies the units of measure used to determine the source rectangle. - /// - /// that specifies recoloring and gamma information for the object. - /// - /// is . + DrawImageScaledCore(image, destRect, srcX, srcY, srcWidth, srcHeight, srcUnit, null, null, IntPtr.Zero); + } + public void DrawImage(Image image, Rectangle destRect, int srcX, int srcY, int srcWidth, int srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttrs) { - DrawImage(image, destRect, srcX, srcY, srcWidth, srcHeight, srcUnit, imageAttrs, null, IntPtr.Zero); - } - - /// Draws the specified portion of the specified at the specified location and with the specified size. - /// - /// to draw. - /// - /// structure that specifies the location and size of the drawn image. The image is scaled to fit the rectangle. - /// The x-coordinate of the upper-left corner of the portion of the source image to draw. - /// The y-coordinate of the upper-left corner of the portion of the source image to draw. - /// Width of the portion of the source image to draw. - /// Height of the portion of the source image to draw. - /// Member of the enumeration that specifies the units of measure used to determine the source rectangle. - /// - /// that specifies recoloring and gamma information for . - /// - /// delegate that specifies a method to call during the drawing of the image. This method is called frequently to check whether to stop execution of the method according to application-determined criteria. - /// - /// is . + DrawImageScaledCore(image, destRect, srcX, srcY, srcWidth, srcHeight, srcUnit, imageAttrs, null, IntPtr.Zero); + } + public void DrawImage(Image image, Rectangle destRect, int srcX, int srcY, int srcWidth, int srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttrs, DrawImageAbort callback) { - DrawImage(image, destRect, srcX, srcY, srcWidth, srcHeight, srcUnit, imageAttrs, callback, IntPtr.Zero); - } - - /// Draws the specified portion of the specified at the specified location and with the specified size. - /// - /// to draw. - /// - /// structure that specifies the location and size of the drawn image. The image is scaled to fit the rectangle. - /// The x-coordinate of the upper-left corner of the portion of the source image to draw. - /// The y-coordinate of the upper-left corner of the portion of the source image to draw. - /// Width of the portion of the source image to draw. - /// Height of the portion of the source image to draw. - /// Member of the enumeration that specifies the units of measure used to determine the source rectangle. - /// - /// that specifies recoloring and gamma information for the object. - /// - /// delegate that specifies a method to call during the drawing of the image. This method is called frequently to check whether to stop execution of the method according to application-determined criteria. - /// Value specifying additional data for the delegate to use when checking whether to stop execution of the method. - /// - /// is . + DrawImageScaledCore(image, destRect, srcX, srcY, srcWidth, srcHeight, srcUnit, imageAttrs, callback, IntPtr.Zero); + } + public void DrawImage(Image image, Rectangle destRect, int srcX, int srcY, int srcWidth, int srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttrs, DrawImageAbort callback, IntPtr callbackData) { - DrawImage(image, destRect, (float)srcX, (float)srcY, (float)srcWidth, (float)srcHeight, srcUnit, imageAttrs, callback, callbackData); - } - - /// Draws the specified portion of the specified at the specified location and with the specified size. - /// - /// to draw. - /// - /// structure that specifies the location and size of the drawn image. The image is scaled to fit the rectangle. - /// The x-coordinate of the upper-left corner of the portion of the source image to draw. - /// The y-coordinate of the upper-left corner of the portion of the source image to draw. - /// Width of the portion of the source image to draw. - /// Height of the portion of the source image to draw. - /// Member of the enumeration that specifies the units of measure used to determine the source rectangle. - /// - /// is . + DrawImageScaledCore(image, destRect, srcX, srcY, srcWidth, srcHeight, srcUnit, imageAttrs, callback, callbackData); + } + public void DrawImage(Image image, Rectangle destRect, float srcX, float srcY, float srcWidth, float srcHeight, GraphicsUnit srcUnit) { - DrawImage(image, destRect, srcX, srcY, srcWidth, srcHeight, srcUnit, null, null, IntPtr.Zero); - } - - /// Draws the specified portion of the specified at the specified location and with the specified size. - /// - /// to draw. - /// - /// structure that specifies the location and size of the drawn image. The image is scaled to fit the rectangle. - /// The x-coordinate of the upper-left corner of the portion of the source image to draw. - /// The y-coordinate of the upper-left corner of the portion of the source image to draw. - /// Width of the portion of the source image to draw. - /// Height of the portion of the source image to draw. - /// Member of the enumeration that specifies the units of measure used to determine the source rectangle. - /// - /// that specifies recoloring and gamma information for the object. - /// - /// is . + DrawImageScaledCore(image, destRect, srcX, srcY, srcWidth, srcHeight, srcUnit, null, null, IntPtr.Zero); + } + public void DrawImage(Image image, Rectangle destRect, float srcX, float srcY, float srcWidth, float srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttrs) { - DrawImage(image, destRect, srcX, srcY, srcWidth, srcHeight, srcUnit, imageAttrs, null, IntPtr.Zero); - } - - /// Draws the specified portion of the specified at the specified location and with the specified size. - /// - /// to draw. - /// - /// structure that specifies the location and size of the drawn image. The image is scaled to fit the rectangle. - /// The x-coordinate of the upper-left corner of the portion of the source image to draw. - /// The y-coordinate of the upper-left corner of the portion of the source image to draw. - /// Width of the portion of the source image to draw. - /// Height of the portion of the source image to draw. - /// Member of the enumeration that specifies the units of measure used to determine the source rectangle. - /// - /// that specifies recoloring and gamma information for the object. - /// - /// delegate that specifies a method to call during the drawing of the image. This method is called frequently to check whether to stop execution of the method according to application-determined criteria. - /// - /// is . + DrawImageScaledCore(image, destRect, srcX, srcY, srcWidth, srcHeight, srcUnit, imageAttrs, null, IntPtr.Zero); + } + public void DrawImage(Image image, Rectangle destRect, float srcX, float srcY, float srcWidth, float srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttrs, DrawImageAbort callback) { - DrawImage(image, destRect, srcX, srcY, srcWidth, srcHeight, srcUnit, imageAttrs, callback, IntPtr.Zero); - } - - /// Draws the specified portion of the specified at the specified location and with the specified size. - /// - /// to draw. - /// - /// structure that specifies the location and size of the drawn image. The image is scaled to fit the rectangle. - /// The x-coordinate of the upper-left corner of the portion of the source image to draw. - /// The y-coordinate of the upper-left corner of the portion of the source image to draw. - /// Width of the portion of the source image to draw. - /// Height of the portion of the source image to draw. - /// Member of the enumeration that specifies the units of measure used to determine the source rectangle. - /// - /// that specifies recoloring and gamma information for the object. - /// - /// delegate that specifies a method to call during the drawing of the image. This method is called frequently to check whether to stop execution of the method according to application-determined criteria. - /// Value specifying additional data for the delegate to use when checking whether to stop execution of the method. - /// - /// is . + DrawImageScaledCore(image, destRect, srcX, srcY, srcWidth, srcHeight, srcUnit, imageAttrs, callback, IntPtr.Zero); + } + public void DrawImage(Image image, Rectangle destRect, float srcX, float srcY, float srcWidth, float srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttrs, DrawImageAbort callback, IntPtr callbackData) - { - Gdk.Pixbuf scaleimg = new Gdk.Pixbuf(new Cairo.ImageSurface(Cairo.Format.Argb32, destRect.Width, destRect.Height), 0, 0, destRect.Width, destRect.Height); - Gdk.Pixbuf img = new Gdk.Pixbuf(image.PixbufData); - img.Scale(scaleimg, destRect.X, destRect.Y, destRect.Width, destRect.Height, srcX, srcY, destRect.Width / srcWidth, destRect.Height / srcHeight, Gdk.InterpType.Tiles); - this.context.Save(); - this.context.Translate(destRect.X, destRect.Y); - Gdk.CairoHelper.SetSourcePixbuf(this.context, scaleimg, 0, 0); - using (var p = this.context.GetSource()) - { - if (p is Cairo.SurfacePattern pattern) - { - if (this.CompositingQuality == CompositingQuality.HighSpeed) - { - pattern.Filter = Cairo.Filter.Fast; - } - else if (this.CompositingQuality == CompositingQuality.HighQuality) - { - pattern.Filter = Cairo.Filter.Good; - } - else - pattern.Filter = Cairo.Filter.Best; - } - } - - this.context.Paint(); - this.context.Restore(); + { + DrawImageScaledCore(image, destRect, srcX, srcY, srcWidth, srcHeight, srcUnit, imageAttrs, callback, callbackData); } - /// Draws the specified at the specified location and with the specified size. - /// - /// to draw. - /// - /// structure that specifies the location and size of the drawn image. - /// - /// is . public void DrawImage(Image image, RectangleF rect) - { - DrawImage(image, new Rectangle((int)rect.X, (int)rect.Y, (int)rect.Width, (int)rect.Height), 0, 0, rect.Width, rect.Height, GraphicsUnit.Pixel, null, null, IntPtr.Zero); + { + DrawImageScaledCore(image, new Rectangle((int)rect.X, (int)rect.Y, (int)rect.Width, (int)rect.Height), rect.X, rect.Y, rect.Width, rect.Height, GraphicsUnit.Pixel, null, null, IntPtr.Zero); } - /// Draws the specified portion of the specified at the specified location and with the specified size. - /// - /// to draw. - /// - /// structure that specifies the location and size of the drawn image. The image is scaled to fit the rectangle. - /// - /// structure that specifies the portion of the object to draw. - /// Member of the enumeration that specifies the units of measure used by the parameter. - /// - /// is . public void DrawImage(Image image, RectangleF destRect, RectangleF srcRect, GraphicsUnit srcUnit) { - DrawImage(image, new Rectangle((int)destRect.X, (int)destRect.Y, (int)destRect.Width, (int)destRect.Height), srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height, srcUnit, null, null, IntPtr.Zero); - } + DrawImageScaledCore(image, new Rectangle((int)destRect.X, (int)destRect.Y, (int)destRect.Width, (int)destRect.Height), srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height, srcUnit, null, null, IntPtr.Zero); + } - /// Draws the specified image, using its original physical size, at the location specified by a coordinate pair. - /// - /// to draw. - /// The x-coordinate of the upper-left corner of the drawn image. - /// The y-coordinate of the upper-left corner of the drawn image. - /// - /// is . public void DrawImage(Image image, int x, int y) { - DrawImage(image, new Point(x,y)); + DrawImageScaledCore(image, new Rectangle(0, 0, image.Width, image.Height), x, y, image.Width, image.Height, GraphicsUnit.Pixel, null, null, IntPtr.Zero); } - /// Draws a portion of an image at a specified location. - /// - /// to draw. - /// The x-coordinate of the upper-left corner of the drawn image. - /// The y-coordinate of the upper-left corner of the drawn image. - /// - /// structure that specifies the portion of the object to draw. - /// Member of the enumeration that specifies the units of measure used by the parameter. - /// - /// is . public void DrawImage(Image image, int x, int y, Rectangle srcRect, GraphicsUnit srcUnit) { - DrawImage(image, new Rectangle(x, y, srcRect.Width, srcRect.Height), srcRect, srcUnit); - } + DrawImageScaledCore(image, new Rectangle(x, y, srcRect.Width + x, srcRect.Height + y), srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height, srcUnit, null, null, IntPtr.Zero); + } - /// Draws the specified at the specified location and with the specified size. - /// - /// to draw. - /// The x-coordinate of the upper-left corner of the drawn image. - /// The y-coordinate of the upper-left corner of the drawn image. - /// Width of the drawn image. - /// Height of the drawn image. - /// - /// is . - public void DrawImage(Image image, int x, int y, int width, int height) + public void DrawImage(Image image, int x, int y, int width, int height) { - DrawImage(image, new Rectangle(x, y, width, width)); - } + DrawImageScaledCore(image, new Rectangle(0, 0, image.Width, image.Height), x, y, width, height, GraphicsUnit.Pixel, null, null, IntPtr.Zero); + } - /// Draws the specified , using its original physical size, at the specified location. - /// - /// to draw. - /// The x-coordinate of the upper-left corner of the drawn image. - /// The y-coordinate of the upper-left corner of the drawn image. - /// - /// is . public void DrawImage(Image image, float x, float y) { - DrawImage(image, new PointF(x,y)); - } + DrawImageScaledCore(image, new Rectangle(0, 0, image.Width, image.Height), x, y, image.Width, image.Height, GraphicsUnit.Pixel, null, null, IntPtr.Zero); + } - /// Draws a portion of an image at a specified location. - /// - /// to draw. - /// The x-coordinate of the upper-left corner of the drawn image. - /// The y-coordinate of the upper-left corner of the drawn image. - /// - /// structure that specifies the portion of the to draw. - /// Member of the enumeration that specifies the units of measure used by the parameter. - /// - /// is . public void DrawImage(Image image, float x, float y, RectangleF srcRect, GraphicsUnit srcUnit) { - DrawImage(image, new PointF[] { new PointF(x, y) },srcRect,GraphicsUnit.Pixel); - } + DrawImageScaledCore(image, new Rectangle((int)x, (int)y, image.Width, image.Height), srcRect.X, srcRect.Y, srcRect.Width, srcRect.Height, srcUnit, null, null, IntPtr.Zero); + } - /// Draws the specified at the specified location and with the specified size. - /// - /// to draw. - /// The x-coordinate of the upper-left corner of the drawn image. - /// The y-coordinate of the upper-left corner of the drawn image. - /// Width of the drawn image. - /// Height of the drawn image. - /// - /// is . public void DrawImage(Image image, float x, float y, float width, float height) - { - DrawImage(image, new RectangleF(x, y, width, width)); - } + { + DrawImageScaledCore(image, new Rectangle(0, 0, image.Width, image.Height), x, y, width, height, GraphicsUnit.Pixel, null, null, IntPtr.Zero); + } - /// Draws a specified image using its original physical size at a specified location. - /// - /// to draw. - /// - /// structure that specifies the upper-left corner of the drawn image. - /// - /// is . public void DrawImageUnscaled(Image image, Point point) { - } + DrawImageUnscaledCore(image, point.X, point.Y, image.Width, image.Height); + } - /// Draws a specified image using its original physical size at a specified location. - /// - /// to draw. - /// - /// that specifies the upper-left corner of the drawn image. The X and Y properties of the rectangle specify the upper-left corner. The Width and Height properties are ignored. - /// - /// is . public void DrawImageUnscaled(Image image, Rectangle rect) { - } + DrawImageUnscaledCore(image, rect.X, rect.Y, rect.Width, rect.Height); + } - /// Draws the specified image using its original physical size at the location specified by a coordinate pair. - /// - /// to draw. - /// The x-coordinate of the upper-left corner of the drawn image. - /// The y-coordinate of the upper-left corner of the drawn image. - /// - /// is . public void DrawImageUnscaled(Image image, int x, int y) { - } + DrawImageUnscaledCore(image, x, y, image.Width, image.Height); + } - /// Draws a specified image using its original physical size at a specified location. - /// - /// to draw. - /// The x-coordinate of the upper-left corner of the drawn image. - /// The y-coordinate of the upper-left corner of the drawn image. - /// Not used. - /// Not used. - /// - /// is . public void DrawImageUnscaled(Image image, int x, int y, int width, int height) { - } + DrawImageUnscaledCore(image, x, y, width, height); + } - /// Draws the specified image without scaling and clips it, if necessary, to fit in the specified rectangle. - /// The to draw. - /// The in which to draw the image. - /// - /// is . public void DrawImageUnscaledAndClipped(Image image, Rectangle rect) { - } + DrawImageUnscaledCore(image, rect.X, rect.Y, rect.Width, rect.Height,true); + } + private void DrawLinesCore(Pen pen, PointF[] points) + { + if (points.Length > 0) + { + this.context.Save(); + this.SetTranslateWithDifference(0, 0); + this.SetSourceColor(pen); + this.context.LineWidth = pen.Width; + this.context.NewPath(); + foreach (PointF p in points) + { + this.context.LineTo(p.X, p.Y); + } + this.context.Stroke(); + this.context.Restore(); - /// Draws a line connecting two structures. - /// - /// that determines the color, width, and style of the line. - /// - /// structure that represents the first point to connect. - /// - /// structure that represents the second point to connect. - /// - /// is . - public void DrawLine(Pen pen, Point pt1, Point pt2) + } + } + public void DrawLine(Pen pen, Point pt1, Point pt2) { DrawLine(pen, pt1.X, pt1.Y, pt2.X, pt2.Y); } - /// Draws a line connecting two structures. - /// - /// that determines the color, width, and style of the line. - /// - /// structure that represents the first point to connect. - /// - /// structure that represents the second point to connect. - /// - /// is . public void DrawLine(Pen pen, PointF pt1, PointF pt2) { - DrawLines(pen, new PointF[] { pt1, pt2 }); - } + DrawLine(pen, pt1.X, pt1.Y, pt2.X, pt2.Y); + } - /// Draws a line connecting the two points specified by the coordinate pairs. - /// - /// that determines the color, width, and style of the line. - /// The x-coordinate of the first point. - /// The y-coordinate of the first point. - /// The x-coordinate of the second point. - /// The y-coordinate of the second point. - /// - /// is . public void DrawLine(Pen pen, int x1, int y1, int x2, int y2) { - DrawLines(pen, new PointF[] { new PointF(x1, y1), new PointF(x2, y2) }); - } + DrawLine(pen, x1, y1, x2, y2); + } - /// Draws a line connecting the two points specified by the coordinate pairs. - /// - /// that determines the color, width, and style of the line. - /// The x-coordinate of the first point. - /// The y-coordinate of the first point. - /// The x-coordinate of the second point. - /// The y-coordinate of the second point. - /// - /// is . public void DrawLine(Pen pen, float x1, float y1, float x2, float y2) { - DrawLines(pen, new PointF[] { new PointF(x1, y1), new PointF(x2, y2) }); + DrawLinesCore(pen, new PointF[] { new PointF(x1, y1), new PointF(x2, y2) }); } - /// Draws a series of line segments that connect an array of structures. - /// - /// that determines the color, width, and style of the line segments. - /// Array of structures that represent the points to connect. - /// - /// is . - /// -or- - /// is . public void DrawLines(Pen pen, PointF[] points) { - if (points.Length > 0) - { - this.context.Save(); - this.context.SetSourceRGB(pen.Color.R / 255f, pen.Color.G / 255f, pen.Color.B / 255f); - this.context.LineWidth = pen.Width; - //this.context.LineJoin = Cairo.LineJoin.Bevel; - //this.context.LineCap = Cairo.LineCap.Butt; - //this.context.Translate(0, 0); - foreach (PointF p in points) - { - this.context.LineTo(p.X, p.Y); - } - this.context.Stroke(); - this.context.Restore(); - - } - } + DrawLinesCore(pen, points); + } - /// Draws a series of line segments that connect an array of structures. - /// - /// that determines the color, width, and style of the line segments. - /// Array of structures that represent the points to connect. - /// - /// is . - /// -or- - /// is . public void DrawLines(Pen pen, Point[] points) { - DrawLines(pen, Array.ConvertAll(points, o => new PointF(o.X, o.Y))); - } + DrawLinesCore(pen, Array.ConvertAll(points, o => new PointF(o.X, o.Y))); + } + public void DrawPath(Pen pen, GraphicsPath path) + { + DrawPathCore(pen, path, false); + } + private void DrawPathCore1(Pen pen, GraphicsPath path, bool isfill) + { + this.context.Save(); + path.Context = this.context; + this.SetTranslateWithDifference(0, 0); + this.SetSourceColor(pen); + this.context.LineWidth = pen.Width; + this.context.NewPath(); + foreach (object o in path.list) + { + if (o is GraphicsPath.FigureMode start && start.start == true) + { + this.context.NewSubPath(); + } + else if (o is GraphicsPath.ArcMode arc) + { + double rw = arc.rect.Width / 2; + double rh = arc.rect.Height / 2; + double ra = Math.Min(rw, rh); + this.context.Arc(arc.rect.X + rw, arc.rect.Y + rh, ra, Math.PI * arc.startAngle / 180, Math.PI * (arc.startAngle + arc.sweepAngle) / 180); + } + else if (o is GraphicsPath.BezierMode bezier) + { + this.context.MoveTo(bezier.pt1.X, bezier.pt1.Y); + List data = GetBezierPoints(new List() { bezier.pt1, bezier.pt2, bezier.pt3, bezier.pt4 }); + foreach (PointF point in data) + { + this.context.LineTo(point.X, point.Y); + } + } + else if (o is GraphicsPath.BeziersMode beziers) + { + List data = GetBezierPoints(beziers.points.ToList()); + foreach (PointF point in data) + { + this.context.LineTo(point.X, point.Y); + } + } + else if (o is GraphicsPath.ClosedCurveMode closedcurve) + { + this.context.CurveTo(closedcurve.points[0].X, closedcurve.points[0].Y, closedcurve.points[1].X, closedcurve.points[1].Y, closedcurve.points[2].X, closedcurve.points[2].Y); + this.context.FillRule = closedcurve.fillmode == FillMode.Winding ? Cairo.FillRule.Winding : Cairo.FillRule.EvenOdd; + //this.context.Fill(); + this.context.ClosePath(); + this.context.NewSubPath(); + } + else if (o is GraphicsPath.CurveMode curve) + { + this.context.CurveTo(curve.points[0].X + curve.offset, curve.points[0].Y + curve.offset, curve.points[1].X + curve.offset, curve.points[1].Y + curve.offset, curve.points[2].X + curve.offset, curve.points[2].Y + curve.offset); - /// Draws a . - /// - /// that determines the color, width, and style of the path. - /// - /// to draw. - /// - /// is . - /// -or- - /// is . - public void DrawPath(Pen pen, GraphicsPath path) - { - DrawLines(pen, path.PathPoints); - } + } + else if (o is GraphicsPath.EllipseMode ellipse) + { + this.context.NewSubPath(); + float r = (ellipse.rect.Width + ellipse.rect.Height) / 4; + double rs = Math.Min(0.1, 2 / r); + for (double t = 0; t < 2 * Math.PI; t += rs) + { + double x2_1 = ellipse.rect.Width * Math.Cos(t) / 2; + double y2_1 = ellipse.rect.Height * Math.Sin(t) / 2; + this.context.LineTo(x2_1+ ellipse.rect.X + ellipse.rect.Width / 2, y2_1+ ellipse.rect.Y + ellipse.rect.Height / 2); + } + this.context.ClosePath(); + this.context.NewSubPath(); + } + else if (o is GraphicsPath.LineMode line) + { + this.context.LineTo(line.pt1.X, line.pt1.Y); + this.context.LineTo(line.pt2.X, line.pt2.Y); + } + else if (o is GraphicsPath.LinesMode lines) + { + this.context.MoveTo(lines.points[0].X, lines.points[0].Y); + foreach (PointF p in lines.points) + { + this.context.LineTo(p.X, p.Y); + } + } + else if (o is GraphicsPath.PieMode pie) + { + this.context.NewSubPath(); + double rw = pie.rect.Width / 2; + double rh = pie.rect.Height / 2; + double ra = Math.Min(rw, rh); + this.context.Arc(pie.rect.X + rw, pie.rect.Y + rh, ra, Math.PI * pie.startAngle / 180, Math.PI * (pie.startAngle + pie.sweepAngle) / 180); + this.context.LineTo(pie.rect.X + rw, pie.rect.Y + rh); + this.context.ClosePath(); + this.context.NewSubPath(); + } + else if (o is GraphicsPath.PolygonMode polygon) + { + this.context.NewSubPath(); + foreach (PointF p in polygon.points) + { + this.context.LineTo(p.X, p.Y); + } + this.context.ClosePath(); + this.context.NewSubPath(); + } + else if (o is GraphicsPath.RectangleMode rectangle) + { + this.context.Rectangle(rectangle.rect.X, rectangle.rect.Y, rectangle.rect.Width, rectangle.rect.Height); + } + else if (o is GraphicsPath.RectanglesMode rectangles) + { + foreach (RectangleF rect in rectangles.rects) + { + this.context.Rectangle(rect.X, rect.Y, rect.Width, rect.Height); + } + + } + else if (o is GraphicsPath.StringMode str) + { + string text = str.text; + if (str.layoutRect.Width > 0) + { + while (text.Length > 0 && this.context.TextExtents(text).Width > str.layoutRect.Width) + text = text.Substring(0, text.Length - 1); + } + float textSize = str.emSize < 1 ? 14f : str.emSize; + FontFamily font = str.family; + Pango.Context pangocontext = this.widget.PangoContext; + string family = pangocontext.FontDescription.Family; + if (string.IsNullOrWhiteSpace(font.Name) == false) + { + var pangoFamily = Array.Find(pangocontext.Families, f => f.Name == font.Name); + if (pangoFamily != null) + family = pangoFamily.Name; + } + this.context.MoveTo(str.layoutRect.X, str.layoutRect.Y + textSize); + this.context.SelectFontFace(family, str.style == 2 ? Cairo.FontSlant.Italic : Cairo.FontSlant.Normal, str.style == 1 ? Cairo.FontWeight.Bold : Cairo.FontWeight.Normal); + this.context.SetFontSize(textSize); + this.context.ShowText(text); + } + else if (o is GraphicsPath.PathMode addpath) + { + DrawPath(pen, addpath.path); + } + if (path.IsCloseAllFigures == true || (o is GraphicsPath.FigureMode close && close.close == true)) + { + this.context.ClosePath(); + } + } + if (isfill == true) + this.context.Fill(); + else + this.context.Stroke(); - /// Draws a pie shape defined by an ellipse specified by a structure and two radial lines. - /// - /// that determines the color, width, and style of the pie shape. - /// - /// structure that represents the bounding rectangle that defines the ellipse from which the pie shape comes. - /// Angle measured in degrees clockwise from the x-axis to the first side of the pie shape. - /// Angle measured in degrees clockwise from the parameter to the second side of the pie shape. - /// - /// is . - public void DrawPie(Pen pen, Rectangle rect, float startAngle, float sweepAngle) - { - DrawPie(pen, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle); - } + if (path.matrix != null) + { + this.context.Matrix = ConvertToMatrix(path.matrix); + } + + this.context.Restore(); + } + private void DrawPathCore(Pen pen, GraphicsPath path, bool isfill) + { + this.context.Save(); + path.Context = this.context; + this.SetTranslateWithDifference(0, 0); + this.SetSourceColor(pen); + this.context.LineWidth = pen.Width; + this.context.NewPath(); + foreach (object o in path.list) + { + if (o is GraphicsPath.FigureMode start && start.start == true) + { + this.context.NewSubPath(); + } + else if (o is GraphicsPath.ArcMode arc) + { + double rw = arc.rect.Width / 2; + double rh = arc.rect.Height / 2; + double ra = Math.Min(rw, rh); + this.context.Arc(arc.rect.X + rw, arc.rect.Y + rh, ra, Math.PI * arc.startAngle / 180, Math.PI * (arc.startAngle + arc.sweepAngle) / 180); + } + else if (o is GraphicsPath.BezierMode bezier) + { + this.context.MoveTo(bezier.pt1.X, bezier.pt1.Y); + List data = GetBezierPoints(new List() { bezier.pt1, bezier.pt2, bezier.pt3, bezier.pt4 }); + foreach (PointF point in data) + { + this.context.LineTo(point.X, point.Y); + } + } + else if (o is GraphicsPath.BeziersMode beziers) + { + List data = GetBezierPoints(beziers.points.ToList()); + foreach (PointF point in data) + { + this.context.LineTo(point.X, point.Y); + } + } + else if (o is GraphicsPath.ClosedCurveMode closedcurve) + { + this.context.CurveTo(closedcurve.points[0].X, closedcurve.points[0].Y, closedcurve.points[1].X, closedcurve.points[1].Y, closedcurve.points[2].X, closedcurve.points[2].Y); + this.context.FillRule = closedcurve.fillmode == FillMode.Winding ? Cairo.FillRule.Winding : Cairo.FillRule.EvenOdd; + //this.context.Fill(); + this.context.ClosePath(); + this.context.NewSubPath(); + } + else if (o is GraphicsPath.CurveMode curve) + { + this.context.CurveTo(curve.points[0].X + curve.offset, curve.points[0].Y + curve.offset, curve.points[1].X + curve.offset, curve.points[1].Y + curve.offset, curve.points[2].X + curve.offset, curve.points[2].Y + curve.offset); + } + else if (o is GraphicsPath.EllipseMode ellipse) + { + this.context.NewSubPath(); + float r = (ellipse.rect.Width + ellipse.rect.Height) / 4; + double rs = Math.Min(0.1, 2 / r); + for (double t = 0; t < 2 * Math.PI; t += rs) + { + double x2_1 = ellipse.rect.Width * Math.Cos(t) / 2; + double y2_1 = ellipse.rect.Height * Math.Sin(t) / 2; + this.context.LineTo(x2_1 + ellipse.rect.X + ellipse.rect.Width / 2, y2_1 + ellipse.rect.Y + ellipse.rect.Height / 2); + } + this.context.ClosePath(); + this.context.NewSubPath(); + } + else if (o is GraphicsPath.LineMode line) + { + this.context.LineTo(line.pt1.X, line.pt1.Y); + this.context.LineTo(line.pt2.X, line.pt2.Y); + } + else if (o is GraphicsPath.LinesMode lines) + { + this.context.MoveTo(lines.points[0].X, lines.points[0].Y); + foreach (PointF p in lines.points) + { + this.context.LineTo(p.X, p.Y); + } + } + else if (o is GraphicsPath.PieMode pie) + { + this.context.NewSubPath(); + double rw = pie.rect.Width / 2; + double rh = pie.rect.Height / 2; + double ra = Math.Min(rw, rh); + this.context.Arc(pie.rect.X + rw, pie.rect.Y + rh, ra, Math.PI * pie.startAngle / 180, Math.PI * (pie.startAngle + pie.sweepAngle) / 180); + this.context.LineTo(pie.rect.X + rw, pie.rect.Y + rh); + this.context.ClosePath(); + this.context.NewSubPath(); + } + else if (o is GraphicsPath.PolygonMode polygon) + { + this.context.NewSubPath(); + foreach (PointF p in polygon.points) + { + this.context.LineTo(p.X, p.Y); + } + this.context.ClosePath(); + this.context.NewSubPath(); + } + else if (o is GraphicsPath.RectangleMode rectangle) + { + this.context.Rectangle(rectangle.rect.X, rectangle.rect.Y, rectangle.rect.Width, rectangle.rect.Height); + } + else if (o is GraphicsPath.RectanglesMode rectangles) + { + foreach (RectangleF rect in rectangles.rects) + { + this.context.Rectangle(rect.X, rect.Y, rect.Width, rect.Height); + } + + } + else if (o is GraphicsPath.StringMode str) + { + string text = str.text; + if (str.layoutRect.Width > 0) + { + while (text.Length > 0 && this.context.TextExtents(text).Width > str.layoutRect.Width) + text = text.Substring(0, text.Length - 1); + } + float textSize = str.emSize < 1 ? 14f : str.emSize; + FontFamily font = str.family; + Pango.Context pangocontext = this.widget.PangoContext; + string family = pangocontext.FontDescription.Family; + if (string.IsNullOrWhiteSpace(font.Name) == false) + { + var pangoFamily = Array.Find(pangocontext.Families, f => f.Name == font.Name); + if (pangoFamily != null) + family = pangoFamily.Name; + } + this.context.MoveTo(str.layoutRect.X, str.layoutRect.Y + textSize); + this.context.SelectFontFace(family, str.style == 2 ? Cairo.FontSlant.Italic : Cairo.FontSlant.Normal, str.style == 1 ? Cairo.FontWeight.Bold : Cairo.FontWeight.Normal); + this.context.SetFontSize(textSize); + this.context.ShowText(text); + } + else if (o is GraphicsPath.PathMode addpath) + { + DrawPath(pen, addpath.path); + } + if (path.IsCloseAllFigures == true || (o is GraphicsPath.FigureMode close && close.close == true)) + { + this.context.ClosePath(); + } + } + if (isfill == true) + this.context.Fill(); + else + this.context.Stroke(); + + if (path.matrix != null) + { + this.context.Matrix = ConvertToMatrix(path.matrix); + } + + this.context.Restore(); + } + private Cairo.Matrix ConvertToMatrix(Drawing2D.Matrix matrix) + { + Cairo.Matrix CairoMatrix = new Cairo.Matrix(matrix.m11, matrix.m12, matrix.m21, matrix.m22, matrix.dx, matrix.dy); + CairoMatrix.Init(matrix.m11, matrix.m12, matrix.m21, matrix.m22, matrix.dx, matrix.dy); + + CairoMatrix.Translate(matrix.OffsetX, matrix.OffsetY); + CairoMatrix.Scale(matrix.scaleX, matrix.scaleY); + CairoMatrix.Rotate(matrix.angle); + CairoMatrix.Multiply(ConvertToMatrix(matrix.multiply)); + if (matrix.invert) + CairoMatrix.Invert(); + + return CairoMatrix; + } + private void DrawPieCore(bool isFill, Pen pen, float x, float y, float width, float height, float startAngle, float sweepAngle) + { + this.context.Save(); + this.SetTranslateWithDifference(0, 0); + this.SetSourceColor(pen); + this.context.LineWidth = pen.Width; + this.context.NewPath(); + this.context.MoveTo(x, y); + this.context.Arc(x, y, Math.Min(width / 2, height / 2), Math.PI * startAngle / 180, Math.PI * (startAngle + sweepAngle) / 180); + this.context.LineTo(x, y); + this.context.ClosePath(); + if (isFill) + this.context.Fill(); + else + this.context.Stroke(); + this.context.Restore(); + } + public void DrawPie(Pen pen, Rectangle rect, float startAngle, float sweepAngle) + { + DrawPie(pen, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle); + } - /// Draws a pie shape defined by an ellipse specified by a structure and two radial lines. - /// - /// that determines the color, width, and style of the pie shape. - /// - /// structure that represents the bounding rectangle that defines the ellipse from which the pie shape comes. - /// Angle measured in degrees clockwise from the x-axis to the first side of the pie shape. - /// Angle measured in degrees clockwise from the parameter to the second side of the pie shape. - /// - /// is . public void DrawPie(Pen pen, RectangleF rect, float startAngle, float sweepAngle) { DrawPie(pen, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle); } - /// Draws a pie shape defined by an ellipse specified by a coordinate pair, a width, a height, and two radial lines. - /// - /// that determines the color, width, and style of the pie shape. - /// The x-coordinate of the upper-left corner of the bounding rectangle that defines the ellipse from which the pie shape comes. - /// The y-coordinate of the upper-left corner of the bounding rectangle that defines the ellipse from which the pie shape comes. - /// Width of the bounding rectangle that defines the ellipse from which the pie shape comes. - /// Height of the bounding rectangle that defines the ellipse from which the pie shape comes. - /// Angle measured in degrees clockwise from the x-axis to the first side of the pie shape. - /// Angle measured in degrees clockwise from the parameter to the second side of the pie shape. - /// - /// is . public void DrawPie(Pen pen, int x, int y, int width, int height, int startAngle, int sweepAngle) { DrawPie(pen, x, y, width, height, startAngle, sweepAngle); } - /// Draws a pie shape defined by an ellipse specified by a coordinate pair, a width, a height, and two radial lines. - /// - /// that determines the color, width, and style of the pie shape. - /// The x-coordinate of the upper-left corner of the bounding rectangle that defines the ellipse from which the pie shape comes. - /// The y-coordinate of the upper-left corner of the bounding rectangle that defines the ellipse from which the pie shape comes. - /// Width of the bounding rectangle that defines the ellipse from which the pie shape comes. - /// Height of the bounding rectangle that defines the ellipse from which the pie shape comes. - /// Angle measured in degrees clockwise from the x-axis to the first side of the pie shape. - /// Angle measured in degrees clockwise from the parameter to the second side of the pie shape. - /// - /// is . public void DrawPie(Pen pen, float x, float y, float width, float height, float startAngle, float sweepAngle) { - this.context.Save(); - this.context.SetSourceRGB(pen.Color.R / 255f, pen.Color.G / 255f, pen.Color.B / 255f); - this.context.Arc(x + width / 2, y + height / 2, Math.Min(width / 2, height / 2), startAngle, sweepAngle); - this.context.Fill(); - this.context.Restore(); - } - - /// Draws a polygon defined by an array of structures. - /// - /// that determines the color, width, and style of the polygon. - /// Array of structures that represent the vertices of the polygon. - /// - /// is . - /// -or- - /// is . - public void DrawPolygon(Pen pen, PointF[] points) - { - } + DrawPieCore(false, pen, x, y, width, height, startAngle, sweepAngle); + } + + private void DrawPolygonCore(bool isFill, Pen pen, PointF[] points, FillMode fillmode) + { + if (points.Length > 0) + { + this.context.Save(); + this.SetTranslateWithDifference(0, 0); + this.SetSourceColor(pen); + this.context.LineWidth = pen.Width; + this.context.NewPath(); + foreach (PointF p in points) + { + this.context.LineTo(p.X, p.Y); + } + this.context.ClosePath(); + if (isFill) + { + this.context.FillRule = fillmode == FillMode.Winding ? Cairo.FillRule.Winding : Cairo.FillRule.EvenOdd; + this.context.Fill(); + } + else + this.context.Stroke(); + this.context.Restore(); + } + } + public void DrawPolygon(Pen pen, PointF[] points) + { + DrawPolygonCore(false, pen, points, FillMode.Winding); + } - /// Draws a polygon defined by an array of structures. - /// - /// that determines the color, width, and style of the polygon. - /// Array of structures that represent the vertices of the polygon. - /// - /// is . public void DrawPolygon(Pen pen, Point[] points) { - } - - /// Draws a rectangle specified by a structure. - /// A that determines the color, width, and style of the rectangle. - /// A structure that represents the rectangle to draw. - /// - /// is . - public void DrawRectangle(Pen pen, Rectangle rect) + DrawPolygonCore(false, pen, Array.ConvertAll(points, p => new PointF(p.X, p.Y)), FillMode.Winding); + } + + private void DrawRectangleCore(bool isFill, Pen pen, float x, float y, float width, float height) + { + this.context.Save(); + this.SetTranslateWithDifference(0, 0); + this.SetSourceColor(pen); + this.context.NewPath(); + this.context.Rectangle(x, y, width, height); + if(isFill) + this.context.Fill(); + else + this.context.Stroke(); + this.context.Restore(); + } + public void DrawRectangle(Pen pen, Rectangle rect) { - this.context.Save(); - this.context.SetSourceRGB(pen.Color.R / 255f, pen.Color.G / 255f, pen.Color.B / 255f); - this.context.Rectangle(0, 0, rect.Width, rect.Height); - this.context.Stroke(); - this.context.Restore(); - } + DrawRectangleCore(false, pen, rect.X, rect.Y, rect.Width, rect.Height); + } + public void DrawRectangle(Pen pen, RectangleF rect) + { + DrawRectangleCore(false, pen, rect.X, rect.Y, rect.Width, rect.Height); + } + public void DrawRectangle(Pen pen, int x, int y, int width, int height) + { + DrawRectangleCore(false, pen, x, y, width, height); + } - /// Draws a rectangle specified by a coordinate pair, a width, and a height. - /// - /// that determines the color, width, and style of the rectangle. - /// The x-coordinate of the upper-left corner of the rectangle to draw. - /// The y-coordinate of the upper-left corner of the rectangle to draw. - /// Width of the rectangle to draw. - /// Height of the rectangle to draw. - /// - /// is . - public void DrawRectangle(Pen pen, int x, int y, int width, int height) - { - DrawRectangle(pen, new Rectangle(x, y, width, height)); - } - - /// Draws a rectangle specified by a coordinate pair, a width, and a height. - /// A that determines the color, width, and style of the rectangle. - /// The x-coordinate of the upper-left corner of the rectangle to draw. - /// The y-coordinate of the upper-left corner of the rectangle to draw. - /// The width of the rectangle to draw. - /// The height of the rectangle to draw. - /// - /// is . public void DrawRectangle(Pen pen, float x, float y, float width, float height) { - DrawRectangle(pen, new Rectangle((int)x, (int)y, (int)width, (int)height)); - } + DrawRectangleCore(false, pen, x, y, width, height); + } - /// Draws a series of rectangles specified by structures. - /// - /// that determines the color, width, and style of the outlines of the rectangles. - /// Array of structures that represent the rectangles to draw. - /// - /// is . - /// -or- - /// is . - /// - /// is a zero-length array. public void DrawRectangles(Pen pen, RectangleF[] rects) { - foreach(RectangleF rec in rects) - DrawRectangle(pen, new Rectangle((int)rec.X, (int)rec.Y, (int)rec.Width, (int)rec.Height)); + foreach (RectangleF rect in rects) + DrawRectangle(pen, rect); - } + } - /// Draws a series of rectangles specified by structures. - /// - /// that determines the color, width, and style of the outlines of the rectangles. - /// Array of structures that represent the rectangles to draw. - /// - /// is . - /// -or- - /// is . - /// - /// is a zero-length array. public void DrawRectangles(Pen pen, Rectangle[] rects) { - foreach (Rectangle rec in rects) - DrawRectangle(pen, rec); - } - - /// Draws the specified text string at the specified location with the specified and objects. - /// String to draw. - /// - /// that defines the text format of the string. - /// - /// that determines the color and texture of the drawn text. - /// - /// structure that specifies the upper-left corner of the drawn text. - /// - /// is . - /// -or- - /// is . + foreach (Rectangle rect in rects) + DrawRectangle(pen, rect); + } + public void DrawString(string s, Font font, Brush brush, PointF point) { DrawString(s, font, brush, new RectangleF(point.X, point.Y, this.widget.AllocatedWidth, this.widget.AllocatedHeight), new StringFormat()); } - /// Draws the specified text string at the specified location with the specified and objects using the formatting attributes of the specified . - /// String to draw. - /// - /// that defines the text format of the string. - /// - /// that determines the color and texture of the drawn text. - /// - /// structure that specifies the upper-left corner of the drawn text. - /// - /// that specifies formatting attributes, such as line spacing and alignment, that are applied to the drawn text. - /// - /// is . - /// -or- - /// is . public void DrawString(string s, Font font, Brush brush, PointF point, StringFormat format) { DrawString(s, font, brush, new RectangleF(point.X, point.Y, this.widget.AllocatedWidth, this.widget.AllocatedHeight), format); } - /// Draws the specified text string in the specified rectangle with the specified and objects. - /// String to draw. - /// - /// that defines the text format of the string. - /// - /// that determines the color and texture of the drawn text. - /// - /// structure that specifies the location of the drawn text. - /// - /// is . - /// -or- - /// is . public void DrawString(string s, Font font, Brush brush, RectangleF layoutRectangle) { DrawString(s, font, brush, layoutRectangle, new StringFormat()); } - /// Draws the specified text string in the specified rectangle with the specified and objects using the formatting attributes of the specified . - /// String to draw. - /// - /// that defines the text format of the string. - /// - /// that determines the color and texture of the drawn text. - /// - /// structure that specifies the location of the drawn text. - /// - /// that specifies formatting attributes, such as line spacing and alignment, that are applied to the drawn text. - /// - /// is . - /// -or- - /// is . public void DrawString(string s, Font font, Brush brush, RectangleF layoutRectangle, StringFormat format) { if (string.IsNullOrEmpty(s) == false) { this.context.Save(); - this.context.ResetClip(); - float textSize = 15f; + + float textSize = 14f; if (font != null) { textSize = font.Size; @@ -1627,1455 +1287,625 @@ namespace System.Drawing if (font.Unit == GraphicsUnit.Inch) textSize = font.Size * 96; } - this.context.Translate(layoutRectangle.X, layoutRectangle.Y); - if (brush is SolidBrush sbrush) - { - if (sbrush.Color != null && sbrush.Color.Name != "0") - this.context.SetSourceRGBA(sbrush.Color.R / 255f, sbrush.Color.G / 255f, sbrush.Color.B / 255f, 1); - } - Pango.Context pangocontext = this.widget.PangoContext; + this.SetTranslateWithDifference(layoutRectangle.X, layoutRectangle.Y + textSize); + this.SetSourceColor(new Pen(brush,1)); + Pango.Context pangocontext = this.widget.PangoContext; string family = pangocontext.FontDescription.Family; if (string.IsNullOrWhiteSpace(font.Name) == false) - family = font.Name; + { + var pangoFamily = Array.Find(pangocontext.Families, f => f.Name == font.Name); + if (pangoFamily != null) + family = pangoFamily.Name; + } this.context.SelectFontFace(family, Cairo.FontSlant.Normal, Cairo.FontWeight.Normal); this.context.SetFontSize(textSize); this.context.ShowText(s); - this.context.Stroke(); + this.context.Stroke(); this.context.Restore(); } } - /// Draws the specified text string at the specified location with the specified and objects. - /// String to draw. - /// - /// that defines the text format of the string. - /// - /// that determines the color and texture of the drawn text. - /// The x-coordinate of the upper-left corner of the drawn text. - /// The y-coordinate of the upper-left corner of the drawn text. - /// - /// is . - /// -or- - /// is . public void DrawString(string s, Font font, Brush brush, float x, float y) { DrawString(s, font, brush, new RectangleF(x, y, this.widget.AllocatedWidth, this.widget.AllocatedHeight), new StringFormat()); } - /// Draws the specified text string at the specified location with the specified and objects using the formatting attributes of the specified . - /// String to draw. - /// - /// that defines the text format of the string. - /// - /// that determines the color and texture of the drawn text. - /// The x-coordinate of the upper-left corner of the drawn text. - /// The y-coordinate of the upper-left corner of the drawn text. - /// - /// that specifies formatting attributes, such as line spacing and alignment, that are applied to the drawn text. - /// - /// is . - /// -or- - /// is . public void DrawString(string s, Font font, Brush brush, float x, float y, StringFormat format) { DrawString(s, font, brush, new RectangleF(x, y, this.widget.AllocatedWidth, this.widget.AllocatedHeight), format); } - /// Closes the current graphics container and restores the state of this to the state saved by a call to the method. - /// - /// that represents the container this method restores. public void EndContainer(GraphicsContainer container) { } - /// Sends the records in the specified , one at a time, to a callback method for display at a specified point. - /// - /// to enumerate. - /// - /// structure that specifies the location of the upper-left corner of the drawn metafile. - /// - /// delegate that specifies the method to which the metafile records are sent. public void EnumerateMetafile(Metafile metafile, Point destPoint, EnumerateMetafileProc callback) { } - /// Sends the records in the specified , one at a time, to a callback method for display at a specified point. - /// - /// to enumerate. - /// - /// structure that specifies the location of the upper-left corner of the drawn metafile. - /// - /// delegate that specifies the method to which the metafile records are sent. - /// Internal pointer that is required, but ignored. You can pass for this parameter. public void EnumerateMetafile(Metafile metafile, Point destPoint, EnumerateMetafileProc callback, IntPtr callbackData) { } - /// Sends the records in the specified , one at a time, to a callback method for display at a specified point using specified image attributes. - /// - /// to enumerate. - /// - /// structure that specifies the location of the upper-left corner of the drawn metafile. - /// - /// delegate that specifies the method to which the metafile records are sent. - /// Internal pointer that is required, but ignored. You can pass for this parameter. - /// - /// that specifies image attribute information for the drawn image. public void EnumerateMetafile(Metafile metafile, Point destPoint, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr) { } - /// Sends the records in a selected rectangle from a , one at a time, to a callback method for display at a specified point. - /// - /// to enumerate. - /// - /// structure that specifies the location of the upper-left corner of the drawn metafile. - /// - /// structure that specifies the portion of the metafile, relative to its upper-left corner, to draw. - /// Member of the enumeration that specifies the unit of measure used to determine the portion of the metafile that the rectangle specified by the parameter contains. - /// - /// delegate that specifies the method to which the metafile records are sent. public void EnumerateMetafile(Metafile metafile, Point destPoint, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback) { } - /// Sends the records in a selected rectangle from a , one at a time, to a callback method for display at a specified point. - /// - /// to enumerate. - /// - /// structure that specifies the location of the upper-left corner of the drawn metafile. - /// - /// structure that specifies the portion of the metafile, relative to its upper-left corner, to draw. - /// Member of the enumeration that specifies the unit of measure used to determine the portion of the metafile that the rectangle specified by the parameter contains. - /// - /// delegate that specifies the method to which the metafile records are sent. - /// Internal pointer that is required, but ignored. You can pass for this parameter. public void EnumerateMetafile(Metafile metafile, Point destPoint, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData) { } - /// Sends the records in a selected rectangle from a , one at a time, to a callback method for display at a specified point using specified image attributes. - /// - /// to enumerate. - /// - /// structure that specifies the location of the upper-left corner of the drawn metafile. - /// - /// structure that specifies the portion of the metafile, relative to its upper-left corner, to draw. - /// Member of the enumeration that specifies the unit of measure used to determine the portion of the metafile that the rectangle specified by the parameter contains. - /// - /// delegate that specifies the method to which the metafile records are sent. - /// Internal pointer that is required, but ignored. You can pass for this parameter. - /// - /// that specifies image attribute information for the drawn image. public void EnumerateMetafile(Metafile metafile, Point destPoint, Rectangle srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr) { } - /// Sends the records in the specified , one at a time, to a callback method for display at a specified point. - /// - /// to enumerate. - /// - /// structure that specifies the location of the upper-left corner of the drawn metafile. - /// - /// delegate that specifies the method to which the metafile records are sent. public void EnumerateMetafile(Metafile metafile, PointF destPoint, EnumerateMetafileProc callback) { } - /// Sends the records in the specified , one at a time, to a callback method for display at a specified point. - /// - /// to enumerate. - /// - /// structure that specifies the location of the upper-left corner of the drawn metafile. - /// - /// delegate that specifies the method to which the metafile records are sent. - /// Internal pointer that is required, but ignored. You can pass for this parameter. public void EnumerateMetafile(Metafile metafile, PointF destPoint, EnumerateMetafileProc callback, IntPtr callbackData) { } - /// Sends the records in the specified , one at a time, to a callback method for display at a specified point using specified image attributes. - /// - /// to enumerate. - /// - /// structure that specifies the location of the upper-left corner of the drawn metafile. - /// - /// delegate that specifies the method to which the metafile records are sent. - /// Internal pointer that is required, but ignored. You can pass for this parameter. - /// - /// that specifies image attribute information for the drawn image. public void EnumerateMetafile(Metafile metafile, PointF destPoint, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr) { } - /// Sends the records in a selected rectangle from a , one at a time, to a callback method for display at a specified point. - /// - /// to enumerate. - /// - /// structure that specifies the location of the upper-left corner of the drawn metafile. - /// - /// structure that specifies the portion of the metafile, relative to its upper-left corner, to draw. - /// Member of the enumeration that specifies the unit of measure used to determine the portion of the metafile that the rectangle specified by the parameter contains. - /// - /// delegate that specifies the method to which the metafile records are sent. public void EnumerateMetafile(Metafile metafile, PointF destPoint, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback) { } - /// Sends the records in a selected rectangle from a , one at a time, to a callback method for display at a specified point. - /// - /// to enumerate. - /// - /// structure that specifies the location of the upper-left corner of the drawn metafile. - /// - /// structure that specifies the portion of the metafile, relative to its upper-left corner, to draw. - /// Member of the enumeration that specifies the unit of measure used to determine the portion of the metafile that the rectangle specified by the parameter contains. - /// - /// delegate that specifies the method to which the metafile records are sent. - /// Internal pointer that is required, but ignored. You can pass for this parameter. public void EnumerateMetafile(Metafile metafile, PointF destPoint, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData) { } - /// Sends the records in a selected rectangle from a , one at a time, to a callback method for display at a specified point using specified image attributes. - /// - /// to enumerate. - /// - /// structure that specifies the location of the upper-left corner of the drawn metafile. - /// - /// structure that specifies the portion of the metafile, relative to its upper-left corner, to draw. - /// Member of the enumeration that specifies the unit of measure used to determine the portion of the metafile that the rectangle specified by the parameter contains. - /// - /// delegate that specifies the method to which the metafile records are sent. - /// Internal pointer that is required, but ignored. You can pass for this parameter. - /// - /// that specifies image attribute information for the drawn image. public void EnumerateMetafile(Metafile metafile, PointF destPoint, RectangleF srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr) { } - /// Sends the records in the specified , one at a time, to a callback method for display in a specified parallelogram. - /// - /// to enumerate. - /// Array of three structures that define a parallelogram that determines the size and location of the drawn metafile. - /// - /// delegate that specifies the method to which the metafile records are sent. public void EnumerateMetafile(Metafile metafile, PointF[] destPoints, EnumerateMetafileProc callback) { } - /// Sends the records in the specified , one at a time, to a callback method for display in a specified parallelogram. - /// - /// to enumerate. - /// Array of three structures that define a parallelogram that determines the size and location of the drawn metafile. - /// - /// delegate that specifies the method to which the metafile records are sent. - /// Internal pointer that is required, but ignored. You can pass for this parameter. public void EnumerateMetafile(Metafile metafile, PointF[] destPoints, EnumerateMetafileProc callback, IntPtr callbackData) { } - /// Sends the records in the specified , one at a time, to a callback method for display in a specified parallelogram using specified image attributes. - /// - /// to enumerate. - /// Array of three structures that define a parallelogram that determines the size and location of the drawn metafile. - /// - /// delegate that specifies the method to which the metafile records are sent. - /// Internal pointer that is required, but ignored. You can pass for this parameter. - /// - /// that specifies image attribute information for the drawn image. public void EnumerateMetafile(Metafile metafile, PointF[] destPoints, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr) { } - /// Sends the records in a selected rectangle from a , one at a time, to a callback method for display in a specified parallelogram. - /// - /// to enumerate. - /// Array of three structures that define a parallelogram that determines the size and location of the drawn metafile. - /// - /// structures that specifies the portion of the metafile, relative to its upper-left corner, to draw. - /// Member of the enumeration that specifies the unit of measure used to determine the portion of the metafile that the rectangle specified by the parameter contains. - /// - /// delegate that specifies the method to which the metafile records are sent. public void EnumerateMetafile(Metafile metafile, PointF[] destPoints, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback) { } - /// Sends the records in a selected rectangle from a , one at a time, to a callback method for display in a specified parallelogram. - /// - /// to enumerate. - /// Array of three structures that define a parallelogram that determines the size and location of the drawn metafile. - /// - /// structure that specifies the portion of the metafile, relative to its upper-left corner, to draw. - /// Member of the enumeration that specifies the unit of measure used to determine the portion of the metafile that the rectangle specified by the parameter contains. - /// - /// delegate that specifies the method to which the metafile records are sent. - /// Internal pointer that is required, but ignored. You can pass for this parameter. public void EnumerateMetafile(Metafile metafile, PointF[] destPoints, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData) { } - /// Sends the records in a selected rectangle from a , one at a time, to a callback method for display in a specified parallelogram using specified image attributes. - /// - /// to enumerate. - /// Array of three structures that define a parallelogram that determines the size and location of the drawn metafile. - /// - /// structure that specifies the portion of the metafile, relative to its upper-left corner, to draw. - /// Member of the enumeration that specifies the unit of measure used to determine the portion of the metafile that the rectangle specified by the parameter contains. - /// - /// delegate that specifies the method to which the metafile records are sent. - /// Internal pointer that is required, but ignored. You can pass for this parameter. - /// - /// that specifies image attribute information for the drawn image. public void EnumerateMetafile(Metafile metafile, PointF[] destPoints, RectangleF srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr) { } - /// Sends the records in the specified , one at a time, to a callback method for display in a specified parallelogram. - /// - /// to enumerate. - /// Array of three structures that define a parallelogram that determines the size and location of the drawn metafile. - /// - /// delegate that specifies the method to which the metafile records are sent. public void EnumerateMetafile(Metafile metafile, Point[] destPoints, EnumerateMetafileProc callback) { } - /// Sends the records in the specified , one at a time, to a callback method for display in a specified parallelogram. - /// - /// to enumerate. - /// Array of three structures that define a parallelogram that determines the size and location of the drawn metafile. - /// - /// delegate that specifies the method to which the metafile records are sent. - /// Internal pointer that is required, but ignored. You can pass for this parameter. public void EnumerateMetafile(Metafile metafile, Point[] destPoints, EnumerateMetafileProc callback, IntPtr callbackData) { } - /// Sends the records in the specified , one at a time, to a callback method for display in a specified parallelogram using specified image attributes. - /// - /// to enumerate. - /// Array of three structures that define a parallelogram that determines the size and location of the drawn metafile. - /// - /// delegate that specifies the method to which the metafile records are sent. - /// Internal pointer that is required, but ignored. You can pass for this parameter. - /// - /// that specifies image attribute information for the drawn image. public void EnumerateMetafile(Metafile metafile, Point[] destPoints, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr) { } - /// Sends the records in a selected rectangle from a , one at a time, to a callback method for display in a specified parallelogram. - /// - /// to enumerate. - /// Array of three structures that define a parallelogram that determines the size and location of the drawn metafile. - /// - /// structure that specifies the portion of the metafile, relative to its upper-left corner, to draw. - /// Member of the enumeration that specifies the unit of measure used to determine the portion of the metafile that the rectangle specified by the parameter contains. - /// - /// delegate that specifies the method to which the metafile records are sent. public void EnumerateMetafile(Metafile metafile, Point[] destPoints, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback) { } - /// Sends the records in a selected rectangle from a , one at a time, to a callback method for display in a specified parallelogram. - /// - /// to enumerate. - /// Array of three structures that define a parallelogram that determines the size and location of the drawn metafile. - /// - /// structure that specifies the portion of the metafile, relative to its upper-left corner, to draw. - /// Member of the enumeration that specifies the unit of measure used to determine the portion of the metafile that the rectangle specified by the parameter contains. - /// - /// delegate that specifies the method to which the metafile records are sent. - /// Internal pointer that is required, but ignored. You can pass for this parameter. public void EnumerateMetafile(Metafile metafile, Point[] destPoints, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData) { } - /// Sends the records in a selected rectangle from a , one at a time, to a callback method for display in a specified parallelogram using specified image attributes. - /// - /// to enumerate. - /// Array of three structures that define a parallelogram that determines the size and location of the drawn metafile. - /// - /// structure that specifies the portion of the metafile, relative to its upper-left corner, to draw. - /// Member of the enumeration that specifies the unit of measure used to determine the portion of the metafile that the rectangle specified by the parameter contains. - /// - /// delegate that specifies the method to which the metafile records are sent. - /// Internal pointer that is required, but ignored. You can pass for this parameter. - /// - /// that specifies image attribute information for the drawn image. public void EnumerateMetafile(Metafile metafile, Point[] destPoints, Rectangle srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr) { } - /// Sends the records of the specified , one at a time, to a callback method for display in a specified rectangle. - /// - /// to enumerate. - /// - /// structure that specifies the location and size of the drawn metafile. - /// - /// delegate that specifies the method to which the metafile records are sent. public void EnumerateMetafile(Metafile metafile, Rectangle destRect, EnumerateMetafileProc callback) { } - /// Sends the records of the specified , one at a time, to a callback method for display in a specified rectangle. - /// - /// to enumerate. - /// - /// structure that specifies the location and size of the drawn metafile. - /// - /// delegate that specifies the method to which the metafile records are sent. - /// Internal pointer that is required, but ignored. You can pass for this parameter. public void EnumerateMetafile(Metafile metafile, Rectangle destRect, EnumerateMetafileProc callback, IntPtr callbackData) { } - /// Sends the records of the specified , one at a time, to a callback method for display in a specified rectangle using specified image attributes. - /// - /// to enumerate. - /// - /// structure that specifies the location and size of the drawn metafile. - /// - /// delegate that specifies the method to which the metafile records are sent. - /// Internal pointer that is required, but ignored. You can pass for this parameter. - /// - /// that specifies image attribute information for the drawn image. public void EnumerateMetafile(Metafile metafile, Rectangle destRect, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr) { } - /// Sends the records of a selected rectangle from a , one at a time, to a callback method for display in a specified rectangle. - /// - /// to enumerate. - /// - /// structure that specifies the location and size of the drawn metafile. - /// - /// structure that specifies the portion of the metafile, relative to its upper-left corner, to draw. - /// Member of the enumeration that specifies the unit of measure used to determine the portion of the metafile that the rectangle specified by the parameter contains. - /// - /// delegate that specifies the method to which the metafile records are sent. public void EnumerateMetafile(Metafile metafile, Rectangle destRect, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback) { } - /// Sends the records of a selected rectangle from a , one at a time, to a callback method for display in a specified rectangle. - /// - /// to enumerate. - /// - /// structure that specifies the location and size of the drawn metafile. - /// - /// structure that specifies the portion of the metafile, relative to its upper-left corner, to draw. - /// Member of the enumeration that specifies the unit of measure used to determine the portion of the metafile that the rectangle specified by the parameter contains. - /// - /// delegate that specifies the method to which the metafile records are sent. - /// Internal pointer that is required, but ignored. You can pass for this parameter. public void EnumerateMetafile(Metafile metafile, Rectangle destRect, Rectangle srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData) { } - /// Sends the records of a selected rectangle from a , one at a time, to a callback method for display in a specified rectangle using specified image attributes. - /// - /// to enumerate. - /// - /// structure that specifies the location and size of the drawn metafile. - /// - /// structure that specifies the portion of the metafile, relative to its upper-left corner, to draw. - /// Member of the enumeration that specifies the unit of measure used to determine the portion of the metafile that the rectangle specified by the parameter contains. - /// - /// delegate that specifies the method to which the metafile records are sent. - /// Internal pointer that is required, but ignored. You can pass for this parameter. - /// - /// that specifies image attribute information for the drawn image. public void EnumerateMetafile(Metafile metafile, Rectangle destRect, Rectangle srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr) { } - /// Sends the records of the specified , one at a time, to a callback method for display in a specified rectangle. - /// - /// to enumerate. - /// - /// structure that specifies the location and size of the drawn metafile. - /// - /// delegate that specifies the method to which the metafile records are sent. public void EnumerateMetafile(Metafile metafile, RectangleF destRect, EnumerateMetafileProc callback) { } - /// Sends the records of the specified , one at a time, to a callback method for display in a specified rectangle. - /// - /// to enumerate. - /// - /// structure that specifies the location and size of the drawn metafile. - /// - /// delegate that specifies the method to which the metafile records are sent. - /// Internal pointer that is required, but ignored. You can pass for this parameter. public void EnumerateMetafile(Metafile metafile, RectangleF destRect, EnumerateMetafileProc callback, IntPtr callbackData) { } - /// Sends the records of the specified , one at a time, to a callback method for display in a specified rectangle using specified image attributes. - /// - /// to enumerate. - /// - /// structure that specifies the location and size of the drawn metafile. - /// - /// delegate that specifies the method to which the metafile records are sent. - /// Internal pointer that is required, but ignored. You can pass for this parameter. - /// - /// that specifies image attribute information for the drawn image. public void EnumerateMetafile(Metafile metafile, RectangleF destRect, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr) { } - /// Sends the records of a selected rectangle from a , one at a time, to a callback method for display in a specified rectangle. - /// - /// to enumerate. - /// - /// structure that specifies the location and size of the drawn metafile. - /// - /// structure that specifies the portion of the metafile, relative to its upper-left corner, to draw. - /// Member of the enumeration that specifies the unit of measure used to determine the portion of the metafile that the rectangle specified by the parameter contains. - /// - /// delegate that specifies the method to which the metafile records are sent. public void EnumerateMetafile(Metafile metafile, RectangleF destRect, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback) { } - /// Sends the records of a selected rectangle from a , one at a time, to a callback method for display in a specified rectangle. - /// - /// to enumerate. - /// - /// structure that specifies the location and size of the drawn metafile. - /// - /// structure that specifies the portion of the metafile, relative to its upper-left corner, to draw. - /// Member of the enumeration that specifies the unit of measure used to determine the portion of the metafile that the rectangle specified by the parameter contains. - /// - /// delegate that specifies the method to which the metafile records are sent. - /// Internal pointer that is required, but ignored. You can pass for this parameter. public void EnumerateMetafile(Metafile metafile, RectangleF destRect, RectangleF srcRect, GraphicsUnit srcUnit, EnumerateMetafileProc callback, IntPtr callbackData) { } - /// Sends the records of a selected rectangle from a , one at a time, to a callback method for display in a specified rectangle using specified image attributes. - /// - /// to enumerate. - /// - /// structure that specifies the location and size of the drawn metafile. - /// - /// structure that specifies the portion of the metafile, relative to its upper-left corner, to draw. - /// Member of the enumeration that specifies the unit of measure used to determine the portion of the metafile that the rectangle specified by the parameter contains. - /// - /// delegate that specifies the method to which the metafile records are sent. - /// Internal pointer that is required, but ignored. You can pass for this parameter. - /// - /// that specifies image attribute information for the drawn image. public void EnumerateMetafile(Metafile metafile, RectangleF destRect, RectangleF srcRect, GraphicsUnit unit, EnumerateMetafileProc callback, IntPtr callbackData, ImageAttributes imageAttr) { } - /// Updates the clip region of this to exclude the area specified by a structure. - /// - /// structure that specifies the rectangle to exclude from the clip region. public void ExcludeClip(Rectangle rect) { } - /// Updates the clip region of this to exclude the area specified by a . - /// - /// that specifies the region to exclude from the clip region. public void ExcludeClip(Region region) { } - /// Fills the interior of a closed cardinal spline curve defined by an array of structures. - /// - /// that determines the characteristics of the fill. - /// Array of structures that define the spline. - /// - /// is . - /// -or- - /// is . public void FillClosedCurve(Brush brush, PointF[] points) { - } + DrawCurveCore(true, true, new Pen(brush,0), points, 0, 0, 0, FillMode.Winding); + } - /// Fills the interior of a closed cardinal spline curve defined by an array of structures using the specified fill mode. - /// - /// that determines the characteristics of the fill. - /// Array of structures that define the spline. - /// Member of the enumeration that determines how the curve is filled. - /// - /// is . - /// -or- - /// is . public void FillClosedCurve(Brush brush, PointF[] points, FillMode fillmode) { - } + DrawCurveCore(true, true, new Pen(brush, 0), points, 0, 0, 0, fillmode); + } - /// Fills the interior of a closed cardinal spline curve defined by an array of structures using the specified fill mode and tension. - /// A that determines the characteristics of the fill. - /// Array of structures that define the spline. - /// Member of the enumeration that determines how the curve is filled. - /// Value greater than or equal to 0.0F that specifies the tension of the curve. - /// - /// is . - /// -or- - /// is . public void FillClosedCurve(Brush brush, PointF[] points, FillMode fillmode, float tension) { - } + DrawCurveCore(true, true, new Pen(brush, 0), points, 0, 0, tension, fillmode); + } - /// Fills the interior of a closed cardinal spline curve defined by an array of structures. - /// - /// that determines the characteristics of the fill. - /// Array of structures that define the spline. - /// - /// is . - /// -or- - /// is . public void FillClosedCurve(Brush brush, Point[] points) - { - } + { + DrawCurveCore(true, true, new Pen(brush, 0), Array.ConvertAll(points, p => new PointF(p.X, p.Y)), 0, 0, 0, FillMode.Winding); + } - /// Fills the interior of a closed cardinal spline curve defined by an array of structures using the specified fill mode. - /// - /// that determines the characteristics of the fill. - /// Array of structures that define the spline. - /// Member of the enumeration that determines how the curve is filled. - /// - /// is . - /// -or- - /// is . public void FillClosedCurve(Brush brush, Point[] points, FillMode fillmode) { - } + DrawCurveCore(true, true, new Pen(brush, 0), Array.ConvertAll(points, p => new PointF(p.X, p.Y)), 0, 0, 0, fillmode); + } - /// Fills the interior of a closed cardinal spline curve defined by an array of structures using the specified fill mode and tension. - /// - /// that determines the characteristics of the fill. - /// Array of structures that define the spline. - /// Member of the enumeration that determines how the curve is filled. - /// Value greater than or equal to 0.0F that specifies the tension of the curve. - /// - /// is . - /// -or- - /// is . public void FillClosedCurve(Brush brush, Point[] points, FillMode fillmode, float tension) { - } + DrawCurveCore(true, true, new Pen(brush, 0), Array.ConvertAll(points, p => new PointF(p.X, p.Y)), 0, 0, tension, fillmode); + } - /// Fills the interior of an ellipse defined by a bounding rectangle specified by a structure. - /// - /// that determines the characteristics of the fill. - /// - /// structure that represents the bounding rectangle that defines the ellipse. - /// - /// is . public void FillEllipse(Brush brush, Rectangle rect) - { - } + { + DrawEllipseCore(new Pen(brush, 0), rect.X, rect.Y, rect.Width, rect.Height, true, FillMode.Winding); + } - /// Fills the interior of an ellipse defined by a bounding rectangle specified by a structure. - /// - /// that determines the characteristics of the fill. - /// - /// structure that represents the bounding rectangle that defines the ellipse. - /// - /// is . public void FillEllipse(Brush brush, RectangleF rect) - { - } + { + DrawEllipseCore(new Pen(brush, 0), rect.X, rect.Y, rect.Width, rect.Height, true, FillMode.Winding); + } - /// Fills the interior of an ellipse defined by a bounding rectangle specified by a pair of coordinates, a width, and a height. - /// - /// that determines the characteristics of the fill. - /// The x-coordinate of the upper-left corner of the bounding rectangle that defines the ellipse. - /// The y-coordinate of the upper-left corner of the bounding rectangle that defines the ellipse. - /// Width of the bounding rectangle that defines the ellipse. - /// Height of the bounding rectangle that defines the ellipse. - /// - /// is . public void FillEllipse(Brush brush, int x, int y, int width, int height) { - } + DrawEllipseCore(new Pen(brush, 0), x, y, width, height, true, FillMode.Winding); + } - /// Fills the interior of an ellipse defined by a bounding rectangle specified by a pair of coordinates, a width, and a height. - /// - /// that determines the characteristics of the fill. - /// The x-coordinate of the upper-left corner of the bounding rectangle that defines the ellipse. - /// The y-coordinate of the upper-left corner of the bounding rectangle that defines the ellipse. - /// Width of the bounding rectangle that defines the ellipse. - /// Height of the bounding rectangle that defines the ellipse. - /// - /// is . public void FillEllipse(Brush brush, float x, float y, float width, float height) { - } + DrawEllipseCore(new Pen(brush, 0), x, y, width, height, true, FillMode.Winding); + } - /// Fills the interior of a . - /// - /// that determines the characteristics of the fill. - /// - /// that represents the path to fill. - /// - /// is . - /// -or- - /// is . public void FillPath(Brush brush, GraphicsPath path) { - if (brush is SolidBrush sbrush) - { - //if (path.PathPoints != null && path.PathPoints.Length > 0) - //{ - // this.context.Save(); - // this.context.SetSourceRGB(sbrush.Color.R / 255f, sbrush.Color.G / 255f, sbrush.Color.B / 255f); - // this.context.Translate(0, 0); - // this.context.LineWidth = 2; - // this.context.LineJoin = Cairo.LineJoin.Bevel; - // this.context.LineCap = Cairo.LineCap.Butt; - - // foreach (PointF p in path.PathPoints) - // { - // this.context.LineTo(Convert.ToDouble(p.X), Convert.ToDouble(p.Y)); - // } - // this.context.Stroke(); - // this.context.Restore(); - //} - } - } + DrawPathCore(new Pen(brush, 1), path, true); + } - /// Fills the interior of a pie section defined by an ellipse specified by a structure and two radial lines. - /// - /// that determines the characteristics of the fill. - /// - /// structure that represents the bounding rectangle that defines the ellipse from which the pie section comes. - /// Angle in degrees measured clockwise from the x-axis to the first side of the pie section. - /// Angle in degrees measured clockwise from the parameter to the second side of the pie section. - /// - /// is . public void FillPie(Brush brush, Rectangle rect, float startAngle, float sweepAngle) { - if (brush is SolidBrush sbrush) - { - this.context.Save(); - this.context.SetSourceRGB(sbrush.Color.R / 255f, sbrush.Color.G / 255f, sbrush.Color.B / 255f); - this.context.Arc(rect.X + rect.Width / 2, rect.Y + rect.Height / 2, Math.Min(rect.Width / 2, rect.Height / 2), startAngle, sweepAngle); - this.context.Fill(); - this.context.Restore(); - } - } + FillPie(brush, rect.X, rect.Y, rect.Width, rect.Height, startAngle, sweepAngle); + } - /// Fills the interior of a pie section defined by an ellipse specified by a pair of coordinates, a width, a height, and two radial lines. - /// - /// that determines the characteristics of the fill. - /// The x-coordinate of the upper-left corner of the bounding rectangle that defines the ellipse from which the pie section comes. - /// The y-coordinate of the upper-left corner of the bounding rectangle that defines the ellipse from which the pie section comes. - /// Width of the bounding rectangle that defines the ellipse from which the pie section comes. - /// Height of the bounding rectangle that defines the ellipse from which the pie section comes. - /// Angle in degrees measured clockwise from the x-axis to the first side of the pie section. - /// Angle in degrees measured clockwise from the parameter to the second side of the pie section. - /// - /// is . public void FillPie(Brush brush, int x, int y, int width, int height, int startAngle, int sweepAngle) { - FillPie(brush, new Rectangle(x, y, width, height), startAngle, sweepAngle); - } + FillPie(brush, x, y, width, height, startAngle, sweepAngle); + } - /// Fills the interior of a pie section defined by an ellipse specified by a pair of coordinates, a width, a height, and two radial lines. - /// - /// that determines the characteristics of the fill. - /// The x-coordinate of the upper-left corner of the bounding rectangle that defines the ellipse from which the pie section comes. - /// The y-coordinate of the upper-left corner of the bounding rectangle that defines the ellipse from which the pie section comes. - /// Width of the bounding rectangle that defines the ellipse from which the pie section comes. - /// Height of the bounding rectangle that defines the ellipse from which the pie section comes. - /// Angle in degrees measured clockwise from the x-axis to the first side of the pie section. - /// Angle in degrees measured clockwise from the parameter to the second side of the pie section. - /// - /// is . public void FillPie(Brush brush, float x, float y, float width, float height, float startAngle, float sweepAngle) { - FillPie(brush, new Rectangle((int)x, (int)y, (int)width, (int)height), startAngle, sweepAngle); - } + DrawPieCore(false, new Pen(brush, 0), x, y, width, height, startAngle, sweepAngle); + } - /// Fills the interior of a polygon defined by an array of points specified by structures. - /// - /// that determines the characteristics of the fill. - /// Array of structures that represent the vertices of the polygon to fill. - /// - /// is . - /// -or- - /// is . public void FillPolygon(Brush brush, PointF[] points) { - } + FillPolygon(brush, points, FillMode.Winding); + } - /// Fills the interior of a polygon defined by an array of points specified by structures using the specified fill mode. - /// - /// that determines the characteristics of the fill. - /// Array of structures that represent the vertices of the polygon to fill. - /// Member of the enumeration that determines the style of the fill. - /// - /// is . - /// -or- - /// is . public void FillPolygon(Brush brush, PointF[] points, FillMode fillMode) { - } + DrawPolygonCore(true, new Pen(brush, 0), points, fillMode); + } - /// Fills the interior of a polygon defined by an array of points specified by structures. - /// - /// that determines the characteristics of the fill. - /// Array of structures that represent the vertices of the polygon to fill. - /// - /// is . - /// -or- - /// is . public void FillPolygon(Brush brush, Point[] points) { - } + FillPolygon(brush, points,FillMode.Winding); + } - /// Fills the interior of a polygon defined by an array of points specified by structures using the specified fill mode. - /// - /// that determines the characteristics of the fill. - /// Array of structures that represent the vertices of the polygon to fill. - /// Member of the enumeration that determines the style of the fill. - /// - /// is . - /// -or- - /// is . public void FillPolygon(Brush brush, Point[] points, FillMode fillMode) { - } + DrawPolygonCore(true, new Pen(brush, 0), Array.ConvertAll(points, p => new PointF(p.X, p.Y)), fillMode); + } - /// Fills the interior of a rectangle specified by a structure. - /// - /// that determines the characteristics of the fill. - /// - /// structure that represents the rectangle to fill. - /// - /// is . public void FillRectangle(Brush brush, Rectangle rect) { - FillRectangle(brush, rect.X, rect.Y, rect.Width, rect.Height); - } + DrawRectangleCore(true, new Pen(brush, 0), rect.X, rect.Y, rect.Width, rect.Height); + } - /// Fills the interior of a rectangle specified by a structure. - /// - /// that determines the characteristics of the fill. - /// - /// structure that represents the rectangle to fill. - /// - /// is . public void FillRectangle(Brush brush, RectangleF rect) { - FillRectangle(brush, rect.X, rect.Y, rect.Width, rect.Height); - } + DrawRectangleCore(true, new Pen(brush, 0), rect.X, rect.Y, rect.Width, rect.Height); + } - /// Fills the interior of a rectangle specified by a pair of coordinates, a width, and a height. - /// - /// that determines the characteristics of the fill. - /// The x-coordinate of the upper-left corner of the rectangle to fill. - /// The y-coordinate of the upper-left corner of the rectangle to fill. - /// Width of the rectangle to fill. - /// Height of the rectangle to fill. - /// - /// is . public void FillRectangle(Brush brush, int x, int y, int width, int height) { - FillRectangle(brush, (float)x, (float)y, (float)width, (float)height); - } + DrawRectangleCore(true, new Pen(brush, 0), x, y, width, height); + } - /// Fills the interior of a rectangle specified by a pair of coordinates, a width, and a height. - /// - /// that determines the characteristics of the fill. - /// The x-coordinate of the upper-left corner of the rectangle to fill. - /// The y-coordinate of the upper-left corner of the rectangle to fill. - /// Width of the rectangle to fill. - /// Height of the rectangle to fill. - /// - /// is . public void FillRectangle(Brush brush, float x, float y, float width, float height) { - if (brush is SolidBrush sbrush) - { - this.context.Save(); - this.context.SetSourceRGB(sbrush.Color.R / 255f, sbrush.Color.G / 255f, sbrush.Color.B / 255f); - this.context.Rectangle(x, x, width, height); - this.context.Fill(); - this.context.Restore(); - } - } - - /// Fills the interiors of a series of rectangles specified by structures. - /// - /// that determines the characteristics of the fill. - /// Array of structures that represent the rectangles to fill. - /// - /// is . - /// -or- - /// is . - /// - /// is a zero-length array. - public void FillRectangles(Brush brush, RectangleF[] rects) + DrawRectangleCore(true, new Pen(brush, 0), x, y, width, height); + } + + public void FillRectangles(Brush brush, RectangleF[] rects) { - foreach(RectangleF rect in rects) + foreach (RectangleF rect in rects) FillRectangle(brush, rect); } - /// Fills the interiors of a series of rectangles specified by structures. - /// - /// that determines the characteristics of the fill. - /// Array of structures that represent the rectangles to fill. - /// - /// is . - /// -or- - /// is . - /// - /// is a zero-length array. public void FillRectangles(Brush brush, Rectangle[] rects) { foreach (Rectangle rect in rects) FillRectangle(brush, rect); } - /// Fills the interior of a . - /// - /// that determines the characteristics of the fill. - /// - /// that represents the area to fill. - /// - /// is . - /// -or- - /// is . public void FillRegion(Brush brush, Region region) { } - /// Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection. ~Graphics() { } - /// Forces execution of all pending graphics operations and returns immediately without waiting for the operations to finish. public void Flush() { } - /// Forces execution of all pending graphics operations with the method waiting or not waiting, as specified, to return before the operations finish. - /// Member of the enumeration that specifies whether the method returns immediately or waits for any existing operations to finish. public void Flush(FlushIntention intention) { } - /// Creates a new from the specified handle to a device context. - /// Handle to a device context. - /// This method returns a new for the specified device context. [EditorBrowsable(EditorBrowsableState.Advanced)] public static Graphics FromHdc(IntPtr hdc) { throw null; } - /// Creates a new from the specified handle to a device context and handle to a device. - /// Handle to a device context. - /// Handle to a device. - /// This method returns a new for the specified device context and device. [EditorBrowsable(EditorBrowsableState.Advanced)] public static Graphics FromHdc(IntPtr hdc, IntPtr hdevice) { throw null; } - /// Returns a for the specified device context. - /// Handle to a device context. - /// A for the specified device context. [EditorBrowsable(EditorBrowsableState.Advanced)] public static Graphics FromHdcInternal(IntPtr hdc) { throw null; } - /// Creates a new from the specified handle to a window. - /// Handle to a window. - /// This method returns a new for the specified window handle. [EditorBrowsable(EditorBrowsableState.Advanced)] public static Graphics FromHwnd(IntPtr hwnd) { throw null; } - /// Creates a new for the specified windows handle. - /// Handle to a window. - /// A for the specified window handle. [EditorBrowsable(EditorBrowsableState.Advanced)] public static Graphics FromHwndInternal(IntPtr hwnd) { throw null; } - /// Creates a new from the specified . - /// - /// from which to create the new . - /// This method returns a new for the specified . - /// - /// is . - /// - /// has an indexed pixel format or its format is undefined. public static Graphics FromImage(Image image) { throw null; } - /// Gets the cumulative graphics context. - /// An representing the cumulative graphics context. [EditorBrowsable(EditorBrowsableState.Never)] public object GetContextInfo() { throw null; } - /// Gets a handle to the current Windows halftone palette. - /// Internal pointer that specifies the handle to the palette. public static IntPtr GetHalftonePalette() { throw null; } - /// Gets the handle to the device context associated with this . - /// Handle to the device context associated with this . public IntPtr GetHdc() { throw null; } - /// Gets the nearest color to the specified structure. - /// - /// structure for which to find a match. - /// A structure that represents the nearest color to the one specified with the parameter. public Color GetNearestColor(Color color) { throw null; } - /// Updates the clip region of this to the intersection of the current clip region and the specified structure. - /// - /// structure to intersect with the current clip region. public void IntersectClip(Rectangle rect) { } - /// Updates the clip region of this to the intersection of the current clip region and the specified structure. - /// - /// structure to intersect with the current clip region. public void IntersectClip(RectangleF rect) { } - /// Updates the clip region of this to the intersection of the current clip region and the specified . - /// - /// to intersect with the current region. public void IntersectClip(Region region) { } - /// Indicates whether the specified structure is contained within the visible clip region of this . - /// - /// structure to test for visibility. - /// - /// if the point specified by the parameter is contained within the visible clip region of this ; otherwise, . public bool IsVisible(Point point) { throw null; } - /// Indicates whether the specified structure is contained within the visible clip region of this . - /// - /// structure to test for visibility. - /// - /// if the point specified by the parameter is contained within the visible clip region of this ; otherwise, . public bool IsVisible(PointF point) { throw null; } - /// Indicates whether the rectangle specified by a structure is contained within the visible clip region of this . - /// - /// structure to test for visibility. - /// - /// if the rectangle specified by the parameter is contained within the visible clip region of this ; otherwise, . public bool IsVisible(Rectangle rect) { throw null; } - /// Indicates whether the rectangle specified by a structure is contained within the visible clip region of this . - /// - /// structure to test for visibility. - /// - /// if the rectangle specified by the parameter is contained within the visible clip region of this ; otherwise, . public bool IsVisible(RectangleF rect) { throw null; } - /// Indicates whether the point specified by a pair of coordinates is contained within the visible clip region of this . - /// The x-coordinate of the point to test for visibility. - /// The y-coordinate of the point to test for visibility. - /// - /// if the point defined by the and parameters is contained within the visible clip region of this ; otherwise, . public bool IsVisible(int x, int y) { throw null; } - /// Indicates whether the rectangle specified by a pair of coordinates, a width, and a height is contained within the visible clip region of this . - /// The x-coordinate of the upper-left corner of the rectangle to test for visibility. - /// The y-coordinate of the upper-left corner of the rectangle to test for visibility. - /// Width of the rectangle to test for visibility. - /// Height of the rectangle to test for visibility. - /// - /// if the rectangle defined by the , , , and parameters is contained within the visible clip region of this ; otherwise, . public bool IsVisible(int x, int y, int width, int height) { throw null; } - /// Indicates whether the point specified by a pair of coordinates is contained within the visible clip region of this . - /// The x-coordinate of the point to test for visibility. - /// The y-coordinate of the point to test for visibility. - /// - /// if the point defined by the and parameters is contained within the visible clip region of this ; otherwise, . public bool IsVisible(float x, float y) { throw null; } - /// Indicates whether the rectangle specified by a pair of coordinates, a width, and a height is contained within the visible clip region of this . - /// The x-coordinate of the upper-left corner of the rectangle to test for visibility. - /// The y-coordinate of the upper-left corner of the rectangle to test for visibility. - /// Width of the rectangle to test for visibility. - /// Height of the rectangle to test for visibility. - /// - /// if the rectangle defined by the , , , and parameters is contained within the visible clip region of this ; otherwise, . public bool IsVisible(float x, float y, float width, float height) { throw null; } - /// Gets an array of objects, each of which bounds a range of character positions within the specified string. - /// String to measure. - /// - /// that defines the text format of the string. - /// - /// structure that specifies the layout rectangle for the string. - /// - /// that represents formatting information, such as line spacing, for the string. - /// This method returns an array of objects, each of which bounds a range of character positions within the specified string. public Region[] MeasureCharacterRanges(string text, Font font, RectangleF layoutRect, StringFormat stringFormat) { throw null; } - /// Measures the specified string when drawn with the specified . - /// String to measure. - /// - /// that defines the text format of the string. - /// This method returns a structure that represents the size, in the units specified by the property, of the string specified by the parameter as drawn with the parameter. - /// - /// is . public SizeF MeasureString(string text, Font font) { throw null; } - /// Measures the specified string when drawn with the specified and formatted with the specified . - /// String to measure. - /// - /// defines the text format of the string. - /// - /// structure that represents the upper-left corner of the string. - /// - /// that represents formatting information, such as line spacing, for the string. - /// This method returns a structure that represents the size, in the units specified by the property, of the string specified by the parameter as drawn with the parameter and the parameter. - /// - /// is . public SizeF MeasureString(string text, Font font, PointF origin, StringFormat stringFormat) { throw null; } - /// Measures the specified string when drawn with the specified within the specified layout area. - /// String to measure. - /// - /// defines the text format of the string. - /// - /// structure that specifies the maximum layout area for the text. - /// This method returns a structure that represents the size, in the units specified by the property, of the string specified by the parameter as drawn with the parameter. - /// - /// is . public SizeF MeasureString(string text, Font font, SizeF layoutArea) { throw null; } - /// Measures the specified string when drawn with the specified and formatted with the specified . - /// String to measure. - /// - /// defines the text format of the string. - /// - /// structure that specifies the maximum layout area for the text. - /// - /// that represents formatting information, such as line spacing, for the string. - /// This method returns a structure that represents the size, in the units specified by the property, of the string specified in the parameter as drawn with the parameter and the parameter. - /// - /// is . public SizeF MeasureString(string text, Font font, SizeF layoutArea, StringFormat stringFormat) { throw null; } - /// Measures the specified string when drawn with the specified and formatted with the specified . - /// String to measure. - /// - /// that defines the text format of the string. - /// - /// structure that specifies the maximum layout area for the text. - /// - /// that represents formatting information, such as line spacing, for the string. - /// Number of characters in the string. - /// Number of text lines in the string. - /// This method returns a structure that represents the size of the string, in the units specified by the property, of the parameter as drawn with the parameter and the parameter. - /// - /// is . public SizeF MeasureString(string text, Font font, SizeF layoutArea, StringFormat stringFormat, out int charactersFitted, out int linesFilled) { throw null; } - /// Measures the specified string when drawn with the specified . - /// String to measure. - /// - /// that defines the format of the string. - /// Maximum width of the string in pixels. - /// This method returns a structure that represents the size, in the units specified by the property, of the string specified in the parameter as drawn with the parameter. - /// - /// is . public SizeF MeasureString(string text, Font font, int width) - { - throw null; - } + { + return MeasureString(text, font, width, StringFormat.GenericDefault); + } - /// Measures the specified string when drawn with the specified and formatted with the specified . - /// String to measure. - /// - /// that defines the text format of the string. - /// Maximum width of the string. - /// - /// that represents formatting information, such as line spacing, for the string. - /// This method returns a structure that represents the size, in the units specified by the property, of the string specified in the parameter as drawn with the parameter and the parameter. - /// - /// is . public SizeF MeasureString(string text, Font font, int width, StringFormat format) - { - throw null; + { + float textSize = 14f; + if (font != null) + { + textSize = font.Size; + if (font.Unit == GraphicsUnit.Point) + textSize = font.Size * 1 / 72 * 96; + if (font.Unit == GraphicsUnit.Inch) + textSize = font.Size * 96; + } + Pango.Context pangocontext = this.widget.PangoContext; + string family = pangocontext.FontDescription.Family; + if (string.IsNullOrWhiteSpace(font.FontFamily.Name) == false) + { + var pangoFamily = Array.Find(pangocontext.Families, f => f.Name == font.FontFamily.Name); + if (pangoFamily != null) + family = pangoFamily.Name; + } + this.context.SelectFontFace(family, font.Italic ? Cairo.FontSlant.Italic : Cairo.FontSlant.Normal, font.Bold ? Cairo.FontWeight.Bold : Cairo.FontWeight.Normal); + this.context.SetFontSize(textSize); + + var extents = this.context.TextExtents(text); + return new SizeF((float)Math.Max(width,extents.Width), (float)extents.Height); + } + + public void MultiplyTransform(Drawing2D.Matrix matrix) + { + this.context.Matrix?.Multiply(ConvertToMatrix(matrix)); + } + + public void MultiplyTransform(Drawing2D.Matrix matrix, MatrixOrder order) + { + this.context.Matrix?.Multiply(ConvertToMatrix(matrix)); } - /// Multiplies the world transformation of this and specified the . - /// 4x4 that multiplies the world transformation. - public void MultiplyTransform(Matrix matrix) - { - } - - /// Multiplies the world transformation of this and specified the in the specified order. - /// 4x4 that multiplies the world transformation. - /// Member of the enumeration that determines the order of the multiplication. - public void MultiplyTransform(Matrix matrix, MatrixOrder order) - { - } - - /// Releases a device context handle obtained by a previous call to the method of this . public void ReleaseHdc() { } - /// Releases a device context handle obtained by a previous call to the method of this . - /// Handle to a device context obtained by a previous call to the method of this . [EditorBrowsable(EditorBrowsableState.Advanced)] public void ReleaseHdc(IntPtr hdc) { } - /// Releases a handle to a device context. - /// Handle to a device context. [EditorBrowsable(EditorBrowsableState.Never)] public void ReleaseHdcInternal(IntPtr hdc) { } - /// Resets the clip region of this to an infinite region. public void ResetClip() { + this.context.ResetClip(); } - /// Resets the world transformation matrix of this to the identity matrix. public void ResetTransform() { - } + this.context.Rotate(Math.PI / 180 * _angle * -1); + } - /// Restores the state of this to the state represented by a . - /// - /// that represents the state to which to restore this . public void Restore(GraphicsState gstate) { - } - - /// Applies the specified rotation to the transformation matrix of this . - /// Angle of rotation in degrees. + this.context.Restore(); + } + private float _angle = 0; public void RotateTransform(float angle) { - } + this.context.Rotate(Math.PI / 180 * angle); + _angle = angle; + } - /// Applies the specified rotation to the transformation matrix of this in the specified order. - /// Angle of rotation in degrees. - /// Member of the enumeration that specifies whether the rotation is appended or prepended to the matrix transformation. public void RotateTransform(float angle, MatrixOrder order) - { - } + { + this.context.Rotate(Math.PI / 180 * angle); + _angle = angle; + } - /// Saves the current state of this and identifies the saved state with a . - /// This method returns a that represents the saved state of this . public GraphicsState Save() { - throw null; + return new GraphicsState(); } - /// Applies the specified scaling operation to the transformation matrix of this by prepending it to the object's transformation matrix. - /// Scale factor in the x direction. - /// Scale factor in the y direction. public void ScaleTransform(float sx, float sy) { + this.context.Scale(sx, sy); } - /// Applies the specified scaling operation to the transformation matrix of this in the specified order. - /// Scale factor in the x direction. - /// Scale factor in the y direction. - /// Member of the enumeration that specifies whether the scaling operation is prepended or appended to the transformation matrix. public void ScaleTransform(float sx, float sy, MatrixOrder order) { - } + this.context.Scale(sx, sy); + } - /// Sets the clipping region of this to the specified . - /// - /// that represents the new clip region. public void SetClip(GraphicsPath path) { } - /// Sets the clipping region of this to the result of the specified operation combining the current clip region and the specified . - /// - /// to combine. - /// Member of the enumeration that specifies the combining operation to use. public void SetClip(GraphicsPath path, CombineMode combineMode) { } - /// Sets the clipping region of this to the property of the specified . - /// - /// from which to take the new clip region. public void SetClip(Graphics g) { } - /// Sets the clipping region of this to the result of the specified combining operation of the current clip region and the property of the specified . - /// - /// that specifies the clip region to combine. - /// Member of the enumeration that specifies the combining operation to use. public void SetClip(Graphics g, CombineMode combineMode) { } - /// Sets the clipping region of this to the rectangle specified by a structure. - /// - /// structure that represents the new clip region. public void SetClip(Rectangle rect) { } - /// Sets the clipping region of this to the result of the specified operation combining the current clip region and the rectangle specified by a structure. - /// - /// structure to combine. - /// Member of the enumeration that specifies the combining operation to use. public void SetClip(Rectangle rect, CombineMode combineMode) { } - /// Sets the clipping region of this to the rectangle specified by a structure. - /// - /// structure that represents the new clip region. public void SetClip(RectangleF rect) { } - /// Sets the clipping region of this to the result of the specified operation combining the current clip region and the rectangle specified by a structure. - /// - /// structure to combine. - /// Member of the enumeration that specifies the combining operation to use. public void SetClip(RectangleF rect, CombineMode combineMode) { } - /// Sets the clipping region of this to the result of the specified operation combining the current clip region and the specified . - /// - /// to combine. - /// Member from the enumeration that specifies the combining operation to use. public void SetClip(Region region, CombineMode combineMode) { } - /// Transforms an array of points from one coordinate space to another using the current world and page transformations of this . - /// Member of the enumeration that specifies the destination coordinate space. - /// Member of the enumeration that specifies the source coordinate space. - /// Array of structures that represent the points to transform. public void TransformPoints(CoordinateSpace destSpace, CoordinateSpace srcSpace, PointF[] pts) { } - /// Transforms an array of points from one coordinate space to another using the current world and page transformations of this . - /// Member of the enumeration that specifies the destination coordinate space. - /// Member of the enumeration that specifies the source coordinate space. - /// Array of structures that represents the points to transformation. public void TransformPoints(CoordinateSpace destSpace, CoordinateSpace srcSpace, Point[] pts) { } - /// Translates the clipping region of this by specified amounts in the horizontal and vertical directions. - /// The x-coordinate of the translation. - /// The y-coordinate of the translation. public void TranslateClip(int dx, int dy) { - } + //TranslateTransform(dx, dy, MatrixOrder.Append); + } - /// Translates the clipping region of this by specified amounts in the horizontal and vertical directions. - /// The x-coordinate of the translation. - /// The y-coordinate of the translation. public void TranslateClip(float dx, float dy) { - } + //TranslateTransform(dx, dy, MatrixOrder.Append); + } - /// Changes the origin of the coordinate system by prepending the specified translation to the transformation matrix of this . - /// The x-coordinate of the translation. - /// The y-coordinate of the translation. public void TranslateTransform(float dx, float dy) { - } + TranslateTransform(dx, dy, MatrixOrder.Append); + } - /// Changes the origin of the coordinate system by applying the specified translation to the transformation matrix of this in the specified order. - /// The x-coordinate of the translation. - /// The y-coordinate of the translation. - /// Member of the enumeration that specifies whether the translation is prepended or appended to the transformation matrix. public void TranslateTransform(float dx, float dy, MatrixOrder order) { - } + this.SetTranslateWithDifference(dx, dy); + } } } diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Icon.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Icon.cs index 23d27bad9664e9756741df894becb0cc1edf4195..5c70aa738692e6c19ca5d054382319da96329292 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Icon.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Icon.cs @@ -1,54 +1,50 @@ +using Gdk; +using GTKSystem.Resources; using System.ComponentModel; using System.IO; using System.Runtime.Serialization; namespace System.Drawing { - /// Represents a Windows icon, which is a small bitmap image that is used to represent an object. Icons can be thought of as transparent bitmaps, although their size is determined by the system. - [TypeConverter("System.Drawing.IconConverter, System.Windows.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51")] public sealed class Icon : MarshalByRefObject, ICloneable, IDisposable, ISerializable { - /// Gets the Windows handle for this . This is not a copy of the handle; do not free it. - /// The Windows handle for the icon. - [Browsable(false)] + #region ֻȡͼbyte[] + public byte[] PixbufData { get; set; } + public Gdk.Pixbuf Pixbuf { get; set; } + public string FileName { get; set; } + #endregion + + [Browsable(false)] public IntPtr Handle { - get - { - throw null; - } - } + get; + private set; + } /// Gets the height of this . /// The height of this . [Browsable(false)] public int Height { - get - { - throw null; - } - } + get; + private set; + } /// Gets the size of this . /// A structure that specifies the width and height of this . public Size Size { - get - { - throw null; - } - } + get; + private set; + } /// Gets the width of this . /// The width of this . [Browsable(false)] public int Width { - get - { - throw null; - } + get; + private set; } /// Initializes a new instance of the class and attempts to find a version of the icon that matches the requested size. @@ -71,16 +67,16 @@ namespace System.Drawing /// Initializes a new instance of the class from the specified data stream. /// The data stream from which to load the . /// The parameter is . - public Icon(Stream stream) - { + public Icon(Stream stream) : this(stream, 0, 0) + { } /// Initializes a new instance of the class of the specified size from the specified stream. /// The stream that contains the icon data. /// The desired size of the icon. /// The is or does not contain image data. - public Icon(Stream stream, Size size) - { + public Icon(Stream stream, Size size) : this(stream, size.Width, size.Height) + { } /// Initializes a new instance of the class from the specified data stream and with the specified width and height. @@ -89,21 +85,33 @@ namespace System.Drawing /// The height, in pixels, of the icon. /// The parameter is . public Icon(Stream stream, int width, int height) - { - } - - /// Initializes a new instance of the class from the specified file name. - /// The file to load the from. - public Icon(string fileName) - { - } - - /// Initializes a new instance of the class of the specified size from the specified file. - /// The name and path to the file that contains the icon data. - /// The desired size of the icon. - /// The is or does not contain image data. - public Icon(string fileName, Size size) - { + { + this.Width = width; + this.Height = height; + using(BinaryReader reader =new BinaryReader(stream)) + { + byte[] bytes = reader.ReadBytes((int)stream.Length); + this.PixbufData = bytes; + this.Pixbuf = new Gdk.Pixbuf(bytes); + if (width < 1) + this.Width = this.Pixbuf.Width; + if (height < 1) + this.Height = this.Pixbuf.Height; + } + } + + /// Initializes a new instance of the class from the specified file name. + /// The file to load the from. + public Icon(string fileName) : this(fileName, 0, 0) + { + } + + /// Initializes a new instance of the class of the specified size from the specified file. + /// The name and path to the file that contains the icon data. + /// The desired size of the icon. + /// The is or does not contain image data. + public Icon(string fileName, Size size) : this(fileName, size.Width, size.Height) + { } /// Initializes a new instance of the class with the specified width and height from the specified file. @@ -113,7 +121,20 @@ namespace System.Drawing /// The is or does not contain image data. public Icon(string fileName, int width, int height) { - } + this.FileName= fileName; + this.Width = width; + this.Height = height; + if (System.IO.File.Exists(fileName)) + { + byte[] bytes = System.IO.File.ReadAllBytes(fileName); + this.PixbufData = bytes; + this.Pixbuf = new Gdk.Pixbuf(bytes); + if (width < 1) + this.Width = this.Pixbuf.Width; + if (height < 1) + this.Height = this.Pixbuf.Height; + } + } /// Initializes a new instance of the class from a resource in the specified assembly. /// A that specifies the assembly in which to look for the resource. @@ -121,18 +142,21 @@ namespace System.Drawing /// An icon specified by cannot be found in the assembly that contains the specified . public Icon(Type type, string resource) { - } + + } /// Clones the , creating a duplicate image. /// An object that can be cast to an . public object Clone() { - throw null; - } + return new Icon(this.FileName, this.Width, this.Height) { Pixbuf = this.Pixbuf, PixbufData = this.PixbufData }; + } - /// Releases all resources used by this . - public void Dispose() + /// Releases all resources used by this . + public void Dispose() { + this.PixbufData = null; + this.Pixbuf = null; } /// Returns an icon representation of an image that is contained in the specified file. @@ -143,7 +167,7 @@ namespace System.Drawing /// The indicates a Universal Naming Convention (UNC) path. public static Icon ExtractAssociatedIcon(string filePath) { - throw null; + return new Icon(filePath); } /// Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection. @@ -163,7 +187,16 @@ namespace System.Drawing /// The to save to. public void Save(Stream outputStream) { - } + if(PixbufData != null) + foreach(byte data in PixbufData) + outputStream.WriteByte(data); + else if (Pixbuf != null) + foreach (byte data in Pixbuf.PixelBytes.Data) + outputStream.WriteByte(data); + else if (FileName != null && System.IO.File.Exists(FileName)) + foreach (byte data in System.IO.File.ReadAllBytes(FileName)) + outputStream.WriteByte(data); + } /// Populates a with the data that is required to serialize the target object. /// The object to populate with data. @@ -176,14 +209,14 @@ namespace System.Drawing /// A that represents the converted . public Bitmap ToBitmap() { - throw null; + return new Bitmap(this.Width, this.Height) { PixbufData = this.PixbufData, Pixbuf = this.Pixbuf, FileName = this.FileName }; } /// Gets a human-readable string that describes the . /// A string that describes the . public override string ToString() { - throw null; + return "Icon"; } } } diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Region.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Region.cs index e763ac3bbab7e5c67f408d36c8ea80599543fd29..7e231726b226836444174a2571c9f95651aef298 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Region.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Drawing/Region.cs @@ -1,3 +1,4 @@ + using System.Drawing.Drawing2D; namespace System.Drawing @@ -5,10 +6,13 @@ namespace System.Drawing /// Describes the interior of a graphics shape composed of rectangles and paths. This class cannot be inherited. public sealed class Region : MarshalByRefObject, IDisposable { - /// Initializes a new . - public Region() + private RectangleF rectangle = new RectangleF(0, 0, 0, 0); + private RegionData regionData = new RegionData(); + private GraphicsPath graphicsPath = new GraphicsPath(); + /// Initializes a new . + public Region() { - } + } /// Initializes a new with the specified . /// A that defines the new . @@ -16,7 +20,10 @@ namespace System.Drawing /// is . public Region(GraphicsPath path) { - } + graphicsPath = path; + rectangle = path.GetBounds(); + + } /// Initializes a new from the specified data. /// A that defines the interior of the new . @@ -24,26 +31,30 @@ namespace System.Drawing /// is . public Region(RegionData rgnData) { - } + regionData = rgnData; + + } /// Initializes a new from the specified structure. /// A structure that defines the interior of the new . public Region(Rectangle rect) { - } + rectangle = new RectangleF(rect.X, rect.Y, rect.Width, rect.Height); + } /// Initializes a new from the specified structure. /// A structure that defines the interior of the new . public Region(RectangleF rect) { - } + rectangle = new RectangleF(rect.X, rect.Y, rect.Width, rect.Height); + } /// Creates an exact copy of this . /// The that this method creates. public Region Clone() { - throw null; - } + return new Region(new RectangleF(rectangle.X, rectangle.Y, rectangle.Width, rectangle.Height)); + } /// Updates this to contain the portion of the specified that does not intersect with this . /// The to complement this . @@ -51,19 +62,23 @@ namespace System.Drawing /// is . public void Complement(GraphicsPath path) { - } + graphicsPath = path; + rectangle = path.GetBounds(); + } /// Updates this to contain the portion of the specified structure that does not intersect with this . /// The structure to complement this . public void Complement(Rectangle rect) { - } + rectangle = new RectangleF(rect.X, rect.Y, rect.Width, rect.Height); + } /// Updates this to contain the portion of the specified structure that does not intersect with this . /// The structure to complement this . public void Complement(RectangleF rect) { - } + rectangle = new RectangleF(rect.X, rect.Y, rect.Width, rect.Height); + } /// Updates this to contain the portion of the specified that does not intersect with this . /// The object to complement this object. @@ -71,12 +86,18 @@ namespace System.Drawing /// is . public void Complement(Region region) { - } + rectangle = region.rectangle; + graphicsPath = region.graphicsPath; + regionData = region.regionData; + } /// Releases all resources used by this . public void Dispose() - { - } + { + rectangle = new RectangleF(); + graphicsPath = new GraphicsPath(); + regionData = new RegionData(); + } /// Tests whether the specified is identical to this on the specified drawing surface. /// The to test. @@ -87,7 +108,7 @@ namespace System.Drawing /// or is . public bool Equals(Region region, Graphics g) { - throw null; + return rectangle.Equals(region.rectangle) && graphicsPath.Equals(region.graphicsPath) && regionData.Equals(region.regionData); } /// Updates this to contain only the portion of its interior that does not intersect with the specified . @@ -138,7 +159,7 @@ namespace System.Drawing /// is . public RectangleF GetBounds(Graphics g) { - throw null; + return g.ClipBounds; } /// Returns a Windows handle to this in the specified graphics context. @@ -155,7 +176,7 @@ namespace System.Drawing /// A that represents the information that describes this . public RegionData GetRegionData() { - throw null; + return regionData; } /// Returns an array of structures that approximate this after the specified matrix transformation is applied. diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Enum/Enums/RightToLeft.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Enum/Enums/RightToLeft.cs index 99347ac1893c5a51c8f8b0ef037596b8ee3ed1db..5896dae68a8ffd17a6f4ec03db9d2ab4082064b0 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/Enum/Enums/RightToLeft.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Enum/Enums/RightToLeft.cs @@ -2,6 +2,8 @@ { public enum RightToLeft { - Inherit + Inherit, + No, + Yes } } \ No newline at end of file diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Enum/TickStyle.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Enum/TickStyle.cs new file mode 100644 index 0000000000000000000000000000000000000000..113def5ad4e04404e0a99f22db7beed66b50857c --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Enum/TickStyle.cs @@ -0,0 +1,10 @@ +namespace System.Windows.Forms +{ + public enum TickStyle + { + None, + TopLeft, + BottomRight, + Both + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/FlowLayoutPanel.cs b/Source/GTKSystem.Windows.Forms/GTKControls/FlowLayoutPanel.cs new file mode 100644 index 0000000000000000000000000000000000000000..1e404633c6fdbebaf22532be0832a9cd87dfc85a --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/FlowLayoutPanel.cs @@ -0,0 +1,90 @@ +/* + * GTKԭC#ؼwinformĿƽ̨ + * ʹñGTKSystem.Windows.FormsMicrosoft.WindowsDesktop.App.WindowsFormsһα룬ƽ̨windowslinuxmacos + * ֧438865652@qq.comhttps://gitee.com/easywebfactory, https://www.cnblogs.com/easywebfactory + * author:chenhongjin + * date: 2024/1/3 + */ +using Gtk; +using GTKSystem.Windows.Forms.GTKControls.ControlBase; +using System.ComponentModel; + + +namespace System.Windows.Forms +{ + [ProvideProperty("FlowBreak", typeof(Control))] + [DefaultProperty("FlowDirection")] + [DesignerCategory("Component")] + public partial class FlowLayoutPanel : Control, IExtenderProvider + { + public readonly FlowLayoutPanelBase self = new FlowLayoutPanelBase(); + public override object GtkControl => self; + private ObjectCollection _controls; + public FlowLayoutPanel() : base() + { + self.Orientation = Gtk.Orientation.Horizontal; + self.Halign = Align.Start; + self.Valign = Align.Start; + self.MinChildrenPerLine = 1; + self.MaxChildrenPerLine = 999; + self.ColumnSpacing = 0; + self.BorderWidth = 0; + + self.ChildActivated += Control_ChildActivated; + _controls = new ObjectCollection(this); + + } + + private void Control_ChildActivated(object o, ChildActivatedArgs args) + { + var c = args.Child; + } + + private FlowDirection _FlowDirection; + public FlowDirection FlowDirection + { + get { return _FlowDirection; } + set + { + if (value == FlowDirection.LeftToRight || value == FlowDirection.RightToLeft) { self.Orientation = Gtk.Orientation.Horizontal; } + else if (value == FlowDirection.TopDown || value == FlowDirection.BottomUp) { self.Orientation = Gtk.Orientation.Vertical; } + } + } + + public bool WrapContents { get; set; } + + public bool GetFlowBreak(Control control) + { + return false; + } + + public void SetFlowBreak(Control control, bool value) + { + + } + public override ControlCollection Controls => _controls; + public bool CanExtend(object extendee) + { + return true; + } + public class ObjectCollection : ControlCollection + { + public ObjectCollection(FlowLayoutPanel owner) : base(owner) + { + + } + public override int Add(object item) + { + Gtk.FlowBoxChild box = new FlowBoxChild(); + box.Valign = Align.Start; + box.Halign = Align.Start; + Control control = (Control)item; + Gtk.Widget widg = control.Widget; + widg.Valign = Align.Start; + widg.Halign = Align.Start; + box.Add(widg); + return base.AddWidget(box, control); + } + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Form.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Form.cs index 53216a3771e3e838bf01a1eec5ced1ef34c1d8cc..6d42a30ce9a0fd3368ac2cee981ee71789c5072b 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/Form.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Form.cs @@ -1,62 +1,78 @@ -//基于GTK3.24.24.34版本组件开发,兼容原生C#控件winform界面的跨平台界面组件。 -//使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows和linux运行 -//开发联系438865652@qq.com,https://www.cnblogs.com/easywebfactory +/* + * 基于GTK组件开发,兼容原生C#控件winform界面的跨平台界面组件。 + * 使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows、linux、macos运行 + * 技术支持438865652@qq.com,https://gitee.com/easywebfactory, https://www.cnblogs.com/easywebfactory + * author:chenhongjin + * date: 2024/1/3 + */ + using Gtk; +using GTKSystem.Windows.Forms.GTKControls.ControlBase; using System; +using System.Collections; +using System.Collections.Generic; using System.ComponentModel; using System.Drawing; -using System.Drawing.Imaging; +using System.Numerics; using System.Reflection; using System.Runtime.InteropServices; namespace System.Windows.Forms { - [DesignerCategory("Form"), - DefaultEvent(nameof(Load)), + [DesignerCategory("Form")] + [DefaultEvent(nameof(Load)), InitializationEvent(nameof(Load))] - public partial class Form : WidgetControl, IWin32Window + public partial class Form: ScrollableControl, IWin32Window { - private Gtk.Fixed _body = null; + private Gtk.Application app = Application.Init(); + public FormBase self = new FormBase(); + public override object GtkControl { get => self; } + private Gtk.Fixed _body = new Gtk.Fixed(); + private ViewportBase background = new ViewportBase(); private ObjectCollection _ObjectCollection; - private Gtk.Menu contextMenu = new Gtk.Menu(); public override event EventHandler SizeChanged; - public Form() : base(WindowType.Toplevel) + + public Form() : base() { Init(); } - public Form(string title) : base() + public Form(string title) : this() { - base.Control.Title = title; - Init(); + self.Title = title; } + public Form(string title, Window parent) : base() + { + + } private void Init() { - this.Control.StyleContext.AddClass("Form"); - _body = new Fixed(); _body.Valign = Gtk.Align.Fill; _body.Halign = Gtk.Align.Fill; - _ObjectCollection = new ObjectCollection(_body); - base.Control.WindowPosition = Gtk.WindowPosition.Center; - base.Control.BorderWidth = 1; - base.Control.SetDefaultSize(100, 100); - - base.Control.Realized += Control_Realized; - - base.Control.ResizeChecked += Form_ResizeChecked; - base.Control.ButtonReleaseEvent += Body_ButtonReleaseEvent; - - base.Control.Shown += Control_Shown; - base.Control.DeleteEvent += Control_DeleteEvent; + _body.Expand = true; + _body.Hexpand = true; + _body.Vexpand = true; + background.Child = _body; + self.ScrollArea.Child = background; + _ObjectCollection = new ObjectCollection(this, _body); + + self.ResizeChecked += Form_ResizeChecked; + self.ButtonReleaseEvent += Body_ButtonReleaseEvent; + + self.Shown += Control_Shown; + self.DeleteEvent += Control_DeleteEvent; } + public override Drawing.Image BackgroundImage { get => background.Override.BackgroundImage; set { background.Override.BackgroundImage = value; } } + public override ImageLayout BackgroundImageLayout { get => background.Override.BackgroundImageLayout; set { background.Override.BackgroundImageLayout = value; } } + public override Color BackColor { get => base.BackColor; set { base.BackColor = value; background.Override.BackColor = value; } } + public override ISite Site { get; set; } private void Control_DeleteEvent(object o, DeleteEventArgs args) { if (FormClosing != null) FormClosing(this, new FormClosingEventArgs(CloseReason.UserClosing, false)); if (FormClosed != null) FormClosed(this, new FormClosedEventArgs(CloseReason.UserClosing)); - } private void Control_Shown(object sender, EventArgs e) @@ -65,12 +81,6 @@ namespace System.Windows.Forms Shown(this, e); } - private void Control_Realized(object sender, EventArgs e) - { - if (Load != null) - Load(this, e); - } - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] delegate void MenuPositionFuncNative(IntPtr menu, out int x, out int y, out bool push_in, IntPtr user_data); static MenuPositionFuncNative StatusIconPositionMenuFunc = null; @@ -79,117 +89,158 @@ namespace System.Windows.Forms private static d_gtk_menu_popup gtk_menu_popup = FuncLoader.LoadFunction(FuncLoader.GetProcAddress(GLibrary.Load(Library.Gtk), "gtk_menu_popup")); public void PresentMenu(Gtk.Menu menu, uint button, uint activate_time) { - gtk_menu_popup(menu == null ? IntPtr.Zero : menu.Handle, IntPtr.Zero, IntPtr.Zero, StatusIconPositionMenuFunc, base.Control.Handle, button, activate_time); + gtk_menu_popup(menu == null ? IntPtr.Zero : menu.Handle, IntPtr.Zero, IntPtr.Zero, StatusIconPositionMenuFunc, self.Handle, button, activate_time); } private void Body_ButtonReleaseEvent(object o, ButtonReleaseEventArgs args) { if (base.ContextMenuStrip != null) { - base.ContextMenuStrip.Control.ShowAll(); + base.ContextMenuStrip.self.ShowAll(); if (args.Event.Button == 3) - PresentMenu(base.ContextMenuStrip.Control, args.Event.Button, args.Event.Time); + PresentMenu(base.ContextMenuStrip.self, args.Event.Button, args.Event.Time); } } - int width = 0; - int height = 0; + int resizeWidth= 0; + int resizeHeight= 0; private void Form_ResizeChecked(object sender, EventArgs e) { - if (base.Control.IsRealized) + if (self.Resizable == true) { - if (base.Control.Allocation.Width != width || base.Control.Allocation.Height != height) + if (_body.IsMapped && (resizeWidth != self.AllocatedWidth || resizeHeight != self.AllocatedHeight)) { - width = base.Control.Allocation.Width; - height = base.Control.Allocation.Height; - ResizeChildren(base.Control); + resizeWidth = self.AllocatedWidth; + resizeHeight = self.AllocatedHeight; + _body.WidthRequest = self.AllocatedWidth - (AutoScroll ? 15 : 0); //留出滚动条位置 + _body.HeightRequest = self.AllocatedHeight - (AutoScroll ? 15 : 0); + int widthIncrement = self.AllocatedWidth - self.DefaultSize.Width; + int heightIncrement = self.AllocatedHeight - self.DefaultSize.Height; + ResizeControls(widthIncrement, heightIncrement, _body, false, null); } } if (SizeChanged != null) - SizeChanged(sender, e); + SizeChanged(this, e); + } - private void ResizeChildren(Gtk.Container container) + private void ResizeControls(int widthIncrement, int heightIncrement, Gtk.Container parent, bool isPaned, Gtk.Paned gtkPaned) { - foreach (var o in container.AllChildren) + foreach (Gtk.Widget control in parent.Children) { - if (o is Gtk.Container control) + if (control != null) { object dock = control.Data["Dock"]; if (dock != null) { string dockStyle = dock.ToString(); - int widthIncrement = base.Control.AllocatedWidth - base.Control.DefaultWidth; - int heightIncrement = base.Control.AllocatedHeight - base.Control.DefaultHeight; - if (GetParentWidget(container, out Gtk.Widget parent)) + if (gtkPaned != null) + { + if (gtkPaned.Orientation == Gtk.Orientation.Vertical) + heightIncrement = gtkPaned.Child1.AllocatedHeight - gtkPaned.Child1.HeightRequest; + else + widthIncrement = gtkPaned.Child1.AllocatedWidth - gtkPaned.Child1.WidthRequest; + } + + Gtk.Widget sizeParent = getSizeParent(control); + int width = sizeParent.WidthRequest; + int height = sizeParent.HeightRequest; + if (dockStyle == DockStyle.Top.ToString()) { - int width = parent.WidthRequest - control.MarginStart - ((int)control.BorderWidth); - int height = parent.HeightRequest - ((int)control.BorderWidth); - if (parent.GetType().Name == "Window") - { - width = parent.AllocatedWidth - 2; - height = parent.AllocatedHeight - 1; - } - if (parent.GetType().Name == "Dialog") - { - width = parent.AllocatedWidth - 1; - height = parent.AllocatedHeight - 1; - } - width = width - control.MarginStart - control.MarginStart - 2; - height = width - control.MarginTop - control.MarginTop - 1; - - if (dockStyle == DockStyle.Top.ToString()) - { + control.Valign = Gtk.Align.Start; + control.Hexpand = true; + if (control.WidthRequest > -1 && width > -1) control.WidthRequest = width; - } - else if (dockStyle == DockStyle.Bottom.ToString()) - { + } + else if (dockStyle == DockStyle.Bottom.ToString()) + { + control.Valign = Gtk.Align.End; + control.Halign = Gtk.Align.Fill; + control.Hexpand = true; + control.MarginTop = heightIncrement; + if (control.WidthRequest > -1 && width > -1) control.WidthRequest = width; - - if ((int)control.Data["InitMarginTop"] + heightIncrement > 0) - control.MarginTop = (int)control.Data["InitMarginTop"] + heightIncrement; - } - else if (dockStyle == DockStyle.Left.ToString()) - { + } + else if (dockStyle == DockStyle.Left.ToString()) + { + control.Halign = Gtk.Align.Start; + control.Vexpand = true; + if (control.HeightRequest > -1 && height > -1) control.HeightRequest = height; - } - else if (dockStyle == DockStyle.Right.ToString()) - { + } + else if (dockStyle == DockStyle.Right.ToString()) + { + control.Halign = Gtk.Align.End; + control.Vexpand = true; + if (control.HeightRequest > -1 && height > -1) control.HeightRequest = height; - if ((int)control.Data["InitMarginStart"] + widthIncrement > 0) - control.MarginStart = (int)control.Data["InitMarginStart"] + widthIncrement; - } - else if (dockStyle == DockStyle.Fill.ToString()) - { + control.MarginStart = widthIncrement; + } + else if (dockStyle == DockStyle.Fill.ToString()) + { + control.Hexpand = true; + control.Vexpand = true; + if (control.HeightRequest > -1 && height > -1) control.HeightRequest = height; + if (control.WidthRequest > -1 && width > -1) control.WidthRequest = width; - } } - } - if (o is Gtk.ScrolledWindow) - { - + if (control is Gtk.MenuBar menuba) + { + //菜单不用处理 + } + else if (control is Gtk.TreeView) + { + //树目录不用处理 + } + else if (control is Gtk.Paned paned) + { + ResizeControls(widthIncrement, heightIncrement, paned, true, paned); + } + else if (control is Gtk.Container container) + { + ResizeControls(widthIncrement, heightIncrement, container, isPaned, gtkPaned); + } } else { - ResizeChildren(control); + if (control is Gtk.MenuBar) + { + + } + else if (control is Gtk.TreeView) + { + } + else if (control is Gtk.Paned paned) + { + ResizeControls(widthIncrement, heightIncrement, paned, true, paned); + } + else if (control is Gtk.Container container) + { + ResizeControls(widthIncrement, heightIncrement, container, isPaned, gtkPaned); + } } } } } - private bool GetParentWidget(Gtk.Widget container, out Gtk.Widget parent) + + private Gtk.Widget getSizeParent(Gtk.Widget control) { - parent = container; - while (parent.Parent != null) + while (control.Parent != null) { - parent = parent.Parent; - if (parent.WidthRequest > -1) - { - return true; - } + if (control.Parent.WidthRequest > -1) + return control.Parent; + else + return getSizeParent(control.Parent); } - return true; + return control.Parent; + } + + private void OnLoad() + { + if (Load != null) + Load(this, new EventArgs()); } - public void Show() + public override void Show() { this.Show(null); } @@ -210,37 +261,81 @@ namespace System.Windows.Forms throw new InvalidOperationException("ShowDialogOnDisabled"); } - if (owner != null && owner is Form) + if (owner != null && owner is Form parent) { - this.Control.Parent = ((Form)owner).Control; + this.Parent = parent; } + OnLoad(); - if (this.AutoScroll == true) + _body.WidthRequest = this.Width; + _body.HeightRequest = this.Height; + + if (AutoScroll == true) { - Gtk.ScrolledWindow scrollwindow = new Gtk.ScrolledWindow(); - _body.WidthRequest = this.Width; - _body.HeightRequest = this.Height; - scrollwindow.Child = _body; - base.Control.Add(scrollwindow); + self.ScrollArea.HscrollbarPolicy = PolicyType.Always; + self.ScrollArea.VscrollbarPolicy = PolicyType.Always; } else { - Gtk.Layout laybody = new Gtk.Layout(new Gtk.Adjustment(IntPtr.Zero), new Gtk.Adjustment(IntPtr.Zero)); - laybody.Add(_body); - base.Control.Add(laybody); + self.ScrollArea.HscrollbarPolicy = PolicyType.External; + self.ScrollArea.VscrollbarPolicy = PolicyType.External; + } + + this.FormBorderStyle = this.FormBorderStyle; + if (this.MaximizeBox == false && this.MinimizeBox == false) + { + self.TypeHint = Gdk.WindowTypeHint.Dialog; } - base.Control.ShowAll(); + else if (this.MaximizeBox == false && this.MinimizeBox == true) + { + self.Resizable = false; + } + + if(self.Resizable==false) + { + self.WidthRequest = self.DefaultSize.Width; + self.HeightRequest = self.DefaultSize.Height; + } + if (this.WindowState == FormWindowState.Maximized) { - base.Control.Maximize(); + self.Maximize(); } else if (this.WindowState == FormWindowState.Minimized) { - base.Control.KeepBelow = true; + self.Iconify(); + } + + try + { + if (this.ShowIcon) + { + if (this.Icon != null) + { + if (this.Icon.Pixbuf != null) + self.Icon = this.Icon.Pixbuf; + else if (this.Icon.PixbufData != null) + self.Icon = new Gdk.Pixbuf(this.Icon.PixbufData); + else if (this.Icon.FileName != null && System.IO.File.Exists(this.Icon.FileName)) + self.SetIconFromFile(this.Icon.FileName); + else if (this.Icon.FileName != null && System.IO.File.Exists("Resources\\" + this.Icon.FileName)) + self.SetIconFromFile("Resources\\" + this.Icon.FileName); + } + } + else + { + System.IO.Stream sm = typeof(System.Windows.Forms.Form).Assembly.GetManifestResourceStream("GTKSystem.Windows.Forms.Resources.System.view-more.png"); + self.Icon = new Gdk.Pixbuf(sm); + } } + catch + { + } + + self.ShowAll(); } - private Gtk.Dialog dialogWindow; + public DialogResult ShowDialog() { return ShowDialog(null); @@ -261,133 +356,96 @@ namespace System.Windows.Forms { throw new InvalidOperationException("ShowDialogOnDisabled"); } - int irun = -9; - if (owner != null) - { - Gtk.Window ownerWindow = ((Form)owner).Control; - dialogWindow = new Dialog(this.Text, ownerWindow, DialogFlags.DestroyWithParent); - dialogWindow.SetPosition(Gtk.WindowPosition.CenterOnParent); - dialogWindow.DefaultHeight = this.Height; - dialogWindow.DefaultWidth = this.Width; - dialogWindow.Response += Dia_Response; - if (this.AutoScroll == true) - { - Gtk.ScrolledWindow scrollwindow = new Gtk.ScrolledWindow(); - _body.WidthRequest = this.Width; - _body.HeightRequest = this.Height; - scrollwindow.Child = _body; - dialogWindow.ContentArea.PackStart(scrollwindow,true,true,1); - } - else - { - Gtk.Layout laybody = new Gtk.Layout(new Gtk.Adjustment(IntPtr.Zero), new Gtk.Adjustment(IntPtr.Zero)); - laybody.Add(_body); - dialogWindow.ContentArea.PackStart(laybody, true, true, 1); - } - dialogWindow.ShowAll(); - if (this.WindowState == FormWindowState.Maximized) - { - dialogWindow.Maximize(); - } - else if (this.WindowState == FormWindowState.Minimized) - { - dialogWindow.KeepBelow = true; - } - - irun = dialogWindow.Run(); - } - else - { - dialogWindow = new Dialog(); - dialogWindow.SetPosition(Gtk.WindowPosition.Center); - dialogWindow.DefaultHeight = this.Height; - dialogWindow.DefaultWidth = this.Width; - dialogWindow.Response += Dia_Response; - if (this.AutoScroll == true) - { - Gtk.ScrolledWindow scrollwindow = new Gtk.ScrolledWindow(); - _body.WidthRequest = this.Width; - _body.HeightRequest = this.Height; - scrollwindow.Child = _body; - dialogWindow.ContentArea.PackStart(scrollwindow, true, true, 1); - } - else - { - Gtk.Layout laybody = new Gtk.Layout(new Gtk.Adjustment(IntPtr.Zero), new Gtk.Adjustment(IntPtr.Zero)); - laybody.Add(_body); - dialogWindow.ContentArea.PackStart(laybody, true, true, 1); - } - dialogWindow.ShowAll(); - if (this.WindowState == FormWindowState.Maximized) - { - dialogWindow.Maximize(); - } - else if (this.WindowState == FormWindowState.Minimized) - { - dialogWindow.KeepBelow = true; - } + Show(owner); + int irun = self.Run(); - irun = dialogWindow.Run(); - - } return this.DialogResult; } - private void Dia_Response(object o, ResponseArgs args) - { - base.Dispose(); - try - { - ((Gtk.Dialog)o).Dispose(); - } - catch (Exception ex) - { - Console.WriteLine(ex.Message); - } - } - public event EventHandler Shown; public event FormClosingEventHandler FormClosing; public event FormClosedEventHandler FormClosed; public override event EventHandler Load; - public override string Text { get { return base.Control.Title; } set { base.Control.Title = value; } } - public Size ClientSize + public override string Text { get { return self.Title; } set { self.Title = value; } } + public override Size ClientSize { get { - return new Size(base.Control.WidthRequest, base.Control.HeightRequest); + return new Size(self.WidthRequest, self.HeightRequest); } set { - base.Control.SetDefaultSize(value.Width, value.Height); - base.Control.Data["InitWidth"] = value.Width; - base.Control.Data["InitHeight"] = value.Height; - base.Width = value.Width; - base.Height = value.Height; + self.WidthRequest = 100; + self.HeightRequest = 60; + self.SetDefaultSize(value.Width, value.Height); + } + } + public override bool AutoScroll { + get => base.AutoScroll; + set { + base.AutoScroll = value; + if (value == true) + background.StyleContext.AddClass("ScrollForm"); + else + background.StyleContext.RemoveClass("ScrollForm"); } } - public Rectangle ClientRectangle { get; } - public SizeF AutoScaleDimensions { get; set; } public AutoScaleMode AutoScaleMode { get; set; } + public FormBorderStyle formBorderStyle = FormBorderStyle.Sizable; public FormBorderStyle FormBorderStyle { - get { return base.Control.Resizable == true ? FormBorderStyle.Sizable : FormBorderStyle.None; } - set { base.Control.Resizable = value == FormBorderStyle.Sizable; } + get { return formBorderStyle; } + set { + formBorderStyle = value; + self.Resizable = value == FormBorderStyle.Sizable || value == FormBorderStyle.SizableToolWindow; + if (value == FormBorderStyle.None) + { + self.BorderWidth = 0; + self.Decorated = false; //删除工具栏 + } + else if (value == FormBorderStyle.FixedToolWindow) + { + self.Decorated = true; + self.TypeHint = Gdk.WindowTypeHint.Dialog; + } + else if (value == FormBorderStyle.SizableToolWindow) + { + self.Decorated = true; + self.TypeHint = Gdk.WindowTypeHint.Dialog; + } + else + { + self.Decorated = true; + self.TypeHint = Gdk.WindowTypeHint.Normal; + } + } } public FormWindowState WindowState { get; set; } = FormWindowState.Normal; public DialogResult DialogResult { get; set; } public void Close() { - if (dialogWindow != null) + if (self != null) { - dialogWindow.HideOnDelete(); + self.CloseWindow(); + self.Dispose(); + } + } + public override void Hide() + { + if (self != null) + { + self.Hide(); } - this.Control.Close(); } - public new ObjectCollection Controls { get { return _ObjectCollection; } } - public object ActiveControl { get; set; } + public new ObjectCollection Controls { get { return _ObjectCollection; } } + public bool MaximizeBox { get; set; } = true; + public bool MinimizeBox { get; set; } = true; + public double Opacity { get { return self.Opacity; } set { self.Opacity = value; } } + public bool ShowIcon { get; set; } = true; + public bool ShowInTaskbar { get { return self.SkipTaskbarHint == false; } set { self.SkipTaskbarHint = value == false; } } + public System.Drawing.Icon Icon { get; set; } public override void SuspendLayout() { _Created = false; @@ -407,365 +465,23 @@ namespace System.Windows.Forms return true; } - public bool ActivateControl(Control active) - { - return false; - } - - public bool AutoScroll { get; set; } - public MenuStrip MainMenuStrip { get; set; } - public IntPtr Handle => base.Control.OwnedHandle; + public override IntPtr Handle => self.Handle; public class ObjectCollection : ControlCollection { Gtk.Container __owner; - public ObjectCollection(Gtk.Container owner) : base(owner) + public ObjectCollection(Control control, Gtk.Container owner) : base(control, owner) { __owner = owner; } - public static Form ActiveForm { get; } - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - [EditorBrowsable(EditorBrowsableState.Never)] - - public bool AutoScale { get; set; } - [SettingsBindable(true)] - public Point Location { get; set; } - [DefaultValue(false)] - - public bool KeyPreview { get; set; } - [Browsable(false)] - [EditorBrowsable(EditorBrowsableState.Advanced)] - public bool IsRestrictedWindow { get; } - [DefaultValue(false)] - - - public bool IsMdiContainer { get; set; } - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - - - public bool IsMdiChild { get; } - - //[AmbientValue(null)] - //[Localizable(true)] - //public Icon Icon { get; set; } - - [DefaultValue(false)] - public bool HelpButton { get; set; } - - //[Browsable(false)] - //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - - public DialogResult DialogResult { get; set; } - - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - - public Point DesktopLocation { get; set; } - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - - public Form ActiveMdiChild { get; } - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - - - public Rectangle DesktopBounds { get; set; } - - [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] - [Localizable(true)] - public Size ClientSize { get; set; } - - [DefaultValue(null)] - - public IButtonControl CancelButton { get; set; } - - [DefaultValue(FormBorderStyle.Sizable)] - - - public FormBorderStyle FormBorderStyle { get; set; } - - public Color BackColor { get; set; } - [Browsable(true)] - [EditorBrowsable(EditorBrowsableState.Always)] - public AutoValidate AutoValidate { get; set; } - [Browsable(true)] - [DefaultValue(AutoSizeMode.GrowOnly)] - [Localizable(true)] - - - public AutoSizeMode AutoSizeMode { get; set; } - [Browsable(true)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] - [EditorBrowsable(EditorBrowsableState.Always)] - public bool AutoSize { get; set; } - [Localizable(true)] - public bool AutoScroll { get; set; } - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - [EditorBrowsable(EditorBrowsableState.Never)] - [Localizable(true)] - public virtual Size AutoScaleBaseSize { get; set; } - [DefaultValue(typeof(Size), "0, 0")] - [Localizable(true)] - [RefreshProperties(RefreshProperties.Repaint)] - - - public Size MaximumSize { get; set; } - [DefaultValue(true)] - - - public bool ControlBox { get; set; } - [DefaultValue(null)] - - - [TypeConverter(typeof(ReferenceConverter))] - public MenuStrip MainMenuStrip { get; set; } - [Localizable(true)] - [RefreshProperties(RefreshProperties.Repaint)] - - - public Size MinimumSize { get; set; } - [DefaultValue(FormWindowState.Normal)] - public FormWindowState WindowState { get; set; } - - - public Color TransparencyKey { get; set; } - [DefaultValue(false)] - - - public bool TopMost { get; set; } - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - [EditorBrowsable(EditorBrowsableState.Advanced)] - public bool TopLevel { get; set; } - [SettingsBindable(true)] - public string Text { get; set; } - [Browsable(false)] - [DefaultValue(true)] - - [EditorBrowsable(EditorBrowsableState.Never)] - - - public bool TabStop { get; set; } - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - [EditorBrowsable(EditorBrowsableState.Never)] - public int TabIndex { get; set; } - - [DefaultValue(FormStartPosition.WindowsDefaultLocation)] - [Localizable(true)] - - - public FormStartPosition StartPosition { get; set; } - [DefaultValue(SizeGripStyle.Auto)] - - - public SizeGripStyle SizeGripStyle { get; set; } - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - [Localizable(false)] - public Size Size { get; set; } - [Browsable(false)] - [EditorBrowsable(EditorBrowsableState.Never)] - public Padding Margin { get; set; } - [DefaultValue(true)] - - - public bool ShowIcon { get; set; } - [DefaultValue(false)] - [Localizable(true)] - public virtual bool RightToLeftLayout { get; set; } - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public Rectangle RestoreBounds { get; } - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public Form Owner { get; set; } - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public Form[] OwnedForms { get; } - [DefaultValue(1)] - [TypeConverter(typeof(OpacityConverter))] - public double Opacity { get; set; } - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public bool Modal { get; } - [DefaultValue(true)] - - - public bool MinimizeBox { get; set; } - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - - - public Form MdiParent { get; set; } - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - - - public Form[] MdiChildren { get; } - [DefaultValue(true)] - - - public bool MaximizeBox { get; set; } - [DefaultValue(true)] - - - public bool ShowInTaskbar { get; set; } - [DefaultValue(null)] - - public IButtonControl AcceptButton { get; set; } - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - - public bool AllowTransparency { get; set; } - - public event FormClosingEventHandler FormClosing; - [Browsable(false)] - [EditorBrowsable(EditorBrowsableState.Never)] - public event EventHandler TabIndexChanged; - - - public event EventHandler MinimumSizeChanged; - [Browsable(false)] - [EditorBrowsable(EditorBrowsableState.Never)] - public event EventHandler MarginChanged; - - - public event EventHandler ResizeEnd; - - - public event EventHandler MaximumSizeChanged; - [Browsable(true)] - [EditorBrowsable(EditorBrowsableState.Always)] - - - public event EventHandler AutoSizeChanged; - [Browsable(true)] - [EditorBrowsable(EditorBrowsableState.Always)] - public event EventHandler AutoValidateChanged; - - - public event EventHandler MdiChildActivate; - - - public event FormClosedEventHandler FormClosed; - - - public event EventHandler Deactivate; - - - public event EventHandler Load; - - - public event EventHandler MaximizedBoundsChanged; - [Browsable(false)] - [EditorBrowsable(EditorBrowsableState.Never)] - public event EventHandler TabStopChanged; - [Browsable(true)] - [EditorBrowsable(EditorBrowsableState.Always)] - - - public event CancelEventHandler HelpButtonClicked; - [Browsable(false)] - [EditorBrowsable(EditorBrowsableState.Never)] - - - public event CancelEventHandler Closing; - [Browsable(false)] - [EditorBrowsable(EditorBrowsableState.Never)] - - - public event EventHandler Closed; - - - public event EventHandler ResizeBegin; - - - public event DpiChangedEventHandler DpiChanged; - - - public event EventHandler Shown; - - public event EventHandler Activated; - - - public event InputLanguageChangingEventHandler InputLanguageChanging; - - - public event InputLanguageChangedEventHandler InputLanguageChanged; - [Browsable(false)] - public event EventHandler MenuStart; - - public event EventHandler RightToLeftLayoutChanged; - [Browsable(false)] - public event EventHandler MenuComplete; - - [EditorBrowsable(EditorBrowsableState.Never)] - - public static SizeF GetAutoScaleSize(Font font) { return new SizeF(); } - public void Activate() { } - public void AddOwnedForm(Form ownedForm) { } - public void Close() { } - public void LayoutMdi(MdiLayout value) { } - public void RemoveOwnedForm(Form ownedForm) { } - public void SetDesktopBounds(int x, int y, int width, int height) { } - public void SetDesktopLocation(int x, int y) { } - public void Show(IWin32Window owner) { } - //public DialogResult ShowDialog(IWin32Window owner) { return new DialogResult(); } - //public DialogResult ShowDialog() { return new DialogResult(); } - - [Browsable(true)] - [EditorBrowsable(EditorBrowsableState.Always)] - public bool ValidateChildren() { return true; } - [Browsable(true)] - [EditorBrowsable(EditorBrowsableState.Always)] - public bool ValidateChildren(ValidationConstraints validationConstraints) { return true; } - - - [Browsable(false)] - [EditorBrowsable(EditorBrowsableState.Advanced)] - public SizeF CurrentAutoScaleDimensions { get; } - - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public Control ActiveControl { get; set; } - - [Browsable(false)] - public BindingContext BindingContext { get; set; } - - - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - [EditorBrowsable(EditorBrowsableState.Advanced)] - public AutoScaleMode AutoScaleMode { get; set; } - - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - [EditorBrowsable(EditorBrowsableState.Advanced)] - [Localizable(true)] - public SizeF AutoScaleDimensions { get; set; } - - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public Form ParentForm { get; } - - public void PerformAutoScale() { } - - public bool Validate() { return true; } - - public bool Validate(bool checkAutoValidate) { return true; } } public class MdiLayout { } - - } public class BindingContext : ContextBoundObject diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/GroupBox.cs b/Source/GTKSystem.Windows.Forms/GTKControls/GroupBox.cs index c5ec7f2ea3613a588af0b80c02dfbbc3933d25b1..9052081a62183a659cbb9896e6dd435f90a17398 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/GroupBox.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/GroupBox.cs @@ -1,40 +1,30 @@ -//基于GTK3.24.24.34版本组件开发,兼容原生C#控件winform界面的跨平台界面组件。 -//使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows和linux运行 -//技术支持438865652@qq.com,https://www.cnblogs.com/easywebfactory +/* + * 基于GTK组件开发,兼容原生C#控件winform界面的跨平台界面组件。 + * 使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows、linux、macos运行 + * 技术支持438865652@qq.com,https://gitee.com/easywebfactory, https://www.cnblogs.com/easywebfactory + * author:chenhongjin + * date: 2024/1/3 + */ +using GTKSystem.Windows.Forms.GTKControls.ControlBase; using System.ComponentModel; using System.Drawing; namespace System.Windows.Forms { [DesignerCategory("Component")] - public partial class GroupBox : WidgetControl + public partial class GroupBox : ContainerControl { - private Gtk.Fixed contaner; - private ControlCollection _controls; + public readonly GroupBoxBase self = new GroupBoxBase(); + public override object GtkControl => self; + private Gtk.Fixed contaner = new Gtk.Fixed(); + private ControlCollection _controls = null; public GroupBox() : base() { - Widget.StyleContext.AddClass("GroupBox"); - Widget.StyleContext.AddClass("BorderRadiusStyle"); - base.Control.LabelXalign = 0.03f; - contaner = new Gtk.Fixed(); - contaner.Margin = 0; - contaner.MarginStart = 0; - contaner.MarginTop = 0; - _controls = new ControlCollection(contaner); - base.Control.Add(contaner); - base.Control.Realized += Control_Realized; + _controls = new ControlCollection(this, contaner); + self.Child = contaner; } - private void Control_Realized(object sender, EventArgs e) - { - foreach (Gtk.Widget wid in contaner.Children) - { - wid.MarginTop = (int)wid.Data["InitMarginTop"] - 15; - wid.Data["InitMarginTop"] = wid.MarginTop; - wid.MarginStart = (int)wid.Data["InitMarginStart"]; - } - } - public override string Text { get { return base.Control.Label; } set { base.Control.Label = value; } } + public override string Text { get { return self.Label; } set { self.Label = value; } } public override ControlCollection Controls => _controls; public override void SuspendLayout() diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ImageList/ColorDepth.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ImageList/ColorDepth.cs new file mode 100644 index 0000000000000000000000000000000000000000..f7d81f3afd9c9816a9a2da2c0e3faa60c2e91a7e --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ImageList/ColorDepth.cs @@ -0,0 +1,14 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace System.Windows.Forms +{ + public enum ColorDepth + { + Depth4Bit = 4, + Depth8Bit = 8, + Depth16Bit = 16, + Depth24Bit = 24, + Depth32Bit = 32, + } +} \ No newline at end of file diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ImageList/ImageList.ImageCollection.ImageInfo.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ImageList/ImageList.ImageCollection.ImageInfo.cs new file mode 100644 index 0000000000000000000000000000000000000000..6855ebd4247839b73284eb278cd977281067af68 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ImageList/ImageList.ImageCollection.ImageInfo.cs @@ -0,0 +1,16 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace System.Windows.Forms +{ + public sealed partial class ImageList + { + public sealed partial class ImageCollection + { + internal class ImageInfo + { + public string? Name { get; set; } + } + } + } +} \ No newline at end of file diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ImageList/ImageList.ImageCollection.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ImageList/ImageList.ImageCollection.cs new file mode 100644 index 0000000000000000000000000000000000000000..861c11b3b3f6b614787a6df885c63034cdaa581d --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ImageList/ImageList.ImageCollection.cs @@ -0,0 +1,596 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Collections; +using System.Collections.Generic; +using System.Collections.Specialized; +using System.ComponentModel; +using System.Diagnostics; +using System.Drawing; +using System.Drawing.Design; +using System.Drawing.Imaging; + +namespace System.Windows.Forms +{ + public sealed partial class ImageList + { + + public sealed partial class ImageCollection : IList + { + private readonly ImageList _owner; + private readonly List _imageInfoCollection = new List(); + + /// A caching mechanism for key accessor + /// We use an index here rather than control so that we don't have lifetime + /// issues by holding on to extra references. + private int _lastAccessedIndex = -1; + + // Indicates whether images are added in a batch. + private bool _isBatchAdd; + + /// + /// Returns the keys in the image list - images without keys return String.Empty. + /// + public StringCollection Keys + { + get + { + // pass back a copy of the current state. + StringCollection keysCollection = new StringCollection(); + + for (int i = 0; i < _imageInfoCollection.Count; i++) + { + if ((_imageInfoCollection[i] is ImageInfo image) && (image.Name != null) && (image.Name.Length != 0)) + { + keysCollection.Add(image.Name); + } + else + { + keysCollection.Add(string.Empty); + } + } + + return keysCollection; + } + } + + internal ImageCollection(ImageList owner) + { + _owner = owner; + } + + internal void ResetKeys() + { + _imageInfoCollection.Clear(); + + for (int i = 0; i < Count; i++) + { + _imageInfoCollection.Add(new ImageInfo()); + } + } + + private void AssertInvariant() + { + Debug.Assert(_owner != null, "ImageCollection has no owner (ImageList)"); + Debug.Assert((_owner._originals is null) == (_owner.HandleCreated), " Either we should have the original images, or the handle should be created"); + } + + [Browsable(false)] + public int Count + { + get + { + Debug.Assert(_owner != null, "ImageCollection has no owner (ImageList)"); + + //if (_owner.HandleCreated) + //{ + // return PInvoke.ImageList.GetImageCount(_owner); + //} + //else + //{ + //if (_owner._originals is null) + //{ + // return 0; + //} + + int count = 0; + foreach (Original original in _owner._originals) + { + if (original != null) + { + count += original._nImages; + } + } + + return count; + // } + } + } + + object ICollection.SyncRoot => this; + + bool ICollection.IsSynchronized => false; + + bool IList.IsFixedSize => false; + + public bool IsReadOnly => false; + + /// + /// Determines if the ImageList has any images, without forcing a handle creation. + /// + public bool Empty => Count == 0; + + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public Image this[int index] + { + get + { + //ArgumentOutOfRangeException.ThrowIfNegative(index); + //ArgumentOutOfRangeException.ThrowIfGreaterThanOrEqual(index, Count); + + return _owner.GetBitmap(index); + } + set + { + //ArgumentOutOfRangeException.ThrowIfNegative(index); + //ArgumentOutOfRangeException.ThrowIfGreaterThanOrEqual(index, Count); + //ArgumentNullException.ThrowIfNull(value); + + //if (value is not Bitmap bitmap) + //{ + // //throw new ArgumentException(SR.ImageListBitmap); + //} + Bitmap bitmap = value as Bitmap; + AssertInvariant(); + bool ownsImage = false; + if (_owner.UseTransparentColor && bitmap.RawFormat.Guid != ImageFormat.Icon.Guid) + { + // Since there's no ImageList_ReplaceMasked, we need to generate + // a transparent bitmap + bitmap = (Bitmap)bitmap.Clone(); + bitmap.MakeTransparent(_owner.TransparentColor); + ownsImage = true; + } + + try + { + //HBITMAP hMask = (HBITMAP)ControlPaint.CreateHBitmapTransparencyMask(bitmap); + //HBITMAP hBitmap = (HBITMAP)ControlPaint.CreateHBitmapColorMask(bitmap, hMask); + //bool ok; + //try + //{ + // ok = PInvoke.ImageList.Replace(_owner, index, hBitmap, hMask); + //} + //finally + //{ + // PInvokeCore.DeleteObject((HGDIOBJ)hBitmap); + // PInvokeCore.DeleteObject((HGDIOBJ)hMask); + //} + + //if (!ok) + //{ + // throw new InvalidOperationException(SR.ImageListReplaceFailed); + //} + } + finally + { + if (ownsImage) + { + bitmap.Dispose(); + } + } + } + } + + object? IList.this[int index] + { + get => this[index]; + set + { + //if (value is not Image image) + //{ + // throw new ArgumentException(SR.ImageListBadImage, nameof(value)); + //} + + this[index] = value as Image; + } + } + + /// + /// Retrieves the child control with the specified key. + /// + public Image? this[string key] + { + get + { + // We do not support null and empty string as valid keys. + if (string.IsNullOrEmpty(key)) + { + return null; + } + + // Search for the key in our collection + int index = IndexOfKey(key); + if (!IsValidIndex(index)) + { + return null; + } + + return this[index]; + } + } + + /// + /// Adds an image to the end of the image list with a key accessor. + /// + public void Add(string key, Image image) + { + Debug.Assert((Count == _imageInfoCollection.Count), "The count of these two collections should be equal."); + + // Store off the name. + ImageInfo imageInfo = new ImageInfo() + { + Name = key + }; + + // Add the image to the IList + Original original = new Original(image, OriginalOptions.Default); + Add(original, imageInfo); + } + + /// + /// Adds an icon to the end of the image list with a key accessor. + /// + public void Add(string key, Icon icon) + { + Debug.Assert((Count == _imageInfoCollection.Count), "The count of these two collections should be equal."); + + // Store off the name. + ImageInfo imageInfo = new ImageInfo() + { + Name = key + }; + + // Add the image to the IList + Original original = new Original(icon, OriginalOptions.Default); + Add(original, imageInfo); + } + + int IList.Add(object? value) + { + //if (value is not Image image) + //{ + // //throw new ArgumentException(SR.ImageListBadImage, nameof(value)); + //} + + Add((Image)value); + return Count - 1; + } + + public void Add(Icon value) + { + //ArgumentNullException.ThrowIfNull(value); + + // Don't clone it now is a breaking change, so we have to keep track of this specific icon and dispose that + Add(new Original(value.Clone(), OriginalOptions.OwnsImage), null); + } + + /// + /// Add the given image to the ImageList. + /// + public void Add(Image value) + { + //ArgumentNullException.ThrowIfNull(value); + + Original original = new Original(value, OriginalOptions.Default); + Add(original, null); + } + + /// + /// Add the given image to the ImageList, using the given color + /// to generate the mask. The number of images to add is inferred from + /// the width of the given image. + /// + public int Add(Image value, Color transparentColor) + { + //ArgumentNullException.ThrowIfNull(value); + + Original original = new Original(value, OriginalOptions.CustomTransparentColor, transparentColor); + return Add(original, null); + } + + private int Add(Original original, ImageInfo? imageInfo) + { + //ArgumentNullException.ThrowIfNull(original); + //ArgumentNullException.ThrowIfNull(original._image, nameof(original)); + + int index = -1; + + AssertInvariant(); + + if (original._image is Bitmap) + { + if (_owner._originals != null) + { + index = ((IList)_owner._originals).Add(original); + } + + if (_owner.HandleCreated) + { + Bitmap bitmapValue = _owner.CreateBitmap(original, out bool ownsBitmap); + index = _owner.AddToHandle(bitmapValue); + if (ownsBitmap) + { + bitmapValue.Dispose(); + } + } + } + else if (original._image is Icon originalIcon) + { + if (_owner._originals != null) + { + index = ((IList)_owner._originals).Add(original); + } + + if (_owner.HandleCreated) + { + index = _owner.AddIconToHandle(original, originalIcon); + // NOTE: if we own the icon (it's been created by us) this WILL dispose the icon to avoid a GDI leak + // **** original.image is NOT LONGER VALID AFTER THIS POINT *** + } + } + else + { + //throw new ArgumentException(SR.ImageListBitmap); + } + + // update the imageInfoCollection + // support AddStrip + if ((original._options & OriginalOptions.ImageStrip) != 0) + { + for (int i = 0; i < original._nImages; i++) + { + _imageInfoCollection.Add(new ImageInfo()); + } + } + else + { + imageInfo ??= new ImageInfo(); + _imageInfoCollection.Add(imageInfo); + } + + if (!_isBatchAdd) + { + _owner.OnChangeHandle(EventArgs.Empty); + } + + return index; + } + + public void AddRange(params Image[] images) + { + //ArgumentNullException.ThrowIfNull(images); + + _isBatchAdd = true; + foreach (Image image in images) + { + Add(image); + } + + _isBatchAdd = false; + _owner.OnChangeHandle(EventArgs.Empty); + } + + /// + /// Add an image strip the given image to the ImageList. A strip is a single Image + /// which is treated as multiple images arranged side-by-side. + /// + public int AddStrip(Image value) + { + //ArgumentNullException.ThrowIfNull(value); + + // strip width must be a positive multiple of image list width + //if (value.Width == 0 || (value.Width % _owner.ImageSize.Width) != 0) + //{ + // throw new ArgumentException(SR.ImageListStripBadWidth, nameof(value)); + //} + + //if (value.Height != _owner.ImageSize.Height) + //{ + // throw new ArgumentException(SR.ImageListImageTooShort, nameof(value)); + //} + + int nImages = value.Width / _owner.ImageSize.Width; + + Original original = new Original(value, OriginalOptions.ImageStrip, nImages); + + return Add(original, null); + } + + /// + /// Remove all images and masks from the ImageList. + /// + public void Clear() + { + AssertInvariant(); + _owner._originals?.Clear(); + + _imageInfoCollection.Clear(); + + //if (_owner.HandleCreated) + //{ + // PInvoke.ImageList.Remove(_owner, -1); + //} + + _owner.OnChangeHandle(EventArgs.Empty); + } + + [EditorBrowsable(EditorBrowsableState.Never)] + public bool Contains(Image image) => throw new NotSupportedException(); + + bool IList.Contains(object? value) + { + if (value is Image image) + { + return Contains(image); + } + else + { + return false; + } + } + + /// + /// Returns true if the collection contains an item with the specified key, false otherwise. + /// + public bool ContainsKey(string key) => IsValidIndex(IndexOfKey(key)); + + [EditorBrowsable(EditorBrowsableState.Never)] + public int IndexOf(Image image) => throw new NotSupportedException(); + + int IList.IndexOf(object? value) + { + if (value is Image image) + { + return IndexOf(image); + + } + return -1; + } + + /// + /// The zero-based index of the first occurrence of value within the entire CollectionBase, + /// if found; otherwise, -1. + /// + public int IndexOfKey(string key) + { + if (string.IsNullOrEmpty(key)) + { + // We don't support empty or null keys. + return -1; + } + + // Check the last cached item + int i = _lastAccessedIndex; + if (IsValidIndex(i)) + { + //if ((_imageInfoCollection[i] != null) && + // (WindowsFormsUtils.SafeCompareStrings(_imageInfoCollection[i].Name, key, ignoreCase: true))) + //{ + return i; + //} + } + + // Search for the item + for (i = 0; i < Count; i++) + { + //if ((_imageInfoCollection[i] != null) && + // (WindowsFormsUtils.SafeCompareStrings(_imageInfoCollection[i].Name, key, ignoreCase: true))) + //{ + _lastAccessedIndex = i; + return i; + //} + } + + // We didn't find it. Invalidate the last accessed index and return -1. + _lastAccessedIndex = -1; + return -1; + } + + void IList.Insert(int index, object? value) => throw new NotSupportedException(); + + /// + /// Determines if the index is valid for the collection. + /// + private bool IsValidIndex(int index) => index >= 0 && index < Count; + + void ICollection.CopyTo(Array dest, int index) + { + AssertInvariant(); + for (int i = 0; i < Count; ++i) + { + dest.SetValue(_owner.GetBitmap(i), index++); + } + } + + public IEnumerator GetEnumerator() + { + // Forces handle creation + + AssertInvariant(); + Image[] images = new Image[Count]; + for (int i = 0; i < images.Length; ++i) + { + images[i] = _owner.GetBitmap(i); + } + + return images.GetEnumerator(); + } + + [EditorBrowsable(EditorBrowsableState.Never)] + public void Remove(Image image) => throw new NotSupportedException(); + + void IList.Remove(object? value) + { + if (value is Image image) + { + Remove(image); + + _owner.OnChangeHandle(EventArgs.Empty); + } + } + + public void RemoveAt(int index) + { + //ArgumentOutOfRangeException.ThrowIfNegative(index); + //ArgumentOutOfRangeException.ThrowIfGreaterThanOrEqual(index, Count); + + AssertInvariant(); + //if (!PInvoke.ImageList.Remove(_owner, index)) + //{ + // throw new InvalidOperationException(SR.ImageListRemoveFailed); + //} + if (_imageInfoCollection is null) + return; + if (index >= 0 && index < _imageInfoCollection.Count) + { + _imageInfoCollection.RemoveAt(index); + + _owner.OnChangeHandle(EventArgs.Empty); + } + } + + /// + /// Removes the child control with the specified key. + /// + public void RemoveByKey(string key) + { + int index = IndexOfKey(key); + if (IsValidIndex(index)) + { + RemoveAt(index); + } + } + + /// + /// Sets/Resets the key accessor for an image already in the image list. + /// + public void SetKeyName(int index, string name) + { + if (!IsValidIndex(index)) + { + MessageBox.Show("ImageList控件的图片请放到程序目录:Resources/[imagelist名]/"); + throw new IndexOutOfRangeException(); + } + + if (_imageInfoCollection[index] is null) + { + _imageInfoCollection[index] = new ImageInfo(); + } + + _imageInfoCollection[index].Name = name; + } + } + } +} \ No newline at end of file diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ImageList/ImageList.Indexer.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ImageList/ImageList.Indexer.cs new file mode 100644 index 0000000000000000000000000000000000000000..05095d583141a014bebb99d2421fff053949445a --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ImageList/ImageList.Indexer.cs @@ -0,0 +1,73 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace System.Windows.Forms +{ + public sealed partial class ImageList + { + /// + /// This class is for classes that want to support both an ImageIndex + /// and ImageKey. We want to toggle between using keys or indexes. + /// Default is to use the integer index. + /// + internal class Indexer + { + // Used by TreeViewImageIndexConverter to show "(none)" + internal const int NoneIndex = -2; + + // Used by generally across the board to indicate unset image + internal const string DefaultKey = ""; + internal const int DefaultIndex = -1; + + private string _key = DefaultKey; + private int _index = DefaultIndex; + private bool _useIntegerIndex = true; + + public virtual ImageList? ImageList { get; set; } + + + public virtual string Key + { + get => _key; + set + { + _index = DefaultIndex; + _key = value ?? DefaultKey; + _useIntegerIndex = false; + } + } + + public virtual int Index + { + get => _index; + set + { + _key = DefaultKey; + _index = value; + _useIntegerIndex = true; + } + } + + public virtual int ActualIndex + { + get + { + if (_useIntegerIndex) + { + return Index; + } + if (ImageList is null) + { + + } + else // if (ImageList != null) + { + return ImageList.Images.IndexOfKey(Key); + } + + return DefaultIndex; + } + } + } + } +} \ No newline at end of file diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ImageList/ImageList.NativeImageList.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ImageList/ImageList.NativeImageList.cs new file mode 100644 index 0000000000000000000000000000000000000000..e62239025398b0e170cd06d967b05e100f642e1f --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ImageList/ImageList.NativeImageList.cs @@ -0,0 +1,117 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Diagnostics; +using System.Drawing; + +namespace System.Windows.Forms +{ + public sealed partial class ImageList + { + internal class NativeImageList : IDisposable//, IHandle + { +#if DEBUG + private readonly string _callStack = new StackTrace().ToString(); +#endif + private const int GrowBy = 4; + private const int InitialCapacity = 4; + + private static readonly object s_syncLock = new object(); + + //public unsafe NativeImageList(IStream.Interface pstm) + //{ + // //HIMAGELIST himl; + // //lock (s_syncLock) + // //{ + // // using var stream = ComHelpers.TryGetComScope(pstm, out HRESULT hr); + // // Debug.Assert(hr.Succeeded); + // // himl = PInvoke.ImageList_Read(stream); + // // Init(himl); + // //} + //} + + //public NativeImageList(Size imageSize, IMAGELIST_CREATION_FLAGS flags) + //{ + // HIMAGELIST himl; + // lock (s_syncLock) + // { + // himl = PInvoke.ImageList_Create(imageSize.Width, imageSize.Height, flags, InitialCapacity, GrowBy); + // Init(himl); + // } + //} + + //private NativeImageList(HIMAGELIST himl) + //{ + // HIMAGELIST = himl; + //} + + // private void Init(HIMAGELIST himl) + // { + // if (!himl.IsNull) + // { + // HIMAGELIST = himl; + // return; + // } + + //#if DEBUG + // Debug.Fail($"{nameof(NativeImageList)} could not be created. Originating stack:\n{_callStack}"); + //#endif + // throw new InvalidOperationException(SR.ImageListCreateFailed); + // } + + // HIMAGELIST IHandle.Handle => HIMAGELIST; + + // internal HIMAGELIST HIMAGELIST { get; private set; } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + private void Dispose(bool disposing) + { + //lock (s_syncLock) + //{ + // if (HIMAGELIST.IsNull) + // { + // return; + // } + + // PInvoke.ImageList.Destroy(this); + // HIMAGELIST = HIMAGELIST.Null; + //} + } + + ~NativeImageList() + { + // There are certain code paths where we are unable to track the lifetime of the object, + // for example in the following scenarios: + // + // this.imageList1.ImageStream = (System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream")); + // or + // resources.ApplyResources(this.listView1, "listView1"); + // + // In those cases the loose instances will be collected by the GC. + Dispose(disposing: false); + } + + //internal NativeImageList Duplicate() + //{ + // lock (s_syncLock) + // { + // HIMAGELIST himl = PInvoke.ImageList_Duplicate(HIMAGELIST); + // if (!HIMAGELIST.IsNull) + // { + // return new NativeImageList(himl); + // } + // } + + //#if DEBUG + // Debug.Fail($"{nameof(NativeImageList)} could not be duplicated. Originating stack:\n{_callStack}"); + //#endif + // throw new InvalidOperationException(SR.ImageListDuplicateFailed); + //} + } + } +} \ No newline at end of file diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ImageList/ImageList.Original.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ImageList/ImageList.Original.cs new file mode 100644 index 0000000000000000000000000000000000000000..33b66f03d0e3e19c81a9f507dba40ca60db31401 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ImageList/ImageList.Original.cs @@ -0,0 +1,48 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Diagnostics; +using System.Drawing; + +namespace System.Windows.Forms +{ + public sealed partial class ImageList + { + /// + /// An image before we add it to the image list, along with a few details about how to add it. + /// + private class Original + { + internal object _image; + internal OriginalOptions _options; + internal Color _customTransparentColor = Color.Transparent; + + internal int _nImages = 1; + + internal Original(object image, OriginalOptions options) : this(image, options, Color.Transparent) + { + } + + internal Original(object image, OriginalOptions options, int nImages) : this(image, options, Color.Transparent) + { + _nImages = nImages; + } + + internal Original(object image, OriginalOptions options, Color customTransparentColor) + { + //if (image is not Icon && image is not Image) + //{ + // throw new InvalidOperationException(SR.ImageListEntryType); + //} + + _image = image; + _options = options; + _customTransparentColor = customTransparentColor; + if ((options & OriginalOptions.CustomTransparentColor) == 0) + { + Debug.Assert(customTransparentColor.Equals(Color.Transparent), "Specified a custom transparent color then told us to ignore it"); + } + } + } + } +} \ No newline at end of file diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ImageList/ImageList.OriginalOptions.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ImageList/ImageList.OriginalOptions.cs new file mode 100644 index 0000000000000000000000000000000000000000..dcf1470a8b5bb30bc1241814047b73607cc382be --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ImageList/ImageList.OriginalOptions.cs @@ -0,0 +1,17 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace System.Windows.Forms +{ + public sealed partial class ImageList + { + [Flags] + private enum OriginalOptions + { + Default = 0x00, + ImageStrip = 0x01, + CustomTransparentColor = 0x02, + OwnsImage = 0x04 + } + } +} \ No newline at end of file diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ImageList/ImageList.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ImageList/ImageList.cs new file mode 100644 index 0000000000000000000000000000000000000000..99fb4bc2193dd9249d4acee4c49489a03f06d10f --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ImageList/ImageList.cs @@ -0,0 +1,539 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Collections.Generic; +using System.ComponentModel; +using System.ComponentModel.Design.Serialization; +using System.Diagnostics; +using System.Drawing; +using System.Drawing.Imaging; +using System.Linq; +using System.Text.RegularExpressions; + +namespace System.Windows.Forms +{ + /// + /// The ImageList is an object that stores a collection of Images, most + /// commonly used by other controls, such as the ListView, TreeView, or + /// Toolbar. You can add either bitmaps or Icons to the ImageList, and the + /// other controls will be able to use the Images as they desire. + /// + + [ToolboxItemFilter("System.Windows.Forms")] + [DefaultProperty(nameof(Images))] + [TypeConverter(typeof(ImageListConverter))] + public sealed partial class ImageList : Component//, IHandle + { + private static readonly Color s_fakeTransparencyColor = Color.FromArgb(0x0d, 0x0b, 0x0c); + private static readonly Size s_defaultImageSize = new Size(16, 16); + + private static int s_maxImageWidth; + private static int s_maxImageHeight; + private static bool s_isScalingInitialized; + + private NativeImageList? _nativeImageList; + + private ColorDepth _colorDepth = ColorDepth.Depth32Bit; + private Size _imageSize = s_defaultImageSize; + + private ImageCollection? _imageCollection; + + // The usual handle virtualization problem, with a new twist: image + // lists are lossy. At runtime, we delay handle creation as long as possible, and store + // away the original images until handle creation (and hope no one disposes of the images!). At design time, we keep the originals around indefinitely. + // This variable will become null when the original images are lost. + private List? _originals = new List(); + private EventHandler? _recreateHandler; + private EventHandler? _changeHandler; + + /// + /// Creates a new ImageList Control with a default image size of 16x16 pixels + /// + public ImageList() + { + if (!s_isScalingInitialized) + { + const int MaxDimension = 256; + //s_maxImageWidth = ScaleHelper.ScaleToInitialSystemDpi(MaxDimension); + //s_maxImageHeight = ScaleHelper.ScaleToInitialSystemDpi(MaxDimension); + s_isScalingInitialized = true; + } + } + + /// + /// Creates a new ImageList Control with a default image size of 16x16 + /// pixels and adds the ImageList to the passed in container. + /// + public ImageList(IContainer container) : this() + { + //ArgumentNullException.ThrowIfNull(container); + + container.Add(this); + } + + public ColorDepth ColorDepth + { + get => _colorDepth; + set + { + //SourceGenerated.EnumValidator.Validate(value); + + if (_colorDepth == value) + { + return; + } + + _colorDepth = value; + PerformRecreateHandle(nameof(ColorDepth)); + } + } + + private bool ShouldSerializeColorDepth() => Images.Count == 0; + + private void ResetColorDepth() => ColorDepth = ColorDepth.Depth32Bit; + + public IntPtr Handle + { + get + { + //if (_nativeImageList is null) + //{ + // CreateHandle(); + //} + + //return _nativeImageList.HIMAGELIST; + return IntPtr.Zero; + } + } + + public bool HandleCreated => !(_nativeImageList is null); + + public ImageCollection Images => _imageCollection ??= new ImageCollection(this); + + public Size ImageSize + { + get => _imageSize; + set + { + + if (_imageSize.Width != value.Width || _imageSize.Height != value.Height) + { + _imageSize = new Size(value.Width, value.Height); + PerformRecreateHandle(nameof(ImageSize)); + } + } + } + + private bool ShouldSerializeImageSize() => Images.Count == 0; + + public ImageListStreamer? ImageStream + { + get + { + if (Images.Empty) + { + return null; + } + return new ImageListStreamer(this); + } + set + { + if (value is null) + { + Images.Clear(); + return; + } + if (value.ResourceInfo != null) + { + //这里加载图像数据 + string direc = System.IO.Directory.GetCurrentDirectory(); + string path1 = $"{direc}/Resources/{value.ResourceInfo.ResourceName}"; + string path2 = $"{direc}/Resources/{value.ResourceInfo.ResourceName.Split(".")[0]}"; + string path3 = $"{direc}/Resources"; + + LoadOriginalImage(path1); + LoadOriginalImage(path2); + LoadOriginalImage(path3); + + if (_originals.Count == 0) + { + MessageBox.Show("ImageList控件的图片请放到程序目录:Resources/[imagelist名]/"); + } + } + } + } + private void LoadOriginalImage(string directory) + { + if (System.IO.Directory.Exists(directory)) + { + foreach (string f in System.IO.Directory.GetFiles(directory, "*.*").Where(w => Regex.IsMatch(w, "[\\w\\W]+\\.(jpg|png|jpeg|bmp|ico)", RegexOptions.IgnoreCase))) + { + Image img = Bitmap.FromFile(f); + Images.Add(img); + } + } + } +#if DEBUG + internal bool IsDisposed { get; private set; } +#endif + + public object? Tag { get; set; } + + public Color TransparentColor { get; set; } = Color.Transparent; + + private bool UseTransparentColor => TransparentColor.A > 0; + + public event EventHandler? RecreateHandle + { + add => _recreateHandler += value; + remove => _recreateHandler -= value; + } + + internal event EventHandler? ChangeHandle + { + add => _changeHandler += value; + remove => _changeHandler -= value; + } + + private Bitmap CreateBitmap(Original original, out bool ownsBitmap) + { + ownsBitmap = false; + Bitmap bitmp = original._image as Bitmap; + Gdk.Pixbuf pixbuf = new Gdk.Pixbuf(bitmp.PixbufData); + int w = Math.Max(16, Math.Min(ImageSize.Width, 200)); + int h = Math.Max(16, Math.Min(ImageSize.Height, 200)); + Gdk.Pixbuf newpixbuf = pixbuf.ScaleSimple(w, h, Gdk.InterpType.Bilinear); + ownsBitmap = true; + return new Bitmap(w, h) { Pixbuf = newpixbuf }; + } + + private int AddIconToHandle(Original original, Icon icon) + { + try + { + //Debug.Assert(HandleCreated, "Calling AddIconToHandle when there is no handle"); + //int index = PInvoke.ImageList.ReplaceIcon(this, -1, new HandleRef(icon, (HICON)icon.Handle)); + //if (index == -1) + //{ + // throw new InvalidOperationException(SR.ImageListAddFailed); + //} + + //return index; + return 0; + } + finally + { + if ((original._options & OriginalOptions.OwnsImage) != 0) + { + // This is to handle the case were we clone the icon (see why below) + icon.Dispose(); + } + } + } + + private int AddToHandle(Bitmap bitmap) + { + //Debug.Assert(HandleCreated, "Calling AddToHandle when there is no handle"); + + //// Calls GDI to create Bitmap. + //HBITMAP hMask = (HBITMAP)ControlPaint.CreateHBitmapTransparencyMask(bitmap); + + //// Calls GDI+ to create Bitmap + //HBITMAP hBitmap = (HBITMAP)ControlPaint.CreateHBitmapColorMask(bitmap, (IntPtr)hMask); + + //int index; + //try + //{ + // index = PInvoke.ImageList.Add(this, hBitmap, hMask); + //} + //finally + //{ + // PInvokeCore.DeleteObject(hBitmap); + // PInvokeCore.DeleteObject(hMask); + //} + + //if (index == -1) + //{ + // throw new InvalidOperationException(SR.ImageListAddFailed); + //} + + //return index; + return 0; + } + + private void CreateHandle() + { + //Debug.Assert(_nativeImageList is null, "Handle already created, this may be a source of temporary GDI leaks"); + + //IMAGELIST_CREATION_FLAGS flags = IMAGELIST_CREATION_FLAGS.ILC_MASK; + //switch (_colorDepth) + //{ + // case ColorDepth.Depth4Bit: + // flags |= IMAGELIST_CREATION_FLAGS.ILC_COLOR4; + // break; + // case ColorDepth.Depth8Bit: + // flags |= IMAGELIST_CREATION_FLAGS.ILC_COLOR8; + // break; + // case ColorDepth.Depth16Bit: + // flags |= IMAGELIST_CREATION_FLAGS.ILC_COLOR16; + // break; + // case ColorDepth.Depth24Bit: + // flags |= IMAGELIST_CREATION_FLAGS.ILC_COLOR24; + // break; + // case ColorDepth.Depth32Bit: + // flags |= IMAGELIST_CREATION_FLAGS.ILC_COLOR32; + // break; + // default: + // Debug.Fail("Unknown color depth in ImageList"); + // break; + //} + + //using (ThemingScope scope = new(Application.UseVisualStyles)) + //{ + // PInvoke.InitCommonControls(); + + // _nativeImageList?.Dispose(); + // _nativeImageList = new NativeImageList(_imageSize, flags); + //} + + //PInvoke.ImageList.SetBkColor(this, (COLORREF)PInvoke.CLR_NONE); + + //Debug.Assert(_originals != null, "Handle not yet created, yet original images are gone"); + for (int i = 0; i < _originals.Count; i++) + { + Original original = _originals[i]; + if (original._image is Icon originalIcon) + { + AddIconToHandle(original, originalIcon); + // NOTE: if we own the icon (it's been created by us) this WILL dispose the icon to avoid a GDI leak + // **** original.image is NOT LONGER VALID AFTER THIS POINT *** + } + else + { + Bitmap bitmapValue = CreateBitmap(original, out bool ownsBitmap); + AddToHandle(bitmapValue); + if (ownsBitmap) + { + bitmapValue.Dispose(); + } + } + } + + _originals = null; + } + + // Don't merge this function into Dispose() -- that base.Dispose() will damage the design time experience + private void DestroyHandle() + { + if (HandleCreated) + { + _nativeImageList.Dispose(); + _nativeImageList = null; + _originals = new List(); + } + } + + /// + /// Releases the unmanaged resources used by the + /// and optionally releases the managed resources. + /// + /// + /// to release both managed and unmanaged resources; + /// to release only unmanaged resources. + /// + protected override void Dispose(bool disposing) + { + if (disposing) + { + if (!(_originals is null)) + { + // we might own some of the stuff that's not been created yet + foreach (Original original in _originals) + { + if ((original._options & OriginalOptions.OwnsImage) != 0) + { + ((IDisposable)original._image).Dispose(); + } + } + } + + DestroyHandle(); + } + +#if DEBUG + // At this stage we've released all resources, and the component is essentially disposed + IsDisposed = true; +#endif + + base.Dispose(disposing); + } + + /// + /// Draw the image indicated by the given index on the given Graphics + /// at the given location. + /// + public void Draw(Graphics g, Point pt, int index) => Draw(g, pt.X, pt.Y, index); + + /// + /// Draw the image indicated by the given index on the given Graphics + /// at the given location. + /// + public void Draw(Graphics g, int x, int y, int index) => Draw(g, x, y, _imageSize.Width, _imageSize.Height, index); + + /// + /// Draw the image indicated by the given index using the location, size + /// and raster op code specified. The image is stretched or compressed as + /// necessary to fit the bounds provided. + /// + public void Draw(Graphics g, int x, int y, int width, int height, int index) + { + //ArgumentOutOfRangeException.ThrowIfNegative(index); + //ArgumentOutOfRangeException.ThrowIfGreaterThanOrEqual(index, Images.Count); + + //HDC dc = (HDC)g.GetHdc(); + //try + //{ + // PInvoke.ImageList.DrawEx( + // this, + // index, + // new HandleRef(g, dc), + // x, + // y, + // width, + // height, + // (COLORREF)PInvoke.CLR_NONE, + // (COLORREF)PInvoke.CLR_NONE, + // IMAGE_LIST_DRAW_STYLE.ILD_TRANSPARENT); + //} + //finally + //{ + // g.ReleaseHdcInternal(dc); + //} + } + + private static unsafe void CopyBitmapData(BitmapData sourceData, BitmapData targetData) + { + Debug.Assert(Image.GetPixelFormatSize(sourceData.PixelFormat) == 32); + Debug.Assert(Image.GetPixelFormatSize(sourceData.PixelFormat) == Image.GetPixelFormatSize(targetData.PixelFormat)); + Debug.Assert(targetData.Width == sourceData.Width); + Debug.Assert(targetData.Height == sourceData.Height); + Debug.Assert(targetData.Stride == targetData.Width * 4); + + // do the actual copy + int offsetSrc = 0; + int offsetDest = 0; + for (int i = 0; i < targetData.Height; i++) + { + IntPtr srcPtr = sourceData.Scan0 + offsetSrc; + IntPtr destPtr = targetData.Scan0 + offsetDest; + int length = Math.Abs(targetData.Stride); + Buffer.MemoryCopy(srcPtr.ToPointer(), destPtr.ToPointer(), length, length); + offsetSrc += sourceData.Stride; + offsetDest += targetData.Stride; + } + } + + private static unsafe bool BitmapHasAlpha(BitmapData bmpData) + { + if (bmpData.PixelFormat != PixelFormat.Format32bppArgb && bmpData.PixelFormat != PixelFormat.Format32bppRgb) + { + return false; + } + + for (int i = 0; i < bmpData.Height; i++) + { + int offsetRow = i * bmpData.Stride; + for (int j = 3; j < bmpData.Width * 4; j += 4) // *4 is safe since we know PixelFormat is ARGB + { + byte* candidate = ((byte*)bmpData.Scan0.ToPointer()) + offsetRow + j; + if (*candidate != 0) + { + return true; + } + } + } + + return false; + } + + /// + /// Returns the image specified by the given index. The bitmap returned is a + /// copy of the original image. + /// + // NOTE: forces handle creation, so doesn't return things from the original list + + private Bitmap GetBitmap(int index) + { + Bitmap bitmp = _originals[index]._image as Bitmap; + Gdk.Pixbuf pixbuf = new Gdk.Pixbuf(bitmp.PixbufData); + int w = Math.Max(16, Math.Min(ImageSize.Width, 200)); + int h = Math.Max(16, Math.Min(ImageSize.Height, 200)); + Gdk.Pixbuf newpixbuf = pixbuf.ScaleSimple(w, h, Gdk.InterpType.Bilinear); + return new Bitmap(w, h) { Pixbuf = newpixbuf }; + } + + /// + /// Called when the Handle property changes. + /// + private void OnRecreateHandle(EventArgs eventargs) => _recreateHandler?.Invoke(this, eventargs); + + private void OnChangeHandle(EventArgs eventargs) => _changeHandler?.Invoke(this, eventargs); + + // PerformRecreateHandle doesn't quite do what you would suspect. + // Any existing images in the imagelist will NOT be copied to the + // new image list -- they really should. + + // The net effect is that if you add images to an imagelist, and + // then e.g. change the ImageSize any existing images will be lost + // and you will have to add them back. This is probably a corner case + // but it should be mentioned. + // + // The fix isn't as straightforward as you might think, i.e. we + // cannot just blindly store off the images and copy them into + // the newly created imagelist. E.g. say you change the ColorDepth + // from 8-bit to 32-bit. Just copying the 8-bit images would be wrong. + // Therefore we are going to leave this as is. Users should make sure + // to set these properties before actually adding the images. + + // The Designer works around this by shadowing any Property that ends + // up calling PerformRecreateHandle (ImageSize, ColorDepth, ImageStream). + + // Thus, if you add a new Property to ImageList which ends up calling + // PerformRecreateHandle, you must shadow the property in ImageListDesigner. + private void PerformRecreateHandle(string reason) + { + if (!HandleCreated) + { + return; + } + + if (_originals is null || Images.Empty) + { + // spoof it into thinking this is the first CreateHandle + _originals = new List(); + } + + DestroyHandle(); + CreateHandle(); + OnRecreateHandle(EventArgs.Empty); + } + + private void ResetImageSize() => ImageSize = s_defaultImageSize; + + private void ResetTransparentColor() => TransparentColor = Color.LightGray; + + private bool ShouldSerializeTransparentColor() => !TransparentColor.Equals(Color.LightGray); + + /// + /// Returns a string representation for this control. + /// + public override string ToString() + => Images is null + ? base.ToString() + : $"{base.ToString()} Images.Count: {Images.Count}, ImageSize: {ImageSize}"; + + //HIMAGELIST IHandle.Handle => HIMAGELIST; + + //internal HIMAGELIST HIMAGELIST => (HIMAGELIST)Handle; + } +} \ No newline at end of file diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ImageList/ImageListConverter.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ImageList/ImageListConverter.cs new file mode 100644 index 0000000000000000000000000000000000000000..21a2f33627569dc552d404ea1a94978553152439 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ImageList/ImageListConverter.cs @@ -0,0 +1,20 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.ComponentModel; + +namespace System.Windows.Forms +{ + internal class ImageListConverter : ComponentConverter + { + public ImageListConverter() : base(typeof(ImageList)) + { + } + + /// + /// Gets a value indicating whether this object supports properties using the + /// specified context. + /// + public override bool GetPropertiesSupported(ITypeDescriptorContext? context) => true; + } +} \ No newline at end of file diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ImageList/ImageListStreamer.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ImageList/ImageListStreamer.cs new file mode 100644 index 0000000000000000000000000000000000000000..0e4eab634d2e336f7a3f35bbc850182e28c250a8 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ImageList/ImageListStreamer.cs @@ -0,0 +1,221 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.IO; +using System.IO.Compression; +using System.Runtime.Serialization; +using static GTKSystem.Resources.ResourceManager; + +namespace System.Windows.Forms +{ + + [Serializable] // This type is participating in resx serialization scenarios. + public sealed class ImageListStreamer : ISerializable, IDisposable + { + private static readonly byte[] HEADER_MAGIC = new byte[] { 0x4D, 0x53, 0x46, 0X74 }; + public ResourceInfo ResourceInfo { get; set; } + // Compressed magic header. If we see this, the image stream is compressed. + //private static ReadOnlySpan HeaderMagic => "MSFt"u8; + private static readonly object s_syncObject = new object(); + + private readonly ImageList? _imageList; + private ImageList.NativeImageList? _nativeImageList; + + internal ImageListStreamer(ImageList imageList) => _imageList = imageList; + + // Used by binary serialization + private ImageListStreamer(SerializationInfo info, StreamingContext context) + { + if (info.GetValue("Data", typeof(byte[])) is byte[] data) + { + Deserialize(data); + } + } + internal ImageListStreamer(Stream stream) + { + if (stream is MemoryStream ms + && ms.TryGetBuffer(out ArraySegment buffer) + && buffer.Offset == 0) + { + Deserialize(buffer.Array); + } + else + { + stream.Position = 0; + using MemoryStream copyStream = new MemoryStream(checked((int)stream.Length)); + stream.CopyTo(copyStream); + Deserialize(copyStream.GetBuffer()); + } + } + internal ImageListStreamer(byte[] data) => Deserialize(data); + + /// + /// Compresses the given input, returning a new array that represents the compressed data. + /// + private static byte[] Compress(ReadOnlySpan input) + { + return input.ToArray(); + //int length = RunLengthEncoder.GetEncodedLength(input) + HeaderMagic.Length; + //byte[] output = new byte[length]; + //SpanWriter writer = new(output); + //writer.TryWrite(HeaderMagic); + //RunLengthEncoder.TryEncode(input, writer.Span[writer.Position..], out int written); + //Debug.Assert(written == length - HeaderMagic.Length, "RLE compression failure"); + //return output; + } + + /// + /// Decompresses the given input, returning a new array that represents the uncompressed data. + /// + private static byte[] Decompress1(byte[] input) + { + return input; + //SpanReader reader = new(input); + //if (!reader.TryAdvancePast(HeaderMagic)) + //{ + // // Not compressed, return the original + // return input; + //} + + //ReadOnlySpan remaining = reader.Span[reader.Position..]; + //int length = RunLengthEncoder.GetDecodedLength(remaining); + //byte[] output = new byte[length]; + //RunLengthEncoder.TryDecode(remaining, output, out int written); + //Debug.Assert(written == length, "RLE decompression failure"); + //return output; + } + private static byte[] Decompress(byte[] input) + { + int finalLength = 0; + int idx = 0; + int outputIdx = 0; + + // Check for our header. If we don't have one, + // we're not actually decompressed, so just return + // the original. + // + if (input.Length < HEADER_MAGIC.Length) + { + return input; + } + + for (idx = 0; idx < HEADER_MAGIC.Length; idx++) + { + if (input[idx] != HEADER_MAGIC[idx]) + { + return input; + } + } + + // Ok, we passed the magic header test. + + for (idx = HEADER_MAGIC.Length; idx < input.Length; idx += 2) + { + finalLength += input[idx]; + } + + byte[] output = new byte[finalLength]; + + idx = HEADER_MAGIC.Length; + + while (idx < input.Length) + { + byte runLength = input[idx++]; + byte current = input[idx++]; + + int startIdx = outputIdx; + int endIdx = outputIdx + runLength; + + while (startIdx < endIdx) + { + output[startIdx++] = current; + } + + outputIdx += runLength; + } + + return output; + } + + private void Deserialize(byte[] data) + { + //// We enclose this ImageList handle create in a theming scope. + //using ThemingScope scope = new(Application.UseVisualStyles); + //using MemoryStream memoryStream = new(Decompress(data)); + //lock (s_syncObject) + //{ + // PInvoke.InitCommonControls(); + // _nativeImageList = new ImageList.NativeImageList(new ComManagedStream(memoryStream)); + //} + + //if (_nativeImageList.HIMAGELIST.IsNull) + //{ + // throw new InvalidOperationException(SR.ImageListStreamerLoadFailed); + //} + } + + public void GetObjectData(SerializationInfo si, StreamingContext context) => + si.AddValue("Data", Serialize()); + + internal byte[] Serialize() + { + using MemoryStream stream = new MemoryStream(); + //if (!WriteImageList(stream)) + //{ + // throw new InvalidOperationException(SR.ImageListStreamerSaveFailed); + //} + + ReadOnlySpan buffer = stream.GetBuffer().AsSpan()[..(int)stream.Length]; + return Compress(buffer); + } + + internal void GetObjectData(Stream stream) + { + //if (!WriteImageList(stream)) + //{ + // throw new InvalidOperationException(SR.ImageListStreamerSaveFailed); + //} + } + + internal ImageList.NativeImageList? GetNativeImageList() => _nativeImageList; + + private bool WriteImageList(Stream stream) + { + return true; + //HandleRef handle = default; + //if (_imageList != null) + //{ + // handle = new(_imageList, (HIMAGELIST)_imageList.Handle); + //} + //else if (_nativeImageList != null) + //{ + // handle = new(_nativeImageList, _nativeImageList.HIMAGELIST); + //} + + //if (handle.IsNull) + //{ + // return false; + //} + + //try + //{ + // return PInvoke.ImageList.WriteEx( + // handle, + // IMAGE_LIST_WRITE_STREAM_FLAGS.ILP_DOWNLEVEL, + // stream).Succeeded; + //} + //catch (EntryPointNotFoundException) + //{ + // // Not running on ComCtl32 v6, fall back to the old API. + //} + + //return PInvoke.ImageList.Write(handle, stream); + } + + public void Dispose() + { + _nativeImageList?.Dispose(); + _nativeImageList = null; + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ImageList/RelatedImageListAttribute.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ImageList/RelatedImageListAttribute.cs new file mode 100644 index 0000000000000000000000000000000000000000..1f32b0bc01f3a9ad0629f22fdea38bf192f281fd --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ImageList/RelatedImageListAttribute.cs @@ -0,0 +1,28 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +namespace System.Windows.Forms +{ + /// + /// Specifies which imagelist a property relates to. For example ImageListIndex must relate to a + /// specific ImageList property + /// + [AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)] + public sealed class RelatedImageListAttribute : Attribute + { + private readonly string? _relatedImageList; + + public RelatedImageListAttribute(string? relatedImageList) + { + _relatedImageList = relatedImageList; + } + + public string? RelatedImageList + { + get + { + return _relatedImageList; + } + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Interface/AsyncResult.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Interface/AsyncResult.cs index 0f999c1459bc40bbacb785e6115a9f3f961612ea..f0a5cbcbe765cf7a9104b8a20a8b7cbea0d9403f 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/Interface/AsyncResult.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Interface/AsyncResult.cs @@ -5,16 +5,17 @@ using System.Runtime.InteropServices; using System.Threading; -namespace System +namespace System.Runtime.Remoting.Messaging +//namespace System { public class AsyncResult : IAsyncResult { - public object AsyncState => throw new NotImplementedException(); + public object AsyncState { get; set; } - public WaitHandle AsyncWaitHandle => throw new NotImplementedException(); + public WaitHandle AsyncWaitHandle => new EventWaitHandle(false, EventResetMode.AutoReset); - public bool CompletedSynchronously => throw new NotImplementedException(); + public bool CompletedSynchronously { get; set; } - public bool IsCompleted => throw new NotImplementedException(); + public bool IsCompleted { get; set; } } } diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Interface/ContainerControl.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Interface/ContainerControl.cs new file mode 100644 index 0000000000000000000000000000000000000000..822dc012a545531bf35ef11dd6201dae7b76281a --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Interface/ContainerControl.cs @@ -0,0 +1,14 @@ + +namespace System.Windows.Forms +{ + public class ContainerControl : ScrollableControl, IContainerControl + { + public Control ActiveControl { get; set; } + + public bool ActivateControl(Control active) + { + return (active != null && ActiveControl != null && ActiveControl.Equals(active)); + } + public virtual StatusStrip StatusStrip { get; set; } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Interface/Control.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Interface/Control.cs index 5e52f1d879ff8f57a9bb0ea2ee0f0d788a27d291..c7f88277c455ca30a03d2dad4eaaf055bf0d6e12 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/Interface/Control.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Interface/Control.cs @@ -1,28 +1,889 @@ -using Gtk; -using System; -using System.Collections; -using System.Collections.Generic; +using GLib; +using Gtk; +using GTKSystem.Windows.Forms.GTKControls.ControlBase; +using System.ComponentModel; +using System.Drawing; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Windows.Forms.Design; namespace System.Windows.Forms { - public partial class Control: IEnumerable + [DefaultEvent("Click")] + [DefaultProperty("Text")] + [Designer(typeof(ControlDesigner))] + //[Designer("System.Windows.Forms.Design.ControlDesigner, System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")] + //[DesignerSerializer("System.Windows.Forms.Design.ControlCodeDomSerializer, System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.ComponentModel.Design.Serialization.CodeDomSerializer, System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")] + [ToolboxItemFilter("System.Windows.Forms")] + public partial class Control: Component, IControl, ISynchronizeInvoke, IComponent, IDisposable, ISupportInitialize { - private IEnumerable Object; - public Gtk.Widget Widget { get; set; } - public Control(Gtk.Widget obj) + private Gtk.Application app = Application.Init(); + public string unique_key { get; protected set; } + + public virtual Gtk.Widget Widget { get => GtkControl as Gtk.Widget; } + public virtual Gtk.Container GtkContainer { get => GtkControl as Gtk.Container; } + public IControlGtk ISelf { get => (IControlGtk)GtkControl; } + public virtual object GtkControl { get; protected set; } + CssProvider provider = new CssProvider(); + public Control() + { + this.unique_key = Guid.NewGuid().ToString(); + + if (this.Widget != null) + { + this.Dock = DockStyle.None; + this.Widget.StyleContext.AddClass("DefaultThemeStyle"); + Gtk.Widget widget = this.Widget; + + widget.ButtonPressEvent += Widget_ButtonPressEvent; + widget.ButtonReleaseEvent += Widget_ButtonReleaseEvent; + widget.EnterNotifyEvent += Widget_EnterNotifyEvent; + widget.FocusInEvent += Widget_FocusInEvent; + widget.FocusOutEvent += Widget_FocusOutEvent; + widget.KeyPressEvent += Widget_KeyPressEvent; + widget.KeyReleaseEvent += Widget_KeyReleaseEvent; + widget.LeaveNotifyEvent += Widget_LeaveNotifyEvent; + widget.MotionNotifyEvent += Widget_MotionNotifyEvent; + widget.GrabNotify += Widget_GrabNotify; + widget.Realized += Widget_Realized; + widget.WidgetEventAfter += Widget_WidgetEventAfter; + + this.Widget.StyleContext.AddProvider(provider, 900); + this.Widget.StyleContext.AddClass("forestyle"); + } + } + #region events + private void Widget_WidgetEventAfter(object o, WidgetEventAfterArgs args) + { + if (args.Event.Type == Gdk.EventType.KeyPress) + { + if (KeyDown != null) + { + if (args.Event is Gdk.EventKey eventkey) + { + Keys keys = (Keys)eventkey.HardwareKeycode; + KeyDown(this, new KeyEventArgs(keys)); + } + } + } + } + + private void Widget_Realized(object sender, EventArgs e) + { + UpdateForeStyle(); + if (Load != null) + Load(this, e); + } + private void Widget_GrabNotify(object o, GrabNotifyArgs args) + { + if (Validating != null && args.WasGrabbed == false) + Validating(this, cancelEventArgs); + if (Validated != null && args.WasGrabbed == true) + Validated(this, cancelEventArgs); + } + + private void Widget_ButtonPressEvent(object o, ButtonPressEventArgs args) + { + if (MouseDown != null) + { + MouseButtons result = MouseButtons.None; + if (args.Event.Button == 1) + result = MouseButtons.Left; + else if (args.Event.Button == 3) + result = MouseButtons.Right; + else if (args.Event.Button == 2) + result = MouseButtons.Middle; + MouseDown(this, new MouseEventArgs(result, 1, (int)args.Event.X, (int)args.Event.Y, 0)); + } + } + private void Widget_FocusOutEvent(object o, FocusOutEventArgs args) + { + if (LostFocus != null) + LostFocus(this, args); + } + + private void Widget_MotionNotifyEvent(object o, MotionNotifyEventArgs args) + { + if (Move != null) + Move(this, args); + if (MouseMove != null) + MouseMove(this, new MouseEventArgs(MouseButtons.None, 1, (int)args.Event.X, (int)args.Event.Y, 0)); + } + + private void Widget_LeaveNotifyEvent(object o, LeaveNotifyEventArgs args) + { + if (Leave != null) + Leave(this, args); + if (MouseHover != null) + MouseHover(this, args); + } + + private void Widget_KeyReleaseEvent(object o, KeyReleaseEventArgs args) + { + if (KeyUp != null) + { + Keys keys = (Keys)args.Event.HardwareKeycode; + KeyUp(this, new KeyEventArgs(keys)); + } + } + + private void Widget_KeyPressEvent(object o, Gtk.KeyPressEventArgs args) + { + if (KeyPress != null) + { + Keys keys = (Keys)args.Event.HardwareKeycode; + KeyPress(this, new KeyPressEventArgs(Convert.ToChar(keys))); + } + } + + private void Widget_FocusInEvent(object o, FocusInEventArgs args) + { + if (GotFocus != null) + GotFocus(this, args); + } + + private void Widget_EnterNotifyEvent(object o, EnterNotifyEventArgs args) + { + if (Enter != null) + Enter(this, args); + if (MouseEnter != null) + MouseEnter(this, args); + } + + private void Widget_ButtonReleaseEvent(object o, ButtonReleaseEventArgs args) + { + //Console.WriteLine($"Widget_ButtonReleaseEvent:{args.Event.Type.ToString()},{args.Event.Device.Name}"); + + if (MouseUp != null) + { + MouseButtons result = MouseButtons.None; + if (args.Event.Button == 1) + result = MouseButtons.Left; + else if (args.Event.Button == 3) + result = MouseButtons.Right; + else if (args.Event.Button == 2) + result = MouseButtons.Middle; + + MouseUp(this, new MouseEventArgs(result, 1, (int)args.Event.X, (int)args.Event.Y, 0)); + } + } + #endregion + + //=================== + + protected virtual void UpdateForeStyle() + { + if (this.Widget != null && this.Widget.IsRealized) + SetStyle(this.Widget); + } + protected virtual void UpdateBackgroundStyle() + { + if (this.Widget != null && this.Widget.IsRealized) + ISelf.Override.OnAddClass(); + } + protected virtual void SetStyle(Gtk.Widget widget) + { + Pango.AttrList attributes = new Pango.AttrList(); + string stylename = $"forestyle"; + StringBuilder style = new StringBuilder(); + if (this.ForeColor.Name != "0") + { + string color = $"rgba({this.ForeColor.R},{this.ForeColor.G},{this.ForeColor.B},{this.ForeColor.A})"; + style.AppendFormat("color:{0};", color); + attributes.Insert(new Pango.AttrBackground(Convert.ToUInt16(this.ForeColor.R * 257), Convert.ToUInt16(this.ForeColor.G * 257), Convert.ToUInt16(this.ForeColor.B * 257))); + } + if (this.Font != null) + { + float textSize = this.Font.Size; + if (this.Font.Unit == GraphicsUnit.Point) + textSize = this.Font.Size / 72 * 96; + else if (this.Font.Unit == GraphicsUnit.Inch) + textSize = this.Font.Size * 96; + + style.AppendFormat("font-size:{0}px;", (int)textSize); + if (string.IsNullOrWhiteSpace(Font.FontFamily.Name) == false) + { + style.AppendFormat("font-family:\"{0}\";", Font.FontFamily.Name); + attributes.Insert(new Pango.AttrFontDesc(new Pango.FontDescription() { Family = Font.FontFamily.Name, Size = (int)(textSize * Pango.Scale.PangoScale * 0.7) })); + } + + string[] fontstyle = Font.Style.ToString().ToLower().Split(new char[] { ',', ' ' }); + foreach (string sty in fontstyle) + { + if (sty == "bold") + { + style.Append("font-weight:bold;"); + attributes.Insert(new Pango.AttrWeight(Pango.Weight.Bold)); + } + else if (sty == "italic") + { + style.Append("font-style:italic;"); + attributes.Insert(new Pango.AttrStyle(Pango.Style.Italic)); + } + else if (sty == "underline") + { + style.Append("text-decoration:underline;"); + attributes.Insert(new Pango.AttrUnderline(Pango.Underline.Low)); + } + else if (sty == "strikeout") + { + style.Append("text-decoration:line-through;"); + attributes.Insert(new Pango.AttrStrikethrough(true)); + } + } + if (widget is Gtk.Label gtklabel) + { + gtklabel.Attributes = attributes; + } + } + + StringBuilder css = new StringBuilder(); + css.AppendLine($".{stylename}{{{style.ToString()}}}"); + if (widget is Gtk.TextView) + { + css.AppendLine($".{stylename} text{{{style.ToString()}}}"); + css.AppendLine($".{stylename} .view{{{style.ToString()}}}"); + } + css.AppendLine(".BGTransparent{padding:0px;background:transparent;background-color:transparent;}"); + + if (provider.LoadFromData(css.ToString())) + { + //widget.StyleContext.AddProvider(provider, 900); + //widget.StyleContext.RemoveProvider(provider); + //widget.StyleContext.AddClass(stylename); + } + } + + + #region 背景 + public virtual bool UseVisualStyleBackColor { get; set; } = true; + public virtual Color VisualStyleBackColor { get; } + public virtual ImageLayout BackgroundImageLayout { get => ISelf.Override.BackgroundImageLayout; set => ISelf.Override.BackgroundImageLayout = value; } + public virtual Drawing.Image BackgroundImage { get => ISelf.Override.BackgroundImage; set => ISelf.Override.BackgroundImage = value; } + public virtual Color BackColor + { + get + { + if (ISelf.Override.BackColor.HasValue) + return ISelf.Override.BackColor.Value; + else if (UseVisualStyleBackColor) + return Color.FromName("0"); + else + return Color.Transparent; + } + set { + ISelf.Override.BackColor = value; + ISelf.Override.OnAddClass(); + if (Widget != null) + { + Widget.AppPaintable = false; + Widget.AppPaintable = true; + } + } + } + public virtual event PaintEventHandler Paint + { + add { ISelf.Override.Paint += value; } + remove { ISelf.Override.Paint -= value; } + } + #endregion + public virtual AccessibleObject AccessibilityObject { get; } + + public virtual string AccessibleDefaultActionDescription { get; set; } + public virtual string AccessibleDescription { get; set; } + public virtual string AccessibleName { get; set; } + public virtual AccessibleRole AccessibleRole { get; set; } + public virtual bool AllowDrop { get; set; } + public virtual AnchorStyles Anchor { get; set; } + public virtual Point AutoScrollOffset { get; set; } + public virtual bool AutoSize { get; set; } + public virtual BindingContext BindingContext { get; set; } + + public virtual int Bottom { get; } + + public virtual Rectangle Bounds { get; set; } + + public virtual bool CanFocus { get { return Widget.CanFocus; } } + + public virtual bool CanSelect { get; } + + public virtual bool Capture { get; set; } + public virtual bool CausesValidation { get; set; } + public virtual string CompanyName { get; } + + public virtual bool ContainsFocus { get; } + + public virtual ContextMenuStrip ContextMenuStrip { get; set; } + + public virtual ControlCollection Controls { get; } + + public virtual bool Created => _Created; + internal bool _Created; + + public virtual Cursor Cursor { get; set; } + + public virtual ControlBindingsCollection DataBindings { get; } + + public virtual int DeviceDpi { get; } + + public virtual Rectangle DisplayRectangle { get; } + + public virtual bool Disposing { get; } + + public virtual DockStyle Dock + { + get + { + if (Enum.TryParse(Widget.Data["Dock"].ToString(), false, out DockStyle result)) + return result; + else + return DockStyle.None; + } + set + { + Widget.Data["Dock"] = value.ToString(); + } + } + public virtual bool Enabled { get { return Widget.Sensitive; } set { Widget.Sensitive = value; } } + + public virtual bool Focused { get { return Widget.IsFocus; } } + private Font _Font; + public virtual Font Font { get => _Font; + set { _Font = value; UpdateForeStyle();} + } + private Color _ForeColor; + public virtual Color ForeColor { get => _ForeColor; + set { _ForeColor = value; UpdateForeStyle(); } + } + + public virtual bool HasChildren { get; } + + public virtual int Height { get { return Widget.HeightRequest; } set { Widget.HeightRequest = value; } } + public virtual ImeMode ImeMode { get; set; } + + public virtual bool InvokeRequired { get; } + + public virtual bool IsAccessible { get; set; } + + public virtual bool IsDisposed { get; } + + public virtual bool IsHandleCreated { get; } + + public virtual bool IsMirrored { get; } + + public virtual LayoutEngine LayoutEngine { get; } + + public virtual int Left { get; set; } + + public virtual Point Location + { + get + { + return new Point(Left, Top); + } + set + { + Left = value.X; + Top = value.Y; + } + } + //public virtual Padding Margin { get; set; } + //public virtual Size MaximumSize { get; set; } + //public virtual Size MinimumSize { get; set; } + public virtual string Name { get { return Widget.Name; } set { Widget.Name = value; } } + public virtual Padding Padding { get; set; } + public virtual Control Parent { get; set; } + public virtual Size PreferredSize { get; } + public virtual string ProductName { get; } + public virtual string ProductVersion { get; } + public virtual bool RecreatingHandle { get; } + public virtual Drawing.Region Region { get; set; } + public virtual int Right { get; } + + public virtual RightToLeft RightToLeft { get; set; } + public virtual ISite Site { get; set; } + public virtual Size Size + { + get + { + return new Size(Widget.WidthRequest, Widget.HeightRequest); + } + set + { + Widget.SetSizeRequest(value.Width, value.Height); + } + } + public virtual int TabIndex { get; set; } + public virtual bool TabStop { get; set; } + public virtual object Tag { get; set; } + public virtual string Text { get; set; } + public virtual int Top { get; set; } + + public virtual Control TopLevelControl { get; } + + public virtual bool UseWaitCursor { get; set; } + public virtual bool Visible { get { return Widget.Visible; } set { Widget.Visible = value; Widget.NoShowAll = value == false; } } + public virtual int Width { get { return Widget.WidthRequest; } set { Widget.WidthRequest = value; } } + public virtual IWindowTarget WindowTarget { get; set; } + public virtual event EventHandler AutoSizeChanged; + public virtual event EventHandler BackColorChanged; + public virtual event EventHandler BackgroundImageChanged; + public virtual event EventHandler BackgroundImageLayoutChanged; + public virtual event EventHandler BindingContextChanged; + public virtual event EventHandler CausesValidationChanged; + public virtual event UICuesEventHandler ChangeUICues; + public virtual event EventHandler Click; + public virtual event EventHandler ClientSizeChanged; + public virtual event EventHandler ContextMenuStripChanged; + public virtual event ControlEventHandler ControlAdded; + public virtual event ControlEventHandler ControlRemoved; + public virtual event EventHandler CursorChanged; + public virtual event EventHandler DockChanged; + public virtual event EventHandler DoubleClick; + public virtual event EventHandler DpiChangedAfterParent; + public virtual event EventHandler DpiChangedBeforeParent; + public virtual event DragEventHandler DragDrop; + public virtual event DragEventHandler DragEnter; + public virtual event EventHandler DragLeave; + public virtual event DragEventHandler DragOver; + public virtual event EventHandler EnabledChanged; + public virtual event EventHandler Enter; + public virtual event EventHandler FontChanged; + public virtual event EventHandler ForeColorChanged; + public virtual event GiveFeedbackEventHandler GiveFeedback; + public virtual event EventHandler GotFocus; + public virtual event EventHandler HandleCreated; + public virtual event EventHandler HandleDestroyed; + public virtual event HelpEventHandler HelpRequested; + public virtual event EventHandler ImeModeChanged; + public virtual event InvalidateEventHandler Invalidated; + public virtual event KeyEventHandler KeyDown; + public virtual event KeyPressEventHandler KeyPress; + public virtual event KeyEventHandler KeyUp; + public virtual event LayoutEventHandler Layout; + public virtual event EventHandler Leave; + public virtual event EventHandler LocationChanged; + public virtual event EventHandler LostFocus; + public virtual event EventHandler MarginChanged; + public virtual event EventHandler MouseCaptureChanged; + public virtual event MouseEventHandler MouseClick; + public virtual event MouseEventHandler MouseDoubleClick; + public virtual event MouseEventHandler MouseDown; + public virtual event EventHandler MouseEnter; + public virtual event EventHandler MouseHover; + public virtual event EventHandler MouseLeave; + public virtual event MouseEventHandler MouseMove; + public virtual event MouseEventHandler MouseUp; + public virtual event MouseEventHandler MouseWheel; + public virtual event EventHandler Move; + public virtual event EventHandler PaddingChanged; + //public virtual event PaintEventHandler Paint; + public virtual event EventHandler ParentChanged; + public virtual event PreviewKeyDownEventHandler PreviewKeyDown; + public virtual event QueryAccessibilityHelpEventHandler QueryAccessibilityHelp; + public virtual event QueryContinueDragEventHandler QueryContinueDrag; + public virtual event EventHandler RegionChanged; + public virtual event EventHandler Resize; + public virtual event EventHandler RightToLeftChanged; + public virtual event EventHandler SizeChanged; + public virtual event EventHandler StyleChanged; + public virtual event EventHandler SystemColorsChanged; + public virtual event EventHandler TabIndexChanged; + public virtual event EventHandler TabStopChanged; + public virtual event EventHandler TextChanged; + + CancelEventArgs cancelEventArgs = new CancelEventArgs(false); + public virtual event EventHandler Validated; + public virtual event CancelEventHandler Validating; + public virtual event EventHandler VisibleChanged; + //public event EventHandler Disposed; + public virtual event EventHandler Load; + + public virtual IAsyncResult BeginInvoke(Delegate method, params object[] args) + { + System.Threading.Tasks.Task task = System.Threading.Tasks.Task.Factory.StartNew(state => + { + method.DynamicInvoke((object[])state); + }, args); + + return task; + } + public virtual IAsyncResult BeginInvoke(Delegate method) + { + return BeginInvoke(method, null); + } + public virtual IAsyncResult BeginInvoke(Action method) + { + System.Threading.Tasks.Task task = System.Threading.Tasks.Task.Factory.StartNew(method); + return task; + } + public virtual object EndInvoke(IAsyncResult asyncResult) + { + if (asyncResult is System.Threading.Tasks.Task task) + { + if (task.IsCompleted == false && task.IsCanceled == false && task.IsFaulted == false) + task.GetAwaiter().GetResult(); + } + return asyncResult.AsyncState; + } + + public virtual void BringToFront() + { + + } + + public virtual bool Contains(Control ctl) + { + return false; + } + + public virtual void CreateControl() + { + + } + + public virtual Graphics CreateGraphics() + { + Graphics g = new Graphics(this.Widget, new Cairo.Context(this.Widget.Handle, true), Widget.Allocation); + return g; + } + + public virtual DragDropEffects DoDragDrop(object data, DragDropEffects allowedEffects) + { + return DragDropEffects.None; + } + + public virtual void DrawToBitmap(Bitmap bitmap, Rectangle targetBounds) + { + + } + + public virtual Form FindForm() + { + return null; + } + + public virtual bool Focus() + { + return false; + } + + public virtual Control GetChildAtPoint(Point pt) + { + return null; + } + + public virtual Control GetChildAtPoint(Point pt, GetChildAtPointSkip skipValue) + { + return null; + } + + public virtual IContainerControl GetContainerControl() + { + return null; + } + + public virtual Control GetNextControl(Control ctl, bool forward) + { + return ctl; + } + + public virtual Size GetPreferredSize(Size proposedSize) + { + return proposedSize; + } + + public virtual void Invalidate() + { + if (this.Widget != null) + { + this.Widget.Window.ProcessUpdates(true); + } + } + + public virtual void Invalidate(bool invalidateChildren) + { + if (this.Widget != null) + { + this.Widget.Window.ProcessUpdates(invalidateChildren); + } + } + + public virtual void Invalidate(Rectangle rc) + { + if (this.Widget != null) + { + this.Widget.Window.ProcessUpdates(true); + } + } + + public virtual void Invalidate(Rectangle rc, bool invalidateChildren) + { + if (this.Widget != null) + { + this.Widget.Window.ProcessUpdates(invalidateChildren); + } + } + + public virtual void Invalidate(Drawing.Region region) + { + if (this.Widget != null) + { + this.Widget.Window.ProcessUpdates(true); + } + } + + public virtual void Invalidate(Drawing.Region region, bool invalidateChildren) + { + if (this.Widget != null) + { + this.Widget.Window.ProcessUpdates(invalidateChildren); + } + } + + public virtual object Invoke(Delegate method) + { + return Invoke(method, null); + } + + public virtual object Invoke(Delegate method, params object[] args) + { + return method.DynamicInvoke(args); + } + public virtual void Invoke(Action method) + { + method.Invoke(); + } + public virtual O Invoke(Func method) + { + return method.Invoke(); + } + public virtual int LogicalToDeviceUnits(int value) + { + return value; + } + + public virtual Size LogicalToDeviceUnits(Size value) + { + return value; + } + + public virtual Point PointToClient(Point p) + { + return p; + } + + public virtual Point PointToScreen(Point p) + { + return p; + } + + public virtual PreProcessControlState PreProcessControlMessage(ref Message msg) + { + return PreProcessControlState.MessageNotNeeded; + } + + public virtual bool PreProcessMessage(ref Message msg) + { + return false; + } + + public virtual Rectangle RectangleToClient(Rectangle r) + { + return r; + } + + public virtual Rectangle RectangleToScreen(Rectangle r) + { + return r; + } + + public virtual void Refresh() + { + + } + + public virtual void ResetBackColor() + { + + } + + public virtual void ResetBindings() + { + + } + + public virtual void ResetCursor() + { + + } + + public virtual void ResetFont() + { + + } + + public virtual void ResetForeColor() + { + + } + + public virtual void ResetImeMode() + { + + } + + public virtual void ResetRightToLeft() + { + + } + + public virtual void ResetText() + { + + } + + public virtual void ResumeLayout() + { + _Created = true; + } + + public virtual void ResumeLayout(bool performLayout) + { + _Created = performLayout == false; + } + + public virtual void Scale(float ratio) + { + + } + + public virtual void Scale(float dx, float dy) + { + + } + + public virtual void Scale(SizeF factor) + { + + } + + public virtual void ScaleBitmapLogicalToDevice(ref Bitmap logicalBitmap) + { + + } + + public virtual void Select() + { + + } + + public virtual bool SelectNextControl(Control ctl, bool forward, bool tabStopOnly, bool nested, bool wrap) + { + return false; + } + + public virtual void SendToBack() + { + + } + + public virtual void SetBounds(int x, int y, int width, int height) + { + + } + + public virtual void SetBounds(int x, int y, int width, int height, BoundsSpecified specified) + { + + } + public virtual Rectangle ClientRectangle { get; } + + public virtual Size ClientSize { get; set; } + + public virtual IntPtr Handle { get => this.Widget.Handle; } + + public virtual Padding Margin { get; set; } + public virtual Size MaximumSize { get; set; } + public virtual Size MinimumSize { get; set; } + + //public virtual ISite Site { get; set; } + + public virtual BorderStyle BorderStyle { get; set; } + + public virtual void Hide() + { + if (this.GtkControl is Misc con) + { + con.Hide(); + con.NoShowAll = true; + } + } + + public virtual void Show() + { + + } + protected virtual void OnPaint(System.Windows.Forms.PaintEventArgs e) + { + } + protected virtual void OnParentChanged(EventArgs e) { - Widget = obj; - Object = new Gtk.Widget[] { obj }; } - - public IEnumerator GetEnumerator() + + public virtual void SuspendLayout() + { + _Created = false; + } + + public virtual void PerformLayout() { - return Object.GetEnumerator(); + _Created = true; } - IEnumerator IEnumerable.GetEnumerator() + public virtual void PerformLayout(Control affectedControl, string affectedProperty) { - throw new NotImplementedException(); + _Created = true; } + + public virtual void Update() + { + + } + + [EditorBrowsable(EditorBrowsableState.Advanced)] + public virtual void BeginInit() + { + + } + [EditorBrowsable(EditorBrowsableState.Advanced)] + public virtual void EndInit() + { + + } + + public new void Dispose() + { + Dispose(true); + base.Dispose(); + } + + protected override void Dispose(bool disposing) + { + try + { + if (this.Widget != null) + { + this.Widget.Destroy(); + this.GtkControl = null; + } + } + catch { } + base.Dispose(disposing); + } + + + //========================= + } } diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Interface/Control_DotNet.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Interface/Control_DotNet.cs deleted file mode 100644 index 2398905a074b1e80d787177ccfa1febc9f09f5ea..0000000000000000000000000000000000000000 --- a/Source/GTKSystem.Windows.Forms/GTKControls/Interface/Control_DotNet.cs +++ /dev/null @@ -1,490 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Text; - -namespace System.Windows.Forms -{ - internal class Control_DotNet : IControl - { - public Gtk.Widget Widget { get; } - public AccessibleObject AccessibilityObject { get; } - - public string AccessibleDefaultActionDescription { get; set; } - public string AccessibleDescription { get; set; } - public string AccessibleName { get; set; } - public AccessibleRole AccessibleRole { get; set; } - public bool AllowDrop { get; set; } - public AnchorStyles Anchor { get; set; } - public Point AutoScrollOffset { get; set; } - public bool AutoSize { get; set; } - public Color BackColor { get; set; } - public Image BackgroundImage { get; set; } - public ImageLayout BackgroundImageLayout { get; set; } - public BindingContext BindingContext { get; set; } - - public int Bottom { get; } - - public Rectangle Bounds { get; set; } - - public bool CanFocus { get; } - - public bool CanSelect { get; } - - public bool Capture { get; set; } - public bool CausesValidation { get; set; } - - public Rectangle ClientRectangle { get; } - - public Size ClientSize { get; set; } - - public string CompanyName { get; } - - public bool ContainsFocus { get; } - - public ContextMenuStrip ContextMenuStrip { get; set; } - - public ControlCollection Controls { get; } - - public bool Created { get; } - - public Cursor Cursor { get; set; } - - public ControlBindingsCollection DataBindings { get; } - - public int DeviceDpi { get; } - - public Rectangle DisplayRectangle { get; } - - public bool Disposing { get; } - - public DockStyle Dock { get; set; } - public bool Enabled { get; set; } - - public bool Focused { get; } - - public Font Font { get; set; } - public Color ForeColor { get; set; } - - public IntPtr Handle { get; } - - public bool HasChildren { get; } - - public int Height { get; set; } - public ImeMode ImeMode { get; set; } - - public bool InvokeRequired { get; } - - public bool IsAccessible { get; set; } - - public bool IsDisposed { get; } - - public bool IsHandleCreated { get; } - - public bool IsMirrored { get; } - - public LayoutEngine LayoutEngine { get; } - - public int Left { get; set; } - public Point Location { get; set; } - public Padding Margin { get; set; } - public Size MaximumSize { get; set; } - public Size MinimumSize { get; set; } - public string Name { get; set; } - public Padding Padding { get; set; } - public Control Parent { get; set; } - - public Size PreferredSize { get; } - - public string ProductName { get; } - - public string ProductVersion { get; } - - public bool RecreatingHandle { get; } - - public Region Region { get; set; } - - public int Right { get; } - - public RightToLeft RightToLeft { get; set; } - public ISite Site { get; set; } - public Size Size { get; set; } - public int TabIndex { get; set; } - public bool TabStop { get; set; } - public object Tag { get; set; } - public string Text { get; set; } - public int Top { get; set; } - - public Control TopLevelControl { get; } - - public bool UseWaitCursor { get; set; } - public bool Visible { get; set; } - public int Width { get; set; } - public IWindowTarget WindowTarget { get; set; } - - ControlCollection IControl.Controls => throw new NotImplementedException(); - - bool IControl.UseVisualStyleBackColor { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } - - public event EventHandler AutoSizeChanged; - public event EventHandler BackColorChanged; - public event EventHandler BackgroundImageChanged; - public event EventHandler BackgroundImageLayoutChanged; - public event EventHandler BindingContextChanged; - public event EventHandler CausesValidationChanged; - public event UICuesEventHandler ChangeUICues; - public event EventHandler Click; - public event EventHandler ClientSizeChanged; - public event EventHandler ContextMenuStripChanged; - public event ControlEventHandler ControlAdded; - public event ControlEventHandler ControlRemoved; - public event EventHandler CursorChanged; - public event EventHandler DockChanged; - public event EventHandler DoubleClick; - public event EventHandler DpiChangedAfterParent; - public event EventHandler DpiChangedBeforeParent; - public event DragEventHandler DragDrop; - public event DragEventHandler DragEnter; - public event EventHandler DragLeave; - public event DragEventHandler DragOver; - public event EventHandler EnabledChanged; - public event EventHandler Enter; - public event EventHandler FontChanged; - public event EventHandler ForeColorChanged; - public event GiveFeedbackEventHandler GiveFeedback; - public event EventHandler GotFocus; - public event EventHandler HandleCreated; - public event EventHandler HandleDestroyed; - public event HelpEventHandler HelpRequested; - public event EventHandler ImeModeChanged; - public event InvalidateEventHandler Invalidated; - public event KeyEventHandler KeyDown; - public event KeyPressEventHandler KeyPress; - public event KeyEventHandler KeyUp; - public event LayoutEventHandler Layout; - public event EventHandler Leave; - public event EventHandler LocationChanged; - public event EventHandler LostFocus; - public event EventHandler MarginChanged; - public event EventHandler MouseCaptureChanged; - public event MouseEventHandler MouseClick; - public event MouseEventHandler MouseDoubleClick; - public event MouseEventHandler MouseDown; - public event EventHandler MouseEnter; - public event EventHandler MouseHover; - public event EventHandler MouseLeave; - public event MouseEventHandler MouseMove; - public event MouseEventHandler MouseUp; - public event MouseEventHandler MouseWheel; - public event EventHandler Move; - public event EventHandler PaddingChanged; - public event PaintEventHandler Paint; - public event EventHandler ParentChanged; - public event PreviewKeyDownEventHandler PreviewKeyDown; - public event QueryAccessibilityHelpEventHandler QueryAccessibilityHelp; - public event QueryContinueDragEventHandler QueryContinueDrag; - public event EventHandler RegionChanged; - public event EventHandler Resize; - public event EventHandler RightToLeftChanged; - public event EventHandler SizeChanged; - public event EventHandler StyleChanged; - public event EventHandler SystemColorsChanged; - public event EventHandler TabIndexChanged; - public event EventHandler TabStopChanged; - public event EventHandler TextChanged; - public event EventHandler Validated; - public event CancelEventHandler Validating; - public event EventHandler VisibleChanged; - - public IAsyncResult BeginInvoke(Delegate method) - { - return BeginInvoke(method, null); - } - - public IAsyncResult BeginInvoke(Delegate method, params object[] args) - { - return new AsyncResult(); - } - - public void BringToFront() - { - - } - - public bool Contains(Control ctl) - { - return false; - } - - public void CreateControl() - { - - } - - public Graphics CreateGraphics() - { - return null; - } - - public DragDropEffects DoDragDrop(object data, DragDropEffects allowedEffects) - { - return DragDropEffects.None; - } - - public void DrawToBitmap(Bitmap bitmap, Rectangle targetBounds) - { - - } - - public object EndInvoke(IAsyncResult asyncResult) - { - return asyncResult.AsyncState; - } - - public Form FindForm() - { - return null; - } - - public bool Focus() - { - return false; - } - - public Control GetChildAtPoint(Point pt) - { - return null; - } - - public Control GetChildAtPoint(Point pt, GetChildAtPointSkip skipValue) - { - return null; - } - - public IContainerControl GetContainerControl() - { - return null; - } - - public Control GetNextControl(Control ctl, bool forward) - { - return ctl; - } - - public Size GetPreferredSize(Size proposedSize) - { - return proposedSize; - } - - public void Hide() - { - - } - - public void Invalidate() - { - - } - - public void Invalidate(bool invalidateChildren) - { - - } - - public void Invalidate(Rectangle rc) - { - - } - - public void Invalidate(Rectangle rc, bool invalidateChildren) - { - - } - - public void Invalidate(Region region) - { - - } - - public void Invalidate(Region region, bool invalidateChildren) - { - - } - - public object Invoke(Delegate method) - { - return null; - } - - public object Invoke(Delegate method, params object[] args) - { - return null; - } - - public int LogicalToDeviceUnits(int value) - { - return value; - } - - public Size LogicalToDeviceUnits(Size value) - { - return value; - } - - public void PerformLayout() - { - - } - - public void PerformLayout(Control affectedControl, string affectedProperty) - { - - } - - public Point PointToClient(Point p) - { - return p; - } - - public Point PointToScreen(Point p) - { - return p; - } - - public PreProcessControlState PreProcessControlMessage(ref Message msg) - { - return PreProcessControlState.MessageNotNeeded; - } - - public bool PreProcessMessage(ref Message msg) - { - return false; - } - - public Rectangle RectangleToClient(Rectangle r) - { - return r; - } - - public Rectangle RectangleToScreen(Rectangle r) - { - return r; - } - - public void Refresh() - { - - } - - public void ResetBackColor() - { - - } - - public void ResetBindings() - { - - } - - public void ResetCursor() - { - - } - - public void ResetFont() - { - - } - - public void ResetForeColor() - { - - } - - public void ResetImeMode() - { - - } - - public void ResetRightToLeft() - { - - } - - public void ResetText() - { - - } - - public void ResumeLayout() - { - - } - - public void ResumeLayout(bool performLayout) - { - - } - - public void Scale(float ratio) - { - - } - - public void Scale(float dx, float dy) - { - - } - - public void Scale(SizeF factor) - { - - } - - public void ScaleBitmapLogicalToDevice(ref Bitmap logicalBitmap) - { - - } - - public void Select() - { - - } - - public bool SelectNextControl(Control ctl, bool forward, bool tabStopOnly, bool nested, bool wrap) - { - return false; - } - - public void SendToBack() - { - - } - - public void SetBounds(int x, int y, int width, int height) - { - - } - - public void SetBounds(int x, int y, int width, int height, BoundsSpecified specified) - { - - } - - public void Show() - { - - } - - public void SuspendLayout() - { - - } - - public void Update() - { - - } - } -} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Interface/IContainerControl.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Interface/IContainerControl.cs index e96ee22bc383530afd7bf911961258fefa213a5f..357f31f87eb88cabe3e9ba06d292c4f7ae941c7c 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/Interface/IContainerControl.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Interface/IContainerControl.cs @@ -12,7 +12,7 @@ namespace System.Windows.Forms /// /// Indicates the control that is currently active on the container control. /// - Control? ActiveControl { get; set; } + Control ActiveControl { get; set; } /// /// Activates the specified control. diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Interface/IControl.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Interface/IControl.cs index d199a3cca1e55f259ca0c5d624f2c08d8030452e..bac0189522e6d46209c71e8d39d6b868e69e1e89 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/Interface/IControl.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Interface/IControl.cs @@ -152,6 +152,7 @@ namespace System.Windows.Forms IAsyncResult BeginInvoke(Delegate method); IAsyncResult BeginInvoke(Delegate method, params object[] args); + IAsyncResult BeginInvoke(Action method); void BringToFront(); bool Contains(Control ctl); void CreateControl(); @@ -175,6 +176,7 @@ namespace System.Windows.Forms void Invalidate(Region region, bool invalidateChildren); object Invoke(Delegate method); object Invoke(Delegate method, params object[] args); + TEntry Invoke(Func method); int LogicalToDeviceUnits(int value); Size LogicalToDeviceUnits(Size value); void PerformLayout(); diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Interface/ListControl.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Interface/ListControl.cs new file mode 100644 index 0000000000000000000000000000000000000000..92ad392f0fb3a1e76b16f112a0294ea964c5480c --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Interface/ListControl.cs @@ -0,0 +1,86 @@ +using System.Collections; +using System.ComponentModel; +using System.Drawing.Design; + +namespace System.Windows.Forms +{ + [LookupBindingProperties("DataSource", "DisplayMember", "ValueMember", "SelectedValue")] + public abstract class ListControl : Control + { + [DefaultValue(null)] + [RefreshProperties(RefreshProperties.Repaint)] + [AttributeProvider(typeof(IListSource))] + public object DataSource + { + get;set; + } + + [DefaultValue("")] + public string DisplayMember + { + get; set; + } + + [Browsable(false)] + [EditorBrowsable(EditorBrowsableState.Advanced)] + [DefaultValue(null)] + public IFormatProvider FormatInfo + { + get; set; + } + + [DefaultValue("")] + [MergableProperty(false)] + public string FormatString + { + get; set; + } + + [DefaultValue(false)] + public bool FormattingEnabled + { + get; set; + } + + [DefaultValue("")] + public string ValueMember + { + get; set; + } + + public abstract int SelectedIndex { get; set; } + + [DefaultValue(null)] + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + [Bindable(true)] + public object SelectedValue + { + get; set; + } + + public event EventHandler DataSourceChanged; + + public event EventHandler DisplayMemberChanged; + + public event ListControlConvertEventHandler Format; + + [Browsable(false)] + [EditorBrowsable(EditorBrowsableState.Advanced)] + public event EventHandler FormatInfoChanged; + + public event EventHandler FormatStringChanged; + + public event EventHandler FormattingEnabledChanged; + + public event EventHandler ValueMemberChanged; + + public event EventHandler SelectedValueChanged; + + public string GetItemText(object item) + { + throw null; + } + + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Control/IBindableComponent.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Interface/MethodInvoker.cs similarity index 40% rename from Source/GTKSystem.Windows.Forms/GTKControls/Control/IBindableComponent.cs rename to Source/GTKSystem.Windows.Forms/GTKControls/Interface/MethodInvoker.cs index 450a6e46bb92cfc6292019542ea726199b6141c1..2b9b6dc2f6097b6158998245529b5053bf6adfe1 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/Control/IBindableComponent.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Interface/MethodInvoker.cs @@ -1,6 +1,4 @@ namespace System.Windows.Forms { - internal interface IBindableComponent - { - } + public delegate void MethodInvoker(); } \ No newline at end of file diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Interface/ScrollableControl.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Interface/ScrollableControl.cs new file mode 100644 index 0000000000000000000000000000000000000000..50a0739dd515186524200c50d085c3f1acb3237c --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Interface/ScrollableControl.cs @@ -0,0 +1,50 @@ +using Gtk; +using System.ComponentModel; +using System.Drawing; + +namespace System.Windows.Forms +{ + [Designer("System.Windows.Forms.Design.ScrollableControlDesigner, System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")] + public class ScrollableControl : Control, IArrangedElement, IComponent, IDisposable + { + + protected const int ScrollStateAutoScrolling = 1; + + protected const int ScrollStateHScrollVisible = 2; + + protected const int ScrollStateVScrollVisible = 4; + + protected const int ScrollStateUserHasScrolled = 8; + + protected const int ScrollStateFullDrag = 16; + + public override Rectangle DisplayRectangle { get; } + + [Localizable(true)] + public Size AutoScrollMinSize { get; set; } + [Browsable(false)] + [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + public Point AutoScrollPosition { get; set; } + [Localizable(true)] + public Size AutoScrollMargin { get; set; } + [DefaultValue(false)] + [Localizable(true)] + public virtual bool AutoScroll { get; set; } = false; + //[Browsable(false)] + //[EditorBrowsable(EditorBrowsableState.Always)] + //public VScrollProperties VerticalScroll { get; } + //[Browsable(false)] + //[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] + //[EditorBrowsable(EditorBrowsableState.Never)] + //public DockPaddingEdges DockPadding { get; } + //[Browsable(false)] + //[EditorBrowsable(EditorBrowsableState.Always)] + //public HScrollProperties HorizontalScroll { get; } + protected bool VScroll { get; set; } + protected bool HScroll { get; set; } + + //protected override CreateParams CreateParams { get; } + + public event ScrollEventHandler Scroll; + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Interface/WidgetContainerControl.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Interface/WidgetContainerControl.cs new file mode 100644 index 0000000000000000000000000000000000000000..a575baa4d4bb8be9f4d64b8a8b6f3f071d58aa74 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Interface/WidgetContainerControl.cs @@ -0,0 +1,973 @@ +/* + * 基于GTK组件开发,兼容原生C#控件winform界面的跨平台界面组件。 + * 使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows、linux、macos运行 + * 技术支持438865652@qq.com,https://gitee.com/easywebfactory, https://www.cnblogs.com/easywebfactory + * author:chenhongjin + * date: 2024/1/3 + */ + +using GLib; +using Gtk; +using System; +using System.ComponentModel; +using System.Drawing; +using System.Runtime.Remoting.Messaging; +using System.Text; +using Region = System.Drawing.Region; + +namespace System.Windows.Forms +{ + /// + /// WidgetContainerControl与WidgetControl属性方法基本一样,主要是分区继承的Control,ContainerControl + /// + /// + public class WidgetContainerControl : ContainerControl, ISynchronizeInvoke, IComponent, IDisposable, IControl, ISupportInitialize + { + private Gtk.Widget _widget; + public override Gtk.Widget Widget + { + get { return _widget; } + } + public new Gtk.Container Container { get; private set; } + private T _control; + public T Control + { + get { return _control; } + } + private object _gtkControl; + public override object GtkControl => _gtkControl; + public WidgetContainerControl(params object[] args) + { + object widget = Activator.CreateInstance(typeof(T), args); + _gtkControl = widget; + _control = (T)widget; + _widget = widget as Gtk.Widget; + Container = widget as Gtk.Container; + Dock = DockStyle.None; + _widget.MarginStart = 0; + _widget.MarginTop = 0; + //_widget.Drawn += Widget_Drawn; + _widget.Realized += _widget_Realized; + _widget.StyleContext.AddClass("DefaultThemeStyle"); + } + + private void _widget_Realized(object sender, EventArgs e) + { + UpdateStyle(); + } + private void Widget_Drawn(object o, DrawnArgs args) + { + Gdk.Rectangle rec = Widget.Allocation; + if (Control is Gtk.Button || Control is Gtk.Image) + { + //由于绘画会覆盖容器内部所有子控件,不合适容器控件使用,只对button和picturebox设置背景 + if (_BackgroundImageBytes != null) + { + try + { + if (backgroundPixbuf == null) + { + Gdk.Pixbuf imagePixbuf = new Gdk.Pixbuf(IntPtr.Zero); + ScaleImage(rec.Width, rec.Height, ref imagePixbuf, _BackgroundImageBytes, PictureBoxSizeMode.AutoSize, BackgroundImageLayout == ImageLayout.None ? ImageLayout.Tile : BackgroundImageLayout); + backgroundPixbuf = imagePixbuf.ScaleSimple(imagePixbuf.Width - 8, imagePixbuf.Height - 6, Gdk.InterpType.Tiles); + } + //DrawBackgroundImage(args.Cr, backgroundPixbuf, rec); + //if (Control is Gtk.Button button) + //{ + // button.Child.Visible = false; + // DrawBackgroundText(args.Cr, rec); + //} + } + catch + { + + } + } + } + OnPaint(new PaintEventArgs(new Graphics(this.Widget, args.Cr, rec), new Drawing.Rectangle(rec.X, rec.Y, rec.Width, rec.Height))); + } + protected override void OnPaint(System.Windows.Forms.PaintEventArgs e) + { + base.OnPaint(e); + //if (Paint != null) + // Paint(this, e); + } + private Gdk.Pixbuf backgroundPixbuf; + internal void DrawBackgroundColor(Cairo.Context ctx, Drawing.Color backcolor, Gdk.Rectangle rec) + { + ctx.Save(); + ctx.SetSourceRGB(backcolor.R / 255f, backcolor.G / 255f, backcolor.B / 255f); + ctx.Rectangle(2, 2, rec.Width - 4, rec.Height - 4); + ctx.Fill(); + ctx.Restore(); + } + internal void DrawBackgroundImage(Cairo.Context ctx, Gdk.Pixbuf img, Gdk.Rectangle rec) + { + Gdk.Size size = new Gdk.Size(rec.Width, rec.Height); + ctx.Save(); + ctx.Translate(4, 4); + Gdk.CairoHelper.SetSourcePixbuf(ctx, img, 0, 0); + using (var p = ctx.GetSource()) + { + if (p is Cairo.SurfacePattern pattern) + { + if (size.Width > img.Width || size.Height > img.Height) + { + pattern.Filter = Cairo.Filter.Fast; + } + else + pattern.Filter = Cairo.Filter.Good; + } + } + ctx.Paint(); + ctx.Restore(); + } + internal void DrawBackgroundText(Cairo.Context ctx, Gdk.Rectangle rec) + { + string text = this.Text; + if (string.IsNullOrEmpty(text) == false) + { + ctx.Save(); + float textSize = 14f; + if (this.Font != null) + { + textSize = this.Font.Size; + if (this.Font.Unit == GraphicsUnit.Point) + textSize = this.Font.Size * 1 / 72 * 96; + if (this.Font.Unit == GraphicsUnit.Inch) + textSize = this.Font.Size * 96; + } + Pango.Context pangocontext = _widget.PangoContext; + string family = pangocontext.FontDescription.Family; + if (string.IsNullOrWhiteSpace(this.Font.FontFamily.Name) == false) + { + var pangoFamily = Array.Find(pangocontext.Families, f => f.Name == this.Font.FontFamily.Name); + if (pangoFamily != null) + family = pangoFamily.Name; + } + ctx.SelectFontFace(family, this.Font.Italic ? Cairo.FontSlant.Italic : Cairo.FontSlant.Normal, this.Font.Bold ? Cairo.FontWeight.Bold : Cairo.FontWeight.Normal); + ctx.SetFontSize(textSize); + var textExt = ctx.TextExtents(text); + var x = (int)((rec.Width - textExt.Width) * 0.5); + var y = (int)((rec.Height + textExt.Height) * 0.5f); + ctx.Translate(x, y); + if (this.ForeColor.Name != "Control" && this.ForeColor.Name != "0") + ctx.SetSourceRGBA(this.ForeColor.R / 255f, this.ForeColor.G / 255f, this.ForeColor.B / 255f, 1); + ctx.ShowText(text); + ctx.Stroke(); + ctx.Restore(); + } + } + internal void UpdateStyle() + { + SetStyle(_widget); + } + protected virtual void SetStyle(Gtk.Widget widget) + { + string stylename = $"s{unique_key}"; + StringBuilder style = new StringBuilder(); + if (this.BackColor.Name != "Control" && this.BackColor.Name != "0") + { + string color = $"rgba({this.BackColor.R},{this.BackColor.G},{this.BackColor.B},{this.BackColor.A})"; + // style.AppendFormat("background-color:{0};background:{0};", color); + } + if (this.ForeColor.Name != "Control" && this.ForeColor.Name != "0") + { + string color = $"rgba({this.ForeColor.R},{this.ForeColor.G},{this.ForeColor.B},{this.ForeColor.A})"; + style.AppendFormat("color:{0};", color); + } + if (this.Font != null) + { + Pango.AttrList attributes = new Pango.AttrList(); + float textSize = this.Font.Size; + if (this.Font.Unit == GraphicsUnit.Point) + textSize = this.Font.Size / 72 * 96; + else if (this.Font.Unit == GraphicsUnit.Inch) + textSize = this.Font.Size * 96; + + style.AppendFormat("font-size:{0}px;", (int)textSize); + if (string.IsNullOrWhiteSpace(Font.FontFamily.Name) == false) + { + style.AppendFormat("font-family:\"{0}\";", Font.FontFamily.Name); + attributes.Insert(new Pango.AttrFontDesc(new Pango.FontDescription() { Family = Font.FontFamily.Name, Size = (int)(textSize * Pango.Scale.PangoScale * 0.7) })); + } + + string[] fontstyle = Font.Style.ToString().ToLower().Split(new char[] { ',', ' ' }); + foreach (string sty in fontstyle) + { + if (sty == "bold") + { + style.Append("font-weight:bold;"); + attributes.Insert(new Pango.AttrWeight(Pango.Weight.Bold)); + } + else if (sty == "italic") + { + style.Append("font-style:italic;"); + attributes.Insert(new Pango.AttrStyle(Pango.Style.Italic)); + } + else if (sty == "underline") + { + style.Append("text-decoration:underline;"); + attributes.Insert(new Pango.AttrUnderline(Pango.Underline.Low)); + } + else if (sty == "strikeout") + { + style.Append("text-decoration:line-through;"); + attributes.Insert(new Pango.AttrStrikethrough(true)); + } + } + if (widget is Gtk.Label gtklabel) + { + gtklabel.Attributes = attributes; + } + } + + StringBuilder css = new StringBuilder(); + css.AppendLine($".{stylename}{{{style.ToString()}}}"); + if (widget is Gtk.TextView) + { + css.AppendLine($".{stylename} text{{{style.ToString()}}}"); + css.AppendLine($".{stylename} .view{{{style.ToString()}}}"); + } + CssProvider provider = new CssProvider(); + if (provider.LoadFromData(css.ToString())) + { + widget.StyleContext.AddProvider(provider, 900); + widget.StyleContext.RemoveClass(stylename); + widget.StyleContext.AddClass(stylename); + } + } + public override AccessibleObject AccessibilityObject { get; } + + public override string AccessibleDefaultActionDescription { get; set; } + public override string AccessibleDescription { get; set; } + public override string AccessibleName { get; set; } + public override AccessibleRole AccessibleRole { get; set; } + public override bool AllowDrop { get; set; } + public override AnchorStyles Anchor { get; set; } + public override Point AutoScrollOffset { get; set; } + public override bool AutoSize { get; set; } + private Color _BackColor; + public override Color BackColor { get => _BackColor; set { _BackColor = value; UpdateStyle(); } } + + internal byte[] _BackgroundImageBytes; + private System.Drawing.Image backgroundImage; + public override System.Drawing.Image BackgroundImage + { + get => backgroundImage; + set + { + backgroundImage = value; + if (value != null) + { + _BackgroundImageBytes = new byte[value.PixbufData.Length]; + value.PixbufData.CopyTo(_BackgroundImageBytes, 0); + } + } + } + public override ImageLayout BackgroundImageLayout { get; set; } + public override BindingContext BindingContext { get; set; } + + public override int Bottom { get; } + + public override Rectangle Bounds { get; set; } + + public override bool CanFocus { get { return Widget.CanFocus; } } + + public override bool CanSelect { get; } + + public override bool Capture { get; set; } + public override bool CausesValidation { get; set; } + public override string CompanyName { get; } + + public override bool ContainsFocus { get; } + + public override ContextMenuStrip ContextMenuStrip { get; set; } + public override StatusStrip StatusStrip { get; set; } + public override ControlCollection Controls { get; } + + public override bool Created => _Created; + internal bool _Created; + + public override Cursor Cursor { get; set; } + + public override ControlBindingsCollection DataBindings { get; } + + public override int DeviceDpi { get; } + + public override Rectangle DisplayRectangle { get; } + + public override bool Disposing { get; } + + public override DockStyle Dock + { + get + { + if (Enum.TryParse(Widget.Data["Dock"].ToString(), false, out DockStyle result)) + return result; + else + return DockStyle.None; + } + set + { + Widget.Data["Dock"] = value.ToString(); + } + } + public override bool Enabled { get { return Widget.Sensitive; } set { Widget.Sensitive = value; } } + + public override bool Focused { get { return Widget.IsFocus; } } + private Font _Font; + public override Font Font { get => _Font; set { _Font = value; UpdateStyle(); } } + private Color _ForeColor; + public override Color ForeColor { get => _ForeColor; set { _ForeColor = value; UpdateStyle(); } } + + public override bool HasChildren { get; } + + public override int Height { get { return Widget.HeightRequest; } set { Widget.HeightRequest = value; } } + public override ImeMode ImeMode { get; set; } + + public override bool InvokeRequired { get; } + + public override bool IsAccessible { get; set; } + + public override bool IsDisposed { get; } + + public override bool IsHandleCreated { get; } + + public override bool IsMirrored { get; } + + public override LayoutEngine LayoutEngine { get; } + + public override int Left { get; set; } + public override Point Location + { + get + { + return new Point(Left, Top); + } + set + { + Left = value.X; + Top = value.Y; + } + } + //public override Padding Margin { get; set; } + //public override Size MaximumSize { get; set; } + //public override Size MinimumSize { get; set; } + public override string Name { get { return Widget.Name; } set { Widget.Name = value; } } + public override Padding Padding { get; set; } + public Gtk.Widget WidgetParent { get { return Widget.Parent; } set { Widget.Parent = value; } } + public override Control Parent { get; set; } + public override Size PreferredSize { get; } + public override string ProductName { get; } + public override string ProductVersion { get; } + public override bool RecreatingHandle { get; } + public override Region Region { get; set; } + public override int Right { get; } + + public override RightToLeft RightToLeft { get; set; } + public override ISite Site { get; set; } + public override Size Size + { + get + { + return new Size(Widget.WidthRequest, Widget.HeightRequest); + } + set + { + DefaultSize = new Size(value.Width,value.Height); + Widget.SetSizeRequest(value.Width, value.Height); + Widget.Data["InitWidth"] = value.Width; + Widget.Data["InitHeight"] = value.Height; + } + } + private Size DefaultSize { get; set; } + public override int TabIndex { get; set; } + public override bool TabStop { get; set; } + public override object Tag { get; set; } + public override string Text { get; set; } + public override int Top { get; set; } + + public override Control TopLevelControl { get; } + + public override bool UseWaitCursor { get; set; } + public override bool Visible { get { return Widget.Visible; } set { Widget.Visible = value; Widget.NoShowAll = value == false; } } + public override int Width { get { return Widget.WidthRequest; } set { Widget.WidthRequest = value; } } + public override IWindowTarget WindowTarget { get; set; } + public override event EventHandler AutoSizeChanged; + public override event EventHandler BackColorChanged; + public override event EventHandler BackgroundImageChanged; + public override event EventHandler BackgroundImageLayoutChanged; + public override event EventHandler BindingContextChanged; + public override event EventHandler CausesValidationChanged; + public override event UICuesEventHandler ChangeUICues; + public override event EventHandler Click + { + add { Widget.ButtonReleaseEvent += (object o, ButtonReleaseEventArgs args) => { value.Invoke(this, args); }; } + remove { Widget.ButtonReleaseEvent -= (object o, ButtonReleaseEventArgs args) => { value.Invoke(this, args); }; } + } + + public override event EventHandler ClientSizeChanged; + public override event EventHandler ContextMenuStripChanged; + public override event ControlEventHandler ControlAdded; + public override event ControlEventHandler ControlRemoved; + public override event EventHandler CursorChanged; + public override event EventHandler DockChanged; + public override event EventHandler DoubleClick; + public override event EventHandler DpiChangedAfterParent; + public override event EventHandler DpiChangedBeforeParent; + public override event DragEventHandler DragDrop; + //{ + // add { Widget.DragDrop += (object o, Gtk.DragDropArgs args) => { value.Invoke(this, new DragEventArgs(null, Convert.ToInt32(args.RetVal), args.X, args.Y, DragDropEffects.All, DragDropEffects.Move)); }; } + // remove { Widget.DragDrop -= (object o, Gtk.DragDropArgs args) => { }; } + //} + + public override event DragEventHandler DragEnter; + public override event EventHandler DragLeave; + public override event DragEventHandler DragOver; + public override event EventHandler EnabledChanged; + public override event EventHandler Enter + { + add + { + Widget.EnterNotifyEvent += (object o, Gtk.EnterNotifyEventArgs args) => { value.Invoke(this, args); }; + Widget.FocusInEvent += (object o, FocusInEventArgs args) => { value.Invoke(this, args); }; + } + remove + { + Widget.EnterNotifyEvent -= (object o, Gtk.EnterNotifyEventArgs args) => { value.Invoke(this, args); }; + Widget.FocusInEvent -= (object o, FocusInEventArgs args) => { value.Invoke(this, args); }; + } + } + + public override event EventHandler FontChanged; + public override event EventHandler ForeColorChanged; + public override event GiveFeedbackEventHandler GiveFeedback; + public override event EventHandler GotFocus + { + add { Widget.FocusInEvent += (object o, FocusInEventArgs args) => { value.Invoke(this, new EventArgs()); }; } + remove { Widget.FocusInEvent -= (object o, FocusInEventArgs args) => { value.Invoke(this, new EventArgs()); }; } + } + public override event EventHandler HandleCreated; + public override event EventHandler HandleDestroyed; + public override event HelpEventHandler HelpRequested; + public override event EventHandler ImeModeChanged; + public override event InvalidateEventHandler Invalidated; + public override event KeyEventHandler KeyDown + { + add { Widget.KeyPressEvent += (object o, Gtk.KeyPressEventArgs args) => { Enum.TryParse(args.Event.Key.ToString(), out Keys result); value.Invoke(this, new KeyEventArgs(result)); }; } + remove { Widget.KeyPressEvent -= (object o, Gtk.KeyPressEventArgs args) => { Enum.TryParse(args.Event.Key.ToString(), out Keys result); value.Invoke(this, new KeyEventArgs(result)); }; } + } + public override event KeyPressEventHandler KeyPress + { + add { Widget.KeyReleaseEvent += (object o, Gtk.KeyReleaseEventArgs args) => { Enum.TryParse(args.Event.Key.ToString(), out Keys result); value.Invoke(this, new KeyPressEventArgs(args.Event.Key.ToString()[0])); }; } + remove { Widget.KeyReleaseEvent -= (object o, Gtk.KeyReleaseEventArgs args) => { Enum.TryParse(args.Event.Key.ToString(), out Keys result); value.Invoke(this, new KeyPressEventArgs(args.Event.Key.ToString()[0])); }; } + } + public override event KeyEventHandler KeyUp + { + add { Widget.KeyReleaseEvent += (object o, Gtk.KeyReleaseEventArgs args) => { Enum.TryParse(args.Event.Key.ToString(), out Keys result); value.Invoke(this, new KeyEventArgs(result)); }; } + remove { Widget.KeyReleaseEvent -= (object o, Gtk.KeyReleaseEventArgs args) => { Enum.TryParse(args.Event.Key.ToString(), out Keys result); value.Invoke(this, new KeyEventArgs(result)); }; } + } + public override event LayoutEventHandler Layout; + public override event EventHandler Leave + { + add { Widget.LeaveNotifyEvent += (object o, LeaveNotifyEventArgs args) => { value.Invoke(this, args); }; } + remove { Widget.LeaveNotifyEvent -= (object o, LeaveNotifyEventArgs args) => { value.Invoke(this, args); }; } + } + public override event EventHandler LocationChanged; + public override event EventHandler LostFocus + { + add { Widget.FocusOutEvent += (object o, FocusOutEventArgs args) => { value.Invoke(this, new EventArgs()); }; } + remove { Widget.FocusOutEvent -= (object o, FocusOutEventArgs args) => { value.Invoke(this, new EventArgs()); }; } + } + public override event EventHandler MarginChanged; + public override event EventHandler MouseCaptureChanged; + public override event MouseEventHandler MouseClick + { + add { Widget.ButtonReleaseEvent += (object o, ButtonReleaseEventArgs args) => { Enum.TryParse(args.Event.Button.ToString(), out MouseButtons result); value.Invoke(this, new MouseEventArgs(result, 1, (int)args.Event.X, (int)args.Event.Y, 0)); }; } + remove { Widget.ButtonReleaseEvent -= (object o, ButtonReleaseEventArgs args) => { Enum.TryParse(args.Event.Button.ToString(), out MouseButtons result); value.Invoke(this, new MouseEventArgs(result, 1, (int)args.Event.X, (int)args.Event.Y, 0)); }; } + } + public override event MouseEventHandler MouseDoubleClick; + public override event MouseEventHandler MouseDown + { + add { Widget.ButtonPressEvent += (object o, ButtonPressEventArgs args) => { Enum.TryParse(args.Event.Button.ToString(), out MouseButtons result); value.Invoke(this, new MouseEventArgs(result, 1, (int)args.Event.X, (int)args.Event.Y, 0)); }; } + remove { Widget.ButtonPressEvent -= (object o, ButtonPressEventArgs args) => { Enum.TryParse(args.Event.Button.ToString(), out MouseButtons result); value.Invoke(this, new MouseEventArgs(result, 1, (int)args.Event.X, (int)args.Event.Y, 0)); }; } + } + public override event EventHandler MouseEnter + { + add { Widget.EnterNotifyEvent += (object o, Gtk.EnterNotifyEventArgs args) => { value.Invoke(this, args); }; } + remove { Widget.EnterNotifyEvent -= (object o, Gtk.EnterNotifyEventArgs args) => { value.Invoke(this, args); }; } + } + public override event EventHandler MouseHover; + public override event EventHandler MouseLeave; + public override event MouseEventHandler MouseMove + { + add { Widget.MotionNotifyEvent += (object o, MotionNotifyEventArgs args) => { value.Invoke(this, new MouseEventArgs(MouseButtons.None, 1, (int)args.Event.X, (int)args.Event.Y, 0)); }; } + remove { Widget.MotionNotifyEvent -= (object o, MotionNotifyEventArgs args) => { value.Invoke(this, new MouseEventArgs(MouseButtons.None, 1, (int)args.Event.X, (int)args.Event.Y, 0)); }; } + } + public override event MouseEventHandler MouseUp; + public override event MouseEventHandler MouseWheel; + public override event EventHandler Move + { + add { Widget.MotionNotifyEvent += (object o, MotionNotifyEventArgs args) => { value.Invoke(this, args); }; } + remove { Widget.MotionNotifyEvent -= (object o, MotionNotifyEventArgs args) => { value.Invoke(this, args); }; } + } + public override event EventHandler PaddingChanged; + public override event PaintEventHandler Paint; + public override event EventHandler ParentChanged; + public override event PreviewKeyDownEventHandler PreviewKeyDown; + public override event QueryAccessibilityHelpEventHandler QueryAccessibilityHelp; + public override event QueryContinueDragEventHandler QueryContinueDrag; + public override event EventHandler RegionChanged; + public override event EventHandler Resize; + public override event EventHandler RightToLeftChanged; + public override event EventHandler SizeChanged + { + add { Widget.SizeAllocated += (object o, SizeAllocatedArgs args) => { value.Invoke(this, args); }; } + remove { Widget.SizeAllocated -= (object o, SizeAllocatedArgs args) => { value.Invoke(this, args); }; } + } + public override event EventHandler StyleChanged; + public override event EventHandler SystemColorsChanged; + public override event EventHandler TabIndexChanged; + public override event EventHandler TabStopChanged; + public override event EventHandler TextChanged; + + CancelEventArgs cancelEventArgs = new CancelEventArgs(false); + public override event EventHandler Validated + { + add { Widget.FocusOutEvent += (object o, FocusOutEventArgs args) => { if (cancelEventArgs.Cancel == false) { value.Invoke(this, new EventArgs()); } }; } + remove { Widget.FocusOutEvent -= (object o, FocusOutEventArgs args) => { if (cancelEventArgs.Cancel == false) { value.Invoke(this, new EventArgs()); } }; } + } + public override event CancelEventHandler Validating + { + add { Widget.FocusOutEvent += (object o, FocusOutEventArgs args) => { cancelEventArgs.Cancel = false; value.Invoke(this, cancelEventArgs); }; } + remove { Widget.FocusOutEvent -= (object o, FocusOutEventArgs args) => { cancelEventArgs.Cancel = false; value.Invoke(this, cancelEventArgs); }; } + } + public override event EventHandler VisibleChanged; + //public event EventHandler Disposed; + public virtual event EventHandler Load + { + add { Widget.Realized += (object sender, EventArgs e) => { value.Invoke(sender, e); }; } + remove { Widget.Realized -= (object sender, EventArgs e) => { value.Invoke(sender, e); }; } + } + public override IAsyncResult BeginInvoke(Delegate method, params object[]? args) + { + System.Threading.Tasks.Task task = System.Threading.Tasks.Task.Factory.StartNew(state => + { + method.DynamicInvoke((object[])state); + }, args); + return task; + } + public override IAsyncResult BeginInvoke(Delegate method) + { + return BeginInvoke(method, null); + } + public override IAsyncResult BeginInvoke(Action method) + { + System.Threading.Tasks.Task task = System.Threading.Tasks.Task.Factory.StartNew(method); + return task; + } + public override object EndInvoke(IAsyncResult asyncResult) + { + if (asyncResult is System.Threading.Tasks.Task task) + { + if (task.IsCompleted == false && task.IsCanceled == false && task.IsFaulted == false) + task.GetAwaiter().GetResult(); + } + return asyncResult.AsyncState; + } + public override void BringToFront() + { + + } + + public override bool Contains(Control ctl) + { + return false; + } + + public override void CreateControl() + { + + } + + public override Graphics CreateGraphics() + { + Graphics g = new Graphics(this.Widget, new Cairo.Context(this.Widget.Handle, true), Widget.Allocation); + return g; + } + + public override DragDropEffects DoDragDrop(object data, DragDropEffects allowedEffects) + { + return DragDropEffects.None; + } + + public override void DrawToBitmap(Bitmap bitmap, Rectangle targetBounds) + { + + } + + public override Form FindForm() + { + return null; + } + + public override bool Focus() + { + return false; + } + + public override Control GetChildAtPoint(Point pt) + { + return null; + } + + public override Control GetChildAtPoint(Point pt, GetChildAtPointSkip skipValue) + { + return null; + } + + public override IContainerControl GetContainerControl() + { + return null; + } + + public override Control GetNextControl(Control ctl, bool forward) + { + return ctl; + } + + public override Size GetPreferredSize(Size proposedSize) + { + return proposedSize; + } + + public override void Invalidate() + { + + } + + public override void Invalidate(bool invalidateChildren) + { + + } + + public override void Invalidate(Rectangle rc) + { + + } + + public override void Invalidate(Rectangle rc, bool invalidateChildren) + { + + } + + public override void Invalidate(Region region) + { + + } + + public override void Invalidate(Region region, bool invalidateChildren) + { + + } + + public override object Invoke(Delegate method) + { + return Invoke(method, null); + } + + public override object Invoke(Delegate method, params object[] args) + { + return method.DynamicInvoke(args); + } + public override void Invoke(Action method) + { + method.Invoke(); + } + public override O Invoke(Func method) + { + return method.Invoke(); + } + + public override int LogicalToDeviceUnits(int value) + { + return value; + } + + public override Size LogicalToDeviceUnits(Size value) + { + return value; + } + + public override Point PointToClient(Point p) + { + return p; + } + + public override Point PointToScreen(Point p) + { + return p; + } + + public override PreProcessControlState PreProcessControlMessage(ref Message msg) + { + return PreProcessControlState.MessageNotNeeded; + } + + public override bool PreProcessMessage(ref Message msg) + { + return false; + } + + public override Rectangle RectangleToClient(Rectangle r) + { + return r; + } + + public override Rectangle RectangleToScreen(Rectangle r) + { + return r; + } + + public override void Refresh() + { + + } + + public override void ResetBackColor() + { + + } + + public override void ResetBindings() + { + + } + + public override void ResetCursor() + { + + } + + public override void ResetFont() + { + + } + + public override void ResetForeColor() + { + + } + + public override void ResetImeMode() + { + + } + + public override void ResetRightToLeft() + { + + } + + public override void ResetText() + { + + } + + public override void ResumeLayout() + { + _Created = true; + } + + public override void ResumeLayout(bool performLayout) + { + _Created = performLayout == false; + } + + public override void Scale(float ratio) + { + + } + + public override void Scale(float dx, float dy) + { + + } + + public override void Scale(SizeF factor) + { + + } + + public override void ScaleBitmapLogicalToDevice(ref Bitmap logicalBitmap) + { + + } + + public override void Select() + { + + } + + public override bool SelectNextControl(Control ctl, bool forward, bool tabStopOnly, bool nested, bool wrap) + { + return false; + } + + public override void SendToBack() + { + + } + + public override void SetBounds(int x, int y, int width, int height) + { + + } + + public override void SetBounds(int x, int y, int width, int height, BoundsSpecified specified) + { + + } + + public override void SuspendLayout() + { + _Created = false; + } + + public override void PerformLayout() + { + _Created = true; + } + + public override void PerformLayout(Control affectedControl, string affectedProperty) + { + _Created = true; + } + + public override void Update() + { + + } + + [EditorBrowsable(EditorBrowsableState.Advanced)] + public override void BeginInit() + { + + } + [EditorBrowsable(EditorBrowsableState.Advanced)] + public override void EndInit() + { + + } + + public new void Dispose() + { + Dispose(true); + base.Dispose(); + } + + protected override void Dispose(bool disposing) + { + try + { + if (_widget != null) + { + this.backgroundPixbuf = null; + this.backgroundImage = null; + this._BackgroundImageBytes = null; + _widget.Destroy(); + } + else + { + this.backgroundPixbuf = null; + this.backgroundImage = null; + this._BackgroundImageBytes = null; + _control = default(T); + _widget = null; + Container = null; + } + } + catch { } + base.Dispose(disposing); + } + + public override bool UseVisualStyleBackColor { get; set; } + protected void ScaleImage(int width, int height, ref Gdk.Pixbuf imagePixbuf, byte[] imagebytes, PictureBoxSizeMode sizeMode, ImageLayout backgroundMode) + { + if (imagebytes != null) + { + Gdk.Pixbuf pix = new Gdk.Pixbuf(imagebytes); + if (width > 0 && height > 0) + { + using (var surface = new Cairo.ImageSurface(Cairo.Format.ARGB32, width, height)) + { + Gdk.Pixbuf showpix = new Gdk.Pixbuf(surface, 0, 0, width, height); + if (sizeMode == PictureBoxSizeMode.Normal && backgroundMode == ImageLayout.None) + { + pix.CopyArea(0, 0, Math.Min(pix.Width, showpix.Width), Math.Min(pix.Height, showpix.Height), showpix, 0, 0); + } + else if (sizeMode == PictureBoxSizeMode.StretchImage || backgroundMode == ImageLayout.Stretch) + { //缩放取全图铺满 + Gdk.Pixbuf newpix = pix.ScaleSimple(width, height, Gdk.InterpType.Tiles); + newpix.CopyArea(0, 0, newpix.Width, newpix.Height, showpix, 0, 0); + } + else if (sizeMode == PictureBoxSizeMode.CenterImage || backgroundMode == ImageLayout.Center) + { + //取原图中间 + int offsetx = (pix.Width - showpix.Width) / 2; + int offsety = (pix.Height - showpix.Height) / 2; + pix.CopyArea(offsetx > 0 ? offsetx : 0, offsety > 0 ? offsety : 0, Math.Min(pix.Width, showpix.Width), Math.Min(pix.Height, showpix.Height), showpix, offsetx < 0 ? -offsetx : 0, offsety < 0 ? -offsety : 0); + } + else if (sizeMode == PictureBoxSizeMode.Zoom || backgroundMode == ImageLayout.Zoom) + { + if (pix.Width / width > pix.Height / height) + { + //图片的宽高比大于设置宽高比,以宽为准 + Gdk.Pixbuf newpix = pix.ScaleSimple(width, width * pix.Height / pix.Width, Gdk.InterpType.Tiles); + newpix.CopyArea(0, 0, newpix.Width, newpix.Height, showpix, (showpix.Width - newpix.Width) / 2, (showpix.Height - newpix.Height) / 2); + } + else + { + Gdk.Pixbuf newpix = pix.ScaleSimple(height * pix.Width / pix.Height, height, Gdk.InterpType.Tiles); + newpix.CopyArea(0, 0, newpix.Width, newpix.Height, showpix, (showpix.Width - newpix.Width) / 2, (showpix.Height - newpix.Height) / 2); + } + } + else if (sizeMode == PictureBoxSizeMode.AutoSize) + { + pix.CopyArea(0, 0, Math.Min(pix.Width, showpix.Width), Math.Min(pix.Height, showpix.Height), showpix, 0, 0); + } + + if (backgroundMode == ImageLayout.Tile) + { + //平铺背景图,原图铺满 + if (pix.Width < width || pix.Height < height) + { + using (var surface2 = new Cairo.ImageSurface(Cairo.Format.ARGB32, width, height)) + { + Gdk.Pixbuf backgroundpix = new Gdk.Pixbuf(surface2, 0, 0, width, height); + for (int y = 0; y < height; y += pix.Height) + { + for (int x = 0; x < width; x += pix.Width) + { + pix.CopyArea(0, 0, width - x > pix.Width ? pix.Width : width - x, height - y > pix.Height ? pix.Height : height - y, backgroundpix, x, y); + } + } + imagePixbuf = backgroundpix; + } + } + else + { + imagePixbuf = showpix; + } + } + else + { + imagePixbuf = showpix; + } + } + } + } + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Interface/WidgetControl.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Interface/WidgetControl.cs index a069a87c540f2d1d22fd5d81975803d243d1f9a8..a157e117997e61b1a1f2b1798d5f65d477957165 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/Interface/WidgetControl.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Interface/WidgetControl.cs @@ -1,90 +1,93 @@ -using Gtk; +/* + * 基于GTK组件开发,兼容原生C#控件winform界面的跨平台界面组件。 + * 使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows、linux、macos运行 + * 技术支持438865652@qq.com,https://gitee.com/easywebfactory, https://www.cnblogs.com/easywebfactory + * author:chenhongjin + * date: 2024/1/3 + */ + +using Gtk; using System; -using System.Collections; -using System.Collections.Generic; using System.ComponentModel; using System.Drawing; - +using System.Runtime.Remoting.Messaging; +using System.Text; +using System.Threading; +using Region = System.Drawing.Region; namespace System.Windows.Forms { - public abstract class WidgetControl: ISynchronizeInvoke, IComponent, IDisposable, IControl, ISupportInitialize + /// + /// WidgetContainerControl与WidgetControl属性方法基本一样,主要是分区继承的Control,ContainerControl + /// + /// + public class WidgetControl : Control, ISynchronizeInvoke, IComponent, IDisposable, IControl, ISupportInitialize { private Gtk.Widget _widget; - public Gtk.Widget Widget { get { return _widget; } + public override Gtk.Widget Widget + { + get { return _widget; } } - public Gtk.Container Container { get; private set; } + public override Gtk.Container GtkContainer => _widget as Gtk.Container; private T _control; - public T Control { - get { return _control; } - set { - if (value == null) - { - _control = default(T); - _widget = null; - Container = null; - } - else - { - _control = value; - _widget = _control as Gtk.Widget; - Container = _control as Gtk.Container; - Dock = DockStyle.None; - Widget.MarginStart = 0; - Widget.MarginTop = 0; - Widget.Drawn += Widget_Drawn; - Widget.StyleContext.AddClass("DefaultThemeStyle"); - } - } + public T Control + { + get { return _control; } } + private object _gtkControl; + public override object GtkControl => _gtkControl; public WidgetControl(params object[] args) { object widget = Activator.CreateInstance(typeof(T), args); + _gtkControl = widget; _control = (T)widget; _widget = widget as Gtk.Widget; - Container = widget as Gtk.Container; Dock = DockStyle.None; - Widget.MarginStart = 0; - Widget.MarginTop = 0; - Widget.Drawn += Widget_Drawn; - Widget.StyleContext.AddClass("DefaultThemeStyle"); + _widget.MarginStart = 0; + _widget.MarginTop = 0; + //_widget.Drawn += Widget_Drawn; + _widget.Realized += _widget_Realized; + _widget.StyleContext.AddClass("DefaultThemeStyle"); + } + private void _widget_Realized(object sender, EventArgs e) + { + UpdateStyle(); } - private void Widget_Drawn(object o, DrawnArgs args) { Gdk.Rectangle rec = Widget.Allocation; - if (Control is Gtk.Button || Control is Gtk.Image) + if (this.Control is Gtk.Button || this.Control is Gtk.Image) { //由于绘画会覆盖容器内部所有子控件,不合适容器控件使用,只对button和picturebox设置背景 - if (this.BackColor != null && this.BackColor.Name != "0") - { - DrawBackgroundColor(args.Cr, Widget, this.BackColor, rec); - } if (_BackgroundImageBytes != null) { - if (backgroundPixbuf == null) + try { - Gdk.Pixbuf imagePixbuf = new Gdk.Pixbuf(IntPtr.Zero); - ScaleImage(ref imagePixbuf, _BackgroundImageBytes, PictureBoxSizeMode.AutoSize, BackgroundImageLayout == ImageLayout.None ? ImageLayout.Tile : BackgroundImageLayout); - backgroundPixbuf = imagePixbuf.ScaleSimple(imagePixbuf.Width - 8, imagePixbuf.Height - 6, Gdk.InterpType.Tiles); + if (backgroundPixbuf == null) + { + Gdk.Pixbuf imagePixbuf = new Gdk.Pixbuf(IntPtr.Zero); + // ScaleImage(rec.Width, rec.Height, ref imagePixbuf, _BackgroundImageBytes, PictureBoxSizeMode.AutoSize, BackgroundImageLayout == ImageLayout.None ? ImageLayout.Tile : BackgroundImageLayout); + backgroundPixbuf = imagePixbuf.ScaleSimple(imagePixbuf.Width - 8, imagePixbuf.Height - 6, Gdk.InterpType.Tiles); + } + DrawBackgroundImage(args.Cr, backgroundPixbuf, rec); + //if (this.Control is Gtk.Button button) + //{ + // button.Child.Visible = false; + // DrawBackgroundText(args.Cr, rec); + //} } - //Gdk.Pixbuf imagePixbuf = new Gdk.Pixbuf(_BackgroundImageBytes); - DrawBackgroundImage(args.Cr, backgroundPixbuf, rec); - } - if ((this.BackColor != null && this.BackColor.Name != "0") || backgroundPixbuf != null) - { - if (string.IsNullOrEmpty(this.Text) == false) + catch { - DrawBackgroundText(args.Cr, Widget, rec); + } } } - if (Paint != null) - Paint(o, new PaintEventArgs(new Graphics(this.Widget,args.Cr, Widget.Allocation), new Drawing.Rectangle(rec.X, rec.Y, rec.Width, rec.Height))); + Paint(this, new PaintEventArgs(new Graphics(this._widget, args.Cr, rec), new Drawing.Rectangle(rec.X, rec.Y, rec.Width, rec.Height))); } - Gdk.Pixbuf backgroundPixbuf; - void DrawBackgroundColor(Cairo.Context ctx, Gtk.Widget control, Drawing.Color backcolor, Gdk.Rectangle rec) + + private Gdk.Pixbuf backgroundPixbuf; + internal void DrawBackgroundColor(Cairo.Context ctx, Drawing.Color backcolor, Gdk.Rectangle rec) { ctx.Save(); ctx.SetSourceRGB(backcolor.R / 255f, backcolor.G / 255f, backcolor.B / 255f); @@ -92,22 +95,12 @@ namespace System.Windows.Forms ctx.Fill(); ctx.Restore(); } - void DrawBackgroundImage(Cairo.Context ctx, Gdk.Pixbuf img, Gdk.Rectangle rec) + internal void DrawBackgroundImage(Cairo.Context ctx, Gdk.Pixbuf img, Gdk.Rectangle rec) { - Gdk.Size size = new Gdk.Size(rec.Width - 4, rec.Height - 4); + Gdk.Size size = new Gdk.Size(rec.Width, rec.Height); ctx.Save(); - ctx.Translate(2, 2); - //ctx.Scale(size.Width / (double)img.Width, size.Height / (double)img.Height); - if (size.Width > img.Width) - { - ctx.Scale(size.Width / (double)img.Width, size.Width / (double)img.Width); - } - else if (size.Height > img.Height) - { - ctx.Scale(size.Height / (double)img.Height, size.Height / (double)img.Height); - } + ctx.Translate(4, 4); Gdk.CairoHelper.SetSourcePixbuf(ctx, img, 0, 0); - using (var p = ctx.GetSource()) { if (p is Cairo.SurfacePattern pattern) @@ -123,25 +116,13 @@ namespace System.Windows.Forms ctx.Paint(); ctx.Restore(); } - void DrawBackgroundText(Cairo.Context ctx, Gtk.Widget control, Gdk.Rectangle rec) + internal void DrawBackgroundText(Cairo.Context ctx, Gdk.Rectangle rec) { - if (Control is Gtk.Button button) - button.Child.Visible = false; string text = this.Text; if (string.IsNullOrEmpty(text) == false) { ctx.Save(); - float textleng = 0; - foreach (char w in text) - { - if (char.IsLower(w) && char.IsLetter(w)) - textleng += 0.5f; - else if (char.IsDigit(w)) - textleng += 0.5f; - else - textleng += 1f; - } - float textSize = 15f; + float textSize = 14f; if (this.Font != null) { textSize = this.Font.Size; @@ -150,38 +131,122 @@ namespace System.Windows.Forms if (this.Font.Unit == GraphicsUnit.Inch) textSize = this.Font.Size * 96; } - var x = (int)((rec.Width - textleng * textSize) * 0.5f - 3); - var y = (int)((rec.Height + textSize) * 0.5f - 3); - if (x < 0) x = 0; - if (y < 0) y = 0; - ctx.Translate(x, y); - if (this.ForeColor != null && this.ForeColor.Name != "0") - ctx.SetSourceRGBA(this.ForeColor.R / 255f, this.ForeColor.G / 255f, this.ForeColor.B / 255f, 1); - - Pango.Context pangocontext = control.PangoContext; + Pango.Context pangocontext = _widget.PangoContext; string family = pangocontext.FontDescription.Family; - ctx.SelectFontFace(family, Cairo.FontSlant.Normal, Cairo.FontWeight.Normal); + if (string.IsNullOrWhiteSpace(this.Font.FontFamily.Name) == false) + { + var pangoFamily = Array.Find(pangocontext.Families, f => f.Name == this.Font.FontFamily.Name); + if (pangoFamily != null) + family = pangoFamily.Name; + } + ctx.SelectFontFace(family, this.Font.Italic ? Cairo.FontSlant.Italic : Cairo.FontSlant.Normal, this.Font.Bold ? Cairo.FontWeight.Bold : Cairo.FontWeight.Normal); ctx.SetFontSize(textSize); + var textExt = ctx.TextExtents(text); + var x = (int)((rec.Width - textExt.Width)* 0.5); + var y = (int)((rec.Height + textExt.Height) * 0.5f); + ctx.Translate(x, y); + if (this.ForeColor.Name != "Control" && this.ForeColor.Name != "0") + ctx.SetSourceRGBA(this.ForeColor.R / 255f, this.ForeColor.G / 255f, this.ForeColor.B / 255f, 1); ctx.ShowText(text); ctx.Stroke(); ctx.Restore(); } } - public AccessibleObject AccessibilityObject { get; } + internal void UpdateStyle() + { + SetStyle(_widget); + } + protected virtual void SetStyle(Gtk.Widget widget) + { + string stylename = $"s{unique_key}"; + StringBuilder style = new StringBuilder(); + if (this.BackColor.Name != "Control" && this.BackColor.Name != "0") + { + string color = $"rgba({this.BackColor.R},{this.BackColor.G},{this.BackColor.B},{this.BackColor.A})"; + // style.AppendFormat("background-color:{0};background:{0};", color); + } + if (this.ForeColor.Name != "Control" && this.ForeColor.Name != "0") + { + string color = $"rgba({this.ForeColor.R},{this.ForeColor.G},{this.ForeColor.B},{this.ForeColor.A})"; + style.AppendFormat("color:{0};", color); + } + if (this.Font != null) + { + Pango.AttrList attributes = new Pango.AttrList(); + float textSize = this.Font.Size; + if (this.Font.Unit == GraphicsUnit.Point) + textSize = this.Font.Size / 72 * 96; + else if (this.Font.Unit == GraphicsUnit.Inch) + textSize = this.Font.Size * 96; + + style.AppendFormat("font-size:{0}px;", (int)textSize); + if (string.IsNullOrWhiteSpace(Font.FontFamily.Name) == false) + { + style.AppendFormat("font-family:\"{0}\";", Font.FontFamily.Name); + attributes.Insert(new Pango.AttrFontDesc(new Pango.FontDescription() { Family = Font.FontFamily.Name, Size = (int)(textSize * Pango.Scale.PangoScale*0.7) })); + } + + string[] fontstyle = Font.Style.ToString().ToLower().Split(new char[] { ',', ' ' }); + foreach (string sty in fontstyle) + { + if (sty == "bold") + { + style.Append("font-weight:bold;"); + attributes.Insert(new Pango.AttrWeight(Pango.Weight.Bold)); + } + else if (sty == "italic") + { + style.Append("font-style:italic;"); + attributes.Insert(new Pango.AttrStyle(Pango.Style.Italic)); + } + else if (sty == "underline") + { + style.Append("text-decoration:underline;"); + attributes.Insert(new Pango.AttrUnderline(Pango.Underline.Low)); + } + else if (sty == "strikeout") + { + style.Append("text-decoration:line-through;"); + attributes.Insert(new Pango.AttrStrikethrough(true)); + } + } + if (widget is Gtk.Label gtklabel) + { + gtklabel.Attributes = attributes; + } + } + + StringBuilder css = new StringBuilder(); + css.AppendLine($".{stylename}{{{style.ToString()}}}"); + if (widget is Gtk.TextView) + { + css.AppendLine($".{stylename} text{{{style.ToString()}}}"); + css.AppendLine($".{stylename} .view{{{style.ToString()}}}"); + } + CssProvider provider = new CssProvider(); + if (provider.LoadFromData(css.ToString())) + { + widget.StyleContext.AddProvider(provider, 900); + widget.StyleContext.RemoveClass(stylename); + widget.StyleContext.AddClass(stylename); + } + } + public override AccessibleObject AccessibilityObject { get; } - public string AccessibleDefaultActionDescription { get; set; } - public string AccessibleDescription { get; set; } - public string AccessibleName { get; set; } - public AccessibleRole AccessibleRole { get; set; } - public bool AllowDrop { get; set; } - public AnchorStyles Anchor { get; set; } - public Point AutoScrollOffset { get; set; } - public bool AutoSize { get; set; } - public Color BackColor { get; set; } + public override string AccessibleDefaultActionDescription { get; set; } + public override string AccessibleDescription { get; set; } + public override string AccessibleName { get; set; } + public override AccessibleRole AccessibleRole { get; set; } + public override bool AllowDrop { get; set; } + public override AnchorStyles Anchor { get; set; } + public override Point AutoScrollOffset { get; set; } + public override bool AutoSize { get; set; } + private Color _BackColor; + public override Color BackColor { get=>_BackColor; set { _BackColor = value;UpdateStyle(); } } private byte[] _BackgroundImageBytes; private System.Drawing.Image backgroundImage; - public virtual System.Drawing.Image BackgroundImage + public override System.Drawing.Image BackgroundImage { get => backgroundImage; set @@ -191,44 +256,45 @@ namespace System.Windows.Forms { _BackgroundImageBytes = new byte[value.PixbufData.Length]; value.PixbufData.CopyTo(_BackgroundImageBytes, 0); + //_BackgroundImageBytes = value.PixbufData; } } } - public virtual ImageLayout BackgroundImageLayout { get; set; } - public BindingContext BindingContext { get; set; } + public override ImageLayout BackgroundImageLayout { get; set; } + public override BindingContext BindingContext { get; set; } - public int Bottom { get; } + public override int Bottom { get; } - public Rectangle Bounds { get; set; } + public override Rectangle Bounds { get; set; } - public bool CanFocus { get { return Widget.CanFocus; } } + public override bool CanFocus { get { return Widget.CanFocus; } } - public bool CanSelect { get; } + public override bool CanSelect { get; } - public bool Capture { get; set; } - public bool CausesValidation { get; set; } - public string CompanyName { get; } + public override bool Capture { get; set; } + public override bool CausesValidation { get; set; } + public override string CompanyName { get; } - public bool ContainsFocus { get; } + public override bool ContainsFocus { get; } - public ContextMenuStrip ContextMenuStrip { get; set; } + public override ContextMenuStrip ContextMenuStrip { get; set; } - public virtual ControlCollection Controls { get; } + public override ControlCollection Controls { get; } - public bool Created => _Created; + public override bool Created => _Created; internal bool _Created; - public Cursor Cursor { get; set; } + public override Cursor Cursor { get; set; } - public ControlBindingsCollection DataBindings { get; } + public override ControlBindingsCollection DataBindings { get; } - public int DeviceDpi { get; } + public override int DeviceDpi { get; } - public Rectangle DisplayRectangle { get; } + public override Rectangle DisplayRectangle { get; } - public bool Disposing { get; } + public override bool Disposing { get; } - public DockStyle Dock + public override DockStyle Dock { get { @@ -237,77 +303,70 @@ namespace System.Windows.Forms else return DockStyle.None; } - set { - Widget.Data["Dock"] = value.ToString(); - if (value == DockStyle.Fill) { - Container.ResizeMode = Gtk.ResizeMode.Parent; - } + set + { + Widget.Data["Dock"] = value.ToString(); } } - public bool Enabled { get { return Widget.Sensitive; } set { Widget.Sensitive = value; } } + public override bool Enabled { get { return Widget.Sensitive; } set { Widget.Sensitive = value; } } - public bool Focused { get { return Widget.IsFocus; } } + public override bool Focused { get { return Widget.IsFocus; } } + private Font _Font; + public override Font Font { get => _Font; set { _Font = value; UpdateStyle(); } } + private Color _ForeColor; + public override Color ForeColor { get => _ForeColor; set { _ForeColor = value; UpdateStyle(); } } - public Font Font { get; set; } + public override bool HasChildren { get; } - private Color foreColor; - public Color ForeColor { - get { return foreColor; } - set { - foreColor = value; - Widget.ModifyFg(Gtk.StateType.Normal,new Gdk.Color(value.R,value.G,value.B)); - } - } + public override int Height { get { return Widget.HeightRequest; } set { Widget.HeightRequest = value; } } + public override ImeMode ImeMode { get; set; } - public bool HasChildren { get; } + public override bool InvokeRequired { get; } - public int Height { get { return Widget.HeightRequest; } set { Widget.HeightRequest = value; } } - public ImeMode ImeMode { get; set; } + public override bool IsAccessible { get; set; } - public bool InvokeRequired { get; } + public override bool IsDisposed { get; } - public bool IsAccessible { get; set; } + public override bool IsHandleCreated { get; } - public bool IsDisposed { get; } + public override bool IsMirrored { get; } - public bool IsHandleCreated { get; } + public override LayoutEngine LayoutEngine { get; } - public bool IsMirrored { get; } - - public LayoutEngine LayoutEngine { get; } + public override int Left { + get; + set; + } - public int Left { get; set; } - public virtual Point Location + public override Point Location { get { - return new Point(Widget.MarginStart, Widget.MarginTop); + return new Point(Left, Top); } set { - Widget.MarginTop = Math.Max(0, value.Y); - Widget.MarginStart = Math.Max(0, value.X); - - Widget.Data["InitMarginStart"] = Widget.MarginStart; - Widget.Data["InitMarginTop"] = Widget.MarginTop; + Left = value.X; + Top = value.Y; } } - public Padding Margin { get; set; } - public Size MaximumSize { get; set; } - public Size MinimumSize { get; set; } - public string Name { get { return Widget.Name; } set { Widget.Name = value; } } - public Padding Padding { get; set; } - public Gtk.Widget Parent { get { return Widget.Parent; } set { Widget.Parent = value; } } - public Size PreferredSize { get; } - public string ProductName { get; } - public string ProductVersion { get; } - public bool RecreatingHandle { get; } - public Region Region { get; set; } - public int Right { get; } - - public RightToLeft RightToLeft { get; set; } - public ISite Site { get; set; } - public Size Size + //public override Padding Margin { get; set; } + //public override Size MaximumSize { get; set; } + //public override Size MinimumSize { get; set; } + public override string Name { get { return Widget.Name; } set { Widget.Name = value; } } + public override Padding Padding { get; set; } + public Gtk.Widget WidgetParent { get { return Widget.Parent; } set { Widget.Parent = value; } } + public override Control Parent { get; set; } + public override Size PreferredSize { get; } + public override string ProductName { get; } + public override string ProductVersion { get; } + public override bool RecreatingHandle { get; } + public override Region Region { get; set; } + public override int Right { get; } + + public override RightToLeft RightToLeft { get; set; } + public override ISite Site { get; set; } + public override Size Size { get { @@ -316,478 +375,500 @@ namespace System.Windows.Forms set { Widget.SetSizeRequest(value.Width, value.Height); - Widget.Data["InitWidth"] = value.Width; - Widget.Data["InitHeight"] = value.Height; } } - public int TabIndex { get; set; } - public bool TabStop { get; set; } - public object Tag { get; set; } - public virtual string Text { get; set; } - public int Top { get; set; } - - public Control TopLevelControl { get; } - - public bool UseWaitCursor { get; set; } - public bool Visible { get { return Widget.Visible; } set { Widget.Visible = value; } } - public int Width { get { return Widget.WidthRequest; } set { Widget.WidthRequest = value; } } - public IWindowTarget WindowTarget { get; set; } - Control IControl.Parent { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } - - public virtual event EventHandler AutoSizeChanged; - public virtual event EventHandler BackColorChanged; - public virtual event EventHandler BackgroundImageChanged; - public virtual event EventHandler BackgroundImageLayoutChanged; - public virtual event EventHandler BindingContextChanged; - public virtual event EventHandler CausesValidationChanged; - public virtual event UICuesEventHandler ChangeUICues; - public virtual event EventHandler Click - { - add { Widget.ButtonReleaseEvent += (object o, ButtonReleaseEventArgs args) => { value.Invoke(o, args); }; } - remove { Widget.ButtonReleaseEvent -= (object o, ButtonReleaseEventArgs args) => { value.Invoke(o, args); }; } - } - - public virtual event EventHandler ClientSizeChanged; - public virtual event EventHandler ContextMenuStripChanged; - public virtual event ControlEventHandler ControlAdded; - public virtual event ControlEventHandler ControlRemoved; - public virtual event EventHandler CursorChanged; - public virtual event EventHandler DockChanged; - public virtual event EventHandler DoubleClick; - public virtual event EventHandler DpiChangedAfterParent; - public virtual event EventHandler DpiChangedBeforeParent; - public virtual event DragEventHandler DragDrop; + public override int TabIndex { get; set; } + public override bool TabStop { get; set; } + public override object Tag { get; set; } + public override string Text { get; set; } + public override int Top + { + get; + set; + } + + public override Control TopLevelControl { get; } + + public override bool UseWaitCursor { get; set; } + public override bool Visible { get { return Widget.Visible; } set { Widget.Visible = value; Widget.NoShowAll = value == false; } } + public override int Width { get { return Widget.WidthRequest; } set { Widget.WidthRequest = value; } } + public override IWindowTarget WindowTarget { get; set; } + public override event EventHandler AutoSizeChanged; + public override event EventHandler BackColorChanged; + public override event EventHandler BackgroundImageChanged; + public override event EventHandler BackgroundImageLayoutChanged; + public override event EventHandler BindingContextChanged; + public override event EventHandler CausesValidationChanged; + public override event UICuesEventHandler ChangeUICues; + public override event EventHandler Click + { + add { Widget.ButtonReleaseEvent += (object o, ButtonReleaseEventArgs args) => { value.Invoke(this, args); }; } + remove { Widget.ButtonReleaseEvent -= (object o, ButtonReleaseEventArgs args) => { value.Invoke(this, args); }; } + } + + public override event EventHandler ClientSizeChanged; + public override event EventHandler ContextMenuStripChanged; + public override event ControlEventHandler ControlAdded; + public override event ControlEventHandler ControlRemoved; + public override event EventHandler CursorChanged; + public override event EventHandler DockChanged; + public override event EventHandler DoubleClick; + public override event EventHandler DpiChangedAfterParent; + public override event EventHandler DpiChangedBeforeParent; + public override event DragEventHandler DragDrop; //{ - // add { Widget.DragDrop += (object o, Gtk.DragDropArgs args) => { value.Invoke(o, new DragEventArgs(null, Convert.ToInt32(args.RetVal), args.X, args.Y, DragDropEffects.All, DragDropEffects.Move)); }; } + // add { Widget.DragDrop += (object o, Gtk.DragDropArgs args) => { value.Invoke(this, new DragEventArgs(null, Convert.ToInt32(args.RetVal), args.X, args.Y, DragDropEffects.All, DragDropEffects.Move)); }; } // remove { Widget.DragDrop -= (object o, Gtk.DragDropArgs args) => { }; } //} - public virtual event DragEventHandler DragEnter; - public virtual event EventHandler DragLeave; - public virtual event DragEventHandler DragOver; - public virtual event EventHandler EnabledChanged; - public virtual event EventHandler Enter + public override event DragEventHandler DragEnter; + public override event EventHandler DragLeave; + public override event DragEventHandler DragOver; + public override event EventHandler EnabledChanged; + public override event EventHandler Enter { add { - Widget.EnterNotifyEvent += (object o, Gtk.EnterNotifyEventArgs args) => { value.Invoke(o, args); }; - Widget.FocusInEvent += (object o, FocusInEventArgs args) => { value.Invoke(o, args); }; + Widget.EnterNotifyEvent += (object o, Gtk.EnterNotifyEventArgs args) => { value.Invoke(this, args); }; + Widget.FocusInEvent += (object o, FocusInEventArgs args) => { value.Invoke(this, args); }; } remove { - Widget.EnterNotifyEvent -= (object o, Gtk.EnterNotifyEventArgs args) => { value.Invoke(o, args); }; - Widget.FocusInEvent -= (object o, FocusInEventArgs args) => { value.Invoke(o, args); }; + Widget.EnterNotifyEvent -= (object o, Gtk.EnterNotifyEventArgs args) => { value.Invoke(this, args); }; + Widget.FocusInEvent -= (object o, FocusInEventArgs args) => { value.Invoke(this, args); }; } } - public virtual event EventHandler FontChanged; - public virtual event EventHandler ForeColorChanged; - public virtual event GiveFeedbackEventHandler GiveFeedback; - public virtual event EventHandler GotFocus + public override event EventHandler FontChanged; + public override event EventHandler ForeColorChanged; + public override event GiveFeedbackEventHandler GiveFeedback; + public override event EventHandler GotFocus { - add { Widget.FocusInEvent += (object o, FocusInEventArgs args) => { value.Invoke(o, new EventArgs()); }; } - remove { Widget.FocusInEvent -= (object o, FocusInEventArgs args) => { value.Invoke(o, new EventArgs()); }; } + add { Widget.FocusInEvent += (object o, FocusInEventArgs args) => { value.Invoke(this, new EventArgs()); }; } + remove { Widget.FocusInEvent -= (object o, FocusInEventArgs args) => { value.Invoke(this, new EventArgs()); }; } } - public virtual event EventHandler HandleCreated; - public virtual event EventHandler HandleDestroyed; - public virtual event HelpEventHandler HelpRequested; - public virtual event EventHandler ImeModeChanged; - public virtual event InvalidateEventHandler Invalidated; - public virtual event KeyEventHandler KeyDown + public override event EventHandler HandleCreated; + public override event EventHandler HandleDestroyed; + public override event HelpEventHandler HelpRequested; + public override event EventHandler ImeModeChanged; + public override event InvalidateEventHandler Invalidated; + public override event KeyEventHandler KeyDown { - add { Widget.KeyPressEvent += (object o, Gtk.KeyPressEventArgs args) => { Enum.TryParse(args.Event.Key.ToString(), out Keys result); value.Invoke(o, new KeyEventArgs(result)); }; } - remove { Widget.KeyPressEvent -= (object o, Gtk.KeyPressEventArgs args) => { Enum.TryParse(args.Event.Key.ToString(), out Keys result); value.Invoke(o, new KeyEventArgs(result)); }; } + add { Widget.KeyPressEvent += (object o, Gtk.KeyPressEventArgs args) => { Enum.TryParse(args.Event.Key.ToString(), out Keys result); value.Invoke(this, new KeyEventArgs(result)); }; } + remove { Widget.KeyPressEvent -= (object o, Gtk.KeyPressEventArgs args) => { Enum.TryParse(args.Event.Key.ToString(), out Keys result); value.Invoke(this, new KeyEventArgs(result)); }; } } - public virtual event KeyPressEventHandler KeyPress + public override event KeyPressEventHandler KeyPress { - add { Widget.KeyReleaseEvent += (object o, Gtk.KeyReleaseEventArgs args) => { Enum.TryParse(args.Event.Key.ToString(), out Keys result); value.Invoke(o, new KeyPressEventArgs(args.Event.Key.ToString()[0])); }; } - remove { Widget.KeyReleaseEvent -= (object o, Gtk.KeyReleaseEventArgs args) => { Enum.TryParse(args.Event.Key.ToString(), out Keys result); value.Invoke(o, new KeyPressEventArgs(args.Event.Key.ToString()[0])); }; } + add { Widget.KeyReleaseEvent += (object o, Gtk.KeyReleaseEventArgs args) => { Enum.TryParse(args.Event.Key.ToString(), out Keys result); value.Invoke(this, new KeyPressEventArgs(args.Event.Key.ToString()[0])); }; } + remove { Widget.KeyReleaseEvent -= (object o, Gtk.KeyReleaseEventArgs args) => { Enum.TryParse(args.Event.Key.ToString(), out Keys result); value.Invoke(this, new KeyPressEventArgs(args.Event.Key.ToString()[0])); }; } } - public virtual event KeyEventHandler KeyUp + public override event KeyEventHandler KeyUp { - add { Widget.KeyReleaseEvent += (object o, Gtk.KeyReleaseEventArgs args) => { Enum.TryParse(args.Event.Key.ToString(), out Keys result); value.Invoke(o, new KeyEventArgs(result)); }; } - remove { Widget.KeyReleaseEvent -= (object o, Gtk.KeyReleaseEventArgs args) => { Enum.TryParse(args.Event.Key.ToString(), out Keys result); value.Invoke(o, new KeyEventArgs(result)); }; } + add { Widget.KeyReleaseEvent += (object o, Gtk.KeyReleaseEventArgs args) => { Enum.TryParse(args.Event.Key.ToString(), out Keys result); value.Invoke(this, new KeyEventArgs(result)); }; } + remove { Widget.KeyReleaseEvent -= (object o, Gtk.KeyReleaseEventArgs args) => { Enum.TryParse(args.Event.Key.ToString(), out Keys result); value.Invoke(this, new KeyEventArgs(result)); }; } } - public virtual event LayoutEventHandler Layout; - public virtual event EventHandler Leave + public override event LayoutEventHandler Layout; + public override event EventHandler Leave { - add { Widget.LeaveNotifyEvent += (object o, LeaveNotifyEventArgs args) => { value.Invoke(o, args); }; } - remove { Widget.LeaveNotifyEvent -= (object o, LeaveNotifyEventArgs args) => { value.Invoke(o, args); }; } + add { Widget.LeaveNotifyEvent += (object o, LeaveNotifyEventArgs args) => { value.Invoke(this, args); }; } + remove { Widget.LeaveNotifyEvent -= (object o, LeaveNotifyEventArgs args) => { value.Invoke(this, args); }; } } - public virtual event EventHandler LocationChanged; - public virtual event EventHandler LostFocus + public override event EventHandler LocationChanged; + public override event EventHandler LostFocus { - add { Widget.FocusOutEvent += (object o, FocusOutEventArgs args) => { value.Invoke(o, new EventArgs()); }; } - remove { Widget.FocusOutEvent -= (object o, FocusOutEventArgs args) => { value.Invoke(o, new EventArgs()); }; } + add { Widget.FocusOutEvent += (object o, FocusOutEventArgs args) => { value.Invoke(this, new EventArgs()); }; } + remove { Widget.FocusOutEvent -= (object o, FocusOutEventArgs args) => { value.Invoke(this, new EventArgs()); }; } } - public virtual event EventHandler MarginChanged; - public virtual event EventHandler MouseCaptureChanged; - public virtual event MouseEventHandler MouseClick + public override event EventHandler MarginChanged; + public override event EventHandler MouseCaptureChanged; + public override event MouseEventHandler MouseClick { - add { Widget.ButtonReleaseEvent += (object o, ButtonReleaseEventArgs args) => { Enum.TryParse(args.Event.Button.ToString(), out MouseButtons result); value.Invoke(o, new MouseEventArgs(result, 1, (int)args.Event.X, (int)args.Event.Y, 0)); }; } - remove { Widget.ButtonReleaseEvent -= (object o, ButtonReleaseEventArgs args) => { Enum.TryParse(args.Event.Button.ToString(), out MouseButtons result); value.Invoke(o, new MouseEventArgs(result, 1, (int)args.Event.X, (int)args.Event.Y, 0)); }; } + add { Widget.ButtonReleaseEvent += (object o, ButtonReleaseEventArgs args) => { Enum.TryParse(args.Event.Button.ToString(), out MouseButtons result); value.Invoke(this, new MouseEventArgs(result, 1, (int)args.Event.X, (int)args.Event.Y, 0)); }; } + remove { Widget.ButtonReleaseEvent -= (object o, ButtonReleaseEventArgs args) => { Enum.TryParse(args.Event.Button.ToString(), out MouseButtons result); value.Invoke(this, new MouseEventArgs(result, 1, (int)args.Event.X, (int)args.Event.Y, 0)); }; } } - public virtual event MouseEventHandler MouseDoubleClick; - public virtual event MouseEventHandler MouseDown + public override event MouseEventHandler MouseDoubleClick; + public override event MouseEventHandler MouseDown { - add { Widget.ButtonPressEvent += (object o, ButtonPressEventArgs args) => { Enum.TryParse(args.Event.Button.ToString(), out MouseButtons result); value.Invoke(o, new MouseEventArgs(result, 1, (int)args.Event.X, (int)args.Event.Y, 0)); }; } - remove { Widget.ButtonPressEvent -= (object o, ButtonPressEventArgs args) => { Enum.TryParse(args.Event.Button.ToString(), out MouseButtons result); value.Invoke(o, new MouseEventArgs(result, 1, (int) args.Event.X, (int) args.Event.Y, 0)); }; } + add { Widget.ButtonPressEvent += (object o, ButtonPressEventArgs args) => { Enum.TryParse(args.Event.Button.ToString(), out MouseButtons result); value.Invoke(this, new MouseEventArgs(result, 1, (int)args.Event.X, (int)args.Event.Y, 0)); }; } + remove { Widget.ButtonPressEvent -= (object o, ButtonPressEventArgs args) => { Enum.TryParse(args.Event.Button.ToString(), out MouseButtons result); value.Invoke(this, new MouseEventArgs(result, 1, (int)args.Event.X, (int)args.Event.Y, 0)); }; } } - public virtual event EventHandler MouseEnter + public override event EventHandler MouseEnter { - add { Widget.EnterNotifyEvent += (object o, Gtk.EnterNotifyEventArgs args) => { value.Invoke(o, args); }; } - remove { Widget.EnterNotifyEvent -= (object o, Gtk.EnterNotifyEventArgs args) => { value.Invoke(o, args); }; } + add { Widget.EnterNotifyEvent += (object o, Gtk.EnterNotifyEventArgs args) => { value.Invoke(this, args); }; } + remove { Widget.EnterNotifyEvent -= (object o, Gtk.EnterNotifyEventArgs args) => { value.Invoke(this, args); }; } } - public virtual event EventHandler MouseHover; - public virtual event EventHandler MouseLeave; - public virtual event MouseEventHandler MouseMove + public override event EventHandler MouseHover; + public override event EventHandler MouseLeave; + public override event MouseEventHandler MouseMove { - add { Widget.MotionNotifyEvent += (object o, MotionNotifyEventArgs args) => { value.Invoke(o, new MouseEventArgs(MouseButtons.None, 1, (int)args.Event.X, (int)args.Event.Y, 0)); }; } - remove { Widget.MotionNotifyEvent -= (object o, MotionNotifyEventArgs args) => { value.Invoke(o, new MouseEventArgs(MouseButtons.None, 1, (int)args.Event.X, (int)args.Event.Y, 0)); }; } + add { Widget.MotionNotifyEvent += (object o, MotionNotifyEventArgs args) => { value.Invoke(this, new MouseEventArgs(MouseButtons.None, 1, (int)args.Event.X, (int)args.Event.Y, 0)); }; } + remove { Widget.MotionNotifyEvent -= (object o, MotionNotifyEventArgs args) => { value.Invoke(this, new MouseEventArgs(MouseButtons.None, 1, (int)args.Event.X, (int)args.Event.Y, 0)); }; } } - public virtual event MouseEventHandler MouseUp; - public virtual event MouseEventHandler MouseWheel; - public virtual event EventHandler Move + public override event MouseEventHandler MouseUp; + public override event MouseEventHandler MouseWheel; + public override event EventHandler Move { - add { Widget.MotionNotifyEvent += (object o, MotionNotifyEventArgs args) => { value.Invoke(o, args); }; } - remove { Widget.MotionNotifyEvent -= (object o, MotionNotifyEventArgs args) => { value.Invoke(o, args); }; } + add { Widget.MotionNotifyEvent += (object o, MotionNotifyEventArgs args) => { value.Invoke(this, args); }; } + remove { Widget.MotionNotifyEvent -= (object o, MotionNotifyEventArgs args) => { value.Invoke(this, args); }; } } - public virtual event EventHandler PaddingChanged; - public virtual event PaintEventHandler Paint; - public virtual event EventHandler ParentChanged; - public virtual event PreviewKeyDownEventHandler PreviewKeyDown; - public virtual event QueryAccessibilityHelpEventHandler QueryAccessibilityHelp; - public virtual event QueryContinueDragEventHandler QueryContinueDrag; - public virtual event EventHandler RegionChanged; - public virtual event EventHandler Resize; - public virtual event EventHandler RightToLeftChanged; - public virtual event EventHandler SizeChanged + public override event EventHandler PaddingChanged; + public override event PaintEventHandler Paint; + public override event EventHandler ParentChanged; + public override event PreviewKeyDownEventHandler PreviewKeyDown; + public override event QueryAccessibilityHelpEventHandler QueryAccessibilityHelp; + public override event QueryContinueDragEventHandler QueryContinueDrag; + public override event EventHandler RegionChanged; + public override event EventHandler Resize; + public override event EventHandler RightToLeftChanged; + public override event EventHandler SizeChanged { - add { Widget.SizeAllocated += (object o, SizeAllocatedArgs args) => { value.Invoke(o, args); }; } - remove { Widget.SizeAllocated -= (object o, SizeAllocatedArgs args) => { value.Invoke(o, args); }; } + add { Widget.SizeAllocated += (object o, SizeAllocatedArgs args) => { value.Invoke(this, args); }; } + remove { Widget.SizeAllocated -= (object o, SizeAllocatedArgs args) => { value.Invoke(this, args); }; } } - public virtual event EventHandler StyleChanged; - public virtual event EventHandler SystemColorsChanged; - public virtual event EventHandler TabIndexChanged; - public virtual event EventHandler TabStopChanged; - public virtual event EventHandler TextChanged; + public override event EventHandler StyleChanged; + public override event EventHandler SystemColorsChanged; + public override event EventHandler TabIndexChanged; + public override event EventHandler TabStopChanged; + public override event EventHandler TextChanged; CancelEventArgs cancelEventArgs = new CancelEventArgs(false); - public virtual event EventHandler Validated + public override event EventHandler Validated { - add { Widget.FocusOutEvent += (object o, FocusOutEventArgs args) => { if (cancelEventArgs.Cancel == false) { value.Invoke(o, new EventArgs()); } }; } - remove { Widget.FocusOutEvent -= (object o, FocusOutEventArgs args) => { if (cancelEventArgs.Cancel == false) { value.Invoke(o, new EventArgs()); } }; } + add { Widget.FocusOutEvent += (object o, FocusOutEventArgs args) => { if (cancelEventArgs.Cancel == false) { value.Invoke(this, new EventArgs()); } }; } + remove { Widget.FocusOutEvent -= (object o, FocusOutEventArgs args) => { if (cancelEventArgs.Cancel == false) { value.Invoke(this, new EventArgs()); } }; } } - public virtual event CancelEventHandler Validating + public override event CancelEventHandler Validating { - add { Widget.FocusOutEvent += (object o, FocusOutEventArgs args) => { cancelEventArgs.Cancel = false; value.Invoke(o, cancelEventArgs); }; } - remove { Widget.FocusOutEvent -= (object o, FocusOutEventArgs args) => { cancelEventArgs.Cancel = false; value.Invoke(o, cancelEventArgs); }; } + add { Widget.FocusOutEvent += (object o, FocusOutEventArgs args) => { cancelEventArgs.Cancel = false; value.Invoke(this, cancelEventArgs); }; } + remove { Widget.FocusOutEvent -= (object o, FocusOutEventArgs args) => { cancelEventArgs.Cancel = false; value.Invoke(this, cancelEventArgs); }; } } - public virtual event EventHandler VisibleChanged; - public virtual event EventHandler Disposed; + public override event EventHandler VisibleChanged; + //public event EventHandler Disposed; public virtual event EventHandler Load { add { Widget.Realized += (object sender, EventArgs e) => { value.Invoke(sender, e); }; } remove { Widget.Realized -= (object sender, EventArgs e) => { value.Invoke(sender, e); }; } } - public IAsyncResult BeginInvoke(Delegate method) + + public override IAsyncResult BeginInvoke(Delegate method, params object[]? args) + { + System.Threading.Tasks.Task task = System.Threading.Tasks.Task.Factory.StartNew(state => + { + method.DynamicInvoke((object[])state); + }, args); + + return task; + } + public override IAsyncResult BeginInvoke(Delegate method) { return BeginInvoke(method, null); } - - public IAsyncResult BeginInvoke(Delegate method, params object[] args) + public override IAsyncResult BeginInvoke(Action method) + { + System.Threading.Tasks.Task task= System.Threading.Tasks.Task.Factory.StartNew(method); + return task; + } + public override object EndInvoke(IAsyncResult asyncResult) { - return new AsyncResult(); + if(asyncResult is System.Threading.Tasks.Task task) + { + if (task.IsCompleted == false && task.IsCanceled == false && task.IsFaulted == false) + task.GetAwaiter().GetResult(); + } + return asyncResult.AsyncState; } - public void BringToFront() + public override void BringToFront() { } - public bool Contains(Control ctl) + public override bool Contains(Control ctl) { return false; } - public void CreateControl() + public override void CreateControl() { } - public Graphics CreateGraphics() + public override Graphics CreateGraphics() { - Graphics g = new Graphics(this.Widget, new Cairo.Context(this.Widget.Handle,true), Widget.Allocation); + Graphics g = new Graphics(this.Widget, new Cairo.Context(this.Widget.Handle, true), Widget.Allocation); return g; } - public DragDropEffects DoDragDrop(object data, DragDropEffects allowedEffects) + public override DragDropEffects DoDragDrop(object data, DragDropEffects allowedEffects) { return DragDropEffects.None; } - public void DrawToBitmap(Bitmap bitmap, Rectangle targetBounds) + public override void DrawToBitmap(Bitmap bitmap, Rectangle targetBounds) { } - public object EndInvoke(IAsyncResult asyncResult) - { - return asyncResult.AsyncState; - } - - public Form FindForm() + public override Form FindForm() { return null; } - public bool Focus() + public override bool Focus() { return false; } - public Control GetChildAtPoint(Point pt) + public override Control GetChildAtPoint(Point pt) { return null; } - public Control GetChildAtPoint(Point pt, GetChildAtPointSkip skipValue) + public override Control GetChildAtPoint(Point pt, GetChildAtPointSkip skipValue) { return null; } - public IContainerControl GetContainerControl() + public override IContainerControl GetContainerControl() { return null; } - public Control GetNextControl(Control ctl, bool forward) + public override Control GetNextControl(Control ctl, bool forward) { return ctl; } - public Size GetPreferredSize(Size proposedSize) + public override Size GetPreferredSize(Size proposedSize) { return proposedSize; } - public void Invalidate() + public override void Invalidate() { } - public void Invalidate(bool invalidateChildren) + public override void Invalidate(bool invalidateChildren) { } - public void Invalidate(Rectangle rc) + public override void Invalidate(Rectangle rc) { } - public void Invalidate(Rectangle rc, bool invalidateChildren) + public override void Invalidate(Rectangle rc, bool invalidateChildren) { } - public void Invalidate(Region region) + public override void Invalidate(Region region) { } - public void Invalidate(Region region, bool invalidateChildren) + public override void Invalidate(Region region, bool invalidateChildren) { } - public object Invoke(Delegate method) + public override object Invoke(Delegate method) { - return null; + return Invoke(method, null); } - public object Invoke(Delegate method, params object[] args) + public override object Invoke(Delegate method, params object[] args) { - return null; + return method.DynamicInvoke(args); } - - public int LogicalToDeviceUnits(int value) + public override void Invoke(Action method) + { + method.Invoke(); + } + public override O Invoke(Func method) + { + return method.Invoke(); + } + public override int LogicalToDeviceUnits(int value) { return value; } - public Size LogicalToDeviceUnits(Size value) + public override Size LogicalToDeviceUnits(Size value) { return value; } - public Point PointToClient(Point p) + public override Point PointToClient(Point p) { return p; } - public Point PointToScreen(Point p) + public override Point PointToScreen(Point p) { return p; } - public PreProcessControlState PreProcessControlMessage(ref Message msg) + public override PreProcessControlState PreProcessControlMessage(ref Message msg) { return PreProcessControlState.MessageNotNeeded; } - public bool PreProcessMessage(ref Message msg) + public override bool PreProcessMessage(ref Message msg) { return false; } - public Rectangle RectangleToClient(Rectangle r) + public override Rectangle RectangleToClient(Rectangle r) { return r; } - public Rectangle RectangleToScreen(Rectangle r) + public override Rectangle RectangleToScreen(Rectangle r) { return r; } - public void Refresh() + public override void Refresh() { } - public void ResetBackColor() + public override void ResetBackColor() { } - public void ResetBindings() + public override void ResetBindings() { } - public void ResetCursor() + public override void ResetCursor() { } - public void ResetFont() + public override void ResetFont() { } - public void ResetForeColor() + public override void ResetForeColor() { } - public void ResetImeMode() + public override void ResetImeMode() { } - public void ResetRightToLeft() + public override void ResetRightToLeft() { } - public void ResetText() + public override void ResetText() { } - public virtual void ResumeLayout() + public override void ResumeLayout() { _Created = true; } - public virtual void ResumeLayout(bool performLayout) + public override void ResumeLayout(bool performLayout) { _Created = performLayout == false; } - public void Scale(float ratio) + public override void Scale(float ratio) { } - public void Scale(float dx, float dy) + public override void Scale(float dx, float dy) { } - public void Scale(SizeF factor) + public override void Scale(SizeF factor) { } - public void ScaleBitmapLogicalToDevice(ref Bitmap logicalBitmap) + public override void ScaleBitmapLogicalToDevice(ref Bitmap logicalBitmap) { } - public void Select() + public override void Select() { } - public bool SelectNextControl(Control ctl, bool forward, bool tabStopOnly, bool nested, bool wrap) + public override bool SelectNextControl(Control ctl, bool forward, bool tabStopOnly, bool nested, bool wrap) { return false; } - public void SendToBack() + public override void SendToBack() { } - public void SetBounds(int x, int y, int width, int height) + public override void SetBounds(int x, int y, int width, int height) { } - public void SetBounds(int x, int y, int width, int height, BoundsSpecified specified) + public override void SetBounds(int x, int y, int width, int height, BoundsSpecified specified) { } - public virtual void SuspendLayout() + public override void SuspendLayout() { _Created = false; } - public virtual void PerformLayout() + public override void PerformLayout() { _Created = true; } - public virtual void PerformLayout(Control affectedControl, string affectedProperty) + public override void PerformLayout(Control affectedControl, string affectedProperty) { _Created = true; } - public void Update() + public override void Update() { } [EditorBrowsable(EditorBrowsableState.Advanced)] - public virtual void BeginInit() + public override void BeginInit() { } [EditorBrowsable(EditorBrowsableState.Advanced)] - public virtual void EndInit() + public override void EndInit() { } - public virtual void Dispose() + public new void Dispose() { Dispose(true); + base.Dispose(); } - protected virtual void Dispose(bool disposing) + protected override void Dispose(bool disposing) { try { @@ -803,88 +884,89 @@ namespace System.Windows.Forms this.backgroundPixbuf = null; this.backgroundImage = null; this._BackgroundImageBytes = null; - Control = default(T); + _control = default(T); _widget = null; - Container = null; } } catch { } + base.Dispose(disposing); } - public bool UseVisualStyleBackColor { get; set; } + public override bool UseVisualStyleBackColor { get; set; } - protected void ScaleImage(ref Gdk.Pixbuf imagePixbuf, byte[] imagebytes, PictureBoxSizeMode sizeMode, ImageLayout backgroundMode) + protected void ScaleImage1(int width, int height, ref Gdk.Pixbuf imagePixbuf, byte[] imagebytes, PictureBoxSizeMode sizeMode, ImageLayout backgroundMode) { if (imagebytes != null) { Gdk.Pixbuf pix = new Gdk.Pixbuf(imagebytes); - int width = this.Size.Width > 0 ? this.Size.Width : pix.Width; - int height = this.Size.Height > 0 ? this.Size.Height : pix.Height; - if (width > 0 && height > 0) { - //Gdk.Pixbuf showpix = new Gdk.Pixbuf(new Cairo.ImageSurface(Cairo.Format.Argb32, width, height), 0, 0, width, height); - int newwidth = Math.Min(pix.Width, width); - int newheight = Math.Min(pix.Height, height); - Gdk.Pixbuf showpix = new Gdk.Pixbuf(new Cairo.ImageSurface(Cairo.Format.Argb32, newwidth, newheight), 0, 0, newwidth, newheight); - if (sizeMode == PictureBoxSizeMode.Normal && backgroundMode == ImageLayout.None) - { - pix.CopyArea(0, 0, Math.Min(pix.Width, showpix.Width), Math.Min(pix.Height, showpix.Height), showpix, 0, 0); - } - else if (sizeMode == PictureBoxSizeMode.StretchImage || backgroundMode == ImageLayout.Stretch) + using (var surface = new Cairo.ImageSurface(Cairo.Format.ARGB32, width, height)) { - Gdk.Pixbuf newpix = pix.ScaleSimple(width, height, Gdk.InterpType.Tiles); - newpix.CopyArea(0, 0, newpix.Width, newpix.Height, showpix, 0, 0); - } - else if (sizeMode == PictureBoxSizeMode.CenterImage || backgroundMode == ImageLayout.Center) - { - int offsetx = (pix.Width - showpix.Width) / 2; - int offsety = (pix.Height - showpix.Height) / 2; - pix.CopyArea(offsetx > 0 ? offsetx : 0, offsety > 0 ? offsety : 0, Math.Min(pix.Width, showpix.Width), Math.Min(pix.Height, showpix.Height), showpix, offsetx < 0 ? offsetx : 0, offsety < 0 ? offsety : 0); - } - else if (sizeMode == PictureBoxSizeMode.Zoom || backgroundMode == ImageLayout.Zoom) - { - if (pix.Width / width > pix.Height / height) + Gdk.Pixbuf showpix = new Gdk.Pixbuf(surface, 0, 0, width, height); + if (sizeMode == PictureBoxSizeMode.Normal && backgroundMode == ImageLayout.None) { - //图片的宽高比大于设置宽高比,以宽为准 - Gdk.Pixbuf newpix = pix.ScaleSimple(width, width * pix.Height / pix.Width, Gdk.InterpType.Tiles); - newpix.CopyArea(0, 0, newpix.Width, newpix.Height, showpix, (showpix.Width - newpix.Width) / 2, (showpix.Height - newpix.Height) / 2); + pix.CopyArea(0, 0, Math.Min(pix.Width, showpix.Width), Math.Min(pix.Height, showpix.Height), showpix, 0, 0); } - else + else if (sizeMode == PictureBoxSizeMode.StretchImage || backgroundMode == ImageLayout.Stretch) + { //缩放取全图铺满 + Gdk.Pixbuf newpix = pix.ScaleSimple(width, height, Gdk.InterpType.Tiles); + newpix.CopyArea(0, 0, newpix.Width, newpix.Height, showpix, 0, 0); + } + else if (sizeMode == PictureBoxSizeMode.CenterImage || backgroundMode == ImageLayout.Center) { - Gdk.Pixbuf newpix = pix.ScaleSimple(height * pix.Width / pix.Height, height, Gdk.InterpType.Tiles); - newpix.CopyArea(0, 0, newpix.Width, newpix.Height, showpix, (showpix.Width - newpix.Width) / 2, (showpix.Height - newpix.Height) / 2); + //取原图中间 + int offsetx = (pix.Width - showpix.Width) / 2; + int offsety = (pix.Height - showpix.Height) / 2; + pix.CopyArea(offsetx > 0 ? offsetx : 0, offsety > 0 ? offsety : 0, Math.Min(pix.Width, showpix.Width), Math.Min(pix.Height, showpix.Height), showpix, offsetx < 0 ? -offsetx : 0, offsety < 0 ? -offsety : 0); + } + else if (sizeMode == PictureBoxSizeMode.Zoom || backgroundMode == ImageLayout.Zoom) + { + if (pix.Width / width > pix.Height / height) + { + //图片的宽高比大于设置宽高比,以宽为准 + Gdk.Pixbuf newpix = pix.ScaleSimple(width, width * pix.Height / pix.Width, Gdk.InterpType.Tiles); + newpix.CopyArea(0, 0, newpix.Width, newpix.Height, showpix, (showpix.Width - newpix.Width) / 2, (showpix.Height - newpix.Height) / 2); + } + else + { + Gdk.Pixbuf newpix = pix.ScaleSimple(height * pix.Width / pix.Height, height, Gdk.InterpType.Tiles); + newpix.CopyArea(0, 0, newpix.Width, newpix.Height, showpix, (showpix.Width - newpix.Width) / 2, (showpix.Height - newpix.Height) / 2); + } + } + else if (sizeMode == PictureBoxSizeMode.AutoSize) + { + pix.CopyArea(0, 0, Math.Min(pix.Width, showpix.Width), Math.Min(pix.Height, showpix.Height), showpix, 0, 0); } - } - else if (sizeMode == PictureBoxSizeMode.AutoSize) - { - pix.CopyArea(0, 0, Math.Min(pix.Width, showpix.Width), Math.Min(pix.Height, showpix.Height), showpix, 0, 0); - } - if (backgroundMode == ImageLayout.Tile) - { - //平铺背景图 - if (showpix.Width < width || showpix.Height < height) + if (backgroundMode == ImageLayout.Tile) { - Gdk.Pixbuf backgroundpix = new Gdk.Pixbuf(new Cairo.ImageSurface(Cairo.Format.Argb32, width, height), 0, 0, width, height); - for (int y = 0; y < height; y += showpix.Height) + //平铺背景图,原图铺满 + if (pix.Width < width || pix.Height < height) { - for (int x = 0; x < width; x += showpix.Width) + using (var surface2 = new Cairo.ImageSurface(Cairo.Format.ARGB32, width, height)) { - showpix.CopyArea(0, 0, width - x > showpix.Width ? showpix.Width : width - x, height - y > showpix.Height ? showpix.Height : height - y, backgroundpix, x, y); + Gdk.Pixbuf backgroundpix = new Gdk.Pixbuf(surface2, 0, 0, width, height); + for (int y = 0; y < height; y += pix.Height) + { + for (int x = 0; x < width; x += pix.Width) + { + pix.CopyArea(0, 0, width - x > pix.Width ? pix.Width : width - x, height - y > pix.Height ? pix.Height : height - y, backgroundpix, x, y); + } + } + imagePixbuf = backgroundpix; } } - imagePixbuf = backgroundpix; + else + { + imagePixbuf = showpix; + } } else { imagePixbuf = showpix; } } - else - { - imagePixbuf = showpix; - } } } } diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Label.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Label.cs index 5ac71b2e9613196ba4ff74d7e95888eb6c75e9bf..a49359b261389f2c13dd74ac2c8e55b581243993 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/Label.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Label.cs @@ -1,19 +1,82 @@ -//基于GTK3.24.24.34版本组件开发,兼容原生C#控件winform界面的跨平台界面组件。 -//使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows和linux运行 -//技术支持438865652@qq.com,https://www.cnblogs.com/easywebfactory +/* + * 基于GTK组件开发,兼容原生C#控件winform界面的跨平台界面组件。 + * 使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows、linux、macos运行 + * 技术支持438865652@qq.com,https://gitee.com/easywebfactory, https://www.cnblogs.com/easywebfactory + * author:chenhongjin + * date: 2024/1/3 + */ +using Gtk; +using GTKSystem.Windows.Forms.GTKControls.ControlBase; using System; +using System.Collections.Generic; using System.ComponentModel; +using System.Drawing; namespace System.Windows.Forms { [DesignerCategory("Component")] - public partial class Label : WidgetControl + public partial class Label : Control { + public readonly LabelBase self = new LabelBase(); + public override object GtkControl => self; public Label() : base() { - Widget.StyleContext.AddClass("Label"); + } - public override string Text { get => base.Control.Text; set => base.Control.Text = value; } + public override string Text { get => self.Text; set => self.Text = value; } + public override RightToLeft RightToLeft { get { return self.Direction == Gtk.TextDirection.Rtl ? RightToLeft.Yes : RightToLeft.No; } set { self.Direction = value == RightToLeft.Yes ? Gtk.TextDirection.Rtl : Gtk.TextDirection.Ltr; } } + public System.Drawing.ContentAlignment TextAlign { + get { return textAlign; } + set { + textAlign = value; + if (value == System.Drawing.ContentAlignment.TopLeft) + { + self.Xalign = 0.08f; + self.Yalign = 0.08f; + } + else if (value == System.Drawing.ContentAlignment.TopCenter) + { + self.Xalign = 0.5f; + self.Yalign = 0.08f; + } + else if (value == System.Drawing.ContentAlignment.TopRight) + { + self.Xalign = 0.92f; + self.Yalign = 0.08f; + } + else if (value == System.Drawing.ContentAlignment.MiddleLeft) + { + self.Xalign = 0.08f; + self.Yalign = 0.5f; + } + else if (value == System.Drawing.ContentAlignment.MiddleCenter) + { + self.Xalign = 0.5f; + self.Yalign = 0.5f; + } + else if (value == System.Drawing.ContentAlignment.MiddleRight) + { + self.Xalign = 0.92f; + self.Yalign = 0.5f; + } + else if (value == System.Drawing.ContentAlignment.BottomLeft) + { + self.Xalign = 0.08f; + self.Yalign = 0.08f; + } + else if (value == System.Drawing.ContentAlignment.MiddleCenter) + { + self.Xalign = 0.5f; + self.Yalign = 0.08f; + } + else if (value == System.Drawing.ContentAlignment.MiddleRight) + { + self.Xalign = 0.92f; + self.Yalign = 0.08f; + } + } + } + private System.Drawing.ContentAlignment textAlign; } } diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/LinkLabel.cs b/Source/GTKSystem.Windows.Forms/GTKControls/LinkLabel.cs index 619e5a5b18f67a927c0f29ec9e68ec4132ef96b5..74c6b3f27d7ee33d39cb1648b543f491306b4776 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/LinkLabel.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/LinkLabel.cs @@ -1,42 +1,48 @@ -//基于GTK3.24.24.34版本组件开发,兼容原生C#控件winform界面的跨平台界面组件。 -//使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows和linux运行 -//技术支持438865652@qq.com,https://www.cnblogs.com/easywebfactory +/* + * 基于GTK组件开发,兼容原生C#控件winform界面的跨平台界面组件。 + * 使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows、linux、macos运行 + * 技术支持438865652@qq.com,https://gitee.com/easywebfactory, https://www.cnblogs.com/easywebfactory + * author:chenhongjin + * date: 2024/1/3 + */ +using GTKSystem.Windows.Forms.GTKControls.ControlBase; using System; using System.Collections; using System.ComponentModel; using System.Drawing; +using System.Linq; namespace System.Windows.Forms { [DesignerCategory("Component")] - public partial class LinkLabel: WidgetControl + public partial class LinkLabel: Control { - public LinkLabel():base("") + public readonly LinkLabelBase self = new LinkLabelBase(); + public override object GtkControl => self; + public LinkLabel():base() { - Widget.StyleContext.AddClass("LinkLabel"); - base.Control.Clicked += LinkLabel_Click; - base.Control.ActivateLink += LinkLabel_ActivateLink; + self.Clicked += LinkLabel_Click; + self.ActivateLink += LinkLabel_ActivateLink; } private void LinkLabel_ActivateLink(object o, Gtk.ActivateLinkArgs args) { - Console.WriteLine("LinkLabel_ActivateLink"); if (LinkClicked != null) { - LinkClicked(o, new LinkLabelLinkClickedEventArgs(new Link() { Description = base.Control.Label, LinkData = base.Control.Uri })); + LinkClicked(this, new LinkLabelLinkClickedEventArgs(new Link() { Description = self.Label, LinkData = self.Uri })); } } private void LinkLabel_Click(object sender, EventArgs e) { - Console.WriteLine("LinkLabel_Click"); + //Console.WriteLine("LinkLabel_Click"); if (Click != null) { - Click(sender, e); + Click(this, e); } } public override event EventHandler Click; - public override string Text { get { return string.IsNullOrEmpty(base.Control.Label)? base.Control.Uri : base.Control.Label; } set { base.Control.Label = value; base.Control.Uri = value; } } + public override string Text { get { return string.IsNullOrEmpty(self.Label)? self.Uri : self.Label; } set { self.Label = value; self.Uri = value; } } public event LinkLabelLinkClickedEventHandler LinkClicked; @@ -45,14 +51,7 @@ namespace System.Windows.Forms public LinkCollection Links { get; } - public new Color LinkColor - { - get { return Color.FromArgb(base.Control.LinkColor.Red, base.Control.LinkColor.Green, base.Control.LinkColor.Blue); } - set - { - - } - } + public Color LinkColor { get; set; } //public LinkBehavior LinkBehavior { get; set; } @@ -66,11 +65,7 @@ namespace System.Windows.Forms public Color ActiveLinkColor { get; set; } - public new Color VisitedLinkColor { - get { return Color.FromArgb(base.Control.VisitedLinkColor.Red, base.Control.VisitedLinkColor.Green, base.Control.VisitedLinkColor.Blue); } - set { - - } } + public Color VisitedLinkColor { get; set; } public bool UseCompatibleTextRendering { get; set; } @@ -118,17 +113,25 @@ namespace System.Windows.Forms public int Add(object value) { - throw new NotImplementedException(); + if(value is Label) + { + owner.Text = ((Label)value).Text; + } + else + { + owner.Text = value?.ToString(); + } + return 1; } public void Clear() { - throw new NotImplementedException(); + owner.Text = ""; } public bool Contains(object value) { - throw new NotImplementedException(); + return owner.Text.Contains(value.ToString()); } public void CopyTo(Array array, int index) diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ListBox.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ListBox.cs new file mode 100644 index 0000000000000000000000000000000000000000..c4bf7b2c7ef4f0628b27a9dfceb2c8f2ce2ffe18 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ListBox.cs @@ -0,0 +1,871 @@ +/* + * GTKԭC#ؼwinformĿƽ̨ + * ʹñGTKSystem.Windows.FormsMicrosoft.WindowsDesktop.App.WindowsFormsһα룬ƽ̨windowslinuxmacos + * ֧438865652@qq.comhttps://gitee.com/easywebfactory, https://www.cnblogs.com/easywebfactory + * author:chenhongjin + * date: 2024/1/3 + */ +using Gdk; +using GLib; +using Gtk; +using GTKSystem.Windows.Forms.GTKControls.ControlBase; +using Pango; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace System.Windows.Forms +{ + [DesignerCategory("Component")] + [DefaultEvent("SelectedIndexChanged")] + [DefaultProperty("Items")] + [DefaultBindingProperty("SelectedValue")] + public partial class ListBox : Control + { + public readonly ListBoxBase self = new ListBoxBase(); + public override object GtkControl => self; + private ControlBindingsCollection _collect; + private ObjectCollection _items; + private Gtk.FlowBox _flow = new Gtk.FlowBox(); + internal Gtk.FlowBox FlowBox { get { return _flow; } } + public ListBox():base() + { + _collect = new ControlBindingsCollection(this); + _items = new ObjectCollection(this); + _flow.MaxChildrenPerLine = 1u; + _flow.Halign = Gtk.Align.Fill; + _flow.Valign = Gtk.Align.Start; + _flow.SortFunc = new FlowBoxSortFunc((fbc1, fbc2) => !this.Sorted ? 0 : fbc1.TooltipText.CompareTo(fbc2.TooltipText)); + _flow.ChildActivated += Control_ChildActivated; + + Gtk.ScrolledWindow scrolledWindow = new Gtk.ScrolledWindow(); + scrolledWindow.Halign = Gtk.Align.Fill; + scrolledWindow.Valign = Gtk.Align.Fill; + scrolledWindow.Hexpand = true; + scrolledWindow.Vexpand = true; + scrolledWindow.Child = _flow; + self.Realized += Control_Realized; + self.Child = scrolledWindow; + } + + private HashSet selectedIndexes = new HashSet(); + private void Control_ChildActivated(object o, Gtk.ChildActivatedArgs args) + { + if (selectedIndexes.Contains(args.Child.Index)) + { + if (args.Child.IsSelected) + { + selectedIndexes.Remove(args.Child.Index); + _flow.UnselectChild(args.Child); + } + } + else + { + selectedIndexes.Add(args.Child.Index); + int rowIndex = args.Child.Index; + object sender = this.Items[rowIndex]; + if (SelectedIndexChanged != null) + SelectedIndexChanged(sender, args); + if (SelectedValueChanged != null) + SelectedValueChanged(sender, args); + } + } + private void Control_Realized(object sender, EventArgs e) + { + foreach (Binding binding in _collect) + { + BindDataSource(DisplayMember, binding.DataSource, binding.DataMember, SelectedIndex, binding.FormattingEnabled, binding.DataSourceUpdateMode, binding.NullValue, binding.FormatString); + } + if (DataSource != null) + { + BindDataSource(DisplayMember, DataSource, ValueMember, SelectedIndex, FormattingEnabled, DataSourceUpdateMode.OnPropertyChanged, string.Empty, FormatString); + } + foreach (object item in _items) + { + AddItem(item, -1); + } + + self.ShowAll(); + } + internal void BindDataSource(string propertyName, object datasource, string dataMember,int selectindex, bool formattingEnabled, DataSourceUpdateMode dataSourceUpdateMode, object nullValue, string formatString) + { + if (datasource == null || string.IsNullOrWhiteSpace(propertyName) || string.IsNullOrWhiteSpace(dataMember)) + return; + + this._flow.SelectionNotifyEvent += (object o, SelectionNotifyEventArgs args) => { + datasource.GetType().GetProperty(propertyName).SetValue(datasource, dataMember); + }; + } + + #region listcontrol + private object _DataSource; + [DefaultValue(null)] + [AttributeProvider(typeof(IListSource))] + public object DataSource + { + get => _DataSource; + set { + _DataSource = value; + if (_DataSource != null) + { + if (value is DataTable table) + { + if (table.Columns.Contains(DisplayMember)) + { + foreach (DataRow row in table.Rows) + { + _items.Add(row[DisplayMember].ToString()); + } + } + } + else if (value is IEnumerable source) + { + IEnumerator enumerator = source.GetEnumerator(); + while (enumerator.MoveNext()) + { + object item = enumerator.Current; + var prop = item.GetType().GetProperty(DisplayMember); + if (prop != null) + { + _items.Add(prop.GetValue(item, null)); + } + } + } + } + } + } + + [DefaultValue("")] + public string DisplayMember + { + get; set; + } + + [Browsable(false)] + [DefaultValue(null)] + public IFormatProvider FormatInfo + { + get; set; + } + + [DefaultValue("")] + [MergableProperty(false)] + public string FormatString + { + get; set; + } + + [DefaultValue(false)] + public bool FormattingEnabled + { + get; set; + } + + [DefaultValue("")] + public string ValueMember + { + get; set; + } + public int SelectedIndex + { + get { + int index = -1; + _flow.SelectedForeach(new FlowBoxForeachFunc((fb, fbc) => { index = fbc.Index; })); + return index; + } + set { _flow.SelectChild(_flow.GetChildAtIndex(value)); } + } + + [DefaultValue(null)] + [Browsable(false)] + public object SelectedValue + { + get + { + object text = null; + _flow.SelectedForeach(new FlowBoxForeachFunc((fb, fbc) => { + if (Items[fbc.Index] is ListBoxItem item) + { + text = item.ItemValue; + } + else + { + text = Items[fbc.Index]; + } + })); + return text; + } + set { + int idx = 0; + foreach(var item in Items) + { + if(item is ListBoxItem item2) + if(item2.ItemValue==value) + _flow.SelectChild(_flow.GetChildAtIndex(idx)); + else if(item.Equals(value)) + _flow.SelectChild(_flow.GetChildAtIndex(idx)); + + idx++; + } + } + } + + [Browsable(false)] + [Bindable(true)] + public object SelectedItem + { + get + { + object item = null; + _flow.SelectedForeach(new FlowBoxForeachFunc((fb, fbc) => { + item = Items[fbc.Index]; + })); + return item; + } + set + { + _flow.SelectChild(_flow.GetChildAtIndex(Items.IndexOf(value))); + } + } + public event EventHandler DataSourceChanged; + + public event EventHandler DisplayMemberChanged; + + public event ListControlConvertEventHandler Format; + + [Browsable(false)] + [EditorBrowsable(EditorBrowsableState.Advanced)] + public event EventHandler FormatInfoChanged; + + public event EventHandler FormatStringChanged; + + public event EventHandler FormattingEnabledChanged; + + public event EventHandler ValueMemberChanged; + + public event EventHandler SelectedValueChanged; + + public string GetItemText(object item) + { + if(item is ListBoxItem) + { + return ((ListBoxItem)item).DisplayText?.ToString(); + } + return item?.ToString(); + } + + + #endregion + public override ControlBindingsCollection DataBindings { get => _collect; } + internal bool ShowCheckBox { get; set; } + internal bool ShowImage { get; set; } + + public const int NoMatches = -1; + + public const int DefaultItemHeight = 13; + + [DefaultValue(BorderStyle.Fixed3D)] + [DispId(-504)] + public override BorderStyle BorderStyle + { + get; set; + } + + [Localizable(true)] + [DefaultValue(0)] + public int ColumnWidth + { + get; set; + } + + [DefaultValue(false)] + [Browsable(false)] + public bool UseCustomTabOffsets + { + get; set; + } + + [DefaultValue(DrawMode.Normal)] + public virtual DrawMode DrawMode + { + get + { + throw null; + } + set + { + throw null; + } + } + + [DefaultValue(0)] + [Localizable(true)] + public int HorizontalExtent + { + get; set; + } + + [DefaultValue(false)] + [Localizable(true)] + public bool HorizontalScrollbar + { + get; set; + } + + [DefaultValue(true)] + [Localizable(true)] + public bool IntegralHeight + { + get; set; + } + + [Localizable(true)] + public virtual int ItemHeight + { + get; set; + } + + [Localizable(true)] + public ObjectCollection Items + { + get => _items; + } + + [DefaultValue(false)] + public bool MultiColumn + { + get; set; + } + + [Browsable(false)] + public int PreferredHeight + { + get; + } + + [DefaultValue(false)] + [Localizable(true)] + public bool ScrollAlwaysVisible + { + get; set; + } + + [Browsable(false)] + public SelectedIndexCollection SelectedIndices + { + get { + SelectedIndexCollection indexs = new SelectedIndexCollection(this); + _flow.SelectedForeach(new FlowBoxForeachFunc((fb, fbc) => { + indexs.Add(fbc.Index); + })); + return indexs; + } + } + + [Browsable(false)] + public SelectedObjectCollection SelectedItems + { + get + { + SelectedObjectCollection indexs = new SelectedObjectCollection(this); + _flow.SelectedForeach(new FlowBoxForeachFunc((fb, fbc) => { + indexs.Add(Items[fbc.Index]); + })); + return indexs; + } + } + public SelectionMode _SelectionMode; + [DefaultValue(SelectionMode.One)] + public virtual SelectionMode SelectionMode + { + get { + return _SelectionMode; + } + set { + if (value == SelectionMode.None) + { + _flow.SelectionMode = Gtk.SelectionMode.None; + } + else if (value == SelectionMode.One) + { + _flow.SelectionMode = Gtk.SelectionMode.Single; + } + else if (value == SelectionMode.MultiSimple) { + _flow.SelectionMode = Gtk.SelectionMode.Multiple; + } + else if (value == SelectionMode.MultiExtended) + { + _flow.SelectionMode = Gtk.SelectionMode.Multiple; + } + } + } + + [DefaultValue(false)] + public bool Sorted + { + get; set; + } + + [Browsable(false)] + public override string Text + { + get; set; + } + + public int TopIndex + { + get; set; + } + + [DefaultValue(true)] + public bool UseTabStops + { + get; set; + } + + public IntegerCollection CustomTabOffsets + { + get; + } + + public new Padding Padding + { + get;set; + } + + [Browsable(false)] + [EditorBrowsable(EditorBrowsableState.Never)] + public new event EventHandler BackgroundImageChanged; + [Browsable(false)] + [EditorBrowsable(EditorBrowsableState.Never)] + public new event EventHandler BackgroundImageLayoutChanged; + [Browsable(false)] + [EditorBrowsable(EditorBrowsableState.Advanced)] + public new event EventHandler TextChanged; + [Browsable(true)] + [EditorBrowsable(EditorBrowsableState.Always)] + public new event EventHandler Click; + [Browsable(true)] + [EditorBrowsable(EditorBrowsableState.Always)] + public new event MouseEventHandler MouseClick; + [Browsable(false)] + [EditorBrowsable(EditorBrowsableState.Never)] + public new event EventHandler PaddingChanged; + [Browsable(false)] + [EditorBrowsable(EditorBrowsableState.Never)] + public new event PaintEventHandler Paint; + + //public event DrawItemEventHandler DrawItem; + + public event MeasureItemEventHandler MeasureItem; + + public event EventHandler SelectedIndexChanged; + + public void BeginUpdate() + { + throw null; + } + public void ClearSelected() + { + throw null; + } + + public void EndUpdate() + { + throw null; + } + + public int FindString(string s) + { + throw null; + } + + public int FindString(string s, int startIndex) + { + throw null; + } + + public int FindStringExact(string s) + { + throw null; + } + + public int FindStringExact(string s, int startIndex) + { + throw null; + } + + public int GetItemHeight(int index) + { + throw null; + } + + public Drawing.Rectangle GetItemRectangle(int index) + { + throw null; + } + public bool GetSelected(int index) + { + throw null; + } + + public int IndexFromPoint(Drawing.Point p) + { + throw null; + } + + public int IndexFromPoint(int x, int y) + { + throw null; + } + + public override void Refresh() + { + self.ShowAll(); + } + + public override void ResetBackColor() + { + throw null; + } + + public override void ResetForeColor() + { + throw null; + } + + public void SetSelected(int index, bool value) + { + throw null; + } + public void AddItem(object item, int position) + { + Gtk.Box hBox = new Gtk.Box(Gtk.Orientation.Horizontal, 0); + hBox.Add(new Gtk.Label(item.ToString()) { Xalign = 0, Halign = Gtk.Align.Start, Valign = Gtk.Align.Start }); ; + + Gtk.FlowBoxChild boxitem = new Gtk.FlowBoxChild(); + boxitem.HeightRequest = this.ItemHeight; + boxitem.Valign = Gtk.Align.Start; + boxitem.Halign = Gtk.Align.Fill; + boxitem.Hexpand = true; + boxitem.TooltipText = item.ToString(); + boxitem.Add(hBox); + if (position < 0) + { + this._flow.Add(boxitem); + } + else + { + this._flow.Insert(boxitem, position); + } + } + public class ListBoxItem: Gtk.Label + { + public ListBoxItem() { + base.Xalign = 0; + } + public object DisplayText { get { return base.Text; } set { base.Text = value?.ToString(); } } + public object ItemValue { get; set; } + public object CheckValue { get; set; } + + public override string ToString() + { + return DisplayText?.ToString(); + } + } + + public class IntegerCollection : IList, ICollection, IEnumerable + { + private class CustomTabOffsetsEnumerator : IEnumerator + { + object IEnumerator.Current + { + get + { + throw null; + } + } + + public CustomTabOffsetsEnumerator(IntegerCollection items) + { + throw null; + } + + bool IEnumerator.MoveNext() + { + throw null; + } + + void IEnumerator.Reset() + { + throw null; + } + } + + [Browsable(false)] + public int Count + { + get + { + throw null; + } + } + + object ICollection.SyncRoot + { + get + { + throw null; + } + } + + bool ICollection.IsSynchronized + { + get + { + throw null; + } + } + + bool IList.IsFixedSize + { + get + { + throw null; + } + } + + bool IList.IsReadOnly + { + get + { + throw null; + } + } + + public int this[int index] + { + get + { + throw null; + } + set + { + throw null; + } + } + + object IList.this[int index] + { + get + { + throw null; + } + set + { + throw null; + } + } + + public IntegerCollection(ListBox owner) + { + throw null; + } + + public bool Contains(int item) + { + throw null; + } + + bool IList.Contains(object item) + { + throw null; + } + + public void Clear() + { + throw null; + } + + public int IndexOf(int item) + { + throw null; + } + + int IList.IndexOf(object item) + { + throw null; + } + + public int Add(int item) + { + throw null; + } + + int IList.Add(object item) + { + throw null; + } + + public void AddRange(int[] items) + { + throw null; + } + + public void AddRange(IntegerCollection value) + { + throw null; + } + + void IList.Clear() + { + throw null; + } + + void IList.Insert(int index, object value) + { + throw null; + } + + void IList.Remove(object value) + { + throw null; + } + + void IList.RemoveAt(int index) + { + throw null; + } + + public void Remove(int item) + { + throw null; + } + + public void RemoveAt(int index) + { + throw null; + } + + public void CopyTo(Array destination, int index) + { + throw null; + } + + IEnumerator IEnumerable.GetEnumerator() + { + throw null; + } + } + + [ListBindable(false)] + public class ObjectCollection : ArrayList + { + private ListBox _owner; + public ObjectCollection(ListBox owner) + { + _owner = owner; + } + //public ObjectCollection(ListBox owner, ObjectCollection value) + //{ + // _owner = owner; + // foreach (object item in value) + // Add(item); + //} + + public ObjectCollection(ListBox owner, object[] value) + { + _owner = owner; + foreach (object item in value) + Add(item); + } + public int AddCore(object item, int position) + { + if (position < 0) + { + int idx = base.Add(item); + if (_owner.self.IsRealized) + { + _owner.AddItem(item, position); + _owner.self.ShowAll(); + } + return idx; + } + else + { + base.Insert(position, item); + if (_owner.self.IsRealized) + { + _owner.AddItem(item, position); + _owner.self.ShowAll(); + } + return position; + } + + } + public override int Add(object item) + { + return AddCore(item, -1); + } + + //public void AddRange(ObjectCollection value) + //{ + // foreach (object item in value) + // Add(item); + //} + + public void AddRange(object[] items) + { + foreach (object item in items) + Add(item); + } + + public override void Clear() + { + foreach (var wd in _owner._flow.Children) + _owner._flow.Remove(wd); + base.Clear(); + } + + public override void Insert(int index, object item) + { + AddCore(item, -1); + } + + public override void Remove(object value) + { + int idx = base.IndexOf(value); + if (idx > -1) + RemoveAt(idx); + } + + public override void RemoveAt(int index) + { + _owner._flow.Remove(_owner._flow.GetChildAtIndex(index)); + base.RemoveAt(index); + } + + } + + + public class SelectedIndexCollection : List + { + public SelectedIndexCollection(ListBox owner) + { + + } + } + + public class SelectedObjectCollection : List + { + public SelectedObjectCollection(ListBox owner) + { + + } + + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ListView.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ListView.cs new file mode 100644 index 0000000000000000000000000000000000000000..1bffac89754855f7939b99e36bed0ba1d94504fc --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ListView.cs @@ -0,0 +1,1103 @@ +/* + * GTKԭC#ؼwinformĿƽ̨ + * ʹñGTKSystem.Windows.FormsMicrosoft.WindowsDesktop.App.WindowsFormsһα룬ƽ̨windowslinuxmacos + * ֧438865652@qq.comhttps://gitee.com/easywebfactory, https://www.cnblogs.com/easywebfactory + * author:chenhongjin + * date: 2024/1/3 + */ + +using Gtk; +using GTKSystem.Windows.Forms.GTKControls.ControlBase; +using GTKSystem.Windows.Forms.Utility; +using Pango; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; + +using System.Drawing; +using System.Linq; +using static System.Windows.Forms.ListViewItem; + + + +namespace System.Windows.Forms +{ + + [DefaultEvent("SelectedIndexChanged")] + public class ListView : ContainerControl + { + public readonly ListViewBase self = new ListViewBase(); + public override object GtkControl => self; + private ListViewItemCollection _items; + private ListViewGroupCollection _groups; + private ColumnHeaderCollection _columns; + internal Gtk.Box flowBoxContainer = new Gtk.Box(Gtk.Orientation.Vertical, 0); + internal Gtk.StackSwitcher header = new Gtk.StackSwitcher(); + Gdk.Pixbuf godownpixbuf; + Gdk.Pixbuf gouppixbuf; + public ListView():base() + { + _items = new ListViewItemCollection(this); + _groups = new ListViewGroupCollection(this); + _columns = new ColumnHeaderCollection(this); + self.Realized += Control_Realized; + + header.StyleContext.AddClass("ListViewHeader"); + header.Spacing = 0; + header.Homogeneous = false; + header.Halign = Gtk.Align.Fill; + header.Valign = Gtk.Align.Fill; + header.HeightRequest = 40; + header.NoShowAll = true; + header.Visible = false; + header.Hide(); + flowBoxContainer.PackStart(header, false, false, 0); + + Gtk.ScrolledWindow scrolledWindow = new Gtk.ScrolledWindow(); + scrolledWindow.HscrollbarPolicy = PolicyType.Always; + scrolledWindow.VscrollbarPolicy = PolicyType.Always; + scrolledWindow.Add(flowBoxContainer); + self.PackStart(scrolledWindow, true, true, 1); + + Gtk.IconTheme theme = new Gtk.IconTheme(); + godownpixbuf = theme.LoadIcon("go-down-symbolic", 16, IconLookupFlags.ForceSize); + gouppixbuf = theme.LoadIcon("go-up-symbolic", 16, IconLookupFlags.ForceSize); + } + + private void Control_Realized(object sender, EventArgs e) + { + if (this.View == View.Details) + { + header.NoShowAll = false; + header.Visible = true; + header.ShowAll(); + foreach (ColumnHeader col in Columns) + { + LabelBase label = new LabelBase(col.Text) { WidthRequest = col.Width, MaxWidthChars = 0, Valign = Gtk.Align.Center, Ellipsize = EllipsizeMode.End}; + label.TooltipText = col.Text; + label.Markup = col.Text; + label.Data.Add("ColumnIndex", col.DisplayIndex); + label.Override.DrawnBackground += Override_DrawnBackground; + var columbt = new Gtk.Button(label) { WidthRequest = col.Width, Halign = Gtk.Align.Fill, Valign = Gtk.Align.Fill }; + columbt.ActionTargetValue=new GLib.Variant(col.DisplayIndex); + columbt.Data.Add("ColumnIndex", col.DisplayIndex); + columbt.Clicked += Columbt_Clicked; + header.Add(columbt); + } + } + var group = Items.GroupBy(g => g.Group); + foreach (var g in group) + { + AddGroup(g.Key, -1); + foreach (ListViewItem item in g) + { + AddItem(item, -1); + } + } + + MultiSelect = MultiSelect == true; + self.ShowAll(); + } + + private void Columbt_Clicked(object sender, EventArgs e) + { + Gtk.Button btn = (Gtk.Button)sender; + + if (this.HeaderStyle == ColumnHeaderStyle.Clickable) + { + int actioncolumn = (int)btn.ActionTargetValue; + if (this.AllowColumnReorder == true) + { + if (SortingColumnIndex == actioncolumn) + { + if (Sorting == SortOrder.Ascending) + Sorting = SortOrder.Descending; + else if (Sorting == SortOrder.Descending) + Sorting = SortOrder.None; + else + Sorting = SortOrder.Ascending; + } + else + { + Sorting = SortOrder.Ascending; + } + + foreach (var box in flowBoxContainer.AllChildren) + { + if (box is Gtk.Box group) + { + foreach (var flow in group.Children) + { + if (flow is Gtk.FlowBox _flow) + { + _flow.InvalidateSort(); + } + } + } + } + + if (ColumnReordered != null) + ColumnReordered(this, new ColumnReorderedEventArgs(SortingColumnIndex, actioncolumn, Columns[actioncolumn])); + + SortingColumnIndex = actioncolumn; + } + if (ColumnClick != null) + ColumnClick(this, new ColumnClickEventArgs((int)btn.ActionTargetValue)); + } + } + + private void Override_DrawnBackground(object o, DrawnArgs args) + { + Cairo.Rectangle rec = args.Cr.ClipExtents(); + if (rec.Width > 10 && SortingColumnIndex > -1) + { + if (((Gtk.Label)o).Data["ColumnIndex"].ToString() == SortingColumnIndex.ToString()) + { + if (Sorting == SortOrder.Descending) + ImageUtility.DrawBackgroundImage(args.Cr, godownpixbuf, new Gdk.Rectangle((int)rec.Width / 2 - 16, -10, 16, 16)); + else if (Sorting == SortOrder.Ascending) + ImageUtility.DrawBackgroundImage(args.Cr, gouppixbuf, new Gdk.Rectangle((int)rec.Width / 2 - 16, -10, 16, 16)); + } + } + } + private int SortingColumnIndex = -1; + public bool Sorted { get; set; } + public System.Windows.Forms.SortOrder Sorting { get; set; } + public System.Windows.Forms.ListViewAlignment Alignment { get; set; } + public bool AllowColumnReorder { get; set; } + public bool GridLines { get; set; } = true; + public ImageList GroupImageList { get; set; } + public System.Windows.Forms.ColumnHeaderStyle HeaderStyle { get; set; } = ColumnHeaderStyle.Clickable; + + public bool HideSelection { get; set; } + public bool HoverSelection { get; set; } + public bool LabelEdit { get; set; } + public bool LabelWrap { get; set; } + public ImageList LargeImageList { get; set; } + private bool _MultiSelect; + public virtual bool MultiSelect + { + get + { + return _MultiSelect; + } + set + { + _MultiSelect = value; + foreach (var box in flowBoxContainer.AllChildren) + { + if (box is Gtk.Box group) + { + foreach (var flow in group.Children) + { + if (flow is Gtk.FlowBox _flow) + { + if (value == true) + { + _flow.SelectionMode = Gtk.SelectionMode.Multiple; + } + else + { + _flow.SelectionMode = Gtk.SelectionMode.Single; + } + } + } + } + } + } + } + + public bool OwnerDraw { get; set; } + public bool Scrollable { get; set; } + public bool ShowGroups { get; set; } = true; + public bool ShowItemToolTips { get; set; } + + public ImageList SmallImageList { get; set; } + + public ImageList StateImageList { get; set; } + + public bool UseCompatibleStateImageBehavior { get; set; } + public System.Windows.Forms.View View { get; set; } + + internal void AddItem(ListViewItem item, int position) + { + BoxBase hBox = new BoxBase(Gtk.Orientation.Horizontal, 4); + if (item.BackColor.HasValue) + hBox.Override.BackColor = item.BackColor.Value; + hBox.Valign = Gtk.Align.Fill; + hBox.Halign = Gtk.Align.Start; + hBox.BorderWidth = 0; + hBox.Homogeneous = false; + + Gtk.FlowBoxChild boxitem = new Gtk.FlowBoxChild(); + boxitem.TooltipText = item.Text; + boxitem.Data.Add("ItemId", item.Index); + boxitem.Halign = Gtk.Align.Start; + boxitem.Valign = Gtk.Align.Start; + boxitem.HeightRequest = 28; + boxitem.BorderWidth = 0; + boxitem.Margin = 0; + foreach (ColumnHeader col in Columns) + { + if (col.DisplayIndex == 0) + boxitem.Data.Add(0, item.Text); + else if (item.SubItems != null && item.SubItems.Count > col.DisplayIndex - 1) + { + boxitem.Data.Add(col.DisplayIndex, item.SubItems[col.DisplayIndex - 1].Text); + }else + boxitem.Data.Add(col.DisplayIndex, string.Empty); + } + boxitem.Add(hBox); + + Gtk.FlowBox flowBox = DefaultGroup.FlowBox; + if (this.ShowGroups == true && this.View != View.List && this.View != View.Tile) + { + flowBox = item.Group.FlowBox; + } + flowBox.Halign = Gtk.Align.Fill; + flowBox.Valign = Gtk.Align.Fill; + flowBox.Name = item.Group.Name; + flowBox.ColumnSpacing = 0; + if (position == -1) + flowBox.Add(boxitem); + else + flowBox.Insert(boxitem, position); + + if (this.CheckBoxes == true) + { + if (this.View == View.SmallIcon || this.View == View.LargeIcon) + { + CheckBox checkBox = new CheckBox(); + checkBox.self.Halign = Gtk.Align.Start; + checkBox.Width = 20; + checkBox.Checked= item.Checked; + checkBox.CheckedChanged += (object sender, EventArgs e) => + { + CheckBox box = sender as CheckBox; + Gtk.FlowBoxChild boxitem = box.self.Parent.Parent as Gtk.FlowBoxChild; + ListViewItem thisitem = this.Items[Convert.ToInt32(boxitem.Data["ItemId"])]; + thisitem.Checked = box.self.Active; + if (ItemCheck != null) + { + ItemCheck(sender, new ItemCheckEventArgs(boxitem.Index, box.self.Active ? CheckState.Checked : CheckState.Unchecked, box.self.Active ? CheckState.Unchecked : CheckState.Checked)); + } + if (ItemChecked != null) + { + ItemChecked(sender, new ItemCheckedEventArgs(thisitem)); + } + }; + hBox.Add(checkBox.self); + } + } + + if (this.View == View.Details) + { + header.Visible = true; + flowBox.MinChildrenPerLine = 1; + flowBox.MaxChildrenPerLine = 1; + + Gtk.Box fistcell = new Gtk.Box(Gtk.Orientation.Horizontal, 0); + fistcell.Homogeneous = false; + fistcell.Halign = Gtk.Align.Start; + fistcell.Valign = Gtk.Align.Fill; + fistcell.BorderWidth = 0; + fistcell.WidthRequest = Columns.Count > 0 ? Columns[0].Width - 4 : -1; + + if (this.CheckBoxes == true) + { + CheckBox checkBox = new CheckBox(); + checkBox.self.Halign = Gtk.Align.Start; + checkBox.Width = 20; + checkBox.Checked = item.Checked; + checkBox.CheckedChanged += (object sender, EventArgs e) => + { + CheckBox box = sender as CheckBox; + Gtk.FlowBoxChild boxitem = box.self.Parent.Parent.Parent.Parent as Gtk.FlowBoxChild; + ListViewItem thisitem = this.Items[Convert.ToInt32(boxitem.Data["ItemId"])]; + thisitem.Checked = box.self.Active; + if (ItemCheck != null) + { + ItemCheck(sender, new ItemCheckEventArgs(boxitem.Index, box.self.Active ? CheckState.Checked : CheckState.Unchecked, box.self.Active ? CheckState.Unchecked : CheckState.Checked)); + } + if (ItemChecked != null) + { + ItemChecked(sender, new ItemCheckedEventArgs(thisitem)); + } + }; + fistcell.PackStart(checkBox.self, false, false, 1); + } + if (this.SmallImageList != null) + { + this.SmallImageList.ImageSize = new Size(16, 16); + if (!string.IsNullOrWhiteSpace(item.ImageKey)) + { + Drawing.Image img = this.SmallImageList.Images[item.ImageKey]; + + fistcell.PackStart(new Gtk.Image(img.Pixbuf) { Halign = Gtk.Align.Start, Valign = Gtk.Align.Fill, WidthRequest = 20 }, false, false, 1); + } + else if (item.ImageIndex > -1) + { + Drawing.Image img = this.SmallImageList.Images[item.ImageIndex]; + fistcell.PackStart(new Gtk.Image(img.Pixbuf) { Halign = Gtk.Align.Start, Valign = Gtk.Align.Fill, WidthRequest = 20 }, false, false, 1); + } + } + Label lab = new Label(); + if (item.ForeColor.HasValue) + lab.ForeColor = item.ForeColor.Value; + lab.self.MaxWidthChars = fistcell.WidthRequest / 12; + lab.self.Halign = Gtk.Align.Start; + lab.self.Valign = Gtk.Align.Fill; + lab.self.Ellipsize = Pango.EllipsizeMode.End; + lab.Text = item.Text; + + fistcell.PackStart(lab.self, false, false, 1); + Gtk.Layout fistlayout = new Gtk.Layout(new Adjustment(IntPtr.Zero), new Adjustment(IntPtr.Zero)); + fistlayout.Halign = Gtk.Align.Start; + fistlayout.Valign = Gtk.Align.Fill; + fistlayout.WidthRequest = fistcell.WidthRequest; + fistlayout.Add(fistcell); + hBox.Add(fistlayout); + + int index = 0; + foreach (ColumnHeader col in Columns) + { + if (index > 0) + { + Gtk.Layout sublayout = new Gtk.Layout(new Adjustment(IntPtr.Zero), new Adjustment(IntPtr.Zero)); + sublayout.Halign = Gtk.Align.Start; + sublayout.Valign = Gtk.Align.Fill; + sublayout.WidthRequest = col.Width; + if (item.SubItems != null && item.SubItems.Count > index - 1) + { + ListViewSubItem subitem = item.SubItems[index - 1]; + Label sublabel = new Label(); + if (subitem.ForeColor.HasValue) + sublabel.ForeColor = subitem.ForeColor.Value; + if (subitem.BackColor.HasValue) + sublabel.BackColor = subitem.BackColor.Value; + sublabel.self.WidthRequest = col.Width + 2; + sublabel.self.MaxWidthChars = 0; + + sublabel.self.Halign = Gtk.Align.Fill; + sublabel.self.Valign = Gtk.Align.Fill; + sublabel.self.Ellipsize = Pango.EllipsizeMode.End; + sublabel.self.Text = subitem.Text; + sublayout.Add(sublabel.self); + } + hBox.Add(sublayout); + } + index++; + } + } + else if (this.View == View.SmallIcon) + { + header.Visible = false; + + flowBox.Orientation = Gtk.Orientation.Horizontal; + flowBox.MinChildrenPerLine = 1; + flowBox.MaxChildrenPerLine = 999; + if (this.SmallImageList != null) + { + this.SmallImageList.ImageSize = new Size(16, 16); + if (!string.IsNullOrWhiteSpace(item.ImageKey)) + { + Drawing.Image img = this.SmallImageList.Images[item.ImageKey]; + hBox.Add(new Gtk.Image(img.Pixbuf)); + } + else if (item.ImageIndex > -1) + { + Drawing.Image img = this.SmallImageList.Images[item.ImageIndex]; + hBox.Add(new Gtk.Image(img.Pixbuf)); + } + + } + Label lab = new Label(); + if (item.ForeColor.HasValue) + lab.ForeColor = item.ForeColor.Value; + lab.self.MaxWidthChars = 100; + lab.self.Halign = Gtk.Align.Start; + lab.self.Valign = Gtk.Align.Center; + lab.self.Ellipsize = Pango.EllipsizeMode.End; + lab.self.Text = item.Text; + hBox.Add(lab.self); + } + else if (this.View == View.LargeIcon) + { + flowBox.MinChildrenPerLine = 1; + flowBox.MaxChildrenPerLine = 999; + + Gtk.Box vBox = new Gtk.Box(Gtk.Orientation.Vertical, 0); + if (this.LargeImageList != null) + { + this.SmallImageList.ImageSize = new Size(100, 100); + if (!string.IsNullOrWhiteSpace(item.ImageKey)) + { + Drawing.Image img = this.LargeImageList.Images[item.ImageKey]; + int width = img.Pixbuf.Width; + int height = img.Pixbuf.Height; + + vBox.Add(new Gtk.Image(new Gdk.Pixbuf(img.PixbufData)) { WidthRequest = Math.Min(50, width), HeightRequest = Math.Min(50, height) }); + } + else if (item.ImageIndex > -1) + { + Drawing.Image img = this.LargeImageList.Images[item.ImageIndex]; + int width = img.Pixbuf.Width; + int height = img.Pixbuf.Height; + + vBox.Add(new Gtk.Image(img.Pixbuf) { WidthRequest = Math.Min(50, width), HeightRequest = Math.Min(50, height) }); + } + } + Label lab= new Label(); + if (item.ForeColor.HasValue) + lab.ForeColor = item.ForeColor.Value; + lab.self.MaxWidthChars = 16; + lab.self.Halign = Gtk.Align.Center; + lab.self.Valign = Gtk.Align.Center; + lab.self.Ellipsize = Pango.EllipsizeMode.End; + lab.self.Text = item.Text; + vBox.Add(lab.self); + hBox.Add(vBox); + } + else + { + header.Visible = false; + boxitem.Halign = Gtk.Align.Fill; + + Label lab = new Label(); + if (item.ForeColor.HasValue) + lab.ForeColor = item.ForeColor.Value; + lab.self.Halign = Gtk.Align.Start; + lab.self.Valign = Gtk.Align.Fill; + lab.self.Text = item.Text; + hBox.Add(lab.self); + } + } + + internal void AddGroup(ListViewGroup group, int position) + { + if (group == null) + return; + + Gtk.FlowBox _flow = DefaultGroup.FlowBox; + Gtk.Box hBox = new Gtk.Box(Gtk.Orientation.Vertical, 0); + hBox.Valign = Gtk.Align.Start; + hBox.Halign = Gtk.Align.Fill; + hBox.Expand = false; + if (ShowGroups == true && this.View != View.List && this.View != View.Tile) + { + _flow = group.FlowBox; + if (_flow.Parent != null) + return; + + Gtk.Viewport groupbox = new Gtk.Viewport(); + groupbox.StyleContext.AddClass("Group"); + var title = new Gtk.Label(group.Header) { Xalign = 0, Halign = Gtk.Align.Start, Valign = Gtk.Align.Start, Ellipsize = Pango.EllipsizeMode.End }; + title.MarginStart = 3; + title.StyleContext.AddClass("Title"); + groupbox.Child = title; + hBox.Add(groupbox); + if (!string.IsNullOrWhiteSpace(group.Subtitle)) + { + var subtitle = new Gtk.Label(group.Subtitle) { Xalign = 0, Halign = Gtk.Align.Start, Valign = Gtk.Align.Start, Ellipsize = Pango.EllipsizeMode.End }; + subtitle.MarginStart = 3; + subtitle.StyleContext.AddClass("SubTitle"); + hBox.Add(subtitle); + } + } + if (_flow.Parent != null) + return; + + _flow.MaxChildrenPerLine = 100u; + _flow.MinChildrenPerLine = 0u; + _flow.ColumnSpacing = 0; + _flow.Halign = Gtk.Align.Fill; + _flow.Valign = Gtk.Align.Fill; + _flow.Orientation = Gtk.Orientation.Horizontal; + _flow.SelectionMode = Gtk.SelectionMode.Single; + _flow.SortFunc = new Gtk.FlowBoxSortFunc((fbc1, fbc2) => + { + if (this.AllowColumnReorder && SortingColumnIndex > -1) + { + if (this.Sorting == SortOrder.Ascending) + return fbc2.Data[SortingColumnIndex].ToString().CompareTo(fbc1.Data[SortingColumnIndex].ToString()); + else if (this.Sorting == SortOrder.Descending) + return fbc1.Data[SortingColumnIndex].ToString().CompareTo(fbc2.Data[SortingColumnIndex].ToString()); + else + return fbc2.Index.CompareTo(fbc1.Index); + } + else + return 0; + }); + _flow.ChildActivated += _flow_ChildActivated; + hBox.Add(_flow); + flowBoxContainer.PackStart(hBox, true, true, 0); + if (position > -1) + { + flowBoxContainer.ReorderChild(hBox, position); + } + } + private void _flow_ChildActivated(object o, Gtk.ChildActivatedArgs args) + { + ListViewItem item = this.Items[Convert.ToInt32(args.Child.Data["ItemId"])]; + if (args.Child.IsSelected && item.Selected) + { + item.Selected = false; + if (args.Child.Parent is Gtk.FlowBox flow) + flow.UnselectChild(args.Child); + } + else + { + item.Selected = true; + if (SelectedIndexChanged != null) + SelectedIndexChanged(this, args); + } + if (ItemActivate != null) + ItemActivate(this, args); + + if (ItemSelectionChanged != null) + ItemSelectionChanged(this, new ListViewItemSelectionChangedEventArgs(item, item.Index, item.Selected)); + + if (Click != null) + Click(this, args); + } + public void Sort() + { + foreach (Gtk.Box vbox in flowBoxContainer.AllChildren) + { + foreach (var flow in vbox.AllChildren) + { + if (flow is Gtk.FlowBox _flow) + { + _flow.InvalidateSort(); + } + } + } + } + private bool IsCacheUpdate; + public void BeginUpdate() + { + IsCacheUpdate = true; + } + public void EndUpdate() + { + IsCacheUpdate = false; + self.Window.ProcessUpdates(true); + self.ShowAll(); + } + public class CheckedIndexCollection : List + { + + public CheckedIndexCollection(ListView owner) + { + + } + + } + + [ListBindable(false)] + public class CheckedListViewItemCollection : List + { + + public virtual ListViewItem this[string key] + { + get + { + return this.Find(w => w.Name == key); + } + } + + public CheckedListViewItemCollection(ListView owner) + { + + } + + } + + [ListBindable(false)] + public class ColumnHeaderCollection : List + { + public ColumnHeaderCollection(ListView owner) + { + owner.self.Realized += Self_Realized; + } + + private void Self_Realized(object sender, EventArgs e) + { + this.Sort(new Comparison((a, b) => a.DisplayIndex.CompareTo(b.DisplayIndex))); + } + + public virtual ColumnHeader this[string key] + { + get + { + return base.Find(o => o.Name == key); + } + } + + public bool IsReadOnly + { + get + { + return false; + } + } + + + public virtual void RemoveByKey(string key) + { + base.Remove(base.Find(o=> o.Name == key)); + } + + public virtual int IndexOfKey(string key) + { + return base.FindIndex(o=> o.Name == key); + } + + public virtual ColumnHeader Add(string text, int width, HorizontalAlignment textAlign) + { + return Add("", text, width, textAlign, ""); + } + + public virtual ColumnHeader Add(string text) + { + return Add("", text, 60, HorizontalAlignment.Left, ""); + } + + public virtual ColumnHeader Add(string text, int width) + { + return Add("", text, width, HorizontalAlignment.Left, ""); + } + + public virtual ColumnHeader Add(string key, string text) + { + return Add(key, text, 60, HorizontalAlignment.Left, ""); + } + + public virtual ColumnHeader Add(string key, string text, int width) + { + return Add(key, text, width, HorizontalAlignment.Left, ""); + } + + public virtual ColumnHeader Add(string key, string text, int width, HorizontalAlignment textAlign, string imageKey) + { + ColumnHeader header = new ColumnHeader(); + header.Name = key; + header.Text = text; + header.Width = width; + header.TextAlign = textAlign; + header.ImageKey = imageKey; + header.ImageIndex = -1; + header._index = base.Count; + header.DisplayIndex = header._index; + base.Add(header); + return header; + } + + public virtual ColumnHeader Add(string key, string text, int width, HorizontalAlignment textAlign, int imageIndex) + { + ColumnHeader header = new ColumnHeader(); + header.Name = key; + header.Text = text; + header.Width = width; + header.TextAlign = textAlign; + header.ImageIndex = imageIndex; + header._index = base.Count; + header.DisplayIndex = header._index; + base.Add(header); + return header; + } + + public virtual void AddRange(ColumnHeader[] values) + { + int idx = 0; + foreach (ColumnHeader value in values) + { + value._index = idx++; + if (value.DisplayIndex == 0) + value.DisplayIndex = value._index; + } + + base.AddRange(values); + } + + public virtual bool ContainsKey(string key) + { + return base.Contains(base.Find(o=>o.Name==key)); + } + + + public void Insert(int index, string text, int width, HorizontalAlignment textAlign) + { + Insert(index, "", text, width, textAlign, null); + } + + public void Insert(int index, string text) + { + Insert(index, "", text, 0, HorizontalAlignment.Center, null); + } + + public void Insert(int index, string text, int width) + { + Insert(index, "", text, width, HorizontalAlignment.Center, null); + } + + public void Insert(int index, string key, string text) + { + Insert(index, key, text, 0, HorizontalAlignment.Center, null); + + } + + public void Insert(int index, string key, string text, int width) + { + Insert(index, key, text, width, HorizontalAlignment.Center, null); + } + + public void Insert(int index, string key, string text, int width, HorizontalAlignment textAlign, string imageKey) + { + ColumnHeader header = new ColumnHeader(); + header._index = index; + header.DisplayIndex = index; + header.Name = key; + header.Text = text; + header.Width = width; + header.TextAlign = textAlign; + header.ImageKey = imageKey; + base.Insert(index, header); + } + + public void Insert(int index, string key, string text, int width, HorizontalAlignment textAlign, int imageIndex) + { + ColumnHeader header = new ColumnHeader(); + header._index = index; + header.DisplayIndex = index; + header.Name = key; + header.Text = text; + header.Width = width; + header.TextAlign = textAlign; + header.ImageIndex = imageIndex; + base.Insert(index, header); + } + } + internal readonly ListViewGroup DefaultGroup = ListViewGroup.GetDefaultListViewGroup(); + [ListBindable(false)] + public class ListViewItemCollection : List, IList + { + ListView _owner; + public virtual ListViewItem this[string key] + { + get + { + return base.Find(w => w.Name == key); + } + } + + public ListViewItemCollection(ListView owner) + { + _owner = owner; + } + + public new void Add(ListViewItem item) + { + AddCore(item, -1); + } + public virtual ListViewItem Add(string text) + { + return Add("", text, -1); + } + + public virtual ListViewItem Add(string text, int imageIndex) + { + return Add("", text, imageIndex); + } + + public virtual ListViewItem Add(string text, string imageKey) + { + SortedSet dd = new SortedSet(); + + return Add("", text, imageKey); + } + + public virtual ListViewItem Add(string key, string text, string imageKey) + { + ListViewItem item = new ListViewItem(text,imageKey); + item.Name = key; + item.Text = text; + AddCore(item, -1); + return item; + } + + public virtual ListViewItem Add(string key, string text, int imageIndex) + { + ListViewItem item = new ListViewItem(text,imageIndex); + item.Name = key; + AddCore(item, -1); + return item; + } + private void AddCore(ListViewItem item, int position) + { + item.Index = Count; + if (item.Group == null) + item.Group = _owner.DefaultGroup; + + base.Add(item); + + if (_owner.self.IsRealized) + { + if (_owner.Groups.Exists(g => g.SerialGuid == item.Group.SerialGuid) == false) + { + int index = -1; + if (_owner.AllowColumnReorder) + { + if (_owner.Sorting == SortOrder.Descending) + { + index = _owner.Groups.OrderByDescending(o => o.Header).ToList().FindIndex(g => g.Name == item.Group.Name); + } + else if (_owner.Sorting == SortOrder.Ascending) + { + index = _owner.Groups.OrderBy(o => o.Header).ToList().FindIndex(g => g.Name == item.Group.Name); + } + } + _owner.AddGroup(item.Group, index); + } + _owner.AddItem(item, position); + if (_owner.IsCacheUpdate == false) + _owner.self.ShowAll(); + } + } + public void AddRange(ListViewItem[] items) + { + foreach (ListViewItem item in items) + { + AddCore(item, -1); + } + } + + public void AddRange(ListViewItemCollection items) + { + foreach(ListViewItem item in items) + AddCore(item,-1); + } + + public virtual bool ContainsKey(string key) + { + return base.FindIndex(w => w.Name == key) > -1; + } + + public void CopyTo(Array dest, int index) + { + throw null; + } + + public ListViewItem[] Find(string key, bool searchAllSubItems) + { + if(searchAllSubItems) + return base.FindAll(w => w.Name == key && w.SubItems.ContainsKey(key)).ToArray(); + else + return base.FindAll(w => w.Name == key).ToArray(); + } + + public virtual int IndexOfKey(string key) + { + return base.FindIndex(w => w.Name == key); + } + + public ListViewItem Insert(int index, string text) + { + return Insert(index, "", text, -1); + } + + public ListViewItem Insert(int index, string text, int imageIndex) + { + return Insert(index, "", text, imageIndex); + } + + public ListViewItem Insert(int index, string text, string imageKey) + { + return Insert(index, "", text, imageKey); + } + + public virtual ListViewItem Insert(int index, string key, string text, string imageKey) + { + ListViewItem item = new ListViewItem(text, imageKey); + item.Name = key; + base.Insert(index, item); + return item; + } + + public virtual ListViewItem Insert(int index, string key, string text, int imageIndex) + { + ListViewItem item = new ListViewItem(text, imageIndex); + item.Name = key; + base.Insert(index, item); + return item; + } + + public virtual void RemoveByKey(string key) + { + base.Remove(base.Find(w => w.Name == key)); + } + + } + + [ListBindable(false)] + public class SelectedIndexCollection : List + { + + } + + [ListBindable(false)] + public class SelectedListViewItemCollection : List + { + + } + + + public ItemActivation Activation { get; set; } + + public bool CheckBoxes { get; set; } + + public CheckedIndexCollection CheckedIndices + { + get + { + CheckedIndexCollection selecteditems = new CheckedIndexCollection(this); + foreach (ListViewItem item in CheckedItems) + { + selecteditems.Add(item.Index); + } + return selecteditems; + } + } + + public CheckedListViewItemCollection CheckedItems + { + get + { + CheckedListViewItemCollection selecteditems = new CheckedListViewItemCollection(this); + foreach(ListViewItem item in this.Items) + { + if (item.Checked) + { + selecteditems.Add(item); + } + } + return selecteditems; + } + } + public ColumnHeaderCollection Columns + { + get + { + return _columns; + } + } + + public bool FullRowSelect { get; set; } + + public ListViewGroupCollection Groups + { + get + { + return _groups; + } + } + + public ListViewItemCollection Items + { + get + { + return _items; + } + } + + public IComparer ListViewItemSorter + { + get; + set; + } + + public SelectedIndexCollection SelectedIndices + { + get + { + SelectedIndexCollection selecteditems = new SelectedIndexCollection(); + foreach(ListViewItem item in SelectedItems) + { + selecteditems.Add(item.Index); + } + + return selecteditems; + } + } + + public SelectedListViewItemCollection SelectedItems + { + get + { + SelectedListViewItemCollection selecteditems = new SelectedListViewItemCollection(); + foreach (ListViewItem item in this.Items) + { + if (item.Selected) + { + selecteditems.Add(item); + } + } + return selecteditems; + } + } + + public void Clear() + { + foreach (Gtk.Box vbox in flowBoxContainer.AllChildren) + { + foreach (var flow in vbox.AllChildren) + { + if (flow is Gtk.FlowBox _flow) + { + foreach (Gtk.FlowBoxChild child in _flow.Children) + _flow.Remove(child); + } + } + flowBoxContainer.Remove(vbox); + } + Items.Clear(); + } + + + public ListViewItem FindItemWithText(string text) + { + return Items.Find(w => w.Text == text); + } + + public ListViewItem FindItemWithText(string text, bool includeSubItemsInSearch, int startIndex) + { + int idx = Items.FindIndex(startIndex, w => w.Text == text); + return idx == -1 ? null : Items[idx]; + } + + public ListViewItem FindItemWithText(string text, bool includeSubItemsInSearch, int startIndex, bool isPrefixSearch) + { + int idx = Items.FindIndex(startIndex, w => w.Text == text); + return idx == -1 ? null : Items[idx]; + } + + public ListViewItem GetItemAt(int x, int y) + { + throw null; + } + + public Drawing.Rectangle GetItemRect(int index) + { + throw null; + } + + public event ColumnClickEventHandler ColumnClick; + public event ColumnReorderedEventHandler ColumnReordered; + public event ItemCheckEventHandler ItemCheck; + public event ItemCheckedEventHandler ItemChecked; + public event ListViewItemSelectionChangedEventHandler ItemSelectionChanged; + public event EventHandler SelectedIndexChanged; + public override event EventHandler Click; + public event EventHandler ItemActivate; + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/EventArgs/ColumnClickEventArgs.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ColumnClickEventArgs.cs similarity index 100% rename from Source/GTKSystem.Windows.Forms/GTKControls/EventArgs/ColumnClickEventArgs.cs rename to Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ColumnClickEventArgs.cs diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/EventHandlers/ColumnClickEventHandler.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ColumnClickEventHandler.cs similarity index 100% rename from Source/GTKSystem.Windows.Forms/GTKControls/EventHandlers/ColumnClickEventHandler.cs rename to Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ColumnClickEventHandler.cs diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ColumnHeader.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ColumnHeader.cs new file mode 100644 index 0000000000000000000000000000000000000000..3ea32c3e92e8c556d0c7728103a2aafa1ce1f60c --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ColumnHeader.cs @@ -0,0 +1,127 @@ +using System.ComponentModel; +using System.Diagnostics.CodeAnalysis; +using System.Runtime.CompilerServices; + +namespace System.Windows.Forms +{ + [DefaultProperty("Text")] + public class ColumnHeader : Component, ICloneable + { + internal int _index; + + internal string _text; + + internal string _name; + + internal int _width = 120; + + [Localizable(true)] + public int DisplayIndex { get; set; } + + [Browsable(false)] + public int Index + { + get + { + return _index; + } + } + + [DefaultValue(-1)] + + public int ImageIndex { get; set; } = -1; + + [Browsable(false)] + public ImageList ImageList + { + get + { + throw null; + } + } + + public string ImageKey { get; set; } + + [Browsable(false)] + public ListView ListView + { + [CompilerGenerated] + get; + } + + [Browsable(false)] + + public string Name + { + get; + set; + } + + [Localizable(true)] + + public string Text + { + get; + set; + } + + + [Localizable(true)] + [DefaultValue(HorizontalAlignment.Left)] + public HorizontalAlignment TextAlign + { + get; + set; + } + + + [Localizable(false)] + [Bindable(true)] + + [DefaultValue(null)] + + public object Tag + { + get; + set; + } + + [Localizable(true)] + [DefaultValue(60)] + public int Width + { + get; + set; + } = 100; + + public ColumnHeader() + { + + } + + public ColumnHeader(int imageIndex) + { + ImageIndex = imageIndex; + } + + public ColumnHeader(string imageKey) + { + ImageKey = imageKey; + } + + //public void AutoResize(ColumnHeaderAutoResizeStyle headerAutoResize) + //{ + // throw null; + //} + + public object Clone() + { + string data = System.Text.Json.JsonSerializer.Serialize(this,typeof(ColumnHeader)); + return System.Text.Json.JsonSerializer.Deserialize(data); + } + protected override void Dispose(bool disposing) + { + + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ColumnHeaderStyle.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ColumnHeaderStyle.cs new file mode 100644 index 0000000000000000000000000000000000000000..9c4347a3e962b6691b75bc8330b935e8f351a1af --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ColumnHeaderStyle.cs @@ -0,0 +1,9 @@ +namespace System.Windows.Forms +{ + public enum ColumnHeaderStyle + { + None, + Nonclickable, + Clickable + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/EventArgs/ColumnReorderedEventArgs.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ColumnReorderedEventArgs.cs similarity index 100% rename from Source/GTKSystem.Windows.Forms/GTKControls/EventArgs/ColumnReorderedEventArgs.cs rename to Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ColumnReorderedEventArgs.cs diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Control/ListViewItem.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ColumnReorderedEventHandler.cs similarity index 61% rename from Source/GTKSystem.Windows.Forms/GTKControls/Control/ListViewItem.cs rename to Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ColumnReorderedEventHandler.cs index 9fcc2a307b79529a3dfeac1acb4625dc4ad456d0..7ccc6b694b3c7d3c4d7d7a68bb7940335ffb511a 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/Control/ListViewItem.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ColumnReorderedEventHandler.cs @@ -1,10 +1,7 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. namespace System.Windows.Forms { - public class ListViewItem - { - } + public delegate void ColumnReorderedEventHandler(object? sender, ColumnReorderedEventArgs e); } \ No newline at end of file diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/EventArgs/ColumnWidthChangedEventArgs.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ColumnWidthChangedEventArgs.cs similarity index 100% rename from Source/GTKSystem.Windows.Forms/GTKControls/EventArgs/ColumnWidthChangedEventArgs.cs rename to Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ColumnWidthChangedEventArgs.cs diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/EventHandlers/ColumnWidthChangedEventHandler.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ColumnWidthChangedEventHandler.cs similarity index 100% rename from Source/GTKSystem.Windows.Forms/GTKControls/EventHandlers/ColumnWidthChangedEventHandler.cs rename to Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ColumnWidthChangedEventHandler.cs diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/EventArgs/ColumnWidthChangingEventArgs.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ColumnWidthChangingEventArgs.cs similarity index 100% rename from Source/GTKSystem.Windows.Forms/GTKControls/EventArgs/ColumnWidthChangingEventArgs.cs rename to Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ColumnWidthChangingEventArgs.cs diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/EventHandlers/ColumnWidthChangingEventHandler.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ColumnWidthChangingEventHandler.cs similarity index 100% rename from Source/GTKSystem.Windows.Forms/GTKControls/EventHandlers/ColumnWidthChangingEventHandler.cs rename to Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ColumnWidthChangingEventHandler.cs diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ItemActivation.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ItemActivation.cs new file mode 100644 index 0000000000000000000000000000000000000000..10f1194bbd481b02ef02b384bdcd9a60231aa78e --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ItemActivation.cs @@ -0,0 +1,9 @@ +namespace System.Windows.Forms +{ + public enum ItemActivation + { + Standard, + OneClick, + TwoClick + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ListViewAlignment.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ListViewAlignment.cs new file mode 100644 index 0000000000000000000000000000000000000000..626a3dc1761c9a2e4628c5156a5b13766bd67281 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ListViewAlignment.cs @@ -0,0 +1,10 @@ +namespace System.Windows.Forms +{ + public enum ListViewAlignment + { + Default = 0, + Top = 2, + Left = 1, + SnapToGrid = 5 + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ListViewGroup.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ListViewGroup.cs new file mode 100644 index 0000000000000000000000000000000000000000..84fe02a68a133ece8b6a99a69ab29a280172ca30 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ListViewGroup.cs @@ -0,0 +1,137 @@ + +using Gtk; +using System.Reflection.PortableExecutable; +using System.Runtime.Serialization; + +namespace System.Windows.Forms +{ + public sealed class ListViewGroup : ISerializable + { + public readonly string SerialGuid = Guid.NewGuid().ToString(); + public static readonly string defaultListViewGroupKey = "00000defaultListViewGroup"; + ListView.ListViewItemCollection _items; + + public static ListViewGroup GetDefaultListViewGroup() { + ListViewGroup defaultGroup = new ListViewGroup("default", HorizontalAlignment.Left); + defaultGroup.Header = "default"; + defaultGroup.Name = ListViewGroup.defaultListViewGroupKey; + defaultGroup.Subtitle = ""; + return defaultGroup; + } + public ListViewGroup() : this("", "") + { + } + + public ListViewGroup(string key, string headerText) + { + this.Name = string.IsNullOrWhiteSpace(key) ? headerText : key; + this.Header = headerText; + } + + public ListViewGroup(string header) : this(header, header) + { + + } + + public ListViewGroup(string header, HorizontalAlignment headerAlignment) : this(header, header) + { + this.HeaderAlignment = headerAlignment; + + } + internal readonly Gtk.FlowBox FlowBox = new Gtk.FlowBox() { Orientation = Gtk.Orientation.Horizontal, Name = Guid.NewGuid().ToString() }; + public string Header + { + get; + set; + } + + public HorizontalAlignment HeaderAlignment + { + get; + set; + } + + public string Footer + { + get; + set; + } + + + + public HorizontalAlignment FooterAlignment + { + get; + set; + } + + + public ListViewGroupCollapsedState CollapsedState + { + get; + set; + } + + + + public string Subtitle + { + get; + set; + } + + + + public string TaskLink + { + get; + set; + } + + public int TitleImageIndex + { + get; + set; + } + + public string TitleImageKey + { + get; + set; + } + + public ListView.ListViewItemCollection Items + { + get + { + ListView.ListViewItemCollection coll = new ListView.ListViewItemCollection(ListView); + var all = ListView.Items.FindAll(m => m.Group.SerialGuid == this.SerialGuid); + coll.AddRange(all); + return coll; + } + } + + public ListView ListView + { + get; + internal set; + } + + public string Name + { + get; + set; + } + + public object Tag + { + get; + set; + } + + void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) + { + + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ListViewGroupCollapsedState.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ListViewGroupCollapsedState.cs new file mode 100644 index 0000000000000000000000000000000000000000..82a5f5432e4ce865c90742736227eeb439c93a72 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ListViewGroupCollapsedState.cs @@ -0,0 +1,9 @@ +namespace System.Windows.Forms +{ + public enum ListViewGroupCollapsedState + { + Default, + Expanded, + Collapsed + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ListViewGroupCollection.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ListViewGroupCollection.cs new file mode 100644 index 0000000000000000000000000000000000000000..97996e82a79a126d59fe180d1624bef6165bdc6d --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ListViewGroupCollection.cs @@ -0,0 +1,66 @@ +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; + +namespace System.Windows.Forms +{ + [ListBindable(false)] + public class ListViewGroupCollection : List + { + ListView _listView; + public ListViewGroup this[string key] + { + get + { + return base.Find(w=>w.Name == key); + } + set + { + if (base.FindIndex(w => w.Name == key) > -1) + { + base[FindIndex(w => w.Name == key)] = value; + } + } + } + + internal ListViewGroupCollection(ListView listView) + { + _listView = listView; + + } + + public ListViewGroup Add(string key, string headerText) + { + ListViewGroup group = new ListViewGroup(key, headerText); + + AddCore(group); + return group; + } + + + public void AddRange(ListViewGroup[] groups) + { + foreach (ListViewGroup group in groups) + { + AddCore(group); + } + } + + public void AddRange(ListViewGroupCollection groups) + { + foreach (ListViewGroup group in groups) + { + AddCore(group); + } + } + private void AddCore(ListViewGroup group) + { + group.ListView = _listView; + Add(group); + } + public bool Contains(string name) + { + return base.FindIndex(w => w.Name == name) > -1; + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ListViewGroupConverter.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ListViewGroupConverter.cs new file mode 100644 index 0000000000000000000000000000000000000000..e9ba57ea1145a9fab1a499223f8b32ed11f6d55d --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ListViewGroupConverter.cs @@ -0,0 +1,48 @@ +using System.ComponentModel; +using System.Globalization; + +namespace System.Windows.Forms +{ + internal class ListViewGroupConverter : TypeConverter + { + public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) + { + throw null; + } + + public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) + { + throw null; + } + + public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) + { + throw null; + } + + public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) + { + throw null; + } + + public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) + { + throw null; + } + + public override bool GetStandardValuesExclusive(ITypeDescriptorContext context) + { + throw null; + } + + public override bool GetStandardValuesSupported(ITypeDescriptorContext context) + { + throw null; + } + + public ListViewGroupConverter() + { + throw null; + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ListViewGroupEventArgs.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ListViewGroupEventArgs.cs new file mode 100644 index 0000000000000000000000000000000000000000..de38c89810511db1c2e10e90aff2c4462a88685d --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ListViewGroupEventArgs.cs @@ -0,0 +1,21 @@ +using System.Runtime.CompilerServices; + +namespace System.Windows.Forms +{ + public class ListViewGroupEventArgs : EventArgs + { + public int GroupIndex + { + [CompilerGenerated] + get + { + throw null; + } + } + + public ListViewGroupEventArgs(int groupIndex) + { + throw null; + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ListViewGroupImageIndexer.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ListViewGroupImageIndexer.cs new file mode 100644 index 0000000000000000000000000000000000000000..7e4eb2581bb78f9e0106df42324016fc5fbcb00b --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ListViewGroupImageIndexer.cs @@ -0,0 +1,22 @@ +namespace System.Windows.Forms +{ + internal class ListViewGroupImageIndexer : ImageList.Indexer + { + public override ImageList ImageList + { + get + { + throw null; + } + set + { + throw null; + } + } + + public ListViewGroupImageIndexer(ListViewGroup group) + { + throw null; + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ListViewGroupItemCollection.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ListViewGroupItemCollection.cs new file mode 100644 index 0000000000000000000000000000000000000000..2e5079827929b44157e486bc3caad8d5f820e8d1 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ListViewGroupItemCollection.cs @@ -0,0 +1,22 @@ +using System.Collections; +using System.Collections.Generic; + +namespace System.Windows.Forms +{ + internal class ListViewGroupItemCollection : List + { + + public ListViewGroupItemCollection(ListViewGroup group) + { + + } + + public void AddRange(ListViewItem[] items) + { + foreach (ListViewItem item in items) + { + Add(item); + } + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ListViewItem.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ListViewItem.cs new file mode 100644 index 0000000000000000000000000000000000000000..a01cbb67707ae0f04fe5891655ac7301e1797504 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ListViewItem.cs @@ -0,0 +1,556 @@ +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics.CodeAnalysis; +using System.Drawing; +using System.Drawing.Design; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Runtime.Serialization; +namespace System.Windows.Forms +{ + + public class ListViewItem : ICloneable, ISerializable, IKeyboardToolTip + { + private ListViewSubItemCollection _subitems; + public class ListViewSubItem + { + public Color? BackColor + { + get; + set; + } + + + public Rectangle Bounds + { + get; + set; + } + + public Font Font + { + get; + set; + } + + public Color? ForeColor + { + get; + set; + } + + public object Tag + { + get; + set; + } + + + public string Text + { + get; + set; + } + + + public string Name + { + get; + set; + } + public ListViewItem ListViewItem + { + get; + set; + } + public ListViewSubItem() + { + + } + + public ListViewSubItem(ListViewItem owner, string text) + { + ListViewItem = owner; + this.Text = text; + } + + public ListViewSubItem(ListViewItem owner, string text, Color foreColor, Color backColor, Font font) + { + ListViewItem = owner; + this.Text= text; + this.ForeColor = foreColor; + this.BackColor = backColor; + this.Font = font; + } + + public void ResetStyle() + { + + } + + } + + public class ListViewSubItemCollection : List + { + private ListViewItem _owner; + public virtual ListViewSubItem this[string key] + { + get + { + return base.Find(w => w.Name == key); + } + } + + public ListViewSubItemCollection(ListViewItem owner) + { + _owner = owner; + } + + public ListViewSubItem Add(string text) + { + ListViewSubItem sub = new ListViewSubItem(_owner, text); + Add(sub); + return sub; + } + + public ListViewSubItem Add(string text, Color foreColor, Color backColor, Font font) + { + ListViewSubItem sub = new ListViewSubItem(_owner, text, foreColor, backColor, font); + Add(sub); + return sub; + } + + public void AddRange(ListViewSubItem[] items) + { + foreach(ListViewSubItem item in items) + Add(item); + } + + public void AddRange(string[] items) + { + foreach(string item in items) + Add(item); + } + + public void AddRange(string[] items, Color foreColor, Color backColor, Font font) + { + foreach (string item in items) + Add(item, foreColor, backColor, font); + } + + public virtual bool ContainsKey(string key) + { + return base.FindIndex(w => w.Name == key) > -1; + + } + + public virtual int IndexOfKey(string key) + { + return base.FindIndex(w => w.Name == key); + + } + + public virtual void RemoveByKey(string key) + { + RemoveAt(base.FindIndex(w => w.Name == key)); + } + } + + internal ListView _listView; + + internal ListViewGroup _group; + + internal int ID; + + internal virtual AccessibleObject AccessibilityObject + { + get; + } + + + internal string ItemType + { + get; + set; + } + public Color? BackColor + { + get; + set; + } + + + public Rectangle Bounds + { + get; + } + + + + + public bool Checked + { + get; + set; + } + + + + public bool Focused + { + get; + set; + } + + + + + public Font Font + { + get; + set; + } + + + + public Color? ForeColor + { + get; + set; + } + + public ListViewGroup Group + { + get { return _group; } + set { _group = value;} + } + + public int ImageIndex + { + get; + set; + } + + internal ListViewItemImageIndexer ImageIndexer + { + get; + } + + + + + + + + + public string ImageKey + { + get; + set; + } + + + public ImageList ImageList + { + get; + internal set; + } + + + + + public int IndentCount + { + get; + set; + } + + + public int Index + { + get; + internal set; + } + + + public ListView ListView + { + get; + internal set; + } + + + + + public string Name + { + get; + set; + } + + + + + public Point Position + { + get; + set; + } + + public bool Selected + { + get; + set; + } + + + + + + + + + + public int StateImageIndex + { + get; + set; + } + + internal bool StateImageSet + { + get; + } + + internal bool StateSelected + { + get; + set; + } + + + + + + public ListViewSubItemCollection SubItems + { + get; + internal set; + } + + + + + + + + public object Tag + { + get; + set; + } + + + + + public string Text + { + get; + set; + } = string.Empty; + + + + public string ToolTipText + { + get; + set; + } + + + + public bool UseItemStyleForSubItems + { + get; + set; + } + + public ListViewItem() + { + InitListViewItem("", -1, "", null, null, null, null); + } + + protected ListViewItem(SerializationInfo info, StreamingContext context) + { + + } + + public ListViewItem(string text) + { + InitListViewItem(text, -1, "", null, null, null, null); + } + + public ListViewItem(string text, int imageIndex) + { + InitListViewItem(text, imageIndex, "", null, null, null, null); + } + + public ListViewItem(string[] items) + { + InitListViewItem(items, -1, "", null, null, null, null); + } + + public ListViewItem(string[] items, int imageIndex) + { + InitListViewItem(items, imageIndex, "", null, null, null, null); + } + + public ListViewItem(string[] items, int imageIndex, Color foreColor, Color backColor, Font font) + { + InitListViewItem(items, imageIndex, "", foreColor, backColor, font, null); + } + + public ListViewItem(ListViewSubItem[] subItems, int imageIndex) + { + foreach (ListViewSubItem item in subItems) + _subitems.Add(item); + InitListViewItem("", imageIndex, "", null, null, null, null); + } + + public ListViewItem(ListViewGroup group) + { + InitListViewItem("", -1, "", null, null, null, group); + } + + public ListViewItem(string text, ListViewGroup group) + { + InitListViewItem(text, -1, null, null, null, null, group); + } + + public ListViewItem(string text, int imageIndex, ListViewGroup group) + { + InitListViewItem(text, imageIndex, null, null, null, null, group); + } + + public ListViewItem(string[] items, ListViewGroup group) + { + InitListViewItem(items, -1, "", null, null, null, group); + } + + public ListViewItem(string[] items, int imageIndex, ListViewGroup group) + { + InitListViewItem(items, imageIndex, "", null, null, null, group); + } + + public ListViewItem(string[] items, int imageIndex, Color foreColor, Color backColor, Font font, ListViewGroup group) + { + InitListViewItem(items, imageIndex, "", foreColor, backColor, font, group); + } + + public ListViewItem(ListViewSubItem[] subItems, int imageIndex, ListViewGroup group) + { + foreach (ListViewSubItem item in subItems) + _subitems.Add(item); + InitListViewItem(new string[0], imageIndex, "", null, null, null, group); + } + + public ListViewItem(string text, string imageKey) + { + InitListViewItem(text, -1, imageKey, null, null, null, null); + } + + public ListViewItem(string[] items, string imageKey) + { + InitListViewItem(items, -1, imageKey, null, null, null, null); + } + + public ListViewItem(string[] items, string imageKey, Color foreColor, Color backColor, Font font) + { + InitListViewItem(items, -1, imageKey, foreColor, backColor, font, null); + } + + public ListViewItem(ListViewSubItem[] subItems, string imageKey) + { + foreach (ListViewSubItem item in subItems) + _subitems.Add(item); + InitListViewItem(new string[0], -1, imageKey, null, null, null, null); + } + + public ListViewItem(string text, string imageKey, ListViewGroup group) + { + InitListViewItem(text, -1, imageKey, null, null, null, group); + } + + public ListViewItem(string[] items, string imageKey, ListViewGroup group) + { + InitListViewItem(items, -1, imageKey, null, null, null, group); + } + + public ListViewItem(string[] items, string imageKey, Color foreColor, Color backColor, Font font, ListViewGroup group) + { + InitListViewItem(items, -1, imageKey, foreColor, backColor, font, group); + } + + public ListViewItem(ListViewSubItem[] subItems, string imageKey, ListViewGroup group) + { + foreach(ListViewSubItem item in subItems) + _subitems.Add(item); + InitListViewItem("", -1, imageKey, null, null, null, group); + } + internal void InitListViewItem(string text, int imageIndex, string imageKey, Color? foreColor, Color? backColor, Font font, ListViewGroup group) + { + _subitems = new ListViewSubItemCollection(this); + SubItems = _subitems; + this.Text = text; + this.ImageIndex = imageIndex; + this.ImageKey = imageKey; + this.ForeColor = foreColor; + this.BackColor = backColor; + this.Font = font; + this.Group = group; + } + internal void InitListViewItem(string[] items, int imageIndex, string imageKey, Color? foreColor, Color? backColor, Font font, ListViewGroup group) + { + InitListViewItem(items[0], imageIndex, imageKey, foreColor, backColor, font, group); + foreach (string item in items.Skip(1)) + _subitems.Add(item); + + } + //internal string RelateFlowBoxChildKey { get; set; } + public void BeginEdit() + { + + } + + public virtual object Clone() + { + throw null; + } + + public virtual void EnsureVisible() + { + + } + + public ListViewSubItem GetSubItemAt(int x, int y) + { + return _subitems[x]; + } + + internal void Host(ListView parent, int id, int index) + { + + } + + public virtual void Remove() + { + + } + + public void GetObjectData(SerializationInfo info, StreamingContext context) + { + + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ListViewItemConverter.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ListViewItemConverter.cs new file mode 100644 index 0000000000000000000000000000000000000000..f3388b5de54671db943f0525bab43946c89aa529 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ListViewItemConverter.cs @@ -0,0 +1,23 @@ +using System.ComponentModel; +using System.Globalization; + +namespace System.Windows.Forms +{ + public class ListViewItemConverter : ExpandableObjectConverter + { + public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) + { + throw null; + } + + public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) + { + throw null; + } + + public ListViewItemConverter() + { + throw null; + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ListViewItemImageIndexer.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ListViewItemImageIndexer.cs new file mode 100644 index 0000000000000000000000000000000000000000..73c435c3911f06d038975e1289e152a2c78c0996 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/ListViewItemImageIndexer.cs @@ -0,0 +1,22 @@ +namespace System.Windows.Forms +{ + internal class ListViewItemImageIndexer : ImageList.Indexer + { + public override ImageList ImageList + { + get + { + throw null; + } + set + { + throw null; + } + } + + public ListViewItemImageIndexer(ListViewItem item) + { + throw null; + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/SortOrder.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/SortOrder.cs new file mode 100644 index 0000000000000000000000000000000000000000..580dbd0ce2d3b1b5c0f98e7c90212c86b8dcb1e1 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/SortOrder.cs @@ -0,0 +1,9 @@ +namespace System.Windows.Forms +{ + public enum SortOrder + { + None, + Ascending, + Descending + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/View.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/View.cs new file mode 100644 index 0000000000000000000000000000000000000000..7d36c4a503102e515eb695e4217f117b460369da --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ListViewBase/View.cs @@ -0,0 +1,11 @@ +namespace System.Windows.Forms +{ + public enum View + { + LargeIcon, + Details, + SmallIcon, + List, + Tile + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/MaskedTextBox.cs b/Source/GTKSystem.Windows.Forms/GTKControls/MaskedTextBox.cs index 500878b0201008170cf43b1cb51223b3134189ff..a8f4c3f665b2264719d1dc5e2ae3e2bc625ca176 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/MaskedTextBox.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/MaskedTextBox.cs @@ -1,6 +1,10 @@ -//基于GTK3.24.24.34版本组件开发,兼容原生C#控件winform界面的跨平台界面组件。 -//使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows和linux运行 -//技术支持438865652@qq.com,https://www.cnblogs.com/easywebfactory +/* + * 基于GTK组件开发,兼容原生C#控件winform界面的跨平台界面组件。 + * 使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows、linux、macos运行 + * 技术支持438865652@qq.com,https://gitee.com/easywebfactory, https://www.cnblogs.com/easywebfactory + * author:chenhongjin + * date: 2024/1/3 + */ using System; using System.Text.RegularExpressions; @@ -10,18 +14,17 @@ namespace System.Windows.Forms { public MaskedTextBox():base() { - Widget.StyleContext.AddClass("MaskedTextBox"); - Widget.StyleContext.AddClass("BorderRadiusStyle"); - base.Control.Backspace += Control_Backspace; - base.Control.TextInserted += Control_TextInserted; - base.Control.Shown += Control_Shown; + self.AddClass("MaskedTextBox"); + self.Backspace += Control_Backspace; + self.TextInserted += Control_TextInserted; + self.Shown += Control_Shown; } - public override string Text { get { return base.Control.Text; } set { base.Control.Text = value; } } + public override string Text { get { return self.Text; } set { self.Text = value??""; } } private void Control_Shown(object sender, EventArgs e) { if (_PasswordChar != '\0') { - base.Control.Visibility = false; + self.Visibility = false; } else if (!string.IsNullOrWhiteSpace(Mask)) {//按格式化赋值 @@ -44,36 +47,37 @@ namespace System.Windows.Forms string correctText; private void Control_TextInserted(object o, Gtk.TextInsertedArgs args) { - if (base.Control.IsRealized && isBackspace == false) + if (self.IsRealized && isBackspace == false) { int position = args.Position; string new_text = args.NewText; if (IsMaskPassword == true) { - if(new_text.Length > 1 || base.Control.Text.Length != correctText.Length + 1) + if(new_text.Length > 1 || self.Text.Length != correctText.Length + 1) { - base.Control.Text = correctText; + if (correctText != null) + self.Text = correctText; } else if (correctText.Length > position && new_text.Length == 1) { if (IsNumberText(correctText.Substring(position-1, 1)) && IsNumberText(new_text)) { //正常 - base.Control.DeleteText(position, position+1); + self.DeleteText(position, position+1); } else { - base.Control.Text = correctText; + self.Text = correctText; } } else { - base.Control.DeleteText(position - 1, position); + self.DeleteText(position - 1, position); } } } isBackspace = false; - correctText = base.Control.Text; + correctText = self.Text; } bool isBackspace = false; private void Control_Backspace(object sender, EventArgs e) @@ -81,22 +85,22 @@ namespace System.Windows.Forms if (IsMaskPassword == true) { //格式化掩码,只改数字 - int position = base.Control.CursorPosition; - if (base.Control.Text.Length + 1 == correctText.Length) //删除一个字符 + int position = self.CursorPosition; + if (self.Text.Length + 1 == correctText.Length) //删除一个字符 { isBackspace = true; if (IsNumberChar(correctText[position])) { - base.Control.InsertText("_", ref position); + self.InsertText("_", ref position); } else { - base.Control.InsertText(correctText[position].ToString(), ref position); + self.InsertText(correctText[position].ToString(), ref position); } } - else if (base.Control.Text.Length + 1 < correctText.Length) //选择多字符删除 + else if (self.Text.Length + 1 < correctText.Length) //选择多字符删除 { - base.Control.Text = correctText; + self.Text = correctText; } } } @@ -117,7 +121,7 @@ namespace System.Windows.Forms public string Mask { get; set; } private char _PasswordChar; - public override char PasswordChar { get => _PasswordChar; set { _PasswordChar = value; base.Control.InvisibleChar = value; } } + public override char PasswordChar { get => _PasswordChar; set { _PasswordChar = value; self.InvisibleChar = value; } } public Type ValidatingType { get; set; } public MaskFormat TextMaskFormat { get; set; } diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/MenuStrip.cs b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStrip.cs index d03726d1a015676f781048fe4c37a5db6d52d523..a7c269f4af83a0cf38187f0f191b15d33bc623f1 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/MenuStrip.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStrip.cs @@ -1,4 +1,11 @@ - +/* + * 基于GTK组件开发,兼容原生C#控件winform界面的跨平台界面组件。 + * 使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows、linux、macos运行 + * 技术支持438865652@qq.com,https://gitee.com/easywebfactory, https://www.cnblogs.com/easywebfactory + * author:chenhongjin + * date: 2024/1/3 + */ +using Gtk; using System.ComponentModel; using System.Drawing; @@ -7,10 +14,10 @@ namespace System.Windows.Forms [DesignerCategory("Component")] public partial class MenuStrip : ToolStrip { - public MenuStrip() : base() + public MenuStrip() : base("MenuStrip") { - Widget.StyleContext.AddClass("MenuStrip"); - base.Control.PackDirection = Gtk.PackDirection.Ltr; + this.self.StyleContext.RemoveClass("ToolStrip"); + this.self.StyleContext.AddClass("MenuStrip"); this.Dock = DockStyle.Top; } diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/Border3DSide.cs b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/Border3DSide.cs new file mode 100644 index 0000000000000000000000000000000000000000..0153422cf1eff9cade346c5e956d2381410b441a --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/Border3DSide.cs @@ -0,0 +1,13 @@ +namespace System.Windows.Forms +{ + [Flags] + public enum Border3DSide + { + Left = 0x1, + Top = 0x2, + Right = 0x4, + Bottom = 0x8, + Middle = 0x800, + All = 0x80F + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/Border3DStyle.cs b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/Border3DStyle.cs new file mode 100644 index 0000000000000000000000000000000000000000..2f03b1bf6817225e93043db800b35833df315af2 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/Border3DStyle.cs @@ -0,0 +1,16 @@ +namespace System.Windows.Forms +{ + public enum Border3DStyle + { + Adjust = 0x2000, + Bump = 9, + Etched = 6, + Flat = 16394, + Raised = 5, + RaisedInner = 4, + RaisedOuter = 1, + Sunken = 10, + SunkenInner = 8, + SunkenOuter = 2 + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/GtkLib.cs b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/GtkLib.cs deleted file mode 100644 index 15b5617df23261d231b70631cd4987da33ea4552..0000000000000000000000000000000000000000 --- a/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/GtkLib.cs +++ /dev/null @@ -1,222 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Runtime.InteropServices; -using GLib; - -namespace System.Windows.Forms { - -internal class FuncLoader -{ - private class Windows - { - [DllImport("kernel32", CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)] - public static extern IntPtr GetProcAddress(IntPtr hModule, string procName); - - [DllImport("kernel32", CharSet = CharSet.Unicode, SetLastError = true)] - public static extern IntPtr LoadLibraryW(string lpszLib); - } - - private class Linux - { - [DllImport("libdl.so.2")] - public static extern IntPtr dlopen(string path, int flags); - - [DllImport("libdl.so.2")] - public static extern IntPtr dlsym(IntPtr handle, string symbol); - } - - private class OSX - { - [DllImport("/usr/lib/libSystem.dylib")] - public static extern IntPtr dlopen(string path, int flags); - - [DllImport("/usr/lib/libSystem.dylib")] - public static extern IntPtr dlsym(IntPtr handle, string symbol); - } - - private const int RTLD_LAZY = 1; - - private const int RTLD_GLOBAL = 256; - - public static bool IsWindows; - - public static bool IsOSX; - - [DllImport("libc")] - private static extern int uname(IntPtr buf); - - static FuncLoader() - { - switch (Environment.OSVersion.Platform) - { - case PlatformID.Win32S: - case PlatformID.Win32Windows: - case PlatformID.Win32NT: - case PlatformID.WinCE: - IsWindows = true; - break; - case PlatformID.MacOSX: - IsOSX = true; - break; - case PlatformID.Unix: - try - { - IntPtr intPtr = Marshal.AllocHGlobal(8192); - if (uname(intPtr) == 0 && Marshal.PtrToStringAnsi(intPtr) == "Darwin") - { - IsOSX = true; - } - - Marshal.FreeHGlobal(intPtr); - } - catch - { - } - - break; - case PlatformID.Xbox: - break; - } - } - - public static IntPtr LoadLibrary(string libname) - { - if (IsWindows) - { - return Windows.LoadLibraryW(libname); - } - - if (IsOSX) - { - return OSX.dlopen(libname, 257); - } - - return Linux.dlopen(libname, 257); - } - - public static IntPtr GetProcAddress(IntPtr library, string function) - { - IntPtr zero = IntPtr.Zero; - if (IsWindows) - { - return Windows.GetProcAddress(library, function); - } - - if (IsOSX) - { - return OSX.dlsym(library, function); - } - - return Linux.dlsym(library, function); - } - - public static T LoadFunction(IntPtr procaddress) - { - if (procaddress == IntPtr.Zero) - { - return default(T); - } - - return Marshal.GetDelegateForFunctionPointer(procaddress); - } -} - - -internal class GLibrary -{ - private static Dictionary _libraries; - - private static Dictionary _customlibraries; - - private static Dictionary _libraryDefinitions; - - [DllImport("kernel32.dll", SetLastError = true)] - private static extern bool SetDllDirectory(string lpPathName); - - static GLibrary() - { - _customlibraries = new Dictionary(); - _libraries = new Dictionary(); - _libraryDefinitions = new Dictionary(); - _libraryDefinitions[Library.GLib] = new string[4] { "libglib-2.0-0.dll", "libglib-2.0.so.0", "libglib-2.0.0.dylib", "glib-2.dll" }; - _libraryDefinitions[Library.GObject] = new string[4] { "libgobject-2.0-0.dll", "libgobject-2.0.so.0", "libgobject-2.0.0.dylib", "gobject-2.dll" }; - _libraryDefinitions[Library.Cairo] = new string[4] { "libcairo-2.dll", "libcairo.so.2", "libcairo.2.dylib", "cairo.dll" }; - _libraryDefinitions[Library.Gio] = new string[4] { "libgio-2.0-0.dll", "libgio-2.0.so.0", "libgio-2.0.0.dylib", "gio-2.dll" }; - _libraryDefinitions[Library.Atk] = new string[4] { "libatk-1.0-0.dll", "libatk-1.0.so.0", "libatk-1.0.0.dylib", "atk-1.dll" }; - _libraryDefinitions[Library.Pango] = new string[4] { "libpango-1.0-0.dll", "libpango-1.0.so.0", "libpango-1.0.0.dylib", "pango-1.dll" }; - _libraryDefinitions[Library.Gdk] = new string[4] { "libgdk-3-0.dll", "libgdk-3.so.0", "libgdk-3.0.dylib", "gdk-3.dll" }; - _libraryDefinitions[Library.GdkPixbuf] = new string[4] { "libgdk_pixbuf-2.0-0.dll", "libgdk_pixbuf-2.0.so.0", "libgdk_pixbuf-2.0.dylib", "gdk_pixbuf-2.dll" }; - _libraryDefinitions[Library.Gtk] = new string[4] { "libgtk-3-0.dll", "libgtk-3.so.0", "libgtk-3.0.dylib", "gtk-3.dll" }; - _libraryDefinitions[Library.PangoCairo] = new string[4] { "libpangocairo-1.0-0.dll", "libpangocairo-1.0.so.0", "libpangocairo-1.0.0.dylib", "pangocairo-1.dll" }; - _libraryDefinitions[Library.GtkSource] = new string[4] { "libgtksourceview-4-0.dll", "libgtksourceview-4.so.0", "libgtksourceview-4.0.dylib", "gtksourceview-4.dll" }; - } - - public static IntPtr Load(Library library) - { - IntPtr value = IntPtr.Zero; - if (_libraries.TryGetValue(library, out value)) - { - return value; - } - - if (FuncLoader.IsWindows) - { - value = FuncLoader.LoadLibrary(_libraryDefinitions[library][0]); - if (value == IntPtr.Zero) - { - SetDllDirectory(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Gtk", "3.24.24")); - value = FuncLoader.LoadLibrary(_libraryDefinitions[library][0]); - } - } - else if (FuncLoader.IsOSX) - { - value = FuncLoader.LoadLibrary(_libraryDefinitions[library][2]); - if (value == IntPtr.Zero) - { - value = FuncLoader.LoadLibrary("/usr/local/lib/" + _libraryDefinitions[library][2]); - } - } - else - { - value = FuncLoader.LoadLibrary(_libraryDefinitions[library][1]); - } - - if (value == IntPtr.Zero) - { - for (int i = 0; i < _libraryDefinitions[library].Length; i++) - { - value = FuncLoader.LoadLibrary(_libraryDefinitions[library][i]); - if (value != IntPtr.Zero) - { - break; - } - } - } - - if (value == IntPtr.Zero) - { - throw new DllNotFoundException(library.ToString() + ": " + string.Join(", ", _libraryDefinitions[library])); - } - - _libraries[library] = value; - return value; - } -} - -internal enum Library -{ - GLib, - GObject, - Cairo, - Gio, - Atk, - Pango, - PangoCairo, - Gdk, - GdkPixbuf, - Gtk, - GtkSource -} - -} \ No newline at end of file diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/GtkMenuItem.cs b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/GtkMenuItem.cs new file mode 100644 index 0000000000000000000000000000000000000000..f8a759c16f25eb2fdc7e64733e84d0b94408b694 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/GtkMenuItem.cs @@ -0,0 +1,80 @@ + +using System.ComponentModel; +using System.Drawing; +using System.Runtime.InteropServices; +using GTKSystem.Windows.Forms.GTKControls.ControlBase; + +namespace System.Windows.Forms +{ + /// + /// GtkMenuItem + /// + public class GtkMenuItem : Gtk.MenuItem + { + internal Gtk.Image DefaultImage { get; set; } = new Gtk.Image("image-missing", Gtk.IconSize.SmallToolbar); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + private delegate IntPtr d_gtk_image_menu_item_get_image(IntPtr raw); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + private delegate void d_gtk_image_menu_item_set_image(IntPtr raw, IntPtr image); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + private delegate bool d_gtk_image_menu_item_get_always_show_image(IntPtr raw); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + private delegate void d_gtk_image_menu_item_set_always_show_image(IntPtr raw, bool always_show); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + private delegate IntPtr d_gtk_image_menu_item_get_type(); + + private static d_gtk_image_menu_item_get_image gtk_image_menu_item_get_image = FuncLoader.LoadFunction(FuncLoader.GetProcAddress(GLibrary.Load(Library.Gtk), "gtk_image_menu_item_get_image")); + + private static d_gtk_image_menu_item_set_image gtk_image_menu_item_set_image = FuncLoader.LoadFunction(FuncLoader.GetProcAddress(GLibrary.Load(Library.Gtk), "gtk_image_menu_item_set_image")); + + private static d_gtk_image_menu_item_get_always_show_image gtk_image_menu_item_get_always_show_image = FuncLoader.LoadFunction(FuncLoader.GetProcAddress(GLibrary.Load(Library.Gtk), "gtk_image_menu_item_get_always_show_image")); + + private static d_gtk_image_menu_item_set_always_show_image gtk_image_menu_item_set_always_show_image = FuncLoader.LoadFunction(FuncLoader.GetProcAddress(GLibrary.Load(Library.Gtk), "gtk_image_menu_item_set_always_show_image")); + + private static d_gtk_image_menu_item_get_type gtk_image_menu_item_get_type = FuncLoader.LoadFunction(FuncLoader.GetProcAddress(GLibrary.Load(Library.Gtk), "gtk_image_menu_item_get_type")); + + + [GLib.Property("Image")] + internal Gtk.Widget IcoImage + { + get + { + return GLib.Object.GetObject(gtk_image_menu_item_get_image(base.Handle)) as Gtk.Widget; + } + set + { + gtk_image_menu_item_set_image(base.Handle, value?.Handle ?? IntPtr.Zero); + } + } + + [GLib.Property("always-show-image")] + internal bool AlwaysShowImage + { + get + { + return gtk_image_menu_item_get_always_show_image(base.Handle); + } + set + { + gtk_image_menu_item_set_always_show_image(base.Handle, value); + } + } + + public new static GLib.GType GType + { + get + { + IntPtr val = gtk_image_menu_item_get_type(); + return new GLib.GType(val); + } + } + public GtkMenuItem() + { + } + } + +} + + diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/MergeAction.cs b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/MergeAction.cs new file mode 100644 index 0000000000000000000000000000000000000000..e2878c95526aaa40d6d9c79fbe98c92da59a9d12 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/MergeAction.cs @@ -0,0 +1,11 @@ +namespace System.Windows.Forms +{ + public enum MergeAction + { + Append, + Insert, + Replace, + Remove, + MatchOnly + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ProgressBarStyle.cs b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ProgressBarStyle.cs new file mode 100644 index 0000000000000000000000000000000000000000..a8a38c5a32770c5708df8869c6c10fba7bbe8c63 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ProgressBarStyle.cs @@ -0,0 +1,9 @@ +namespace System.Windows.Forms +{ + public enum ProgressBarStyle + { + Blocks, + Continuous, + Marquee + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/TextImageRelation.cs b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/TextImageRelation.cs new file mode 100644 index 0000000000000000000000000000000000000000..96b52699154b204f56a091b65ed687e045af98bc --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/TextImageRelation.cs @@ -0,0 +1,11 @@ +namespace System.Windows.Forms +{ + public enum TextImageRelation + { + Overlay = 0, + ImageBeforeText = 4, + TextBeforeImage = 8, + ImageAboveText = 1, + TextAboveImage = 2 + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripButton.cs b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripButton.cs index 2489032674ad4c239ff3b9ecf12e9a7823ffdb52..b030d6e8daa86b5c3a8dec908d31fe6fc7590def 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripButton.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripButton.cs @@ -5,7 +5,7 @@ using System.ComponentModel; namespace System.Windows.Forms { - public class ToolStripButton : ToolStripItem + public class ToolStripButton : WidgetToolStrip { public ToolStripButton() : this("", null, null, "") @@ -31,68 +31,13 @@ namespace System.Windows.Forms public ToolStripButton(string text, Image image, EventHandler onClick, string name) : base(text, image, onClick, name) { - DisplayStyle=System.Windows.Forms.ToolStripItemDisplayStyle.ImageAndText; - base.Shown += ToolStripButton_Shown; + DisplayStyle=System.Windows.Forms.ToolStripItemDisplayStyle.Text; } - private void ToolStripButton_Shown(object sender, EventArgs e) - { - if (DisplayStyle == ToolStripItemDisplayStyle.Text) - { - base.AlwaysShowImage = false; - } - else if (DisplayStyle == ToolStripItemDisplayStyle.Image) - { - base.AlwaysShowImage = true; - base.Text = ""; - - } - else if (DisplayStyle == ToolStripItemDisplayStyle.ImageAndText) - { - base.AlwaysShowImage = true; - } - else if (DisplayStyle == ToolStripItemDisplayStyle.None) - { - base.AlwaysShowImage = false; - base.Text = " "; - } - } - - private Image image; - public new Image Image { - get { return image; } - set { - image = value; - if (value != null && value.PixbufData != null) - base.Image = new Gtk.Image(new Gdk.Pixbuf(value.PixbufData)); - - } - } - - //[DefaultValue(CheckState.Unchecked)] - //public CheckState CheckState { get; set; } - - //[DefaultValue(false)] - //public bool Checked { get; set; } - - [DefaultValue(false)] public bool CheckOnClick { get; set; } - public bool CanSelect { get; } - - //[DefaultValue(true)] - //public bool AutoToolTip { get; set; } protected bool DefaultAutoToolTip { get; } - - public event EventHandler CheckStateChanged; - - public event EventHandler CheckedChanged; - - public Size GetPreferredSize(Size constrainingSize) - { - return constrainingSize; - } [EditorBrowsable(EditorBrowsableState.Advanced)] protected AccessibleObject CreateAccessibilityInstance() @@ -106,8 +51,6 @@ namespace System.Windows.Forms { } - - protected void OnClick(EventArgs e) { } } } diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripComboBox.cs b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripComboBox.cs index 5c5987df4ba67bbdebc53c5d18469f275b6eea37..0166799ba8bc844a7966a6704925cfbe2c47be17 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripComboBox.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripComboBox.cs @@ -1,18 +1,69 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - +/* + * 基于GTK组件开发,兼容原生C#控件winform界面的跨平台界面组件。 + * 使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows、linux、macos运行 + * 技术支持438865652@qq.com,https://gitee.com/easywebfactory, https://www.cnblogs.com/easywebfactory + * author:chenhongjin + * date: 2024/1/3 + */ using System; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; namespace System.Windows.Forms { - public class ToolStripComboBox : ToolStripItem + public class ToolStripComboBox : WidgetToolStrip { - public ToolStripComboBox() + private ObjectCollection __itemsData; + public ToolStripComboBox() : base("ToolStripComboBox",null) + { + __itemsData = new ObjectCollection(this.comboBox); + } + public override Size Size { get => base.Size; set { this.comboBox.WidthRequest = value.Width; this.comboBox.HeightRequest = value.Height; base.Size = value; } } + + public bool FormattingEnabled { get; set; } + + public object SelectedItem { get { return __itemsData[SelectedIndex]; } } + public int SelectedIndex { get { return base.comboBox.Active; } } + public new ObjectCollection Items { get { return __itemsData; } } + + public event EventHandler SelectedIndexChanged + { + add { base.comboBox.Changed += (object sender, EventArgs e) => { if (base.Control.IsRealized) { value.Invoke(this, e); } }; } + remove { base.comboBox.Changed -= (object sender, EventArgs e) => { if (base.Control.IsRealized) { value.Invoke(this, e); } }; } + } + public event EventHandler SelectedValueChanged + { + add { base.comboBox.Changed += (object sender, EventArgs e) => { if (base.Control.IsRealized) { value.Invoke(this, e); } }; } + remove { base.comboBox.Changed -= (object sender, EventArgs e) => { if (base.Control.IsRealized) { value.Invoke(this, e); } }; } + } + + [ListBindable(false)] + public class ObjectCollection : ArrayList { - base.Text = "[ComboBox]"; - base.ToolTipText = "No supper ComboBox"; + Gtk.ComboBoxText __owner; + public ObjectCollection(Gtk.ComboBoxText owner) + { + __owner = owner; + } + public override int Add(object value) + { + __owner.AppendText(value?.ToString()); + return base.Add(value); + } + public override void Clear() + { + __owner.Clear(); + base.Clear(); + } + public override void AddRange(ICollection c) + { + foreach (var item in c) + __owner.AppendText(item.ToString()); + base.AddRange(c); + } } } diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripDropDown.cs b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripDropDown.cs index 7b286e30a2d8ccd197acbdff5a1121c6dba086d5..5a731f5c82d8941fd750c8f1f4131d04fc6dd279 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripDropDown.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripDropDown.cs @@ -1,16 +1,19 @@ -using System; +using GTKSystem.Windows.Forms.GTKControls.ControlBase; +using System; using System.Collections.Generic; using System.Drawing; using System.Text; namespace System.Windows.Forms { - public class ToolStripDropDown : WidgetControl + public class ToolStripDropDown : Control { + public readonly ToolStripDropDownBase self = new ToolStripDropDownBase(); + public override object GtkControl => self; public ToolStripItemCollection toolStripItemCollection; public ToolStripDropDown():base() { - toolStripItemCollection = new ToolStripItemCollection(base.Control); + toolStripItemCollection = new ToolStripItemCollection(this); } public ToolStripItemCollection Items diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripDropDownItem.cs b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripDropDownItem.cs index 8b61b0c3fd2ecc14f61746744826810222c9b4ac..749a857bcd21134923466c5d8372db5298bfcd6e 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripDropDownItem.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripDropDownItem.cs @@ -1,13 +1,16 @@ using System; using System.Drawing; using System.ComponentModel; +using System.Reflection; namespace System.Windows.Forms { public delegate void ToolStripItemClickedEventHandler(object sender, ToolStripItemClickedEventArgs e); - public abstract class ToolStripDropDownItem : ToolStripItem + public abstract class ToolStripDropDownItem : WidgetToolStrip { - protected ToolStripDropDownItem() : this("", null, null, "") { } + protected ToolStripDropDownItem() : this("", null, null, "") { + + } protected ToolStripDropDownItem(string text, Image image, EventHandler onClick) : this(text, image, onClick, "") { @@ -19,54 +22,14 @@ namespace System.Windows.Forms DropDownItems.AddRange(dropDownItems); } - protected ToolStripDropDownItem(string text, Image image, EventHandler onClick, string name) : base(text, image, onClick, name) + protected ToolStripDropDownItem(string text, Image image, EventHandler onClick, string name) : base("ToolStripDropDownItem", text, image, onClick, name) { DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.ImageAndText; - base.Shown += ToolStripButton_Shown; - } - - private void ToolStripButton_Shown(object sender, EventArgs e) - { - if (DisplayStyle == ToolStripItemDisplayStyle.Text) - { - base.AlwaysShowImage = false; - } - else if (DisplayStyle == ToolStripItemDisplayStyle.Image) - { - base.AlwaysShowImage = true; - base.Text = ""; - - } - else if (DisplayStyle == ToolStripItemDisplayStyle.ImageAndText) - { - base.AlwaysShowImage = true; - } - else if (DisplayStyle == ToolStripItemDisplayStyle.None) - { - base.AlwaysShowImage = false; - base.Text = ""; - } - base.Text += " ▼"; } - private Image image; - public new Image Image - { - get { return image; } - set - { - image = value; - if (value != null && value.PixbufData != null) - base.Image = new Gtk.Image(new Gdk.Pixbuf(value.PixbufData)); - - } - } + public override string Text { get => base.Text; set => base.Text = value; } //+ " ▼" - [Browsable(false)] - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - public bool Pressed { get; } - [Browsable(false)] public bool HasDropDown { get; } @@ -90,7 +53,7 @@ namespace System.Windows.Forms public event EventHandler DropDownOpened; - public event ToolStripItemClickedEventHandler DropDownItemClicked; + //public event ToolStripItemClickedEventHandler DropDownItemClicked; public void HideDropDown() { } diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripDropDownMenu.cs b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripDropDownMenu.cs index 236943a5698bb3714d5563b6fae95372fd50028e..6557254619c9f54c9ea23a88b3674cfcb3c32aae 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripDropDownMenu.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripDropDownMenu.cs @@ -3,10 +3,6 @@ using System.Drawing; namespace System.Windows.Forms { - // - // 摘要: - // Provides basic functionality for the System.Windows.Forms.ContextMenuStrip control. - [Designer("System.Windows.Forms.Design.ToolStripDropDownDesigner, System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")] public class ToolStripDropDownMenu : ToolStripDropDown { diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripItem.cs b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripItem.cs index ec7c4f97ea5e1f21e3cc234661b014103b234167..935855b441a74048025797d6c6cb9216d95c98c6 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripItem.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripItem.cs @@ -1,10 +1,4 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -using Atk; -using GLib; -//using Gtk; + using System.ComponentModel; using System.Drawing; using System.Runtime.InteropServices; @@ -14,101 +8,35 @@ namespace System.Windows.Forms /// /// A non selectable ToolStrip item /// - public class ToolStripItem : Gtk.MenuItem + public class ToolStripItem : Component, IDropTarget, ISupportOleDropSource, IArrangedElement, IComponent, IDisposable, IKeyboardToolTip { - public bool Checked { get; set; } - public CheckState CheckState { get; set; } - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - private delegate IntPtr d_gtk_image_menu_item_get_image(IntPtr raw); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - private delegate void d_gtk_image_menu_item_set_image(IntPtr raw, IntPtr image); - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - private delegate bool d_gtk_image_menu_item_get_always_show_image(IntPtr raw); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - private delegate void d_gtk_image_menu_item_set_always_show_image(IntPtr raw, bool always_show); - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - private delegate IntPtr d_gtk_image_menu_item_get_type(); - - private static d_gtk_image_menu_item_get_image gtk_image_menu_item_get_image = FuncLoader.LoadFunction(FuncLoader.GetProcAddress(GLibrary.Load(Library.Gtk), "gtk_image_menu_item_get_image")); - - private static d_gtk_image_menu_item_set_image gtk_image_menu_item_set_image = FuncLoader.LoadFunction(FuncLoader.GetProcAddress(GLibrary.Load(Library.Gtk), "gtk_image_menu_item_set_image")); - - private static d_gtk_image_menu_item_get_always_show_image gtk_image_menu_item_get_always_show_image = FuncLoader.LoadFunction(FuncLoader.GetProcAddress(GLibrary.Load(Library.Gtk), "gtk_image_menu_item_get_always_show_image")); - - private static d_gtk_image_menu_item_set_always_show_image gtk_image_menu_item_set_always_show_image = FuncLoader.LoadFunction(FuncLoader.GetProcAddress(GLibrary.Load(Library.Gtk), "gtk_image_menu_item_set_always_show_image")); - - private static d_gtk_image_menu_item_get_type gtk_image_menu_item_get_type = FuncLoader.LoadFunction(FuncLoader.GetProcAddress(GLibrary.Load(Library.Gtk), "gtk_image_menu_item_get_type")); - - [Obsolete] - [Property("image")] - public Gtk.Widget Image - { - get - { - return GLib.Object.GetObject(gtk_image_menu_item_get_image(base.Handle)) as Gtk.Widget; - } - set - { - gtk_image_menu_item_set_image(base.Handle, value?.Handle ?? IntPtr.Zero); - } - } - [Obsolete] - [Property("always-show-image")] - public bool AlwaysShowImage - { - get - { - return gtk_image_menu_item_get_always_show_image(base.Handle); - } - set - { - gtk_image_menu_item_set_always_show_image(base.Handle, value); - } - } - [Obsolete] - public new static GType GType - { - get - { - IntPtr val = gtk_image_menu_item_get_type(); - return new GType(val); - } - } + public virtual string unique_key { get; protected set; } + public virtual Gtk.Widget Widget { get; set; } + public virtual Gtk.MenuItem MenuItem { get; set; } + public virtual bool Checked { get; set; } + public virtual CheckState CheckState { get; set; } + internal Gtk.Image DefaultImage = new Gtk.Image("image-missing", Gtk.IconSize.Menu); + public virtual System.Drawing.Image Image { get; set; } public ToolStripItem() { dropDownItems = new ToolStripItemCollection(this); - base.Activated += ToolStripItem_Activated; - - } - - private void ToolStripItem_Activated(object sender, EventArgs e) - { - if (Checked == true) - { - AlwaysShowImage = AlwaysShowImage == false; - } } - public ToolStripItem(IntPtr raw) : base(raw) - { - dropDownItems = new ToolStripItemCollection(this); - } protected ToolStripItem(string text, Image image, EventHandler onClick) : this(text, image, onClick, "") { } + protected ToolStripItem(string text, Image image, EventHandler onClick, string name) : this() { this.Name = name; this.Text = text; if (image != null && image.PixbufData != null) - Image = new Gtk.Image(new Gdk.Pixbuf(image.PixbufData)); + this.Image = image; - Click += onClick; + if (onClick != null) + Click += onClick; } - + public virtual void CreateControl(object widget, string stripType, string text, System.Drawing.Image image, EventHandler onClick, string name, params object[] args) { } public virtual ToolStripItemCollection Items { get @@ -117,51 +45,101 @@ namespace System.Windows.Forms } } private ToolStripItemCollection dropDownItems; - public ToolStripItemCollection DropDownItems + + public virtual event EventHandler Disposed; + + public virtual ToolStripItemCollection DropDownItems { get { return dropDownItems; } } - public virtual string Text { get { return base.Label; } set { base.Label = value; } } - - // public virtual Image Image { get; set; } - public Color ImageTransparentColor { get; set; } + public virtual string Name { get; set; } + //public virtual string Text { get { return base.Label; } set { base.Label = value; } } + public virtual string Text { get; set; } + public virtual Color ImageTransparentColor { get; set; } public virtual ToolStripItemDisplayStyle DisplayStyle { get; set; } - public virtual Size Size { get; set; } + //public virtual Size Size { get; set; } public virtual bool AutoToolTip { get; set; } public virtual Image BackgroundImage { get; set; } public virtual ImageLayout BackgroundImageLayout { get; set; } + //public virtual bool Enabled { get; set; } + public virtual string ToolTipText { get; set; } + public virtual ContentAlignment ImageAlign { get; set; } + public virtual int ImageIndex { get; set; } + public virtual string ImageKey { get; set; } + public virtual ToolStripItemImageScaling ImageScaling { get; set; } + + public virtual TextImageRelation TextImageRelation { get; set; } + + public virtual ToolStripTextDirection TextDirection { get; set; } + + public virtual ContentAlignment TextAlign { get; set; } + + // public virtual bool Selected { get; } + + public virtual bool RightToLeftAutoMirrorImage { get; set; } + + public virtual bool Pressed { get; } + public virtual ToolStripItemPlacement Placement { get; } + public virtual ToolStripItemOverflow Overflow { get; set; } + public virtual ToolStripItem OwnerItem { get; } + + public virtual ToolStrip Owner { get; set; } + + public virtual int MergeIndex { get; set; } + public virtual MergeAction MergeAction { get; set; } + + + public virtual bool Enabled { get; set; } - + // public virtual bool Focused { get { return this.IsFocus; } } - public virtual string ToolTipText { get { return base.TooltipText; } set { base.TooltipText = value; } } + public virtual Font Font { get; set; } - public event EventHandler Click - { - add { base.Activated += (object sender, EventArgs args) => { value.Invoke(this, args); }; } - remove { base.Activated -= (object sender, EventArgs args) => { value.Invoke(this, args); }; } - } - public event EventHandler CheckedChanged - { - add { base.Activated += (object sender, EventArgs args) => { if (Checked) { value.Invoke(this, args); } }; } - remove { base.Activated -= (object sender, EventArgs args) => { if (Checked) { value.Invoke(this, args); } }; } - } - public event EventHandler CheckStateChanged + public virtual Color ForeColor { get; set; } + public virtual Color BackColor { get; set; } + public virtual bool HasChildren { get; } + + public virtual int Height { get; set; } + public virtual ImeMode ImeMode { get; set; } + + public virtual int Left { - add { base.Activated += (object sender, EventArgs args) => { if (Checked) { value.Invoke(this, args); } }; } - remove { base.Activated -= (object sender, EventArgs args) => { if (Checked) { value.Invoke(this, args); } }; } + get; + set; } - public event ToolStripItemClickedEventHandler DropDownItemClicked + + //public override Padding Margin { get; set; } + //public override Size MaximumSize { get; set; } + //public override Size MinimumSize { get; set; } + public virtual Padding Padding { get; set; } + public virtual ToolStripItem Parent { get; set; } + public virtual System.Drawing.Region Region { get; set; } + public virtual int Right { get; } + + public virtual RightToLeft RightToLeft { get; set; } + public virtual ISite Site { get; set; } + public virtual Size Size { get; set; } + + public virtual object Tag { get; set; } + public virtual int Top { - add { base.Activated += (object sender, EventArgs args) => { value.Invoke(this, new ToolStripItemClickedEventArgs(this)); }; } - remove { base.Activated -= (object sender, EventArgs args) => { value.Invoke(this, new ToolStripItemClickedEventArgs(this)); }; } + get; + set; } + + public virtual bool UseWaitCursor { get; set; } + public virtual int Width { get; set; } + public virtual event EventHandler Click; + public virtual event EventHandler CheckedChanged; + public virtual event EventHandler CheckStateChanged; + public virtual event ToolStripItemClickedEventHandler DropDownItemClicked; } } diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripItemCollection.cs b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripItemCollection.cs index ae422b6e7e583d5834686ede9b257b6128b53abf..ddd626f2cb6257672c9cb8dc12698342f29bc218 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripItemCollection.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripItemCollection.cs @@ -3,16 +3,20 @@ using System.Collections.Generic; using System.Text; using System.Drawing; using System.Collections; +using System.Xml.Linq; using GLib; namespace System.Windows.Forms { - public class ToolStripItemCollection : IList, ICollection, IEnumerable + public class ToolStripItemCollection : List, ICollection, IEnumerable { - private Gtk.MenuItem owner; + private ToolStripItem owner; private ToolStrip toolStrip; + private StatusStrip statusStrip; private Gtk.Menu menu; private bool isToolStrip; + private bool isStatusStrip; + private bool isMenuStrip; private bool isContextMenu; public ToolStripItemCollection(ToolStrip owner) @@ -20,18 +24,26 @@ namespace System.Windows.Forms this.toolStrip = owner; isToolStrip = true; } - public ToolStripItemCollection(Gtk.Menu owner) + public ToolStripItemCollection(ToolStrip toolStrip, string owner) { - this.menu = owner; + this.toolStrip = toolStrip; + isMenuStrip = owner == "MenuStrip"; + } + public ToolStripItemCollection(StatusStrip owner) + { + this.statusStrip = owner; + isStatusStrip = true; + } + public ToolStripItemCollection(ToolStripDropDown owner) + { + this.menu = owner.self; isContextMenu = true; - this.menu.ShowAll(); + // this.menu.ShowAll(); } - public ToolStripItemCollection(Gtk.MenuItem owner) + public ToolStripItemCollection(ToolStripItem owner) { this.owner = owner; - isToolStrip = false; } - internal ToolStripItemCollection(ToolStripItem owner, bool itemsCollection) : this(owner, itemsCollection, isReadOnly: false) { @@ -40,8 +52,8 @@ namespace System.Windows.Forms internal ToolStripItemCollection(ToolStripItem owner, bool itemsCollection, bool isReadOnly) { this.owner = owner; - isToolStrip = false; + } public ToolStripItemCollection(ToolStripItem owner, ToolStripItem[] value) { @@ -68,29 +80,52 @@ namespace System.Windows.Forms public ToolStripItem Add(string text, Image image, EventHandler onClick) { ToolStripItem toolStripItem = new ToolStripLabel(); - Add(toolStripItem); + AddMemu(toolStripItem); return toolStripItem; } - public int Add(ToolStripItem value) + public int AddMemu(ToolStripItem value) { + value.Parent = owner; if (isToolStrip == true) { - toolStrip.Control.Add(value); + toolStrip.self.Add(value.Widget); + } + else if (isStatusStrip == true) + { + statusStrip.self.Add(value.Widget); + } + else if(isMenuStrip == true) + { + value.CreateControl(value.Widget, "", "", null, null, ""); + toolStrip.self.Add(value.Widget); } else if (isContextMenu == true) { - menu.Add(value); + if (value.MenuItem == null) + { + Gtk.MenuItem widget = new Gtk.MenuItem(); + value.CreateControl(widget, "", "", null, null, ""); + } + value.Widget.Visible = true; + menu.Add(value.Widget); } else { - if (owner.Submenu == null) + if (value.MenuItem == null) + { + Gtk.CheckMenuItem widget = new Gtk.CheckMenuItem(); + value.CreateControl(widget, "", "", null, null, ""); + } + + if (owner.MenuItem.Submenu == null) { this.menu = new Gtk.Menu(); - owner.Submenu = this.menu; + owner.MenuItem.Submenu = this.menu; } - menu.Add(value); + menu.Add(value.Widget); } + base.Add(value); return Count; } @@ -98,110 +133,23 @@ namespace System.Windows.Forms { for (int i = 0; i < toolStripItems.Length; i++) { - Add(toolStripItems[i]); + AddMemu(toolStripItems[i]); } } public void AddRange(ToolStripItemCollection toolStripItems) { - int count = toolStripItems.Count; - for (int i = 0; i < count; i++) - { - Add(toolStripItems[i]); - } - - } - //------------------- - - public ToolStripItem this[int index] - { - get { ArrayList all = menu.AllChildren as ArrayList; return all[index] as ToolStripItem; } - set { menu.Insert(value, index); } - } - - public void RemoveAt(int index) - { - throw new NotImplementedException(); - } - - public void CopyTo(Array array, int index) - { - throw new NotImplementedException(); - } - - public int IndexOf(ToolStripItem item) - { - throw new NotImplementedException(); - } - - public void Insert(int index, ToolStripItem item) - { - throw new NotImplementedException(); - } - - void ICollection.Add(ToolStripItem item) - { - throw new NotImplementedException(); - } - - public bool Contains(ToolStripItem item) - { - throw new NotImplementedException(); - } - - public void CopyTo(ToolStripItem[] array, int arrayIndex) - { - throw new NotImplementedException(); - } - - public bool Remove(ToolStripItem item) - { - throw new NotImplementedException(); - } - - IEnumerator IEnumerable.GetEnumerator() - { - foreach (var item in menu.AllChildren) + int count = toolStripItems.Count; + for (int i = 0; i < count; i++) { - yield return item as ToolStripItem; + AddMemu(toolStripItems[i]); } } - - public void Clear() - { - throw new NotImplementedException(); - } - - public IEnumerator GetEnumerator() + //------------------- + public new ToolStripItem this[int index] { - throw new NotImplementedException(); + get { return base[index]; } + set { menu.Insert(value.Widget, index); base[index] = value; } } - - public int Count - { - get - { - - if (isToolStrip == true) - { - ArrayList all = toolStrip.Control.AllChildren as ArrayList; - return all.Count; - } - else - { - ArrayList all = menu.AllChildren as ArrayList; - return all.Count; - } - } - } - - public bool IsFixedSize => throw new NotImplementedException(); - - public bool IsReadOnly => throw new NotImplementedException(); - - public bool IsSynchronized => throw new NotImplementedException(); - - public object SyncRoot => throw new NotImplementedException(); - } } diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripItemImageScaling.cs b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripItemImageScaling.cs new file mode 100644 index 0000000000000000000000000000000000000000..cb50bd5ce57d25d8c8c63f2269be791c2248be61 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripItemImageScaling.cs @@ -0,0 +1,8 @@ +namespace System.Windows.Forms +{ + public enum ToolStripItemImageScaling + { + None, + SizeToFit + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripItemOverflow.cs b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripItemOverflow.cs new file mode 100644 index 0000000000000000000000000000000000000000..c908d5a5962a75c1fec549eef0f6ddf8d1b1a52d --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripItemOverflow.cs @@ -0,0 +1,9 @@ +namespace System.Windows.Forms +{ + public enum ToolStripItemOverflow + { + Never, + Always, + AsNeeded + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripItemPlacement.cs b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripItemPlacement.cs new file mode 100644 index 0000000000000000000000000000000000000000..dae3dc0c4a6e61c79f5997b237b5906f556e3506 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripItemPlacement.cs @@ -0,0 +1,9 @@ +namespace System.Windows.Forms +{ + public enum ToolStripItemPlacement + { + Main, + Overflow, + None + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripLabel.cs b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripLabel.cs index c171dc527813be38bff9ae08fc56fe6a094d1fa3..17691e36065f4682a884933789371e34fbbbacef 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripLabel.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripLabel.cs @@ -4,16 +4,37 @@ using System.ComponentModel; using System.Drawing; - - +using System.Xml.Linq; + namespace System.Windows.Forms { /// /// A non selectable ToolStrip item /// - public class ToolStripLabel : ToolStripItem + public class ToolStripLabel : WidgetToolStrip { - + public ToolStripLabel() : this("", null, null, "") + { + + } + + public ToolStripLabel(string text) : this(text, null, null, "") + { + + } + + public ToolStripLabel(string text, Image image) : this(text, image, null, "") + { + } + + public ToolStripLabel(string text, Image image, EventHandler onClick) : this(text, image, onClick, "") + { + + } + + public ToolStripLabel(string text, Image image, EventHandler onClick, string name) : base(null, text, image, onClick, name) + { + } } } diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripMenuItem.cs b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripMenuItem.cs index 90c790ae01b35f6cde7f43287a4c62fff93011d0..c3e620fa061c6c4a18bbe0c20d79b101de6831d9 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripMenuItem.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripMenuItem.cs @@ -1,33 +1,51 @@ -using System; +using Gtk; +using System; using System.Collections.Generic; using System.ComponentModel; namespace System.Windows.Forms { - public class ToolStripMenuItem : ToolStripItem + public class ToolStripMenuItem : WidgetToolStrip { - public ToolStripMenuItem():base() + public ToolStripMenuItem():base("ToolStripMenuItem") { - base.Shown += ToolStripMenuItem_Shown; + DisplayStyle = ToolStripItemDisplayStyle.ImageAndText; } - private void ToolStripMenuItem_Shown(object sender, EventArgs e) - { - if (Checked == true) + public override CheckState CheckState { + get => base.CheckState; + set { - AlwaysShowImage =CheckState == CheckState.Checked || CheckState == CheckState.Indeterminate; - if (CheckState == CheckState.Indeterminate) + base.CheckState = value; + if (this.Widget is Gtk.CheckMenuItem checkMenuItem) { - Image = Gtk.Image.NewFromIconName("pan-end-symbolic", Gtk.IconSize.Menu); + if (value == CheckState.Indeterminate) + { + checkMenuItem.DrawAsRadio = true; + } + else if (value == CheckState.Checked) + { + checkMenuItem.DrawAsRadio = false; + } } - else + } + } + public override bool Checked { + get + { + if (this.Widget is Gtk.CheckMenuItem checkMenuItem) { - Image = Gtk.Image.NewFromIconName("object-select-symbolic", Gtk.IconSize.Menu); + return checkMenuItem.Active; } + return base.Checked; } - } - - + set { + base.Checked = value; + if (this.Widget is Gtk.CheckMenuItem checkMenuItem) + { + checkMenuItem.Active = value; + } + } } } } diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripProgressBar.cs b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripProgressBar.cs new file mode 100644 index 0000000000000000000000000000000000000000..ad17cdf80a0c054d0fa02411547f473fb845777e --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripProgressBar.cs @@ -0,0 +1,74 @@ +using Gtk; +using System.ComponentModel; +using System.Diagnostics.CodeAnalysis; +using System.Drawing; + +namespace System.Windows.Forms +{ + [DefaultProperty("Value")] + public class ToolStripProgressBar : WidgetToolStrip + { + public ToolStripProgressBar() : base("ToolStripProgressBar", null) + { + base.Control.Realized += Control_Realized; + } + + private void Control_Realized(object sender, EventArgs e) + { + progressBar.MaxValue = Maximum; + progressBar.MinValue = Minimum; + } + + public ToolStripProgressBar(string name) : this() + { + + } + public ProgressBar ProgressBar + { + get + { + return new ProgressBar() { Value = this.Value, Maximum = this.Maximum, Minimum = this.Minimum, Step = this.Step }; + } + } + + public int MarqueeAnimationSpeed { get; set; } = 100; + public int Maximum { get; set; } = 100; + public int Minimum { get; set; } = 0; + + private int _step; + [DefaultValue(10)] + public int Step { get; set; } + public ProgressBarStyle Style { get; set; } + public int Value + { + get { return (int)Math.Round(progressBar.Value, 0); } + set + { + progressBar.Value = value; + } + } + + public override Size Size + { + get + { + return base.Size; + } + set + { + base.Size = value; + progressBar.SetSizeRequest(value.Width, value.Height); + } + } + public void Increment(int value) + { + + } + + public void PerformStep() + { + + } + + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripSeparator.cs b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripSeparator.cs index f30e0d2ddd410a9b5c65a395ef2aee9847cdbaf6..6a6c6b2c07ab94d8d4aad85002085b16c48737e3 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripSeparator.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripSeparator.cs @@ -1,92 +1,22 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -using GLib; -//using Gtk; -using System.Collections.Generic; +using System.Collections.Generic; using System.ComponentModel; using System.Drawing; -using System.Runtime.InteropServices; namespace System.Windows.Forms { - public class ToolStripSeparator : ToolStripItem + public class ToolStripSeparator : WidgetToolStrip { - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - private delegate IntPtr d_gtk_separator_menu_item_new(); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - private delegate IntPtr d_gtk_separator_menu_item_get_type(); - - private static d_gtk_separator_menu_item_new gtk_separator_menu_item_new = FuncLoader.LoadFunction(FuncLoader.GetProcAddress(GLibrary.Load(Library.Gtk), "gtk_separator_menu_item_new")); - - private static AbiStruct _class_abi = null; - - private static d_gtk_separator_menu_item_get_type gtk_separator_menu_item_get_type = FuncLoader.LoadFunction(FuncLoader.GetProcAddress(GLibrary.Load(Library.Gtk), "gtk_separator_menu_item_get_type")); - - private static AbiStruct _abi_info = null; - - public new static AbiStruct class_abi - { - get - { - if (_class_abi == null) - { - _class_abi = new AbiStruct(new List - { - new AbiField("_gtk_reserved1", MenuItem.class_abi.Fields, (uint)Marshal.SizeOf(typeof(IntPtr)), null, "_gtk_reserved2", (uint)Marshal.SizeOf(typeof(IntPtr)), 0u), - new AbiField("_gtk_reserved2", -1L, (uint)Marshal.SizeOf(typeof(IntPtr)), "_gtk_reserved1", "_gtk_reserved3", (uint)Marshal.SizeOf(typeof(IntPtr)), 0u), - new AbiField("_gtk_reserved3", -1L, (uint)Marshal.SizeOf(typeof(IntPtr)), "_gtk_reserved2", "_gtk_reserved4", (uint)Marshal.SizeOf(typeof(IntPtr)), 0u), - new AbiField("_gtk_reserved4", -1L, (uint)Marshal.SizeOf(typeof(IntPtr)), "_gtk_reserved3", null, (uint)Marshal.SizeOf(typeof(IntPtr)), 0u) - }); - } - - return _class_abi; - } - } - - public new static GType GType + public ToolStripSeparator() : base() { - get - { - IntPtr val = gtk_separator_menu_item_get_type(); - return new GType(val); - } + this.Control.Hexpand = false; + this.Control.Vexpand = false; + this.Control.Halign=Gtk.Align.Start; + this.Control.Valign=Gtk.Align.Center; + this.Control.HeightRequest = 25; + this.Control.WidthRequest = 2; } - - public new static AbiStruct abi_info - { - get - { - if (_abi_info == null) - { - _abi_info = new AbiStruct(MenuItem.abi_info.Fields); - } - - return _abi_info; - } - } - - public ToolStripSeparator(IntPtr raw) - : base(raw) - { - } - - public ToolStripSeparator() - : base(IntPtr.Zero) - { - if (GetType() != typeof(ToolStripSeparator)) - { - CreateNativeObject(new string[0], new Value[0]); - } - else - { - Raw = gtk_separator_menu_item_new(); - } - } - - public override string Text { get; set; } + public override Size Size { get => base.Size; set => base.Size = new Size(2, value.Height); } + public override int Width { get; set; } } } diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripStatusLabel.cs b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripStatusLabel.cs new file mode 100644 index 0000000000000000000000000000000000000000..e74be5204c955d10bdfb7135876def7b2f9d3663 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripStatusLabel.cs @@ -0,0 +1,50 @@ + +using System.ComponentModel; +using System.Drawing; + +namespace System.Windows.Forms +{ + + public class ToolStripStatusLabel : ToolStripLabel + { + + + public ToolStripStatusLabel() + { + + } + + public ToolStripStatusLabel(string text) + { + + } + + public ToolStripStatusLabel(Image image) + { + + } + + public ToolStripStatusLabel(string text, Image image) + { + + } + + public ToolStripStatusLabel(string text, Image image, EventHandler onClick) + { + + } + + public ToolStripStatusLabel(string text, Image image, EventHandler onClick, string name):base(text,image,onClick,name) + { + } + + [DefaultValue(Border3DStyle.Flat)] + public Border3DStyle BorderStyle { get; set; } + + [DefaultValue(ToolStripStatusLabelBorderSides.None)] + public ToolStripStatusLabelBorderSides BorderSides { get; set; } + + [DefaultValue(false)] + public bool Spring { get; set; } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripStatusLabelBorderSides.cs b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripStatusLabelBorderSides.cs new file mode 100644 index 0000000000000000000000000000000000000000..77002ca940de2be17c92f192f2581b5108efa316 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripStatusLabelBorderSides.cs @@ -0,0 +1,13 @@ + +namespace System.Windows.Forms +{ + public enum ToolStripStatusLabelBorderSides + { + All = 0xF, + Bottom = 0x8, + Left = 0x1, + Right = 0x4, + Top = 0x2, + None = 0x0 + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripTextBox.cs b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripTextBox.cs index f8fdb206075da9207791403e7da4f50afc387d11..c15c902d078ec65db1afc805e2afe5e1fd6ea745 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripTextBox.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripTextBox.cs @@ -1,19 +1,25 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - +/* + * 基于GTK组件开发,兼容原生C#控件winform界面的跨平台界面组件。 + * 使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows、linux、macos运行 + * 技术支持438865652@qq.com,https://gitee.com/easywebfactory, https://www.cnblogs.com/easywebfactory + * author:chenhongjin + * date: 2024/1/3 + */ using System; +using System.Drawing; namespace System.Windows.Forms { - public class ToolStripTextBox : ToolStripItem + public class ToolStripTextBox : WidgetToolStrip { - public ToolStripTextBox() + public ToolStripTextBox() : base("ToolStripTextBox", null) { - base.Text = "[TextBox]"; - base.ToolTipText = "No supper TextBox"; + } + public override Size Size { get => base.Size; set { this.entry.WidthRequest = value.Width;this.entry.HeightRequest = value.Height; base.Size = value; } } + public int MaxLength { get => this.entry.MaxLength; set => this.entry.MaxLength = value; } + public override string Text { get => this.entry.Text; set => this.entry.Text = value; } } } diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripTextDirection.cs b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripTextDirection.cs new file mode 100644 index 0000000000000000000000000000000000000000..a6545bd768251e4345be2544c557e8749ca97ae9 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStripTextDirection.cs @@ -0,0 +1,10 @@ +namespace System.Windows.Forms +{ + public enum ToolStripTextDirection + { + Inherit, + Horizontal, + Vertical90, + Vertical270 + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/WidgetToolStrip.cs b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/WidgetToolStrip.cs new file mode 100644 index 0000000000000000000000000000000000000000..861696a56e25f46488226688217ee05baa4d7a3d --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/WidgetToolStrip.cs @@ -0,0 +1,420 @@ +/* + * 基于GTK组件开发,兼容原生C#控件winform界面的跨平台界面组件。 + * 使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows、linux、macos运行 + * 技术支持438865652@qq.com,https://gitee.com/easywebfactory, https://www.cnblogs.com/easywebfactory + * author:chenhongjin + * date: 2024/1/3 + */ + +using Gtk; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Text; + + +namespace System.Windows.Forms +{ + public class WidgetToolStrip : ToolStripItem, IDropTarget, ISupportOleDropSource, IArrangedElement, IComponent, IDisposable, IKeyboardToolTip + { + public override string unique_key { get; protected set; } + private Gtk.Widget _widget; + public override Gtk.Widget Widget + { + get { return _widget; } + set { _widget = value; base.Widget = _widget; } + } + + private T _control; + + public T Control + { + get { return _control; } + } + private Gtk.MenuItem _menuItem; + public override Gtk.MenuItem MenuItem { get => _menuItem; set{ _menuItem = value; base.MenuItem = value; } } + + internal Gtk.Box itemBox = new Gtk.Box(Gtk.Orientation.Horizontal, 0); + internal Gtk.Image checkedico = Gtk.Image.NewFromIconName("object-select-symbolic", Gtk.IconSize.Menu); + internal Gtk.Viewport icoViewport = new Gtk.Viewport() { BorderWidth = 0 }; + internal Gtk.Label label = new Gtk.Label(); + internal Gtk.Button button = new Gtk.Button(); + internal Gtk.Entry entry = new Gtk.Entry(); + internal Gtk.ComboBoxText comboBox = new Gtk.ComboBoxText(); + // internal Gtk.ProgressBar progressBar = new Gtk.ProgressBar(); + internal Gtk.LevelBar progressBar = new Gtk.LevelBar(); + public string StripType { get; set; } + public WidgetToolStrip() : this(null, "", null, null, "",null) + { + } + public WidgetToolStrip(string stripType) : base("", null, null, "") + { + object widget = Activator.CreateInstance(typeof(T)); + Widget = widget as Gtk.Widget; + this.StripType = stripType; + } + public WidgetToolStrip(string stripType, params object[] args) : this(stripType, "", null, null, "", args) + { + + } + public WidgetToolStrip(string text, System.Drawing.Image image, EventHandler onClick) : this(null, text, image, onClick, "") + { + } + public WidgetToolStrip(string text, System.Drawing.Image image, EventHandler onClick, string name) : this(null, text, image, onClick, "") + { + } + + protected WidgetToolStrip(string stripType, string text, System.Drawing.Image image, EventHandler onClick, string name,params object[] args) : base(text, image, onClick, name) + { + object widget = Activator.CreateInstance(typeof(T), args); + CreateControl(widget, stripType, text, image, onClick, name); + } + + public override void CreateControl(object widget, string stripType, string text, System.Drawing.Image image, EventHandler onClick, string name, params object[] args) + { + this.StripType = stripType; + _control = (T)widget; + _widget = widget as Gtk.Widget; + if (widget is Gtk.SeparatorMenuItem) + { + + } + else + { + _menuItem = widget as Gtk.MenuItem; + + _menuItem.Activated += _menuItem_Activated; + _menuItem.Realized += ToolStripItem_Realized; + _menuItem.Valign = Gtk.Align.Center; + _menuItem.Halign = Gtk.Align.Fill; + _menuItem.Vexpand = false; + _menuItem.Hexpand = false; + + itemBox.Valign = Gtk.Align.Start; + itemBox.Halign = Gtk.Align.Start; + + icoViewport.Vexpand = false; + icoViewport.Hexpand = false; + icoViewport.Valign = Gtk.Align.Center; + icoViewport.Halign = Gtk.Align.Center; + + if (stripType == "ToolStripDropDownItem") + { + button.Image = Gtk.Image.NewFromIconName("pan-down", IconSize.Button); + button.ImagePosition = PositionType.Right; + button.Relief = ReliefStyle.None; + button.AlwaysShowImage = true; + button.Halign = Gtk.Align.Start; + button.Valign = Gtk.Align.Center; + button.Hexpand = false; + button.Vexpand = false; + itemBox.PackStart(icoViewport, false, false, 0); + itemBox.PackStart(button, false, false, 0); + _menuItem.Add(itemBox); + } + else if(stripType == "ToolStripTextBox") + { + entry.HasFrame = false; + entry.MaxWidthChars = 1; + entry.WidthChars = 0; + entry.Valign = Gtk.Align.Fill; + entry.Halign = Gtk.Align.Fill; + entry.IsFocus = true; + _menuItem.Add(entry); + } + else if (stripType == "ToolStripComboBox") + { + comboBox.StyleContext.AddClass("ComboBox"); + _menuItem.Add(comboBox); + } + else if (stripType == "ToolStripProgressBar") + { + progressBar.Halign = Gtk.Align.Fill; + progressBar.Valign = Gtk.Align.Fill; + progressBar.Visible = true; + _menuItem.Add(progressBar); + } + else + { + itemBox.PackStart(icoViewport, false, false, 0); + itemBox.PackStart(label, false, false, 0); + _menuItem.Add(itemBox); + } + + } + } + + private void _menuItem_Activated(object sender, EventArgs e) + { + if(((Gtk.MenuItem)sender).Child is Gtk.ComboBoxText combo) + { + combo.Popup(); + } + else if (((Gtk.MenuItem)sender).Child is Gtk.Entry ey) + { + ey.IsFocus = true; + } + } + public override bool Checked { get; set; } + public override CheckState CheckState { get; set; } + public override System.Drawing.Image Image { + get => base.Image; + set { + base.Image = value; + } + } + + + private void ToolStripItem_Realized(object sender, EventArgs e) + { + UpdateStyle(); + if (this.Widget is Gtk.CheckMenuItem checkMenuItem) + { + if (this.CheckState == CheckState.Unchecked) + _widget.StyleContext.AddClass("ToolStripMenuItemNoChecked"); + if (this.Checked) + { + checkMenuItem.Active = true; + } + } + try + { + if (DisplayStyle == ToolStripItemDisplayStyle.Text) + { + } + else if (DisplayStyle == ToolStripItemDisplayStyle.Image) + { + label.Visible = false; + label.NoShowAll = true; + button.Label = string.Empty; + if (Image != null && Image.PixbufData != null) + { + Gtk.Image ico1 = new Gtk.Image(new Gdk.Pixbuf(Image.PixbufData).ScaleSimple(20, 20, Gdk.InterpType.Tiles)); + icoViewport.Child = ico1; + } + } + else + { + if (Image != null && Image.PixbufData != null) + { + Gtk.Image ico1 = new Gtk.Image(new Gdk.Pixbuf(Image.PixbufData).ScaleSimple(20, 20, Gdk.InterpType.Tiles)); + icoViewport.Child = ico1; + } + } + } + catch { } + _widget.ShowAll(); + } + internal void UpdateStyle() + { + SetStyle(_widget); + } + protected virtual void SetStyle(Gtk.Widget widget) + { + string stylename = $"s{unique_key}"; + StringBuilder style = new StringBuilder(); + if (this.BackColor.Name != "0") + { + string color = $"rgba({this.BackColor.R},{this.BackColor.G},{this.BackColor.B},{this.BackColor.A})"; + style.AppendFormat("background-color:{0};background:{0};", color); + } + if (this.ForeColor.Name != "0") + { + string color = $"rgba({this.ForeColor.R},{this.ForeColor.G},{this.ForeColor.B},{this.ForeColor.A})"; + style.AppendFormat("color:{0};", color); + } + + if (this.Font != null) + { + Pango.AttrList attributes = new Pango.AttrList(); + float textSize = this.Font.Size; + if (this.Font.Unit == GraphicsUnit.Point) + textSize = this.Font.Size / 72 * 96; + else if (this.Font.Unit == GraphicsUnit.Inch) + textSize = this.Font.Size * 96; + + style.AppendFormat("font-size:{0}px;", (int)textSize); + if (string.IsNullOrWhiteSpace(Font.FontFamily.Name) == false) + { + style.AppendFormat("font-family:\"{0}\";", Font.FontFamily.Name); + attributes.Insert(new Pango.AttrFontDesc(new Pango.FontDescription() { Family = Font.FontFamily.Name, Size = (int)(textSize * Pango.Scale.PangoScale * 0.7) })); + } + + string[] fontstyle = Font.Style.ToString().ToLower().Split(new char[] { ',', ' ' }); + foreach (string sty in fontstyle) + { + if (sty == "bold") + { + style.Append("font-weight:bold;"); + attributes.Insert(new Pango.AttrWeight(Pango.Weight.Bold)); + } + else if (sty == "italic") + { + style.Append("font-style:italic;"); + attributes.Insert(new Pango.AttrStyle(Pango.Style.Italic)); + } + else if (sty == "underline") + { + style.Append("text-decoration:underline;"); + attributes.Insert(new Pango.AttrUnderline(Pango.Underline.Low)); + } + else if (sty == "strikeout") + { + style.Append("text-decoration:line-through;"); + attributes.Insert(new Pango.AttrStrikethrough(true)); + } + } + if (widget is Gtk.Label gtklabel) + { + gtklabel.Attributes = attributes; + } + } + + StringBuilder css = new StringBuilder(); + css.AppendLine($".{stylename}{{{style.ToString()}}}"); + if (widget is Gtk.TextView) + { + css.AppendLine($".{stylename} text{{{style.ToString()}}}"); + css.AppendLine($".{stylename} .view{{{style.ToString()}}}"); + } + CssProvider provider = new CssProvider(); + if (provider.LoadFromData(css.ToString())) + { + widget.StyleContext.AddProvider(provider, 900); + widget.StyleContext.RemoveClass(stylename); + widget.StyleContext.AddClass(stylename); + } + } + // public override string Text { get { return this.button.Label; } set { this.button.Label = value; } } + public override string Text { + get { + if (this.StripType == "ToolStripTextBox") + { + return this.entry.Text; + } + else if (this.StripType == "ToolStripDropDownItem") + { + return this.button.Label; + } + else if (this.StripType == "ToolStripComboBox") + { + return this.comboBox.ActiveText; + } + return this.label.Text; + } + set { this.label.Text = value; this.button.Label = value; } } + public override Color ImageTransparentColor { get; set; } + public override ToolStripItemDisplayStyle DisplayStyle { get; set; } + //public override Size Size { get; set; } + public override bool AutoToolTip { get; set; } + + public override System.Drawing.Image BackgroundImage { get; set; } + + public override ImageLayout BackgroundImageLayout { get; set; } + + //public override bool Enabled { get; set; } + public override string ToolTipText { get { return _widget.TooltipText; } set { _widget.TooltipText = value; } } + public override ContentAlignment ImageAlign { get; set; } + public override int ImageIndex { get; set; } + public override string ImageKey { get; set; } + public override ToolStripItemImageScaling ImageScaling { get; set; } + + public override TextImageRelation TextImageRelation { get; set; } + + public override ToolStripTextDirection TextDirection { get; set; } + + public override ContentAlignment TextAlign { get; set; } + + //public override bool Selected { get; } + + public override bool RightToLeftAutoMirrorImage { get; set; } + + public override bool Pressed { get; } + public override ToolStripItemPlacement Placement { get; } + public override ToolStripItemOverflow Overflow { get; set; } + public override ToolStripItem OwnerItem { get; } + + public override ToolStrip Owner { get; set; } + + public override int MergeIndex { get; set; } + public override MergeAction MergeAction { get; set; } + + + + public override bool Enabled { get { return _widget.Sensitive; } set { _widget.Sensitive = value; } } + + // public override bool Focused { get { return this.IsFocus; } } + + private Font _Font; + public override Font Font { get => _Font; set { _Font = value; UpdateStyle(); } } + private Color _ForeColor; + public override Color ForeColor { get => _ForeColor; set { _ForeColor = value; UpdateStyle(); } } + private Color _BackColor; + public override Color BackColor { get => _BackColor; set { _BackColor = value; UpdateStyle(); } } + public override bool HasChildren { get; } + + public override int Height { get { return _widget.HeightRequest; } set { _widget.HeightRequest = value; } } + public override ImeMode ImeMode { get; set; } + + public override int Left + { + get; + set; + } + + //public override Padding Margin { get; set; } + //public override Size MaximumSize { get; set; } + //public override Size MinimumSize { get; set; } + public override Padding Padding { get; set; } + public override ToolStripItem Parent { get; set; } + public override System.Drawing.Region Region { get; set; } + public override int Right { get; } + + public override RightToLeft RightToLeft { get; set; } + public override ISite Site { get; set; } + public override Size Size + { + get + { + return new Size(_widget.WidthRequest, _widget.HeightRequest); + } + set + { + _widget.SetSizeRequest(value.Width, value.Height); + } + } + + public override object Tag { get; set; } + public override int Top + { + get; + set; + } + + public override bool UseWaitCursor { get; set; } + public override int Width { get { return _widget.WidthRequest; } set { _widget.WidthRequest = value; } } + public virtual bool Visible { get { return _widget.Visible; } set { _widget.Visible = value; _widget.NoShowAll = value == false; } } + + public override event EventHandler Click + { + add { _menuItem.Activated += (object sender, EventArgs args) => { value.Invoke(this, args); }; } + remove { _menuItem.Activated -= (object sender, EventArgs args) => { value.Invoke(this, args); }; } + } + public override event EventHandler CheckedChanged + { + add { _menuItem.Activated += (object sender, EventArgs args) => { if (Checked) { value.Invoke(this, args); } }; } + remove { _menuItem.Activated -= (object sender, EventArgs args) => { if (Checked) { value.Invoke(this, args); } }; } + } + public override event EventHandler CheckStateChanged + { + add { _menuItem.Activated += (object sender, EventArgs args) => { if (Checked) { value.Invoke(this, args); } }; } + remove { _menuItem.Activated -= (object sender, EventArgs args) => { if (Checked) { value.Invoke(this, args); } }; } + } + public override event ToolStripItemClickedEventHandler DropDownItemClicked + { + add { _menuItem.Activated += (object sender, EventArgs args) => { value.Invoke(this, new ToolStripItemClickedEventArgs(this)); }; } + remove { _menuItem.Activated -= (object sender, EventArgs args) => { value.Invoke(this, new ToolStripItemClickedEventArgs(this)); }; } + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/MonthCalendar.cs b/Source/GTKSystem.Windows.Forms/GTKControls/MonthCalendar.cs index a4164671ced5ce112dff7d711f8c1ed561ab3668..d93edd52700e52f78ad0d60ffd954c3068b01c2c 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/MonthCalendar.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/MonthCalendar.cs @@ -1,28 +1,33 @@ -//基于GTK3.24.24.34版本组件开发,兼容原生C#控件winform界面的跨平台界面组件。 -//使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows和linux运行 -//技术支持438865652@qq.com,https://www.cnblogs.com/easywebfactory +/* + * 基于GTK组件开发,兼容原生C#控件winform界面的跨平台界面组件。 + * 使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows、linux、macos运行 + * 技术支持438865652@qq.com,https://gitee.com/easywebfactory, https://www.cnblogs.com/easywebfactory + * author:chenhongjin + * date: 2024/1/3 + */ +using GTKSystem.Windows.Forms.GTKControls.ControlBase; using System.ComponentModel; using System.Drawing; namespace System.Windows.Forms { [DesignerCategory("Component")] - public partial class MonthCalendar : WidgetControl + public partial class MonthCalendar : Control { + public readonly MonthCalendarBase self = new MonthCalendarBase(); + public override object GtkControl => self; public MonthCalendar():base() { - Widget.StyleContext.AddClass("MonthCalendar"); - Widget.StyleContext.AddClass("BorderRadiusStyle"); - base.Control.DaySelected += MonthCalendar_DaySelected; + self.DaySelected += MonthCalendar_DaySelected; } private void MonthCalendar_DaySelected(object sender, EventArgs e) { if (DateChanged != null) - DateChanged(sender, new DateRangeEventArgs(SelectionRange.Start, SelectionRange.End)); + DateChanged(this, new DateRangeEventArgs(SelectionRange.Start, SelectionRange.End)); if (DateSelected != null) - DateSelected(sender, new DateRangeEventArgs(SelectionRange.Start, SelectionRange.End)); + DateSelected(this, new DateRangeEventArgs(SelectionRange.Start, SelectionRange.End)); } @@ -44,8 +49,8 @@ namespace System.Windows.Forms public SelectionRange SelectionRange { get; set; } public DateTime TodayDate { - get { return base.Control.Date; } - set { base.Control.Date = value; } + get { return self.Date; } + set { self.Date = value; } } public bool ShowWeekNumbers { get; set; } public event DateRangeEventHandler DateChanged; diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/NumericUpDown.cs b/Source/GTKSystem.Windows.Forms/GTKControls/NumericUpDown.cs index 12044de09c6dab271bcdaf458e266594ff594370..c96b732265d713bb9b10b470c8e36fe8e81313d0 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/NumericUpDown.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/NumericUpDown.cs @@ -1,37 +1,39 @@ -//基于GTK3.24.24.34版本组件开发,兼容原生C#控件winform界面的跨平台界面组件。 -//使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows和linux运行 -//技术支持438865652@qq.com,https://www.cnblogs.com/easywebfactory +/* + * 基于GTK组件开发,兼容原生C#控件winform界面的跨平台界面组件。 + * 使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows、linux、macos运行 + * 技术支持438865652@qq.com,https://gitee.com/easywebfactory, https://www.cnblogs.com/easywebfactory + * author:chenhongjin + * date: 2024/1/3 + */ +using GTKSystem.Windows.Forms.GTKControls.ControlBase; using System.ComponentModel; namespace System.Windows.Forms { [DesignerCategory("Component")] - public partial class NumericUpDown : WidgetControl + public partial class NumericUpDown : Control { - - public NumericUpDown() : base(0, 100, 1) + public readonly NumericUpDownBase self = new NumericUpDownBase(); + public override object GtkControl => self; + public NumericUpDown() : base() { - Widget.StyleContext.AddClass("NumericUpDown"); - Widget.StyleContext.AddClass("BorderRadiusStyle"); - base.Control.Value = 0; - base.Control.Orientation = Gtk.Orientation.Horizontal; } public event EventHandler ValueChanged { - add { base.Control.ValueChanged += (object sender, EventArgs e) => { value.Invoke(sender, e); }; } - remove { base.Control.ValueChanged -= (object sender, EventArgs e) => { value.Invoke(sender, e); }; } + add { self.ValueChanged += (object sender, EventArgs e) => { value.Invoke(this, e); }; } + remove { self.ValueChanged -= (object sender, EventArgs e) => { value.Invoke(this, e); }; } } - public int DecimalPlaces { get => Convert.ToInt32(base.Control.Digits); set => base.Control.Digits = Convert.ToUInt32(value); } + public int DecimalPlaces { get => Convert.ToInt32(self.Digits); set => self.Digits = Convert.ToUInt32(value); } public decimal Increment { - get => Convert.ToDecimal(base.Control.Adjustment.StepIncrement); - set => base.Control.Adjustment.StepIncrement = Convert.ToDouble(value); + get => Convert.ToDecimal(self.Adjustment.StepIncrement); + set => self.Adjustment.StepIncrement = Convert.ToDouble(value); } - public decimal Maximum { get => Convert.ToDecimal(base.Control.Adjustment.Upper); set => base.Control.Adjustment.Upper = Convert.ToDouble(value); } + public decimal Maximum { get => Convert.ToDecimal(self.Adjustment.Upper); set => self.Adjustment.Upper = Convert.ToDouble(value); } - public decimal Minimum { get => Convert.ToDecimal(base.Control.Adjustment.Lower); set => base.Control.Adjustment.Lower = Convert.ToDouble(value); } - public decimal Value { get { return Convert.ToDecimal(base.Control.Value); } set { base.Control.Value = Convert.ToDouble(value); } } + public decimal Minimum { get => Convert.ToDecimal(self.Adjustment.Lower); set => self.Adjustment.Lower = Convert.ToDouble(value); } + public decimal Value { get { return Convert.ToDecimal(self.Value); } set { self.Value = Convert.ToDouble(value); } } } } diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Panel.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Panel.cs index fcba3f444079caa579eade1d690ee19415142a51..61cbb27f89d057d5969d43066aa4f569f9f6fc8e 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/Panel.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Panel.cs @@ -1,37 +1,60 @@ -//基于GTK3.24.24.34版本组件开发,兼容原生C#控件winform界面的跨平台界面组件。 -//使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows和linux运行 -//技术支持438865652@qq.com,https://www.cnblogs.com/easywebfactory +/* + * 基于GTK组件开发,兼容原生C#控件winform界面的跨平台界面组件。 + * 使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows、linux、macos运行 + * 技术支持438865652@qq.com,https://gitee.com/easywebfactory, https://www.cnblogs.com/easywebfactory + * author:chenhongjin + * date: 2024/1/3 + */ +using GLib; +using Gtk; +using GTKSystem.Windows.Forms.GTKControls.ControlBase; using System; +using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Text; +using System.Web; +using System.Xml.Linq; namespace System.Windows.Forms { [DesignerCategory("Component")] - public partial class Panel : WidgetControl + public partial class Panel : ContainerControl { - private Gtk.Layout contaner; + public readonly PanelBase self = new PanelBase(); + public override object GtkControl => self; + + private Gtk.Fixed contaner = new Gtk.Fixed(); + private Gtk.ScrolledWindow scrolledwindow = new Gtk.ScrolledWindow(); private ControlCollection _controls; public Panel() : base() { - Widget.StyleContext.AddClass("Panel"); - base.Control.Margin = 0; - base.Control.MarginStart = 0; - base.Control.MarginTop = 0; - base.Control.ShadowType = Gtk.ShadowType.In; - base.Control.BorderWidth = 1; - contaner = new Gtk.Layout(new Gtk.Adjustment(IntPtr.Zero), new Gtk.Adjustment(IntPtr.Zero)); - contaner.Margin = 0; + _controls = new ControlCollection(this, contaner); contaner.MarginStart = 0; contaner.MarginTop = 0; - _controls = new ControlCollection(contaner); + contaner.Halign = Align.Fill; + contaner.Valign = Align.Fill; - base.Control.Add(contaner); + scrolledwindow.Halign = Align.Fill; + scrolledwindow.Valign = Align.Fill; + scrolledwindow.VscrollbarPolicy = PolicyType.Never; + scrolledwindow.HscrollbarPolicy = PolicyType.Never; + scrolledwindow.Child = contaner; + self.Child = scrolledwindow; } - - public BorderStyle BorderStyle { get { return base.Control.ShadowType == Gtk.ShadowType.None ? BorderStyle.None : BorderStyle.FixedSingle; } set { base.Control.BorderWidth = 1; base.Control.ShadowType = Gtk.ShadowType.In; } } + public override BorderStyle BorderStyle { get { return self.ShadowType == Gtk.ShadowType.None ? BorderStyle.None : BorderStyle.FixedSingle; } set { self.BorderWidth = 1; self.ShadowType = Gtk.ShadowType.In; } } public override ControlCollection Controls => _controls; + public override bool AutoScroll { + get => base.AutoScroll; + set { + base.AutoScroll = value; + if (value == true) + { + scrolledwindow.VscrollbarPolicy = PolicyType.Automatic; + scrolledwindow.HscrollbarPolicy = PolicyType.Automatic; + } + } + } } } diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/PictureBox.cs b/Source/GTKSystem.Windows.Forms/GTKControls/PictureBox.cs index dc520a952e369c547fa2e8dac05dd901940d58ae..e3c9f4f71919be65e73fb12f282a1f6b7fba051c 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/PictureBox.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/PictureBox.cs @@ -1,50 +1,66 @@ -//基于GTK3.24.24.34版本组件开发,兼容原生C#控件winform界面的跨平台界面组件。 -//使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows和linux运行 -//技术支持438865652@qq.com,https://www.cnblogs.com/easywebfactory +/* + * 基于GTK组件开发,兼容原生C#控件winform界面的跨平台界面组件。 + * 使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows、linux、macos运行 + * 技术支持438865652@qq.com,https://gitee.com/easywebfactory, https://www.cnblogs.com/easywebfactory + * author:chenhongjin + * date: 2024/1/3 + */ using Gtk; -using System; +using GTKSystem.Windows.Forms.GTKControls.ControlBase; +using GTKSystem.Windows.Forms.Utility; +using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.IO; +using System.Reflection; namespace System.Windows.Forms { [DesignerCategory("Component")] - public partial class PictureBox : WidgetControl + public partial class PictureBox : Control { - public PictureBox() : base() + private readonly PictureBoxBase self = new PictureBoxBase(); + public override object GtkControl => self; + public PictureBox() { - Widget.StyleContext.AddClass("PictureBox"); - base.Control.SetAlignment(0.5f, 0.5f); - base.Control.Xalign = 0.5f; - base.Control.Yalign = 0.5f; - base.Control.Realized += Control_Realized; + self.Shown += Self_Shown; } - private void Control_Realized(object sender, EventArgs e) + private void Self_Shown(object sender, EventArgs e) { - - if (BackgroundImage != null && BackgroundImage.PixbufData != null) + //UpdateStyle(); + int width = Width; + int height = Height; + if (this.MaximumSize.Width > 0) + { + width = Math.Min(this.MaximumSize.Width, Width); + } + if (this.MaximumSize.Height > 0) + { + height = Math.Min(this.MaximumSize.Height, Height); + } + if (this.MinimumSize.Width > 0) + { + width = Math.Min(this.MinimumSize.Width, width); + } + if (this.MinimumSize.Height > 0) { - Gdk.Pixbuf imagePixbuf = new Gdk.Pixbuf(IntPtr.Zero); - base.ScaleImage(ref imagePixbuf, BackgroundImage.PixbufData, PictureBoxSizeMode.AutoSize, BackgroundImageLayout == ImageLayout.None ? ImageLayout.Tile : BackgroundImageLayout); - base.Control.Pixbuf = imagePixbuf; + height = Math.Min(this.MinimumSize.Height, height); } if (_image != null && _image.PixbufData != null) { - Gdk.Pixbuf imagePixbuf = new Gdk.Pixbuf(IntPtr.Zero); - base.ScaleImage(ref imagePixbuf, _image.PixbufData, SizeMode, ImageLayout.None); - base.Control.Pixbuf = imagePixbuf; + ImageUtility.ScaleImageByPictureBoxSizeMode(_image.PixbufData, width, height, out Gdk.Pixbuf newImagePixbuf, SizeMode); + self.Pixbuf = newImagePixbuf; } else if (InitialImage != null && InitialImage.PixbufData != null) { - Gdk.Pixbuf imagePixbuf = new Gdk.Pixbuf(IntPtr.Zero); - base.ScaleImage(ref imagePixbuf, InitialImage.PixbufData, SizeMode, ImageLayout.None); - base.Control.Pixbuf = imagePixbuf; + ImageUtility.ScaleImageByPictureBoxSizeMode(InitialImage.PixbufData, width, height, out Gdk.Pixbuf newImagePixbuf, SizeMode); + self.Pixbuf = newImagePixbuf; } } + public PictureBoxSizeMode SizeMode { get; set; } public System.Drawing.Image InitialImage { get; set; } @@ -56,11 +72,9 @@ namespace System.Windows.Forms get { return _image; } set { _image = value; - if (base.Control.IsRealized && _image != null && _image.PixbufData != null) + if (self.IsRealized && _image != null && _image.PixbufData != null) { - Gdk.Pixbuf imagePixbuf = new Gdk.Pixbuf(IntPtr.Zero); - base.ScaleImage(ref imagePixbuf, _image.PixbufData, SizeMode, ImageLayout.None); - base.Control.Pixbuf = imagePixbuf; + Self_Shown(null, null); } } } @@ -68,7 +82,7 @@ namespace System.Windows.Forms public System.Drawing.Image ErrorImage { get; set; } [DefaultValue(BorderStyle.None)] - public BorderStyle BorderStyle { get; set; } + public override BorderStyle BorderStyle { get; set; } public void CancelAsync() { } public new void Load(string url) { @@ -100,16 +114,17 @@ namespace System.Windows.Forms else memoryStream.Write(buffer); } + Gdk.Rectangle rec = Widget.Allocation; byte[] bytedata = memoryStream.GetBuffer(); _image =new Bitmap(bytedata); - Gdk.Pixbuf imagePixbuf = new Gdk.Pixbuf(IntPtr.Zero); - base.ScaleImage(ref imagePixbuf, bytedata, SizeMode, ImageLayout.None); - base.Control.Pixbuf = imagePixbuf; + + ImageUtility.ScaleImageByImageLayout(_image.PixbufData, rec.Width, rec.Height, out Gdk.Pixbuf newImagePixbuf, BackgroundImageLayout); + self.Pixbuf = newImagePixbuf; } } } - public new void Load() { if (System.IO.File.Exists(ImageLocation)) { base.Control.File = ImageLocation; } } - public void LoadAsync() { if (System.IO.File.Exists(ImageLocation)) { base.Control.File = ImageLocation; } } + public new void Load() { if (System.IO.File.Exists(ImageLocation)) { self.File = ImageLocation; } } + public void LoadAsync() { if (System.IO.File.Exists(ImageLocation)) { self.File = ImageLocation; } } public void LoadAsync(string url) { Threading.Tasks.Task.Run(() => Load(url)); } public override void EndInit() diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/ProgressBar.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ProgressBar.cs new file mode 100644 index 0000000000000000000000000000000000000000..cfaadeb5b87b72e8fa17bc383493af781d819edb --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ProgressBar.cs @@ -0,0 +1,56 @@ +/* + * GTKԭC#ؼwinformĿƽ̨ + * ʹñGTKSystem.Windows.FormsMicrosoft.WindowsDesktop.App.WindowsFormsһα룬ƽ̨windowslinuxmacos + * ֧438865652@qq.comhttps://gitee.com/easywebfactory, https://www.cnblogs.com/easywebfactory + * author:chenhongjin + * date: 2024/1/3 + */ +using Gtk; +using GTKSystem.Windows.Forms.GTKControls.ControlBase; +using System.ComponentModel; +using System.Diagnostics.CodeAnalysis; +using System.Drawing; + +namespace System.Windows.Forms +{ + [DesignerCategory("Component")] + [DefaultProperty("Value")] + public class ProgressBar : Control + { + private ProgressBarBase self = new ProgressBarBase(); + public override object GtkControl => self; + public ProgressBar():base() + { + self.Realized += Control_Realized; + } + + private void Control_Realized(object sender, EventArgs e) + { + self.MaxValue = Maximum; + self.MinValue = Minimum; + self.Value = Value; + } + + public ProgressBarStyle Style { get; set; } + [DefaultValue(100)] + public int MarqueeAnimationSpeed { get; set; } = 100; + [DefaultValue(100)] + public int Maximum { get; set; } = 100; + [DefaultValue(0)] + public int Minimum { get; set; } = 0; + public new Padding Padding { get; set; } + [DefaultValue(10)] + public int Step { get; set; } + [DefaultValue(0)] + public int Value { get => (int)self.Value; set => self.Value = value; } + public void Increment(int value) + { + + } + + public void PerformStep() + { + + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/RadioButton.cs b/Source/GTKSystem.Windows.Forms/GTKControls/RadioButton.cs index fd599e08ae6366d2ae4c26662edf1feeef049681..c97423899d0fa1586ec8c7e19741abc5d5a474e2 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/RadioButton.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/RadioButton.cs @@ -1,21 +1,27 @@ -//基于GTK3.24.24.34版本组件开发,兼容原生C#控件winform界面的跨平台界面组件。 -//使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows和linux运行 -//技术支持438865652@qq.com,https://www.cnblogs.com/easywebfactory +/* + * 基于GTK组件开发,兼容原生C#控件winform界面的跨平台界面组件。 + * 使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows、linux、macos运行 + * 技术支持438865652@qq.com,https://gitee.com/easywebfactory, https://www.cnblogs.com/easywebfactory + * author:chenhongjin + * date: 2024/1/3 + */ +using GTKSystem.Windows.Forms.GTKControls.ControlBase; using System.ComponentModel; namespace System.Windows.Forms { [DesignerCategory("Component")] - public partial class RadioButton : WidgetControl + public partial class RadioButton : Control { - public RadioButton():base(new Gtk.RadioButton("baseradio")) { - Widget.StyleContext.AddClass("RadioButton"); - base.Control.Realized += Control_Realized; ; + public readonly RadioButtonBase self = new RadioButtonBase(); + public override object GtkControl => self; + public RadioButton():base() { + self.Realized += Control_Realized; ; } private void Control_Realized(object sender, EventArgs e) { - Gtk.Container con = this.Parent as Gtk.Container; + Gtk.Container con = self.Parent as Gtk.Container; foreach (var widget in con.AllChildren) { if (widget is Gtk.RadioButton) @@ -25,18 +31,18 @@ namespace System.Windows.Forms break; } } - base.Control.Active = _Checked; + self.Active = _Checked; isLoaded = true; } bool isLoaded = false; public event EventHandler CheckedChanged { - add { base.Control.Toggled += (object sender, EventArgs e) => { if (isLoaded) { value.Invoke(sender, e); } }; } - remove { base.Control.Toggled -= (object sender, EventArgs e) => { if (isLoaded) { value.Invoke(sender, e); } }; } + add { self.Toggled += (object sender, EventArgs e) => { if (isLoaded) { value.Invoke(this, e); } }; } + remove { self.Toggled -= (object sender, EventArgs e) => { if (isLoaded) { value.Invoke(this, e); } }; } } - public override string Text { get { return base.Control.Label; } set { base.Control.Label = value;} } - public bool Checked { get { return base.Control.Active; } set { _Checked = true; base.Control.Active = true; } } + public override string Text { get { return self.Label; } set { self.Label = value;} } + public bool Checked { get { return self.Active; } set { _Checked = true; self.Active = true; } } private bool _Checked; } } diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/RichTextBox.cs b/Source/GTKSystem.Windows.Forms/GTKControls/RichTextBox.cs index 43f6b481f929f2e111c2f75d7779cf50eef54530..491b0fe29b869ce572eb0bea930f70ab08f45254 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/RichTextBox.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/RichTextBox.cs @@ -1,37 +1,55 @@ -//基于GTK3.24.24.34版本组件开发,兼容原生C#控件winform界面的跨平台界面组件。 -//使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows和linux运行 -//技术支持438865652@qq.com,https://www.cnblogs.com/easywebfactory +/* + * 基于GTK组件开发,兼容原生C#控件winform界面的跨平台界面组件。 + * 使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows、linux、macos运行 + * 技术支持438865652@qq.com,https://gitee.com/easywebfactory, https://www.cnblogs.com/easywebfactory + * author:chenhongjin + * date: 2024/1/3 + */ +using Gtk; +using GTKSystem.Windows.Forms.GTKControls.ControlBase; using System.ComponentModel; +using System.Drawing; namespace System.Windows.Forms { [DesignerCategory("Component")] - public partial class RichTextBox : WidgetControl + public partial class RichTextBox : Control { - public RichTextBox() + public readonly RichTextBoxBase self = new RichTextBoxBase(); + public override object GtkControl => self; + private Gtk.TextView textView = new Gtk.TextView(); + public RichTextBox():base() { - Widget.StyleContext.AddClass("RichTextBox"); - Widget.StyleContext.AddClass("BorderRadiusStyle"); - base.Control.BorderWidth = 1; + textView.BorderWidth = 1; + textView.WrapMode = Gtk.WrapMode.Char; + textView.Halign = Gtk.Align.Fill; + textView.Valign = Gtk.Align.Fill; + textView.Expand = true; + Gtk.ScrolledWindow scrolledWindow = new Gtk.ScrolledWindow(); + scrolledWindow.Child = textView; + self.Child = scrolledWindow; } - - public override string Text { get => base.Control.Buffer.Text; set => base.Control.Buffer.Text = value; } + protected override void SetStyle(Widget widget) + { + base.SetStyle(textView); + } + public override string Text { get => textView.Buffer.Text; set => textView.Buffer.Text = value; } public override event EventHandler TextChanged { - add { base.Control.Buffer.Changed += (object o, EventArgs args) => { value.Invoke(o, args); }; } - remove { base.Control.Buffer.Changed -= (object o, EventArgs args) => { value.Invoke(o, args); }; } + add { textView.Buffer.Changed += (object o, EventArgs args) => { value.Invoke(this, args); }; } + remove { textView.Buffer.Changed -= (object o, EventArgs args) => { value.Invoke(this, args); }; } } public void AppendText(string text) { - var enditer = base.Control.Buffer.EndIter; - base.Control.Buffer.Insert(ref enditer, text); + var enditer = textView.Buffer.EndIter; + textView.Buffer.Insert(ref enditer, text); } public string[] Lines { - get { return base.Control.Buffer.Text.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None); } + get { return textView.Buffer.Text.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None); } } } } diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/SplitContainer.cs b/Source/GTKSystem.Windows.Forms/GTKControls/SplitContainer.cs index ca36c0a27ab1a104679884b357b029313856bfc9..95a200125ada3a000f63f87fa3f1b8c405e8a8af 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/SplitContainer.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/SplitContainer.cs @@ -1,35 +1,51 @@ -//基于GTK3.24.24.34版本组件开发,兼容原生C#控件winform界面的跨平台界面组件。 -//使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows和linux运行 -//技术支持438865652@qq.com,https://www.cnblogs.com/easywebfactory +/* + * 基于GTK组件开发,兼容原生C#控件winform界面的跨平台界面组件。 + * 使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows、linux、macos运行 + * 技术支持438865652@qq.com,https://gitee.com/easywebfactory, https://www.cnblogs.com/easywebfactory + * author:chenhongjin + * date: 2024/1/3 + */ + using Gtk; +using GTKSystem.Windows.Forms.GTKControls.ControlBase; using System; using System.ComponentModel; +using System.Drawing; namespace System.Windows.Forms { [DesignerCategory("Component")] - public partial class SplitContainer : WidgetControl + public partial class SplitContainer : ContainerControl { - public SplitContainer() : base(Gtk.Orientation.Vertical) + public readonly SplitContainerBase self = new SplitContainerBase(); + public override object GtkControl => self; + public SplitContainer() : base() { - Widget.StyleContext.AddClass("SplitContainer"); - base.Control.BorderWidth = 1; - base.Control.Margin = 0; - base.Control.MarginStart = 0; - base.Control.MarginTop = 0; - base.Control.WideHandle = true; - base.Control.PositionSet = false; - _panel1 = new SplitterPanel(this); _panel2 = new SplitterPanel(this); - base.Control.Add1(_panel1.Control); - base.Control.Add2(_panel2.Control); - + + self.Add1(_panel1.Widget); + self.Add2(_panel2.Widget); + + self.Realized += Control_Realized; } + + private void Control_Realized(object sender, EventArgs e) + { + if (self.Orientation == Gtk.Orientation.Horizontal) + { + _panel1.Width = this.SplitterDistance; + } + else + { + _panel1.Height = this.SplitterDistance; + } + } + private SplitterPanel _panel1; private SplitterPanel _panel2; - public BorderStyle BorderStyle { get { return base.Control.BorderWidth == 1 ? BorderStyle.FixedSingle : BorderStyle.None; } set { base.Control.BorderWidth = 1; } } + public override BorderStyle BorderStyle { get { return self.BorderWidth == 1 ? BorderStyle.FixedSingle : BorderStyle.None; } set { self.BorderWidth = 1; } } public SplitterPanel Panel1 { get @@ -39,7 +55,6 @@ namespace System.Windows.Forms set { _panel1 = value; - base.Control.Add1(_panel1.Control); } } public SplitterPanel Panel2 { @@ -50,20 +65,18 @@ namespace System.Windows.Forms set { _panel2 = value; - base.Control.Add1(_panel2.Control); } } - public int SplitterDistance { get { return _panel1.Height; } set { _panel1.Height = value; } } + public int SplitterDistance { get; set; } private int _SplitterWidth; - public int SplitterWidth { get { return _SplitterWidth; } set { _SplitterWidth = value; base.Control.WideHandle = value > 2; } } + public int SplitterWidth { get { return _SplitterWidth; } set { _SplitterWidth = value; self.WideHandle = value > 2; } } public int SplitterIncrement { get; set; } public Orientation Orientation { - get { return base.Control.Orientation == Gtk.Orientation.Horizontal ? Orientation.Vertical : Orientation.Horizontal; } + get { return self.Orientation == Gtk.Orientation.Horizontal ? Orientation.Vertical : Orientation.Horizontal; } set { - base.Control.Orientation = value == Orientation.Horizontal ? Gtk.Orientation.Vertical : Gtk.Orientation.Horizontal; + self.Orientation = value == Orientation.Horizontal ? Gtk.Orientation.Vertical : Gtk.Orientation.Horizontal; } } - } } diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/SplitterPanel.cs b/Source/GTKSystem.Windows.Forms/GTKControls/SplitterPanel.cs index 41d38439d3c7d569d538abb0be9cb94788ff522c..600027d678a75477a47261a8d4679208cbebcde2 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/SplitterPanel.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/SplitterPanel.cs @@ -1,8 +1,15 @@ -//基于GTK3.24.24.34版本组件开发,兼容原生C#控件winform界面的跨平台界面组件。 -//使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows和linux运行 -//技术支持438865652@qq.com,https://www.cnblogs.com/easywebfactory +/* + * 基于GTK组件开发,兼容原生C#控件winform界面的跨平台界面组件。 + * 使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows、linux、macos运行 + * 技术支持438865652@qq.com,https://gitee.com/easywebfactory, https://www.cnblogs.com/easywebfactory + * author:chenhongjin + * date: 2024/1/3 + */ + using System; using System.ComponentModel; +using System.Drawing; + namespace System.Windows.Forms { @@ -14,5 +21,9 @@ namespace System.Windows.Forms { Owner = owner; } + + public override DockStyle Dock { get; set; } = DockStyle.Fill; + public override Size Size { get; set; } + } } diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/StatusStrip.cs b/Source/GTKSystem.Windows.Forms/GTKControls/StatusStrip.cs new file mode 100644 index 0000000000000000000000000000000000000000..39ff3688317b7982d122e62858ca995a23f56a20 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/StatusStrip.cs @@ -0,0 +1,33 @@ +/* + * GTKԭC#ؼwinformĿƽ̨ + * ʹñGTKSystem.Windows.FormsMicrosoft.WindowsDesktop.App.WindowsFormsһα룬ƽ̨windowslinuxmacos + * ֧438865652@qq.comhttps://gitee.com/easywebfactory, https://www.cnblogs.com/easywebfactory + * author:chenhongjin + * date: 2024/1/3 + */ +using Gtk; +using System.ComponentModel; +using System.Drawing; + +namespace System.Windows.Forms +{ + public class StatusStrip : ToolStrip + { + public StatusStrip():base() + { + this.self.StyleContext.RemoveClass("ToolStrip"); + this.self.StyleContext.AddClass("StatusStrip"); + Dock = DockStyle.Bottom; + } + public override Point Location { get => base.Location; set => base.Location = new Point(value.X, value.Y - 12); } + public override Size Size { get => base.Size; set => base.Size = new Size(value.Width, value.Height + 12); } + [DefaultValue(false)] + public bool ShowItemToolTips { get; set; } + + [DefaultValue(true)] + public bool SizingGrip { get; set; } + + [DefaultValue(true)] + public bool Stretch { get; set; } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/TabControl.cs b/Source/GTKSystem.Windows.Forms/GTKControls/TabControl.cs index 883b3eba85af74e938bc7d7b7635fab1a2bf7306..28c01e2c97337f8767c8c21a8063788ab05ad2a0 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/TabControl.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/TabControl.cs @@ -1,39 +1,79 @@ -//基于GTK3.24.24.34版本组件开发,兼容原生C#控件winform界面的跨平台界面组件。 -//使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows和linux运行 -//技术支持438865652@qq.com,https://www.cnblogs.com/easywebfactory +/* + * 基于GTK组件开发,兼容原生C#控件winform界面的跨平台界面组件。 + * 使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows、linux、macos运行 + * 技术支持438865652@qq.com,https://gitee.com/easywebfactory, https://www.cnblogs.com/easywebfactory + * author:chenhongjin + * date: 2024/1/3 + */ +using GLib; +using Gtk; +using GTKSystem.Windows.Forms.GTKControls.ControlBase; using System; +using System.Collections; using System.Collections.Generic; using System.ComponentModel; - +using System.Drawing; +using System.Linq; namespace System.Windows.Forms { [DesignerCategory("Component")] - public partial class TabControl : WidgetControl + public partial class TabControl : ContainerControl { + public readonly TabControlBase self = new TabControlBase(); + public override object GtkControl => self; private TabControl.ControlCollection _controls; + private TabControl.TabPageCollection _tabPageControls; public TabControl() : base() { - Widget.StyleContext.AddClass("TabControl"); _controls = new ControlCollection(this); + _tabPageControls = new TabPageCollection(this); + self.Realized += Control_Realized; } - public int SelectedIndex { get { return base.Control.CurrentPage; } set { base.Control.CurrentPage = value; } } - - public TabPage SelectedTab { get { return _controls[base.Control.CurrentPage]; } set { } } + private void Control_Realized(object sender, EventArgs e) + { + if(SizeMode == TabSizeMode.Fixed) + { + foreach(TabPage page in _tabPageControls) + { + page._tabLabel.WidthRequest = this.ItemSize.Width; + page._tabLabel.HeightRequest = this.ItemSize.Height; + } + } + } - public TabSizeMode SizeMode { get; set; } + public int SelectedIndex { get { return self.CurrentPage; } set { self.CurrentPage = value; } } + + public TabPage SelectedTab { get { return _controls[self.CurrentPage]; } set { } } + public TabSizeMode SizeMode { get; set; } + public TabDrawMode DrawMode { get; set; } public bool ShowToolTips { get; set; } + public Size ItemSize { get; set; } + public int TabCount { get => self.NPages; } + public TabPageCollection TabPages { get { return _tabPageControls; } } + public Rectangle GetTabRect(int index) + { + if (index < 0 || (index >= TabCount)) + { + throw new ArgumentOutOfRangeException(nameof(index), index, "SR.InvalidArgument"); + } + TabPage page = TabPages[index]; + Gtk.Label tab = page.TabLabel; + Gdk.Rectangle rect = tab.Allocation; + return new Rectangle(0, 0, rect.Width, rect.Height); + } - public int TabCount { get; } - public new TabControl.ControlCollection Controls => _controls; public event EventHandler SelectedIndexChanged { - add { base.Control.SwitchPage += (object sender, Gtk.SwitchPageArgs e) => { if (base.Control.IsRealized) { value.Invoke(sender, e); } }; } - remove { base.Control.SwitchPage -= (object sender, Gtk.SwitchPageArgs e) => { if (base.Control.IsRealized) { value.Invoke(sender, e); } }; } + add { self.SwitchPage += (object sender, Gtk.SwitchPageArgs e) => { if (self.IsRealized) { value.Invoke(this, e); } }; } + remove { self.SwitchPage -= (object sender, Gtk.SwitchPageArgs e) => { if (self.IsRealized) { value.Invoke(this, e); } }; } } + + public event DrawItemEventHandler DrawItem; + public class ControlCollection : List { TabControl _owner; @@ -43,18 +83,202 @@ namespace System.Windows.Forms } public new int Add(TabPage item) { + item.Parent = _owner; + item.TabLabel.Name = base.Count.ToString(); + item._tabLabel.WidthRequest = _owner.ItemSize.Width; + item._tabLabel.HeightRequest = _owner.ItemSize.Height; base.Add(item); - return _owner.Control.AppendPage(item.Control, item.TabLabel); + item.TabLabel.Drawn += (object sender, DrawnArgs args) => + { + if (_owner.DrawMode == TabDrawMode.OwnerDrawFixed && _owner.DrawItem != null) + { + Gtk.Label tab = (Gtk.Label)sender; + tab.GetAllocatedSize(out Gdk.Rectangle allocation, out int baseline); + args.Cr.ResetClip(); + int width = allocation.Width + 24; + int height = allocation.Height + 2; + // _owner.DrawItem(this, new DrawItemEventArgs(new Graphics(tab, args.Cr, new Gdk.Rectangle(0, 0, width, height)), _owner.Font, new Rectangle(-12, -2, width, height), Convert.ToInt32(tab.Name), DrawItemState.Default)); + _owner.DrawItem(this, new DrawItemEventArgs(new Graphics(tab, args.Cr, new Gdk.Rectangle(0, 0, width, height)) { diff_left=-12, diff_top=-2 }, _owner.Font, new Rectangle(0, 0, width, height), Convert.ToInt32(tab.Name), DrawItemState.Default)); + + } + }; + return _owner.self.AppendPage(item.self, item.TabLabel); } public new void RemoveAt(int index) { base.RemoveAt(index); - _owner.Control.RemovePage(index); + _owner.self.RemovePage(index); } public new void Remove(TabPage value) { base.Remove(value); - _owner.Control.Remove(((TabPage)value).Widget); + _owner.self.Remove(((TabPage)value).Widget); + } + } + + + public class TabPageCollection : IList, ICollection, IEnumerable + { + private TabControl _owner; + public TabPageCollection(TabControl owner) + { + _owner = owner; + } + + public virtual TabPage this[string key] { get { return _owner.Controls.Find(p => p.Name == key); } } + public virtual TabPage this[int index] { get { return _owner.Controls[index]; } set { Add(value); } } + + object IList.this[int index] { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } + + //[Browsable(false)] + public int Count { get { return _owner.Controls.Count; } } + + public bool IsReadOnly { get { return false; } } + + bool IList.IsFixedSize => throw new NotImplementedException(); + + bool ICollection.IsSynchronized => throw new NotImplementedException(); + + object ICollection.SyncRoot => throw new NotImplementedException(); + + public void Add(string key, string text, string imageKey) + { + TabPage tp = new TabPage(); + tp.Name = key; + tp.Text = text; + this.Add(tp); + } + + public void Add(TabPage value) + { + value.Parent = _owner; + _owner.Controls.Add(value); + } + public void Add(string key, string text) + { + this.Add(key, text, null); + } + + public void Add(string text) + { + this.Add($"tabPage{Count}", text, null); + } + + public void Add(string key, string text, int imageIndex) + { + this.Add(key, text, null); + } + + int IList.Add(object value) + { + throw new NotImplementedException(); + } + + public void AddRange(TabPage[] pages) + { + foreach (TabPage page in pages) + this.Add(page); + } + + bool IList.Contains(object value) + { + return _owner.Controls.Contains(value); + } + + void CopyTo(Array array, int index) + { + throw new NotImplementedException(); + } + + public int IndexOf(object value) + { + throw new NotImplementedException(); + } + + public virtual void Clear() + { + _owner.Controls.Clear(); + } + + public bool Contains(TabPage page) + { + return _owner.Controls.Contains(page); + } + + public virtual bool ContainsKey(string key) + { + return _owner.Controls.FindIndex(p => p.Name == key) > -1; + + } + + public IEnumerator GetEnumerator() + { + return _owner.Controls.GetEnumerator(); + } + + public int IndexOf(TabPage page) + { + return _owner.Controls.IndexOf(page); + } + + public virtual int IndexOfKey(string key) + { + return _owner.Controls.FindIndex(p => p.Name == key); + } + + public void Insert(int index, string key, string text, int imageIndex) + { + _owner.Controls.Insert(index, new TabPage() { Name = key, Text = text }); ; + } + + public void Insert(int index, string key, string text) + { + Insert(index, key, text, -1); + } + + public void Insert(int index, TabPage tabPage) + { + _owner.Controls.Insert(index, tabPage); + } + + public void Insert(int index, string key, string text, string imageKey) + { + Insert(index, key, text, -1); + } + + public void Insert(int index, string text) + { + Insert(index, $"tabPage{Count}", text, -1); + } + + public void Insert(int index, object value) + { + throw new NotImplementedException(); + } + + public void Remove(TabPage value) + { + _owner.Controls.Remove(value); + } + + public void RemoveAt(int index) + { + _owner.Controls.RemoveAt(index); + } + + public virtual void RemoveByKey(string key) + { + _owner.Controls.RemoveAt(_owner.Controls.FindIndex(p => p.Name == key)); + } + + void IList.Remove(object value) + { + throw new NotImplementedException(); + } + + void ICollection.CopyTo(Array array, int index) + { + throw new NotImplementedException(); } } } diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/TabControlBase/DrawItemEventArgs.cs b/Source/GTKSystem.Windows.Forms/GTKControls/TabControlBase/DrawItemEventArgs.cs new file mode 100644 index 0000000000000000000000000000000000000000..8a7564ec9d05de1e39a2b0302dd4e5f3f2f6cbf1 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/TabControlBase/DrawItemEventArgs.cs @@ -0,0 +1,135 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Drawing; + +namespace System.Windows.Forms +{ + /// + /// This event is fired by owner drawn objects, such as and + /// . It contains all the information needed for the user to paint the given item, + /// including the item index, the in which the drawing should be done, and the + /// object with which the drawing should be done. + /// + public class DrawItemEventArgs : EventArgs, IDisposable, IDeviceContext + { + + /// + /// The backColor to paint each menu item with. + /// + private readonly Color _backColor; + + /// + /// The foreColor to paint each menu item with. + /// + private readonly Color _foreColor; + + /// + /// Creates a new DrawItemEventArgs with the given parameters. + /// + public DrawItemEventArgs(Graphics graphics, Font? font, Rectangle rect, int index, DrawItemState state) + : this(graphics, font, rect, index, state, SystemColors.WindowText, SystemColors.Window) + { } + + /// + /// Creates a new DrawItemEventArgs with the given parameters, including the foreColor and backColor + /// of the control. + /// + public DrawItemEventArgs( + Graphics graphics, + Font? font, + Rectangle rect, + int index, + DrawItemState state, + Color foreColor, + Color backColor) + { + this.graphics=graphics ?? throw new ArgumentNullException(nameof(graphics)); + this.Bounds = rect; + Font = font; + Index = index; + State = state; + _foreColor = foreColor; + _backColor = backColor; + } + private Graphics graphics; + /// + /// Gets the object used to paint. + /// + public Graphics Graphics { + get { + return graphics; + } + } + + /// + /// A suggested font, usually the parent control's Font property. + /// + public Font? Font { get; } + + /// + /// The rectangle outlining the area in which the painting should be done. + /// + public Rectangle Bounds { get; } + + /// + /// The index of the item that should be painted. + /// + public int Index { get; } + + /// + /// Miscellaneous state information, such as whether the item is + /// "selected", "focused", or some other such information. ComboBoxes + /// have one special piece of information which indicates if the item + /// being painted is the editable portion of the ComboBox. + /// + public DrawItemState State { get; } + + /// + /// A suggested color drawing: either SystemColors.WindowText or SystemColors.HighlightText, + /// depending on whether this item is selected. + /// + public Color ForeColor + => (State & DrawItemState.Selected) == DrawItemState.Selected ? SystemColors.HighlightText : _foreColor; + + public Color BackColor + => (State & DrawItemState.Selected) == DrawItemState.Selected ? SystemColors.Highlight : _backColor; + + public void Dispose() + { + + } + + /// + /// Fills the with the . + /// + public virtual void DrawBackground() + { + //using var backBrush = BackColor.GetCachedSolidBrushScope(); + //GraphicsInternal.FillRectangle(backBrush, Bounds); + } + + /// + /// Draws a handy focus rect in the given rectangle. + /// + public virtual void DrawFocusRectangle() + { + if ((State & DrawItemState.Focus) == DrawItemState.Focus + && (State & DrawItemState.NoFocusRect) != DrawItemState.NoFocusRect) + { + // ControlPaint.DrawFocusRectangle(GraphicsInternal, Bounds, ForeColor, BackColor); + } + } + + public IntPtr GetHdc() + { + return IntPtr.Zero; + } + + public void ReleaseHdc() + { + + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Control/ColumnHeader.cs b/Source/GTKSystem.Windows.Forms/GTKControls/TabControlBase/DrawItemEventHandler.cs similarity index 73% rename from Source/GTKSystem.Windows.Forms/GTKControls/Control/ColumnHeader.cs rename to Source/GTKSystem.Windows.Forms/GTKControls/TabControlBase/DrawItemEventHandler.cs index 2187fca3ad10f58cdfe7187faab14a65125fdf82..cfa3b5b450327b0dbc6be101b545b726f55e3a31 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/Control/ColumnHeader.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/TabControlBase/DrawItemEventHandler.cs @@ -4,7 +4,5 @@ namespace System.Windows.Forms { - public class ColumnHeader - { - } -} \ No newline at end of file + public delegate void DrawItemEventHandler(object? sender, DrawItemEventArgs e); +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/TabControlBase/TabDrawMode.cs b/Source/GTKSystem.Windows.Forms/GTKControls/TabControlBase/TabDrawMode.cs new file mode 100644 index 0000000000000000000000000000000000000000..412735592d4a9e3c738a51ccf342dd0e2f3abae9 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/TabControlBase/TabDrawMode.cs @@ -0,0 +1,25 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace System.Windows.Forms +{ + /// + /// The TabStrip and TabControl both support ownerdraw functionality, but + /// only one type, in which you can paint the tabs individually. This + /// enumeration contains the valid values for it's drawMode property. + /// + public enum TabDrawMode + { + /// + /// All the items in the control are painted by the system and are of the + /// same size + /// + Normal = 0, + + /// + /// The user paints the items in the control manually + /// + OwnerDrawFixed = 1, + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/TabControlBase/TabPage.cs b/Source/GTKSystem.Windows.Forms/GTKControls/TabControlBase/TabPage.cs index 2f96816721371cab2e6b0d9f3817d5ee3d6f5a10..b950a0d22160993f2b22523921a7b72e059f78a7 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/TabControlBase/TabPage.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/TabControlBase/TabPage.cs @@ -1,4 +1,12 @@ -using Gtk; +/* + * 基于GTK组件开发,兼容原生C#控件winform界面的跨平台界面组件。 + * 使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows、linux、macos运行 + * 技术支持438865652@qq.com,https://gitee.com/easywebfactory, https://www.cnblogs.com/easywebfactory + * author:chenhongjin + * date: 2024/1/3 + */ +using Gtk; +using GTKSystem.Windows.Forms.GTKControls.ControlBase; using System; using System.Collections.Generic; using System.Drawing; @@ -6,36 +14,35 @@ using System.Text; namespace System.Windows.Forms { - public class TabPage : WidgetControl + public class TabPage : ContainerControl { + public readonly TabPageBase self = new TabPageBase(); + public override object GtkControl => self; + internal Gtk.Label _tabLabel = new Gtk.Label(); private ControlCollection _controls; - public TabPage() : base(new Gtk.Adjustment(IntPtr.Zero), new Gtk.Adjustment(IntPtr.Zero)) + public TabPage() : base() { - Widget.StyleContext.AddClass("TabPage"); - Control.BorderWidth = 1; - _controls = new ControlCollection(this.Control); + _controls = new ControlCollection(this, self); - Widget.Data["Dock"] = DockStyle.Fill; + self.Data["Dock"] = DockStyle.Fill; } public TabPage(string text) { - _TabLabel.Text = text; - _controls = new ControlCollection(this.Control); + _tabLabel.Text = text; + _controls = new ControlCollection(this, self); } public override Point Location { get { - return new Point(Widget.MarginStart, Widget.MarginTop); + return new Point(self.MarginStart, self.MarginTop); } set { - Widget.MarginStart = 0; - Widget.MarginTop = 0; - Widget.Data["InitMarginStart"] = 0; - Widget.Data["InitMarginTop"] = 0; + self.MarginStart = 0; + self.MarginTop = 0; } } public new DockStyle Dock @@ -44,13 +51,15 @@ namespace System.Windows.Forms { return DockStyle.Fill; } - set { Widget.Data["Dock"] = DockStyle.Fill; } + set { self.Data["Dock"] = DockStyle.Fill; } } - public override string Text { get { return _TabLabel.Text; } set { _TabLabel.Text = value; } } - - private Gtk.Label _TabLabel = new Gtk.Label(); - public Gtk.Label TabLabel { get { return _TabLabel; } } + public override string Text { get { return _tabLabel.Text; } set { _tabLabel.Text = value; } } + public Gtk.Label TabLabel { get { return _tabLabel; } } public new ControlCollection Controls => _controls; + + public int ImageIndex { get; set; } + public string ImageKey { get; set; } + public List ImageList { get; set; } } } diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/TableLayoutBase/ColumnStyle.cs b/Source/GTKSystem.Windows.Forms/GTKControls/TableLayoutBase/ColumnStyle.cs new file mode 100644 index 0000000000000000000000000000000000000000..401a04360ebf2ae495e71310cb2d138c6115aef4 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/TableLayoutBase/ColumnStyle.cs @@ -0,0 +1,26 @@ +namespace System.Windows.Forms +{ + public class ColumnStyle : TableLayoutStyle + { + public float Width + { + get; + set; + } + + public ColumnStyle() + { + + } + public ColumnStyle(SizeType sizeType) + { + this.SizeType = sizeType; + } + + public ColumnStyle(SizeType sizeType, float width) + { + this.SizeType = sizeType; + this.Width = width; + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/TableLayoutBase/FlowDirection.cs b/Source/GTKSystem.Windows.Forms/GTKControls/TableLayoutBase/FlowDirection.cs new file mode 100644 index 0000000000000000000000000000000000000000..56877be3cbc4f6b5d5de9b1b9ec1626c4f650724 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/TableLayoutBase/FlowDirection.cs @@ -0,0 +1,10 @@ +namespace System.Windows.Forms +{ + public enum FlowDirection + { + LeftToRight, + TopDown, + RightToLeft, + BottomUp + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Control/LayoutEngine.cs b/Source/GTKSystem.Windows.Forms/GTKControls/TableLayoutBase/LayoutEngine.cs similarity index 100% rename from Source/GTKSystem.Windows.Forms/GTKControls/Control/LayoutEngine.cs rename to Source/GTKSystem.Windows.Forms/GTKControls/TableLayoutBase/LayoutEngine.cs diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/TableLayoutBase/RowStyle.cs b/Source/GTKSystem.Windows.Forms/GTKControls/TableLayoutBase/RowStyle.cs new file mode 100644 index 0000000000000000000000000000000000000000..88782d49d37a17bbb5a5dbdfb78716cc9d6b333e --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/TableLayoutBase/RowStyle.cs @@ -0,0 +1,27 @@ +namespace System.Windows.Forms +{ + public class RowStyle : TableLayoutStyle + { + public float Height + { + get; + set; + } + + public RowStyle() + { + + } + + public RowStyle(SizeType sizeType) + { + this.SizeType = sizeType; + } + + public RowStyle(SizeType sizeType, float height) + { + this.SizeType = sizeType; + this.Height = height; + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Control/Region.cs b/Source/GTKSystem.Windows.Forms/GTKControls/TableLayoutBase/SizeType.cs similarity index 36% rename from Source/GTKSystem.Windows.Forms/GTKControls/Control/Region.cs rename to Source/GTKSystem.Windows.Forms/GTKControls/TableLayoutBase/SizeType.cs index 74ea77c1c5c33973ca69ee78a55814639d0666d0..21d6cbd6a4d46b09bddf7d14175695d8106ea446 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/Control/Region.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/TableLayoutBase/SizeType.cs @@ -1,8 +1,9 @@ - - namespace System.Windows.Forms { - public class Region - { - } + public enum SizeType + { + AutoSize, + Absolute, + Percent + } } diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/TableLayoutBase/TableLayoutColumnStyleCollection.cs b/Source/GTKSystem.Windows.Forms/GTKControls/TableLayoutBase/TableLayoutColumnStyleCollection.cs new file mode 100644 index 0000000000000000000000000000000000000000..1427c27a44cf7e82e7176ecf13297d39625950b5 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/TableLayoutBase/TableLayoutColumnStyleCollection.cs @@ -0,0 +1,56 @@ +using System.Windows.Forms.Layout; + +namespace System.Windows.Forms +{ + public class TableLayoutColumnStyleCollection : TableLayoutStyleCollection + { + + public new ColumnStyle this[int index] + { + get + { + return (ColumnStyle)base[index]; + } + set + { + base[index] = value; + + } + } + + internal TableLayoutColumnStyleCollection(IArrangedElement Owner):base(Owner) + { + + } + + internal TableLayoutColumnStyleCollection() : base(null) + { + + } + + public int Add(ColumnStyle columnStyle) + { + return base.Add(columnStyle); + } + + public void Insert(int index, ColumnStyle columnStyle) + { + base.Insert(index, columnStyle); + } + + public void Remove(ColumnStyle columnStyle) + { + base.Remove(columnStyle); + } + + public bool Contains(ColumnStyle columnStyle) + { + return base.Contains(columnStyle); + } + + public int IndexOf(ColumnStyle columnStyle) + { + return base.IndexOf(columnStyle); + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/TableLayoutBase/TableLayoutControlCollection.cs b/Source/GTKSystem.Windows.Forms/GTKControls/TableLayoutBase/TableLayoutControlCollection.cs new file mode 100644 index 0000000000000000000000000000000000000000..8091c31e522b0a644b8583f923ed1836b46d63ea --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/TableLayoutBase/TableLayoutControlCollection.cs @@ -0,0 +1,111 @@ + +using Gtk; +using System.Collections.Generic; +using System.ComponentModel; +using System.Runtime.CompilerServices; +using System.Linq; + +namespace System.Windows.Forms +{ + [ListBindable(false)] + public class TableLayoutControlCollection : ControlCollection + { + public TableLayoutPanel Container + { + [CompilerGenerated] + get; + protected set; + } + public TableLayoutControlCollection(Control owner, Gtk.Container ownerContainer) : base(owner, ownerContainer) + { + Container = owner as TableLayoutPanel; + } + public TableLayoutControlCollection(TableLayoutPanel container) : base(container) + { + Container = container; + } + public override void PerformLayout() + { + int[] colsWidth = Container.GetColumnWidths(); + int[] rowsHeight = Container.GetRowHeights(); + int colLeft = 0; + int rowTop = 0; + for (int col = 0; col < Container.ColumnCount; col++) + { + rowTop = 0; + colLeft += colsWidth[col]; + for (int row = 0; row < Container.ColumnCount; row++) + { + rowTop += rowsHeight[row]; + Gtk.Viewport viewport = new Gtk.Viewport(); + viewport.BorderWidth = 0; + if (Container.CellBorderStyle == TableLayoutPanelCellBorderStyle.None) + viewport.ShadowType = Gtk.ShadowType.None; + else if (Container.CellBorderStyle == TableLayoutPanelCellBorderStyle.Single || Container.CellBorderStyle == TableLayoutPanelCellBorderStyle.Inset) + viewport.ShadowType = Gtk.ShadowType.In; + else if (Container.CellBorderStyle == TableLayoutPanelCellBorderStyle.Outset) + viewport.ShadowType = Gtk.ShadowType.Out; + else if (Container.CellBorderStyle == TableLayoutPanelCellBorderStyle.InsetDouble) + { + viewport.ShadowType = Gtk.ShadowType.In; + viewport.BorderWidth = 1; + } + else if (Container.CellBorderStyle == TableLayoutPanelCellBorderStyle.OutsetDouble) + { + viewport.ShadowType = Gtk.ShadowType.Out; + viewport.BorderWidth = 1; + } + else + { + viewport.ShadowType = Gtk.ShadowType.In; + } + + viewport.Margin = 0; + viewport.MarginStart = 0; + viewport.MarginTop = 0; + viewport.WidthRequest = colsWidth[col]; + viewport.HeightRequest = rowsHeight[row]; + Gtk.Layout layout = new Gtk.Layout(new Adjustment(0, 0, 0, 1, 0, 0), new Adjustment(0, 0, 0, 1, 0, 0)); + layout.Vexpand = true; + layout.Hexpand = true; + viewport.Child = layout; + + if (this.GetCellControl(col, row) is TableLayoutControllCell cell) + { + cell.Control.Widget.MarginStart = 3; + cell.Control.Widget.MarginTop = 3; + layout.Add(cell.Control.Widget); + } + + Container.self.Attach(viewport, colLeft, rowTop, 1, 1); + } + } + Container.self.ShowAll(); + } + public object GetCellControl(int column, int row) + { + foreach (TableLayoutControllCell cell in this) + { + if (cell.TableLayoutPanelCellPosition.Column == column && cell.TableLayoutPanelCellPosition.Row == row) + return cell; + } + return null; + } + + public virtual void Add(Control control, int column, int row) + { + base.Add(new TableLayoutControllCell(control, new TableLayoutPanelCellPosition(column, row))); + } + + public class TableLayoutControllCell + { + public TableLayoutControllCell(Control control, TableLayoutPanelCellPosition tableLayoutPanelCellPosition) + { + this.Control = control; + this.TableLayoutPanelCellPosition = tableLayoutPanelCellPosition; + } + public Control Control { get; set; } + public TableLayoutPanelCellPosition TableLayoutPanelCellPosition { get; set; } + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/TableLayoutBase/TableLayoutPanelCellBorderStyle.cs b/Source/GTKSystem.Windows.Forms/GTKControls/TableLayoutBase/TableLayoutPanelCellBorderStyle.cs new file mode 100644 index 0000000000000000000000000000000000000000..17c8744a06dd314571314cd79b302e69aed91627 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/TableLayoutBase/TableLayoutPanelCellBorderStyle.cs @@ -0,0 +1,13 @@ +namespace System.Windows.Forms +{ + public enum TableLayoutPanelCellBorderStyle + { + None, + Single, + Inset, + InsetDouble, + Outset, + OutsetDouble, + OutsetPartial + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/TableLayoutBase/TableLayoutPanelCellPosition.cs b/Source/GTKSystem.Windows.Forms/GTKControls/TableLayoutBase/TableLayoutPanelCellPosition.cs new file mode 100644 index 0000000000000000000000000000000000000000..4e36b9160deef4c6f4658bf6897623d3351c3585 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/TableLayoutBase/TableLayoutPanelCellPosition.cs @@ -0,0 +1,65 @@ +using System.ComponentModel; +using System.Runtime.CompilerServices; + +namespace System.Windows.Forms +{ + + public struct TableLayoutPanelCellPosition : IEquatable + { + public int Row + { + [CompilerGenerated] + readonly get; + [CompilerGenerated] + set; + } + + public int Column + { + [CompilerGenerated] + readonly get; + [CompilerGenerated] + set; + } + + public TableLayoutPanelCellPosition(int column, int row) + { + this.Column = column; + this.Row = row; + } + + public override readonly bool Equals(object other) + { + if(other is TableLayoutPanelCellPosition cell) + { + return Equals(cell); + } + return false; + } + + public readonly bool Equals(TableLayoutPanelCellPosition other) + { + return this.Column == other.Column && this.Row == other.Row; + } + + public static bool operator ==(TableLayoutPanelCellPosition p1, TableLayoutPanelCellPosition p2) + { + return p1.Equals(p2); + } + + public static bool operator !=(TableLayoutPanelCellPosition p1, TableLayoutPanelCellPosition p2) + { + return p1.Equals(p2) == false; + } + + public override readonly string ToString() + { + return $"[{this.Column},{this.Row}]"; + } + + public override readonly int GetHashCode() + { + return this.Column.GetHashCode() & this.Row.GetHashCode(); + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/TableLayoutBase/TableLayoutPanelGrowStyle.cs b/Source/GTKSystem.Windows.Forms/GTKControls/TableLayoutBase/TableLayoutPanelGrowStyle.cs new file mode 100644 index 0000000000000000000000000000000000000000..0b11a14c0f9014e519dd90e504fc471b052872a5 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/TableLayoutBase/TableLayoutPanelGrowStyle.cs @@ -0,0 +1,9 @@ +namespace System.Windows.Forms +{ + public enum TableLayoutPanelGrowStyle + { + FixedSize, + AddRows, + AddColumns + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/TableLayoutBase/TableLayoutRowStyleCollection.cs b/Source/GTKSystem.Windows.Forms/GTKControls/TableLayoutBase/TableLayoutRowStyleCollection.cs new file mode 100644 index 0000000000000000000000000000000000000000..8c5ed4f2a660b742c9727dba1044512d6cabd12f --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/TableLayoutBase/TableLayoutRowStyleCollection.cs @@ -0,0 +1,49 @@ +using System.Windows.Forms.Layout; + +namespace System.Windows.Forms +{ + public class TableLayoutRowStyleCollection : TableLayoutStyleCollection + { + + public new RowStyle this[int index] + { + get { return (RowStyle)base[index]; } + set { base[index] = value; } + } + + internal TableLayoutRowStyleCollection(IArrangedElement Owner):base(Owner) + { + + } + + internal TableLayoutRowStyleCollection() : base(null) + { + + } + + public int Add(RowStyle rowStyle) + { + return base.Add(rowStyle); + } + + public void Insert(int index, RowStyle rowStyle) + { + base.Insert(index, rowStyle); + } + + public void Remove(RowStyle rowStyle) + { + base.Remove(rowStyle); + } + + public bool Contains(RowStyle rowStyle) + { + return base.Contains(rowStyle); + } + + public int IndexOf(RowStyle rowStyle) + { + return base.IndexOf(rowStyle); + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/TableLayoutBase/TableLayoutSettings.cs b/Source/GTKSystem.Windows.Forms/GTKControls/TableLayoutBase/TableLayoutSettings.cs new file mode 100644 index 0000000000000000000000000000000000000000..5d5989852c03e8218e3c1459d4a208e2eabb9638 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/TableLayoutBase/TableLayoutSettings.cs @@ -0,0 +1,16 @@ +using System.Collections.Generic; +using System.ComponentModel; +using System.Runtime.Serialization; + + +namespace System.Windows.Forms +{ + [Serializable] + public sealed class TableLayoutSettings : ISerializable + { + public void GetObjectData(SerializationInfo info, StreamingContext context) + { + + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/TableLayoutBase/TableLayoutStyle.cs b/Source/GTKSystem.Windows.Forms/GTKControls/TableLayoutBase/TableLayoutStyle.cs new file mode 100644 index 0000000000000000000000000000000000000000..6e9bf67940303b5c951d5ebb00081ff1c72bc0d5 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/TableLayoutBase/TableLayoutStyle.cs @@ -0,0 +1,37 @@ +using System.ComponentModel; +using System.Windows.Forms.Layout; + +namespace System.Windows.Forms +{ + public abstract class TableLayoutStyle + { + [DefaultValue(SizeType.AutoSize)] + public SizeType SizeType + { + get; + set; + } + + internal float Size + { + get; + set; + } + + internal IArrangedElement Owner + { + get; + set; + } + + internal void SetSize(float size) + { + this.Size = size; + } + + protected TableLayoutStyle() + { + + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/TableLayoutBase/TableLayoutStyleCollection.cs b/Source/GTKSystem.Windows.Forms/GTKControls/TableLayoutBase/TableLayoutStyleCollection.cs new file mode 100644 index 0000000000000000000000000000000000000000..fd1603c722ada50f57544b45715f6a1b6d06ad91 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/TableLayoutBase/TableLayoutStyleCollection.cs @@ -0,0 +1,40 @@ +using System.Collections; + +namespace System.Windows.Forms +{ + public abstract class TableLayoutStyleCollection : ArrayList + { + internal IArrangedElement Owner + { + get; + private set; + } + + public new TableLayoutStyle this[int index] + { + get + { + return (TableLayoutStyle)base[index]; + } + set + { + base[index] = value; + } + } + internal TableLayoutStyleCollection(IArrangedElement owner) + { + Owner = owner; + + } + + public int Add(TableLayoutStyle style) + { + return base.Add(style); + } + + internal void EnsureOwnership(IArrangedElement owner) + { + Owner = owner; + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/TableLayoutPanel.cs b/Source/GTKSystem.Windows.Forms/GTKControls/TableLayoutPanel.cs new file mode 100644 index 0000000000000000000000000000000000000000..820f561d1e71b3d502009a2f9d81fb524266f4ad --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/TableLayoutPanel.cs @@ -0,0 +1,269 @@ +/* + * GTKԭC#ؼwinformĿƽ̨ + * ʹñGTKSystem.Windows.FormsMicrosoft.WindowsDesktop.App.WindowsFormsһα룬ƽ̨windowslinuxmacos + * ֧438865652@qq.comhttps://gitee.com/easywebfactory, https://www.cnblogs.com/easywebfactory + * author:chenhongjin + * date: 2024/1/3 + */ +using Gtk; +using GTKSystem.Windows.Forms.GTKControls.ControlBase; +using System.Collections.Generic; +using System.ComponentModel; +using static System.Windows.Forms.TableLayoutControlCollection; + +namespace System.Windows.Forms +{ + //[ProvideProperty("ColumnSpan", typeof(Control))] + //[ProvideProperty("RowSpan", typeof(Control))] + //[ProvideProperty("Row", typeof(Control))] + //[ProvideProperty("Column", typeof(Control))] + //[ProvideProperty("CellPosition", typeof(Control))] + //[DefaultProperty("ColumnCount")] + [DesignerCategory("Component")] + public partial class TableLayoutPanel : ContainerControl, IExtenderProvider + { + public readonly TableLayoutPanelBase self = new TableLayoutPanelBase(); + public override object GtkControl => self; + private TableLayoutControlCollection _controls; + private TableLayoutColumnStyleCollection _columnStyles; + private TableLayoutRowStyleCollection _rowStyles; + public TableLayoutPanel():base() + { + _controls=new TableLayoutControlCollection(this); + _columnStyles = new TableLayoutColumnStyleCollection(); + _rowStyles = new TableLayoutRowStyleCollection(); + } + + public override void PerformLayout() + { + + } + + [Browsable(false)] + public override BorderStyle BorderStyle + { + get; + set; + } + + + [Localizable(true)] + public TableLayoutPanelCellBorderStyle CellBorderStyle + { + get; + set; + } + + [Browsable(false)] + public new TableLayoutControlCollection Controls + { + get => _controls; + } + + [DefaultValue(0)] + [Localizable(true)] + public int ColumnCount + { + get; + set; + } + + public TableLayoutPanelGrowStyle GrowStyle + { + get; + set; + } + + [DefaultValue(0)] + [Localizable(true)] + public int RowCount + { + get; + set; + } + + [DisplayName("Rows")] + [Browsable(false)] + public TableLayoutRowStyleCollection RowStyles + { + get => _rowStyles; + } + + + [DisplayName("Columns")] + [Browsable(false)] + public TableLayoutColumnStyleCollection ColumnStyles + { + get => _columnStyles; + } + + bool IExtenderProvider.CanExtend(object obj) + { + throw null; + } + + [DefaultValue(1)] + [DisplayName("ColumnSpan")] + public int GetColumnSpan(Control control) + { + throw null; + } + + public void SetColumnSpan(Control control, int value) + { + throw null; + } + + [DefaultValue(1)] + [DisplayName("RowSpan")] + public int GetRowSpan(Control control) + { + throw null; + } + + public void SetRowSpan(Control control, int value) + { + throw null; + } + + [DefaultValue(-1)] + [DisplayName("Row")] + public int GetRow(Control control) + { + throw null; + } + + public void SetRow(Control control, int row) + { + + } + + [DisplayName("Cell")] + public TableLayoutPanelCellPosition GetCellPosition(Control control) + { + throw null; + } + + public void SetCellPosition(Control control, TableLayoutPanelCellPosition position) + { + + } + + [DefaultValue(-1)] + [DisplayName("Column")] + public int GetColumn(Control control) + { + throw null; + } + + public void SetColumn(Control control, int column) + { + + } + + public Control GetControlFromPosition(int column, int row) + { + return _controls.GetCellControl(column, row) as Control; + } + + public TableLayoutPanelCellPosition GetPositionFromControl(Control control) + { + foreach (TableLayoutControllCell item in _controls) + { + if (item.Control.Equals(control)) + return item.TableLayoutPanelCellPosition; + } + return default(TableLayoutPanelCellPosition); + } + + [Browsable(false)] + [EditorBrowsable(EditorBrowsableState.Never)] + public int[] GetColumnWidths() + { + List list = new List(); + float gridWidth = this.Width; + float absoluteWidth = 0; + + int col= 0; + foreach (ColumnStyle style in ColumnStyles) + { + if(style.SizeType==SizeType.Absolute) + { + absoluteWidth += style.Width; + } + } + float lastGridWidth = gridWidth - absoluteWidth; + foreach (ColumnStyle style in ColumnStyles) + { + if (style.SizeType == SizeType.Absolute) + { + list.Add((int)style.Width); + } + else if (style.SizeType == SizeType.Percent) + { + list.Add((int)(style.Width*0.01* lastGridWidth)); + } + else if (style.SizeType == SizeType.AutoSize) + { + int colMaxWidth = 0; + int row = 0; + foreach (RowStyle rowStyle in RowStyles) + { + if (self.GetChildAt(col, row) != null) + colMaxWidth = Math.Max(colMaxWidth, self.GetChildAt(col, row).AllocatedWidth); + row++; + } + list.Add(colMaxWidth); + } + col++; + } + + return list.ToArray(); + } + + [Browsable(false)] + public int[] GetRowHeights() + { + List list = new List(); + float gridHeight = this.Height; + float absoluteHeight = 0; + int row = 0; + int col = 0; + foreach (RowStyle style in RowStyles) + { + if (style.SizeType == SizeType.Absolute) + { + absoluteHeight += style.Height; + } + } + float lastGridHeight = gridHeight - absoluteHeight; + foreach (RowStyle style in RowStyles) + { + if (style.SizeType == SizeType.Absolute) + { + list.Add((int)style.Height); + } + else if (style.SizeType == SizeType.Percent) + { + list.Add((int)(style.Height * 0.01 * lastGridHeight)); + } + else if (style.SizeType == SizeType.AutoSize) + { + int colMaxHeight = 0; + foreach (ColumnStyle colStyle in ColumnStyles) + { + if (self.GetChildAt(col, row)!=null) + { + colMaxHeight = Math.Max(colMaxHeight, self.GetChildAt(col, row).AllocatedHeight); + } + row++; + } + list.Add(colMaxHeight); + } + col++; + } + + return list.ToArray(); + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/TextBox.cs b/Source/GTKSystem.Windows.Forms/GTKControls/TextBox.cs index 1c1519502d3805b37dcb93bb54404049bbf17e21..7630b3cca0f99c5dd0b8b1a1051a620f6dab8288 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/TextBox.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/TextBox.cs @@ -1,29 +1,37 @@ -//基于GTK3.24.24.34版本组件开发,兼容原生C#控件winform界面的跨平台界面组件。 -//使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows和linux运行 -//技术支持438865652@qq.com,https://www.cnblogs.com/easywebfactory +/* + * 基于GTK组件开发,兼容原生C#控件winform界面的跨平台界面组件。 + * 使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows、linux、macos运行 + * 技术支持438865652@qq.com,https://gitee.com/easywebfactory, https://www.cnblogs.com/easywebfactory + * author:chenhongjin + * date: 2024/1/3 + */ +using GTKSystem.Windows.Forms.GTKControls.ControlBase; using System.ComponentModel; namespace System.Windows.Forms { [DesignerCategory("Component")] - public partial class TextBox: WidgetControl + public partial class TextBox: Control { + public readonly TextBoxBase self = new TextBoxBase(); + public override object GtkControl => self; public TextBox() : base() { - Control.StyleContext.AddClass("TextBox"); - Widget.StyleContext.AddClass("BorderRadiusStyle"); - base.Control.HasFrame = false; - base.Control.MaxWidthChars = 1; - base.Control.WidthChars = 0; - + self.HasFrame = false; + self.MaxWidthChars = 1; + self.WidthChars = 0; + self.SupportMultidevice = true; + self.TruncateMultiline = true; + self.Valign = Gtk.Align.Start; + self.Halign = Gtk.Align.Start; } - public override string Text { get { return base.Control.Text; } set { base.Control.Text = value; } } - public virtual char PasswordChar { get => base.Control.InvisibleChar; set { base.Control.InvisibleChar = value; } } + public override string Text { get { return self.Text; } set { self.Text = value ?? ""; } } + public virtual char PasswordChar { get => self.InvisibleChar; set { self.InvisibleChar = value; } } public override event EventHandler TextChanged { - add { base.Control.Changed += (object sender, EventArgs e) => { value.Invoke(sender, e); }; } - remove { base.Control.Changed -= (object sender, EventArgs e) => { value.Invoke(sender, e); }; } + add { self.Changed += (object sender, EventArgs e) => { value.Invoke(this, e); }; } + remove { self.Changed -= (object sender, EventArgs e) => { value.Invoke(this, e); }; } } - + public bool Multiline { get; set; } } } diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Timer.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Timer.cs index 9cde78178bc50a243997143dfa804ab94d7a2d97..a11eef9eb1dc5af6b90196cfb3e3aaec724947b6 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/Timer.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Timer.cs @@ -1,4 +1,11 @@ -using System.ComponentModel; +/* + * 基于GTK组件开发,兼容原生C#控件winform界面的跨平台界面组件。 + * 使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows、linux、macos运行 + * 技术支持438865652@qq.com,https://gitee.com/easywebfactory, https://www.cnblogs.com/easywebfactory + * author:chenhongjin + * date: 2024/1/3 + */ +using System.ComponentModel; namespace System.Windows.Forms { @@ -31,8 +38,8 @@ namespace System.Windows.Forms public event EventHandler Tick { - add { TimersTimer.Elapsed += (object sender, Timers.ElapsedEventArgs e)=> { value.Invoke(sender, e); }; } - remove { TimersTimer.Elapsed -= (object sender, Timers.ElapsedEventArgs e) => { value.Invoke(sender, e); }; } + add { TimersTimer.Elapsed += (object sender, Timers.ElapsedEventArgs e)=> { value.Invoke(this, e); }; } + remove { TimersTimer.Elapsed -= (object sender, Timers.ElapsedEventArgs e) => { value.Invoke(this, e); }; } } public void Start() diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStrip.cs b/Source/GTKSystem.Windows.Forms/GTKControls/ToolStrip.cs similarity index 51% rename from Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStrip.cs rename to Source/GTKSystem.Windows.Forms/GTKControls/ToolStrip.cs index 00b79a4fcfe38aff4075a5bc7b91348c71cd6eaf..8f349a63ca4a96f1282181c6b7d6ba195de38fdb 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/MenuStripBase/ToolStrip.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/ToolStrip.cs @@ -1,21 +1,41 @@ -using System; +/* + * 基于GTK组件开发,兼容原生C#控件winform界面的跨平台界面组件。 + * 使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows、linux、macos运行 + * 技术支持438865652@qq.com,https://gitee.com/easywebfactory, https://www.cnblogs.com/easywebfactory + * author:chenhongjin + * date: 2024/1/3 + */ +using System; using System.Collections.Generic; using System.Text; using System.Drawing; using System.Collections; using Gtk; +using GTKSystem.Windows.Forms.GTKControls.ControlBase; namespace System.Windows.Forms { - public class ToolStrip : WidgetControl + public class ToolStrip : Control { + public readonly ToolStripBase self = new ToolStripBase(); + public override object GtkControl => self; public ToolStripItemCollection toolStripItemCollection; - public ToolStrip() + public ToolStrip() : base() { toolStripItemCollection = new ToolStripItemCollection(this); - base.Control.ActivateCurrent += ToolStripItem_Activated; + self.ActivateCurrent += ToolStripItem_Activated; + Dock = DockStyle.Top; + } + public ToolStrip(string owner) : base() + { + self.StyleContext.AddClass("ToolStrip"); + self.Hexpand = false; + self.Vexpand = false; + self.Valign = Gtk.Align.Start; + self.Halign = Gtk.Align.Start; + toolStripItemCollection = new ToolStripItemCollection(this, owner); + self.ActivateCurrent += ToolStripItem_Activated; } - private void ToolStripItem_Activated(object sender, ActivateCurrentArgs e) { if (Click != null) @@ -35,7 +55,7 @@ namespace System.Windows.Forms DropDownItemClicked(this, new ToolStripItemClickedEventArgs(new ToolStripItem())); } } - + public override Size Size { get => base.Size; set => base.Size = new Size(value.Width, 30); } public ToolStripItemCollection Items { get diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/TrackBar.cs b/Source/GTKSystem.Windows.Forms/GTKControls/TrackBar.cs new file mode 100644 index 0000000000000000000000000000000000000000..52032a1160a33b82ae7751505ea5de352d5a3181 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/TrackBar.cs @@ -0,0 +1,60 @@ +/* + * GTKԭC#ؼwinformĿƽ̨ + * ʹñGTKSystem.Windows.FormsMicrosoft.WindowsDesktop.App.WindowsFormsһα룬ƽ̨windowslinuxmacos + * ֧438865652@qq.comhttps://gitee.com/easywebfactory, https://www.cnblogs.com/easywebfactory + * author:chenhongjin + * date: 2024/1/3 + */ +using Gtk; +using GTKSystem.Windows.Forms.GTKControls.ControlBase; +using Pango; +using System.ComponentModel; +using System.Diagnostics.CodeAnalysis; +using System.Drawing; + +namespace System.Windows.Forms +{ + [DesignerCategory("Component")] + public class TrackBar : Control + { + public readonly TrackBarBase self = new TrackBarBase(); + public override object GtkControl => self; + Gtk.Adjustment adjustment = new Gtk.Adjustment(10, 0, 100, 1, 1, 0); + Gtk.Scale scale; + public TrackBar():base() + { + self.Realized += Control_Realized; + } + + private void Control_Realized(object sender, EventArgs e) + { + scale = new Gtk.Scale(Orientation== Orientation.Horizontal ? Gtk.Orientation.Horizontal : Gtk.Orientation.Vertical, adjustment); + scale.ShowFillLevel = true; + scale.DrawValue = false; + scale.RoundDigits = 1; + scale.Visible = true; + scale.Inverted = Orientation == Orientation.Vertical; + adjustment.Lower = Minimum; + adjustment.Upper = Maximum; + adjustment.Value = Value; + adjustment.ValueChanged += Control_ValueChanged; + self.Child = scale; + } + + private void Control_ValueChanged(object sender, EventArgs e) + { + Value = (int)adjustment.Value; + if (Scroll != null) + Scroll(this, e); + } + + public int LargeChange { get; set; } = 5; + public int Maximum { get; set; } + public int Minimum { get; set; } + public int Value { get=> (int)adjustment.Value; set=> adjustment.Value = value; } + public System.Windows.Forms.Orientation Orientation { get; set; } + public int TickFrequency { get; set; } + public System.Windows.Forms.TickStyle TickStyle { get; set; } + public event EventHandler Scroll; + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/TreeView.cs b/Source/GTKSystem.Windows.Forms/GTKControls/TreeView.cs index 9bc48a49c7cc6047bbbf00713c5400d1782f5a90..5c6c7380b6377d07d7b23c7a3484b5777a54730f 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/TreeView.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/TreeView.cs @@ -1,28 +1,34 @@ -//基于GTK3.24.24.34版本组件开发,兼容原生C#控件winform界面的跨平台界面组件。 -//使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows和linux运行 -//技术支持438865652@qq.com,https://www.cnblogs.com/easywebfactory +/* + * 基于GTK组件开发,兼容原生C#控件winform界面的跨平台界面组件。 + * 使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows、linux、macos运行 + * 技术支持438865652@qq.com,https://gitee.com/easywebfactory, https://www.cnblogs.com/easywebfactory + * author:chenhongjin + * date: 2024/1/3 + */ +using Atk; +using GLib; using Gtk; +using GTKSystem.Windows.Forms.GTKControls.ControlBase; +using System.Collections.Generic; using System.ComponentModel; -using System.Data.Common; -using System.Reflection; +using System.Linq; +using System.Xml.Linq; + namespace System.Windows.Forms { [DesignerCategory("Component")] - public partial class TreeView : WidgetControl + public partial class TreeView : Control { + public readonly TreeViewBase self = new TreeViewBase(); + public override object GtkControl => self; private Gtk.TreeStore _store; internal TreeNode root; internal Gtk.TreeStore Store { get { return _store; } } private Gtk.TreeViewColumn textcolumn; private Gtk.TreeViewColumn checkboxcolumn; - public TreeView() + public TreeView() : base() { - Widget.StyleContext.AddClass("TreeView"); - base.Control.BorderWidth = 0; - base.Control.Expand = true; - base.Control.HeadersVisible = false; - base.Control.ActivateOnSingleClick = true; root = new TreeNode(this); root.Name = "root"; @@ -38,24 +44,15 @@ namespace System.Windows.Forms checkboxcolumn = new Gtk.TreeViewColumn("", renderercheckbox, "active", 1); _store = new Gtk.TreeStore(typeof(string), typeof(bool)); - base.Control.Model = _store; - base.Control.Realized += Control_Realized; + self.Model = _store; + self.Realized += Control_Realized; } private void Control_Realized(object sender, EventArgs e) { - base.Control.AppendColumn(textcolumn); + self.AppendColumn(textcolumn); if (CheckBoxes == true) - base.Control.AppendColumn(checkboxcolumn); - - //Console.Write("TreeView_Shown"+ root.Nodes.Count); - foreach (TreeNode child in root.Nodes) - { - child.Index = ++index; - TreeIter ti = Store.InsertWithValues(child.Index, child.Text, false); - loadNodeChildrenValue(child, ti); - } - base.Control.ExpandAll(); + self.AppendColumn(checkboxcolumn); } private void CellName_Toggled(object o, ToggledArgs args) @@ -68,15 +65,15 @@ namespace System.Windows.Forms model.SetValue(iter, 1, val == false); } - - int index = 0; - private void loadNodeChildrenValue(TreeNode node, TreeIter parent) + internal void LoadNodeValue(TreeNode node, TreeIter parent) { + TreeIter iter = parent.Equals(TreeIter.Zero) ? Store.AppendValues(node.Text, false) : Store.AppendValues(parent, node.Text, false); + TreePath path = Store.GetPath(iter); + node.Index = string.Join(",", path.Indices); + node.TreeIter = iter; foreach (TreeNode child in node.Nodes) { - child.Index = ++index; - TreeIter ti = Store.InsertWithValues(parent, child.Index, child.Text, false); - loadNodeChildrenValue(child, ti); + LoadNodeValue(child, iter); } } public TreeNodeCollection Nodes @@ -92,20 +89,85 @@ namespace System.Windows.Forms public bool ShowNodeToolsTips { get; set; } public bool ShowPlusMinus { get; set; } = true; public bool ShowRootLines { get; set; } = true; - + public object SelectedItem + { + get + { + //TreeViewItem item = new TreeViewItem(this); + return SelectedNode.Text; + } + } + public object SelectedValue + { + get + { + return SelectedNode.Text; + } + } + public string SelectedValuePath + { + get + { + string nodePath = string.Empty; + if (self.Selection.GetSelected(out TreeIter iter)) + { + TreePath[] paths = self.Selection.GetSelectedRows(); + List nodeNames = new List(); + GetNodePath(root, paths[0].Indices, 0, ref nodeNames); + nodePath = string.Join(PathSeparator, nodeNames); + } + return nodePath; + } + set { } + } + [DefaultValue("\\")] + public string PathSeparator + { + get; + set; + } = "\\"; + public TreeNode SelectedNode + { + get + { + if (self.Selection.GetSelected(out TreeIter iter)) { + TreePath[] paths = self.Selection.GetSelectedRows(); + TreeNode result = new TreeNode(); + GetNodeChild(root, paths[0].Indices, ref result); + return result; + } + else { return null; } + } + set + { + self.Selection.SelectIter(value.TreeIter); + } + } + public TreeNode TopNode + { + get + { + return root; + } + set + { + + } + } TreeViewCancelEventArgs cancelEventArgs = null; public event TreeViewCancelEventHandler BeforeSelect { add { - base.Control.Selection.Changed += (object sender, EventArgs e) => + self.Selection.Changed += (object sender, EventArgs e) => { - if (base.Control.IsRealized) + if (self.IsRealized) { - if (base.Control.Selection.GetSelected(out TreeIter iter)) + if (self.Selection.GetSelected(out TreeIter iter)) { - TreePath[] paths = base.Control.Selection.GetSelectedRows(); - GetNodeChild(root, paths[0].Indices[0], out TreeNode result); + TreePath[] paths = self.Selection.GetSelectedRows(); + TreeNode result = new TreeNode(); + GetNodeChild(root, paths[0].Indices, ref result); cancelEventArgs = new TreeViewCancelEventArgs(result, false, TreeViewAction.ByMouse); value.Invoke(sender, cancelEventArgs); } @@ -114,14 +176,15 @@ namespace System.Windows.Forms } remove { - base.Control.Selection.Changed -= (object sender, EventArgs e) => + self.Selection.Changed -= (object sender, EventArgs e) => { - if (base.Control.IsRealized) + if (self.IsRealized) { - if (base.Control.Selection.GetSelected(out TreeIter iter)) + if (self.Selection.GetSelected(out TreeIter iter)) { - TreePath[] paths = base.Control.Selection.GetSelectedRows(); - GetNodeChild(root, paths[0].Indices[0], out TreeNode result); + TreePath[] paths = self.Selection.GetSelectedRows(); + TreeNode result = new TreeNode(); + GetNodeChild(root, paths[0].Indices, ref result); cancelEventArgs = new TreeViewCancelEventArgs(result, false, TreeViewAction.ByMouse); value.Invoke(sender, cancelEventArgs); } @@ -133,28 +196,30 @@ namespace System.Windows.Forms { add { - base.Control.RowActivated += (object sender, Gtk.RowActivatedArgs e) => + self.RowActivated += (object sender, Gtk.RowActivatedArgs e) => { - if (base.Control.IsRealized) + if (self.IsRealized) { if (cancelEventArgs == null || cancelEventArgs.Cancel == false) { - GetNodeChild(root, e.Path.Indices[0], out TreeNode result); - value.Invoke(sender, new TreeViewEventArgs(result)); + TreeNode result = new TreeNode(); + GetNodeChild(root, e.Path.Indices, ref result); + value.Invoke(this, new TreeViewEventArgs(result)); } } }; } remove { - base.Control.RowActivated -= (object sender, Gtk.RowActivatedArgs e) => + self.RowActivated -= (object sender, Gtk.RowActivatedArgs e) => { - if (base.Control.IsRealized) + if (self.IsRealized) { if (cancelEventArgs == null || cancelEventArgs.Cancel == false) { - GetNodeChild(root, e.Path.Indices[0], out TreeNode result); - value.Invoke(sender, new TreeViewEventArgs(result)); + TreeNode result = new TreeNode(); + GetNodeChild(root, e.Path.Indices, ref result); + value.Invoke(this, new TreeViewEventArgs(result)); } } }; @@ -165,23 +230,25 @@ namespace System.Windows.Forms { add { - base.Control.RowCollapsed += (object sender, Gtk.RowCollapsedArgs e) => + self.RowCollapsed += (object sender, Gtk.RowCollapsedArgs e) => { - if (base.Control.IsRealized) + if (self.IsRealized) { - GetNodeChild(root, e.Path.Indices[0], out TreeNode result); - value.Invoke(sender, new TreeViewEventArgs(result)); + TreeNode result = new TreeNode(); + GetNodeChild(root, e.Path.Indices, ref result); + value.Invoke(this, new TreeViewEventArgs(result, TreeViewAction.Collapse)); } }; } remove { - base.Control.RowCollapsed -= (object sender, Gtk.RowCollapsedArgs e) => + self.RowCollapsed -= (object sender, Gtk.RowCollapsedArgs e) => { - if (base.Control.IsRealized) + if (self.IsRealized) { - GetNodeChild(root, e.Path.Indices[0], out TreeNode result); - value.Invoke(sender, new TreeViewEventArgs(result)); + TreeNode result = new TreeNode(); + GetNodeChild(root, e.Path.Indices, ref result); + value.Invoke(this, new TreeViewEventArgs(result, TreeViewAction.Collapse)); } }; } @@ -191,40 +258,74 @@ namespace System.Windows.Forms { add { - base.Control.RowExpanded += (object sender, Gtk.RowExpandedArgs e) => + self.RowExpanded += (object sender, Gtk.RowExpandedArgs e) => { - if (base.Control.IsRealized) + if (self.IsRealized) { - GetNodeChild(root, e.Path.Indices[0], out TreeNode result); - value.Invoke(sender, new TreeViewEventArgs(result)); + TreeNode result = new TreeNode(); + GetNodeChild(root, e.Path.Indices, ref result); + value.Invoke(this, new TreeViewEventArgs(result, TreeViewAction.Expand)); } }; } remove { - base.Control.RowExpanded -= (object sender, Gtk.RowExpandedArgs e) => + self.RowExpanded -= (object sender, Gtk.RowExpandedArgs e) => { - if (base.Control.IsRealized) + if (self.IsRealized) { - GetNodeChild(root, e.Path.Indices[0], out TreeNode result); - value.Invoke(sender, new TreeViewEventArgs(result)); + TreeNode result = new TreeNode(); + GetNodeChild(root, e.Path.Indices, ref result); + value.Invoke(this, new TreeViewEventArgs(result, TreeViewAction.Expand)); } }; } } - - private void GetNodeChild(TreeNode node, int index,out TreeNode result) + private void GetNodeChild(TreeNode node, int[] indices, ref TreeNode result) { - result = null; + string nodeIndex= string.Join(",", indices); foreach (TreeNode child in node.Nodes) { - if(child.Index == index) + if (child.Index == nodeIndex) { result = child; + return; + } + else if (nodeIndex.Length >= child.Index.Length) + { + GetNodeChild(child, indices, ref result); } - else + } + } + + private void GetNodeChilds(TreeNode node, int[] indices, int depth, ref TreeNode result, ref TreeNode lastNode) + { + TreeNode treeNode = new TreeNode(); + string nodeIndex = string.Join(",", indices.Take(depth + 1)); + foreach (TreeNode child in node.Nodes) + { + if (child.Index == nodeIndex) + { + treeNode = (TreeNode)child.Clone(); + result.Nodes.Add(treeNode); + depth++; + if (depth < indices.Length) + GetNodeChilds(child, indices, depth, ref treeNode, ref lastNode); + } + } + lastNode = treeNode; + } + private void GetNodePath(TreeNode node, int[] indices, int depth, ref List nodePath) + { + string nodeIndex = string.Join(",", indices.Take(depth + 1)); + foreach (TreeNode child in node.Nodes) + { + if (child.Index == nodeIndex) { - GetNodeChild(child, index,out result); + nodePath.Add(child.Text); + depth++; + if (depth < indices.Length) + GetNodePath(child, indices, depth, ref nodePath); } } } diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/TreeViewBase/TreeNode.cs b/Source/GTKSystem.Windows.Forms/GTKControls/TreeViewBase/TreeNode.cs index 6d099e5a47e3b38fc2ae12c12f22ff3a05019750..926c0ecd43727b7fa049d3e104e5c1bb6505341f 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/TreeViewBase/TreeNode.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/TreeViewBase/TreeNode.cs @@ -3,7 +3,6 @@ // See the LICENSE file in the project root for more information. using System.ComponentModel; -using System.Reflection.Metadata; using System.Runtime.Serialization; using System.Diagnostics.CodeAnalysis; @@ -11,9 +10,10 @@ namespace System.Windows.Forms { public class TreeNode: ICloneable, ISerializable, IEquatable { - private int index = 0; - internal int Index { get { return index; } set { index = value; } } - + //格式,各级索引并集:1,2,3.... + private string index = ""; + internal string Index { get { return index; } set { index = value; } } + internal Gtk.TreeIter TreeIter = Gtk.TreeIter.Zero; private TreeNode parent; internal TreeView treeView; internal TreeView TreeView { get { return treeView; } } @@ -100,7 +100,12 @@ namespace System.Windows.Forms public object Clone() { TreeNode newnode = new TreeNode(treeView); - Array.ForEach(newnode.GetType().GetProperties(), o => { o.SetValue(this, o.GetValue(this)); }); + Reflection.PropertyInfo[] props = newnode.GetType().GetProperties(Reflection.BindingFlags.Public | Reflection.BindingFlags.Instance); + foreach(var pro in props) + { + if (pro.GetSetMethod()!=null) + pro.SetValue(newnode, pro.GetValue(this)); + } return newnode; } diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/TreeViewBase/TreeNodeCollection.cs b/Source/GTKSystem.Windows.Forms/GTKControls/TreeViewBase/TreeNodeCollection.cs index 8762a126e7b6d4d5c53a1470d5f04e3d889442b8..d976846fc11135e5a9f362dcef04eaa1280eacdb 100644 --- a/Source/GTKSystem.Windows.Forms/GTKControls/TreeViewBase/TreeNodeCollection.cs +++ b/Source/GTKSystem.Windows.Forms/GTKControls/TreeViewBase/TreeNodeCollection.cs @@ -1,4 +1,6 @@  +using Gtk; +using Pango; using System; using System.Collections; using System.Collections.Generic; @@ -32,9 +34,13 @@ namespace System.Windows.Forms { throw new ArgumentNullException("node"); } - node.Parent = node; + node.Parent = owner; node.treeView = owner.TreeView; base.Add(node); + if (owner != null && owner.TreeView != null) + { + owner.TreeView.LoadNodeValue(node, owner.TreeIter); + } } } } diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/UserControl.cs b/Source/GTKSystem.Windows.Forms/GTKControls/UserControl.cs new file mode 100644 index 0000000000000000000000000000000000000000..7bb3a06751c551a67bf44b85177582c4dc3c16ef --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/UserControl.cs @@ -0,0 +1,81 @@ +/* + * 基于GTK组件开发,兼容原生C#控件winform界面的跨平台界面组件。 + * 使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows、linux、macos运行 + * 技术支持438865652@qq.com,https://gitee.com/easywebfactory, https://www.cnblogs.com/easywebfactory + * author:chenhongjin + * date: 2024/1/3 + */ +using GLib; +using Gtk; +using GTKSystem.Windows.Forms.GTKControls.ControlBase; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.ComponentModel.Design; +using System.Drawing; +using System.Xml.Linq; + + +namespace System.Windows.Forms +{ + [DesignerCategory("UserControl")] + [DefaultEvent(nameof(Load))] + public partial class UserControl : ContainerControl + { + public readonly UserControlBase self = new UserControlBase(); + public override object GtkControl => self; + private Gtk.Layout contaner; + private ControlCollection _controls; + + public UserControl() : base() + { + contaner = new Gtk.Layout(new Gtk.Adjustment(IntPtr.Zero), new Gtk.Adjustment(IntPtr.Zero)); + contaner.MarginStart = 0; + contaner.MarginTop = 0; + contaner.BorderWidth = 0; + contaner.Halign = Align.Fill; + contaner.Valign = Align.Fill; + contaner.Expand = true; + contaner.Hexpand = true; + contaner.Vexpand = true; + _controls = new ControlCollection(this, contaner); + + self.Child = contaner; + //self.Drawn += Control_Drawn; + } + + private void Control_Drawn(object o, DrawnArgs args) + { + Gdk.Rectangle rec = Widget.Allocation; + PaintEventArgs paintEventArgs = new PaintEventArgs(new Graphics(this.Widget, args.Cr, rec), new Drawing.Rectangle(rec.X, rec.Y, rec.Width, rec.Height)); + + OnPaint(paintEventArgs); + } + + public override event EventHandler Load; + public System.Drawing.SizeF AutoScaleDimensions { get; set; } + public System.Windows.Forms.AutoScaleMode AutoScaleMode { get; set; } + public override BorderStyle BorderStyle { get { return self.ShadowType == Gtk.ShadowType.None ? BorderStyle.None : BorderStyle.FixedSingle; } set { self.BorderWidth = 1; self.ShadowType = Gtk.ShadowType.In; } } + public override ControlCollection Controls => _controls; + + protected override void OnPaint(System.Windows.Forms.PaintEventArgs e) + { + base.OnPaint(e); + } + protected override void OnParentChanged(EventArgs e) + { + } + public override void SuspendLayout() + { + + } + public override void ResumeLayout(bool performLayout) + { + + } + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKControls/Utility/ImageUtility.cs b/Source/GTKSystem.Windows.Forms/GTKControls/Utility/ImageUtility.cs new file mode 100644 index 0000000000000000000000000000000000000000..40d6c7a16cb520ccbd1ff4eb8ac38eff5aff8400 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKControls/Utility/ImageUtility.cs @@ -0,0 +1,271 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace GTKSystem.Windows.Forms.Utility +{ + public class ImageUtility + { + public static void ScaleImage(int width, int height, ref Gdk.Pixbuf imagePixbuf, byte[] imagebytes, PictureBoxSizeMode sizeMode, ImageLayout backgroundMode) + { + if (imagebytes != null) + { + Gdk.Pixbuf pix = new Gdk.Pixbuf(imagebytes); + if (width > 0 && height > 0) + { + using (var surface = new Cairo.ImageSurface(Cairo.Format.ARGB32, width, height)) + { + Gdk.Pixbuf showpix = new Gdk.Pixbuf(surface, 0, 0, width, height); + if (sizeMode == PictureBoxSizeMode.Normal && backgroundMode == ImageLayout.None) + { + pix.CopyArea(0, 0, Math.Min(pix.Width, showpix.Width), Math.Min(pix.Height, showpix.Height), showpix, 0, 0); + } + else if (sizeMode == PictureBoxSizeMode.StretchImage || backgroundMode == ImageLayout.Stretch) + { //缩放取全图铺满 + Gdk.Pixbuf newpix = pix.ScaleSimple(width, height, Gdk.InterpType.Tiles); + newpix.CopyArea(0, 0, newpix.Width, newpix.Height, showpix, 0, 0); + } + else if (sizeMode == PictureBoxSizeMode.CenterImage || backgroundMode == ImageLayout.Center) + { + //取原图中间 + int offsetx = (pix.Width - showpix.Width) / 2; + int offsety = (pix.Height - showpix.Height) / 2; + pix.CopyArea(offsetx > 0 ? offsetx : 0, offsety > 0 ? offsety : 0, Math.Min(pix.Width, showpix.Width), Math.Min(pix.Height, showpix.Height), showpix, offsetx < 0 ? -offsetx : 0, offsety < 0 ? -offsety : 0); + } + else if (sizeMode == PictureBoxSizeMode.Zoom || backgroundMode == ImageLayout.Zoom) + { + if (pix.Width / width > pix.Height / height) + { + //图片的宽高比大于设置宽高比,以宽为准 + Gdk.Pixbuf newpix = pix.ScaleSimple(width, width * pix.Height / pix.Width, Gdk.InterpType.Tiles); + newpix.CopyArea(0, 0, newpix.Width, newpix.Height, showpix, (showpix.Width - newpix.Width) / 2, (showpix.Height - newpix.Height) / 2); + } + else + { + Gdk.Pixbuf newpix = pix.ScaleSimple(height * pix.Width / pix.Height, height, Gdk.InterpType.Tiles); + newpix.CopyArea(0, 0, newpix.Width, newpix.Height, showpix, (showpix.Width - newpix.Width) / 2, (showpix.Height - newpix.Height) / 2); + } + } + else if (sizeMode == PictureBoxSizeMode.AutoSize) + { + pix.CopyArea(0, 0, Math.Min(pix.Width, showpix.Width), Math.Min(pix.Height, showpix.Height), showpix, 0, 0); + } + + if (backgroundMode == ImageLayout.Tile) + { + //平铺背景图,原图铺满 + if (pix.Width < width || pix.Height < height) + { + using (var surface2 = new Cairo.ImageSurface(Cairo.Format.ARGB32, width, height)) + { + Gdk.Pixbuf backgroundpix = new Gdk.Pixbuf(surface2, 0, 0, width, height); + for (int y = 0; y < height; y += pix.Height) + { + for (int x = 0; x < width; x += pix.Width) + { + pix.CopyArea(0, 0, width - x > pix.Width ? pix.Width : width - x, height - y > pix.Height ? pix.Height : height - y, backgroundpix, x, y); + } + } + imagePixbuf = backgroundpix; + } + } + else + { + imagePixbuf = showpix; + } + } + else + { + imagePixbuf = showpix; + } + } + } + } + } + + public static void DrawBackgroundImage(Cairo.Context ctx, Gdk.Pixbuf img, Gdk.Rectangle rec) + { + ctx.Save(); + ctx.ResetClip(); + ctx.Rectangle(rec.X, rec.Y, rec.Width, rec.Height); + ctx.Clip(); + ctx.Translate(rec.Left, rec.Top); + Gdk.CairoHelper.SetSourcePixbuf(ctx, img, 0, 0); + using (var p = ctx.GetSource()) + { + if (p is Cairo.SurfacePattern pattern) + { + pattern.Filter = Cairo.Filter.Fast; + } + } + ctx.Paint(); + ctx.Restore(); + } + public static void DrawImage(Cairo.Context ctx, Gdk.Pixbuf img, Gdk.Rectangle rec, ContentAlignment ImageAlign) + { + ctx.Save(); + if (ImageAlign == ContentAlignment.TopLeft) + ctx.Translate(rec.X, rec.Y); + else if (ImageAlign == ContentAlignment.TopCenter) + ctx.Translate((img.Width - rec.Width) / 2 + rec.X, rec.Y); + else if (ImageAlign == ContentAlignment.TopRight) + ctx.Translate((img.Width - rec.Width) + rec.X, rec.Y); + else if (ImageAlign == ContentAlignment.MiddleLeft) + ctx.Translate(rec.X, (img.Height - rec.Height) / 2 + rec.Y); + else if (ImageAlign == ContentAlignment.MiddleCenter) + ctx.Translate((img.Width - rec.Width) / 2 + rec.X, (img.Height - rec.Height) / 2 + rec.Y); + else if (ImageAlign == ContentAlignment.MiddleRight) + ctx.Translate((img.Width - rec.Width) + rec.X, (img.Height - rec.Height) / 2 + rec.Y); + else if (ImageAlign == ContentAlignment.BottomLeft) + ctx.Translate(rec.X, (img.Height - rec.Height) + rec.Y); + else if (ImageAlign == ContentAlignment.BottomCenter) + ctx.Translate((img.Width - rec.Width)/2 + rec.X, (img.Height - rec.Height) + rec.Y); + else if (ImageAlign == ContentAlignment.BottomRight) + ctx.Translate((img.Width - rec.Width) + rec.X, (img.Height - rec.Height) + rec.Y); + else + ctx.Translate(rec.X, rec.Y); + + Gdk.CairoHelper.SetSourcePixbuf(ctx, img, 0, 0); + using (var p = ctx.GetSource()) + { + if (p is Cairo.SurfacePattern pattern) + { + pattern.Filter = Cairo.Filter.Fast; + } + } + ctx.Paint(); + ctx.Restore(); + } + /// + /// PictureBox图像显示模式 + /// + /// + /// + /// + /// + /// + public static void ScaleImageByPictureBoxSizeMode(byte[] srcImageBytes, int width, int height, out Gdk.Pixbuf destImage, PictureBoxSizeMode sizeMode) + { + Gdk.Pixbuf srcPixbuf = new Gdk.Pixbuf(srcImageBytes); + using (var surface = new Cairo.ImageSurface(Cairo.Format.ARGB32, width, height)) + { + destImage = new Gdk.Pixbuf(surface, 0, 0, width, height); + + if (sizeMode == PictureBoxSizeMode.Normal) + { + //从左上角开始原图铺开,截剪多余 + srcPixbuf.Scale(destImage, 0, 0, Math.Min(srcPixbuf.Width, destImage.Width), Math.Min(srcPixbuf.Height, destImage.Height), 0, 0, 1, 1, Gdk.InterpType.Tiles); + } + else if (sizeMode == PictureBoxSizeMode.StretchImage) + { //自由缩放取全图铺满 + destImage = srcPixbuf.ScaleSimple(width, height, Gdk.InterpType.Tiles); + } + else if (sizeMode == PictureBoxSizeMode.CenterImage) + { + //取原图中间 + int offsetx = (destImage.Width- srcPixbuf.Width) / 2; + int offsety = (destImage.Height- srcPixbuf.Height) / 2; + srcPixbuf.Scale(destImage, 0, 0, destImage.Width, destImage.Height, offsetx, offsety, 1, 1, Gdk.InterpType.Tiles); + } + else if (sizeMode == PictureBoxSizeMode.Zoom) + { + //原图比例缩放,显示全图 + double scaleX = destImage.Width * 1f / srcPixbuf.Width; + double scaleY = destImage.Height * 1f / srcPixbuf.Height; + double scaleR = Math.Min(scaleX, scaleY); + //按最小缩放 + double srcWidth = scaleX > scaleY ? srcPixbuf.Width * scaleY : srcPixbuf.Width * scaleX; + double srcHeight = scaleX > scaleY ? srcPixbuf.Height * scaleY : srcPixbuf.Height * scaleX; + + int offsetx = (destImage.Width - (int)srcWidth) / 2; + int offsety = (destImage.Height - (int)srcHeight) / 2; + + srcPixbuf.Scale(destImage, offsetx > 0 ? offsetx: 0, offsety > 0 ? offsety : 0, (int)Math.Min(destImage.Width, srcWidth), Math.Min(destImage.Height, (int)srcHeight), offsetx > 0 ? offsetx : 0, offsety > 0 ? offsety : 0, scaleR, scaleR, Gdk.InterpType.Tiles); + } + else if (sizeMode == PictureBoxSizeMode.AutoSize) + { + //原图不缩放,撑开PictureBox + //destImage = srcPixbuf; + srcPixbuf.Scale(destImage, 0, 0, Math.Min(srcPixbuf.Width, destImage.Width), Math.Min(srcPixbuf.Height, destImage.Height), 0, 0, 1, 1, Gdk.InterpType.Tiles); + } + } + + } + /// + /// 背景图像显示模式 + /// + /// + /// + /// + /// + /// + public static void ScaleImageByImageLayout(byte[] srcImageBytes, int width, int height, out Gdk.Pixbuf destImage, ImageLayout layoutMode) + { + Gdk.Pixbuf srcPixbuf = new Gdk.Pixbuf(srcImageBytes); + using (var surface = new Cairo.ImageSurface(Cairo.Format.ARGB32, width, height)) + { + destImage = new Gdk.Pixbuf(surface, 0, 0, width, height); + + if (layoutMode == ImageLayout.None) + { + //从左上角开始原图铺开,截剪多余 + srcPixbuf.Scale(destImage, 0, 0, Math.Min(srcPixbuf.Width, destImage.Width), Math.Min(srcPixbuf.Height, destImage.Height), 0, 0, 1, 1, Gdk.InterpType.Tiles); + } + else if (layoutMode == ImageLayout.Stretch) + { //自由缩放取全图铺满 + destImage = srcPixbuf.ScaleSimple(width, height, Gdk.InterpType.Tiles); + } + else if (layoutMode == ImageLayout.Center) + { + //取原图中间 + int offsetx = (destImage.Width - srcPixbuf.Width) / 2; + int offsety = (destImage.Height - srcPixbuf.Height) / 2; + srcPixbuf.Scale(destImage, 0, 0, destImage.Width, destImage.Height, offsetx, offsety, 1, 1, Gdk.InterpType.Tiles); + } + else if (layoutMode == ImageLayout.Zoom) + { + //原图比例缩放,显示全图 + double scaleX = destImage.Width * 1f / srcPixbuf.Width; + double scaleY = destImage.Height * 1f / srcPixbuf.Height; + double scaleR = Math.Min(scaleX, scaleY); + //按最小缩放 + double srcWidth = scaleX > scaleY ? srcPixbuf.Width * scaleY : srcPixbuf.Width * scaleX; + double srcHeight = scaleX > scaleY ? srcPixbuf.Height * scaleY : srcPixbuf.Height * scaleX; + + int offsetx = (destImage.Width - (int)srcWidth) / 2; + int offsety = (destImage.Height - (int)srcHeight) / 2; + + srcPixbuf.Scale(destImage, offsetx > 0 ? offsetx : 0, offsety > 0 ? offsety : 0, (int)Math.Min(destImage.Width, srcWidth), Math.Min(destImage.Height, (int)srcHeight), offsetx > 0 ? offsetx : 0, offsety > 0 ? offsety : 0, scaleR, scaleR, Gdk.InterpType.Tiles); + } + else if (layoutMode == ImageLayout.Tile) + { + //原图不缩放重复直到铺满 + //平铺背景图,原图铺满 + if (srcPixbuf.Width < width || srcPixbuf.Height < height) + { + using (var surface2 = new Cairo.ImageSurface(Cairo.Format.ARGB32, width, height)) + { + Gdk.Pixbuf backgroundpix = new Gdk.Pixbuf(surface2, 0, 0, width, height); + for (int y = 0; y < height; y += srcPixbuf.Height) + { + for (int x = 0; x < width; x += srcPixbuf.Width) + { + srcPixbuf.CopyArea(0, 0, width - x > srcPixbuf.Width ? srcPixbuf.Width : width - x, height - y > srcPixbuf.Height ? srcPixbuf.Height : height - y, backgroundpix, x, y); + } + } + destImage = backgroundpix; + } + } + else + { + srcPixbuf.Scale(destImage, 0, 0, Math.Min(srcPixbuf.Width, destImage.Width), Math.Min(srcPixbuf.Height, destImage.Height), 0, 0, 1, 1, Gdk.InterpType.Tiles); + } + } + } + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKSystem.Windows.Forms.csproj b/Source/GTKSystem.Windows.Forms/GTKSystem.Windows.Forms.csproj index 2eaa15e04f6122a3fa464dd7f6d3e352320e0bbd..7102cc5d778bcb76e4dce3632c21dd7d278cecf1 100644 --- a/Source/GTKSystem.Windows.Forms/GTKSystem.Windows.Forms.csproj +++ b/Source/GTKSystem.Windows.Forms/GTKSystem.Windows.Forms.csproj @@ -1,29 +1,89 @@ - netcoreapp3.1 - True + netcoreapp3.1;net6.0;net7.0;net8.0 + True chenhongjin chenhongjin 438865652@qq.com,chenhongjin - 0.3.24.1 - https://gitee.com/easywebfactory/gtksystem-windows-forms - 一次编译,跨windows和linux平台运行 - GTK跨平台winform组件,一次编译,跨windows和linux平台运行 - 基于GTK3.24.24.34版本组件开发,兼容原生C#控件winform界面的跨平台界面组件。 -使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows和linux运行。 -技术支持438865652@qq.com,https://gitee.com/easywebfactory/gtksystem-windows-forms - + 1.3.24.23 + https://github.com/easywebfactory/gtksystem-windows-forms + C#界面跨平台开发组件gtksystem-windows-forms + GTK跨平台winform界面组件,一次编译,可运行于windows、linux、macos平台 + + 基于GTK组件开发,兼容原生C#控件winform界面的跨平台界面组件。 + 使用本组件GTKSystem.Windows.Forms一次编译,跨平台windows\linux\macos运行。 + 更新平台: + https://github.com/easywebfactory/gtksystem-windows-forms; + https://gitee.com/easywebfactory/gtksystem-windows-forms; + + True + README.md + https://github.com/easywebfactory/gtksystem-windows-forms + False + LICENSE.txt + True + False + True + + + + True + True + + + + True - + + + + + + - - Component - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Component @@ -39,9 +99,7 @@ Component - - Component - + Form @@ -98,8 +156,19 @@ - - - + + + True + \ + + + True + \ + + + + + + diff --git a/Source/GTKSystem.Windows.Forms/GTKSystem.Windows.Forms.csproj.user b/Source/GTKSystem.Windows.Forms/GTKSystem.Windows.Forms.csproj.user index 5e8a8496ef04219577ece66f02b329136bd6ef87..fcbb4ffb7545d688f3305f95a24b0cf28a9cc65d 100644 --- a/Source/GTKSystem.Windows.Forms/GTKSystem.Windows.Forms.csproj.user +++ b/Source/GTKSystem.Windows.Forms/GTKSystem.Windows.Forms.csproj.user @@ -14,33 +14,138 @@ Component + + Component + Component + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + Component Component + + Component + + + Component + Form Component + + Component + + + Component + + + Component + + + Component + Component Component + + Component + Component Component + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + + + Component + Component @@ -68,11 +173,26 @@ Component + + Component + + + Component + Component + + Component + + + Component + Component + + UserControl + \ No newline at end of file diff --git a/Source/GTKSystem.Windows.Forms/GTKSystem/ComponentModel/ComponentResourceManager.cs b/Source/GTKSystem.Windows.Forms/GTKSystem/ComponentModel/ComponentResourceManager.cs index 9ed934dd24c3bbe63e43cfff3ea9c56a6bce1547..0776becfb8676c5aead024d5c8b8287065c14f90 100644 --- a/Source/GTKSystem.Windows.Forms/GTKSystem/ComponentModel/ComponentResourceManager.cs +++ b/Source/GTKSystem.Windows.Forms/GTKSystem/ComponentModel/ComponentResourceManager.cs @@ -37,6 +37,11 @@ namespace GTKSystem.ComponentModel GTKSystem.Resources.ResourceManager temp = new GTKSystem.Resources.ResourceManager(formtype.FullName, formtype.Assembly); return temp.GetObject(name); } + public virtual string GetString(string name) + { + GTKSystem.Resources.ResourceManager temp = new GTKSystem.Resources.ResourceManager(formtype.FullName, formtype.Assembly); + return temp.GetString(name); + } } } diff --git a/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/AssemblyNamesTypeResolutionService.cs b/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/AssemblyNamesTypeResolutionService.cs new file mode 100644 index 0000000000000000000000000000000000000000..fe6ff4bc7282906fcfcaea11b5c4b0f03995ca9a --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/AssemblyNamesTypeResolutionService.cs @@ -0,0 +1,215 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel.Design; +using System.Diagnostics.CodeAnalysis; +using System.IO; +using System.Linq; +using System.Reflection; + +namespace System.Resources +{ + internal class AssemblyNamesTypeResolutionService : ITypeResolutionService + { + private AssemblyName[] _names; + private Hashtable _cachedAssemblies; + private Hashtable _cachedTypes; + + private static readonly string s_dotNetPath = Path.Combine(Environment.GetEnvironmentVariable("ProgramFiles"), "dotnet\\shared"); + private static readonly string s_dotNetPathX86 = Path.Combine(Environment.GetEnvironmentVariable("ProgramFiles(x86)"), "dotnet\\shared"); + + internal AssemblyNamesTypeResolutionService(AssemblyName[] names) + { + _names = names; + } + + public Assembly GetAssembly(AssemblyName name) + { + return GetAssembly(name, true); + } + + // [UnconditionalSuppressMessage("SingleFile", "IL3002", Justification = "Handles single file case")] + public Assembly GetAssembly(AssemblyName name, bool throwOnError) + { + Assembly result = null; + + if (_cachedAssemblies is null) + { + _cachedAssemblies = Hashtable.Synchronized(new Hashtable()); + } + + if (_cachedAssemblies.Contains(name)) + { + result = _cachedAssemblies[name] as Assembly; + } + + if (result is null) + { + result = Assembly.Load(name.FullName); + if (result != null) + { + _cachedAssemblies[name] = result; + } + else if (_names != null) + { + foreach (AssemblyName asmName in _names.Where(an => an.Equals(name))) + { + try + { + result = Assembly.LoadFrom(GetPathOfAssembly(asmName)); + if (result != null) + { + _cachedAssemblies[asmName] = result; + } + } + catch + { + if (throwOnError) + { + throw; + } + } + } + } + } + + return result; + } + + //[UnconditionalSuppressMessage("SingleFile", "IL3002", Justification = "Returns null if in a single file")] + public string GetPathOfAssembly(AssemblyName name) + { +#pragma warning disable SYSLIB0044 // Type or member is obsolete. Ref https://github.com/dotnet/winforms/issues/7308 + return name.CodeBase; +#pragma warning restore SYSLIB0044 // Type or member is obsolete + } + + public Type GetType(string name) + { + return GetType(name, true); + } + + public Type GetType(string name, bool throwOnError) + { + return GetType(name, throwOnError, false); + } + + public Type GetType(string name, bool throwOnError, bool ignoreCase) + { + Type result = null; + + // Check type cache first + if (_cachedTypes is null) + { + _cachedTypes = Hashtable.Synchronized(new Hashtable(StringComparer.Ordinal)); + } + + if (_cachedTypes.Contains(name)) + { + result = _cachedTypes[name] as Type; + return result; + } + + // Missed in cache, try to resolve the type from the reference assemblies. + if (name.IndexOf(',') != -1) + { + result = Type.GetType(name, false, ignoreCase); + } + + if (result is null && _names != null) + { + // If the type is assembly qualified name, we sort the assembly names + // to put assemblies with same name in the front so that they can + // be searched first. + int pos = name.IndexOf(','); + if (pos > 0 && pos < name.Length - 1) + { + string fullName = name.Substring(pos + 1).Trim(); + AssemblyName assemblyName = null; + try + { + assemblyName = new AssemblyName(fullName); + } + catch + { + } + + if (assemblyName != null) + { + List assemblyList = new List(_names.Length); + foreach (AssemblyName asmName in _names) + { + if (string.Equals(assemblyName.Name, asmName.Name, StringComparison.OrdinalIgnoreCase)) + { + assemblyList.Insert(0, asmName); + } + else + { + assemblyList.Add(asmName); + } + } + + _names = assemblyList.ToArray(); + } + } + + // Search each reference assembly + foreach (AssemblyName asmName in _names) + { + Assembly asm = GetAssembly(asmName, false); + if (asm != null) + { + result = asm.GetType(name, false, ignoreCase); + if (result is null) + { + int indexOfComma = name.IndexOf(','); + if (indexOfComma != -1) + { + string shortName = name.Substring(0, indexOfComma); + result = asm.GetType(shortName, false, ignoreCase); + } + } + } + + if (result != null) + { + break; + } + } + } + + if (result is null && throwOnError) + { + throw new ArgumentException(string.Format("SR.InvalidResXNoType,{0}", name)); + } + + if (result != null) + { + // Only cache types from the shared framework because they don't need to update. + // For simplicity, don't cache custom types + if (IsDotNetAssembly(result.Assembly.Location)) + { + _cachedTypes[name] = result; + } + } + + return result; + } + + /// + /// This is matching %windir%\Microsoft.NET\Framework*, so both 32bit and 64bit framework will be covered. + /// + private static bool IsDotNetAssembly(string assemblyPath) + { + return assemblyPath != null && (assemblyPath.StartsWith(s_dotNetPath, StringComparison.OrdinalIgnoreCase) || assemblyPath.StartsWith(s_dotNetPathX86, StringComparison.OrdinalIgnoreCase)); + } + + public void ReferenceAssembly(AssemblyName name) + { + throw new NotSupportedException(); + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/DataNodeInfo.cs b/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/DataNodeInfo.cs new file mode 100644 index 0000000000000000000000000000000000000000..fdda7502a9962b8e7e5b9d7e4361bbe37f5124fa --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/DataNodeInfo.cs @@ -0,0 +1,31 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Drawing; + +namespace System.Resources +{ + internal class DataNodeInfo + { + public string Name; + public string Comment; + public string TypeName; + public string MimeType; + public string ValueData; + public Point ReaderPosition; //only used to track position in the reader + + internal DataNodeInfo Clone() + { + return new DataNodeInfo + { + Name = Name, + Comment = Comment, + TypeName = TypeName, + MimeType = MimeType, + ValueData = ValueData, + ReaderPosition = new Point(ReaderPosition.X, ReaderPosition.Y) + }; + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/Extensions/DeserializingResourceReader.cs b/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/Extensions/DeserializingResourceReader.cs index 37e78f7e27f8f5e15b130661d70c4606dadeec8f..073e6d328fd6d806031bcb25450c4c5354962884 100644 --- a/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/Extensions/DeserializingResourceReader.cs +++ b/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/Extensions/DeserializingResourceReader.cs @@ -4,9 +4,14 @@ using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.IO; +using System.Reflection; using System.Resources; +using System.Runtime.Serialization; +using System.Runtime.Serialization.Formatters; using System.Runtime.Serialization.Formatters.Binary; using System.Text; +using System.Windows.Forms.Design; +using System.Xml.Serialization; namespace GTKSystem.Resources.Extensions { @@ -848,13 +853,16 @@ namespace GTKSystem.Resources.Extensions { _store.BaseStream.Position = _typeNamePositions[typeIndex]; string typeName = _store.ReadString(); - _typeTable[typeIndex] = Type.GetType(typeName.Split(',')[0], throwOnError: true); + if(typeName== "System.Resources.Extensions.UnknownType") + _typeTable[typeIndex] = typeof(System.Windows.Forms.ImageListStreamer); + else + _typeTable[typeIndex] = Type.GetType(typeName.Split(',')[0], throwOnError: true); } catch (FileNotFoundException) { throw new NotSupportedException(SR.NotSupported_ResourceObjectSerialization); - } - finally + } + finally { _store.BaseStream.Position = position; } @@ -900,8 +908,10 @@ namespace GTKSystem.Resources.Extensions if (_formatter == null) { _formatter = new BinaryFormatter(); - } + _formatter.Binder = new ImageListSerializationBinder(); + } return _formatter.Deserialize(_store.BaseStream); + //return null; } private unsafe object DeserializeObject(int typeIndex) @@ -922,7 +932,20 @@ namespace GTKSystem.Resources.Extensions throw new BadImageFormatException(SR.Format(SR.BadImageFormat_ResourceDataLengthInvalid, num2)); } long position = _store.BaseStream.Position; - obj = ReadBinaryFormattedObject(); + if (type.Name == "System.Windows.Forms.ImageListStreamer") + { + var bytedata = _store.ReadBytes(num2); + using MemoryStream mem = new MemoryStream(bytedata); + + BinaryFormatter formatter = new BinaryFormatter(); + formatter.AssemblyFormat = System.Runtime.Serialization.Formatters.FormatterAssemblyStyle.Simple; + formatter.Binder = new ImageListSerializationBinder(); + obj = formatter.Deserialize(mem); + } + else + { + obj = ReadBinaryFormattedObject(); + } if (type == typeof(UnknownType)) { type = obj.GetType(); @@ -999,5 +1022,13 @@ namespace GTKSystem.Resources.Extensions } return obj; } - } + internal class ImageListSerializationBinder : SerializationBinder + { + public override Type BindToType(string assemblyName, string typeName) + { + return Type.GetType(typeName); + } + } + } + } diff --git a/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/Extensions/PreserializedResourceWriter.cs b/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/Extensions/PreserializedResourceWriter.cs index 16632ea5ce1e4212dd9909479c45e17c02216c32..312a79425cc96bb356ac31e0e24035b2ce70bd14 100644 --- a/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/Extensions/PreserializedResourceWriter.cs +++ b/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/Extensions/PreserializedResourceWriter.cs @@ -683,7 +683,7 @@ namespace GTKSystem.Resources.Extensions _requiresDeserializingResourceReader = true; } - public void AddBinaryFormattedResource(string name, byte[] value, string? typeName = null) + public void AddBinaryFormattedResource(string name, byte[] value, string typeName = null) { if (name == null) { diff --git a/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/Extensions/ResXExtensions.cs b/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/Extensions/ResXExtensions.cs new file mode 100644 index 0000000000000000000000000000000000000000..97caf9421866d42ac8dce5cd00afc1e48f2a1bd3 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/Extensions/ResXExtensions.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Resources; +using System.Text; +using System.Threading.Tasks; + +namespace GTKSystem.Resources.Extensions +{ + internal static class ResXExtensions + { + public static string OrThrowIfNullOrEmpty(this string value) + { + if (string.IsNullOrEmpty(value)) + { + throw new System.Exception("string Is Null Or Empty"); + } + else + return value; + } + public static string OrThrowIfNull(this string value) + { + if (value == null) + { + throw new System.Exception("string Is Null Or Empty"); + } + else + return value; + } + public static ResXFileRef OrThrowIfNull(this ResXFileRef value) + { + if (value == null) + { + throw new System.Exception("string is null"); + } + else + return value; + } + + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/Extensions/SR.cs b/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/Extensions/SR.cs index cee3a5f3db8642457c8cdfb5077bfa537cce4a36..981b8785fac95e66003da557ca12bcc07d531fb6 100644 --- a/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/Extensions/SR.cs +++ b/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/Extensions/SR.cs @@ -1,6 +1,8 @@ +using System.Resources; + namespace FxResources.System.Resources.Extensions { internal static class SR { } -} +} \ No newline at end of file diff --git a/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/IAliasResolver.cs b/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/IAliasResolver.cs new file mode 100644 index 0000000000000000000000000000000000000000..886900606023c2faa2c8d73088580406bc9c2144 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/IAliasResolver.cs @@ -0,0 +1,14 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Reflection; + +namespace System.Resources +{ + internal interface IAliasResolver + { + AssemblyName ResolveAlias(string alias); + void PushAlias(string alias, AssemblyName name); + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/ImageListImage.cs b/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/ImageListImage.cs new file mode 100644 index 0000000000000000000000000000000000000000..f4076e61a3a4cdfea548802e14e9d260b518bfec --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/ImageListImage.cs @@ -0,0 +1,59 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.ComponentModel; +using System.Drawing; +using System.Drawing.Design; +using System.Drawing.Imaging; +using System.IO; + +namespace System.Windows.Forms.Design +{ + public class ImageListImage + { + private string _name; + public ImageListImage(Image image) + { + Image = image; + } + + public ImageListImage(Image image, string name) + { + Image = image; + Name = name; + } + + public string Name + { + get => _name ?? string.Empty; + set => _name = value; + } + + [Browsable(false)] + public Image Image { get; set; } + + // Add properties to make this object "look" like Image in the Collection editor + public float HorizontalResolution => Image.HorizontalResolution; + + public float VerticalResolution => Image.VerticalResolution; + + public PixelFormat PixelFormat => Image.PixelFormat; + + public ImageFormat RawFormat => Image.RawFormat; + + public Size Size => Image.Size; + + public SizeF PhysicalDimension => Image.Size; + + public static ImageListImage ImageListImageFromStream(Stream stream, bool imageIsIcon) + { + if (imageIsIcon) + { + return new ImageListImage((new Icon(stream)).ToBitmap()); + } + + return new ImageListImage((Bitmap)Image.FromStream(stream)); + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/ResXDataNode.cs b/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/ResXDataNode.cs new file mode 100644 index 0000000000000000000000000000000000000000..19f990b6d539abd033903bf2977618df4b9bf824 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/ResXDataNode.cs @@ -0,0 +1,746 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using GTKSystem.Resources.Extensions; +using System.ComponentModel; +using System.ComponentModel.Design; +using System.Diagnostics; +using System.Drawing; +using System.Globalization; +using System.IO; +using System.Reflection; +using System.Runtime.Serialization; +using System.Runtime.Serialization.Formatters.Binary; +using System.Text; +using System.Windows.Forms; +using System.Xml; + +namespace System.Resources +{ + public sealed class ResXDataNode : ISerializable + { + private static readonly char[] s_specialChars = new char[] { ' ', '\r', '\n' }; + + private DataNodeInfo _nodeInfo; + + private string _name; + private string _comment; + + private string _typeName; // is only used when we create a resxdatanode manually with an object and contains the FQN + + private string _fileRefFullPath; + private string _fileRefType; + private string _fileRefTextEncoding; + + private object _value; + private ResXFileRef _fileRef; + + private IFormatter _binaryFormatter; + + // this is going to be used to check if a ResXDataNode is of type ResXFileRef + private static readonly ITypeResolutionService s_internalTypeResolver = new AssemblyNamesTypeResolutionService(new AssemblyName[] { new AssemblyName("System.Windows.Forms") }); + + // callback function to get type name for multitargeting. + // No public property to force using constructors for the following reasons: + // 1. one of the constructors needs this field (if used) to initialize the object, make it consistent with the other constructors to avoid errors. + // 2. once the object is constructed the delegate should not be changed to avoid getting inconsistent results. + private Func _typeNameConverter; + + private ResXDataNode() + { + } + + internal ResXDataNode DeepClone() + { + return new ResXDataNode + { + // nodeinfo is just made up of immutable objects, we don't need to clone it + _nodeInfo = _nodeInfo?.Clone(), + _name = _name, + _comment = _comment, + _typeName = _typeName, + _fileRefFullPath = _fileRefFullPath, + _fileRefType = _fileRefType, + _fileRefTextEncoding = _fileRefTextEncoding, + // we don't clone the value, because we don't know how + _value = _value, + _fileRef = _fileRef?.Clone(), + _typeNameConverter = _typeNameConverter + }; + } + + public ResXDataNode(string name, object value) : this(name, value, null) + { + } + + public ResXDataNode(string name, object value, Func typeNameConverter) + { + //ArgumentNullException.ThrowIfNull(name); + if (name.Length == 0) + { + throw (new ArgumentException(nameof(name))); + } + + _typeNameConverter = typeNameConverter; + + Type valueType = (value is null) ? typeof(object) : value.GetType(); + + if (value != null && !valueType.IsSerializable) + { + throw new InvalidOperationException(string.Format("SR.NotSerializableType,{0},{1}", name, valueType.FullName)); + } + + if (value != null) + { + _typeName = MultitargetUtil.GetAssemblyQualifiedName(valueType, _typeNameConverter); + } + + _name = name; + _value = value; + } + + public ResXDataNode(string name, ResXFileRef fileRef) : this(name, fileRef, null) + { + } + + public ResXDataNode(string name, ResXFileRef fileRef, Func typeNameConverter) + { + _name = name.OrThrowIfNullOrEmpty(); + _fileRef = fileRef.OrThrowIfNull(); + _typeNameConverter = typeNameConverter; + } + + internal ResXDataNode(DataNodeInfo nodeInfo, string basePath) + { + _nodeInfo = nodeInfo; + InitializeDataNode(basePath); + } + + private void InitializeDataNode(string basePath) + { + // we can only use our internal type resolver here + // because we only want to check if this is a ResXFileRef node + // and we can't be sure that we have a typeResolutionService that can + // recognize this. It's not very clean but this should work. + Type nodeType = null; + if (!string.IsNullOrEmpty(_nodeInfo.TypeName)) // can be null if we have a string (default for string is TypeName == null) + { + nodeType = s_internalTypeResolver.GetType(_nodeInfo.TypeName, false, true); + } + + if (nodeType != null && nodeType.Equals(typeof(ResXFileRef))) + { + // we have a fileref, split the value data and populate the fields + string[] fileRefDetails = ResXFileRef.Converter.ParseResxFileRefString(_nodeInfo.ValueData); + if (fileRefDetails != null && fileRefDetails.Length > 1) + { + if (!Path.IsPathRooted(fileRefDetails[0]) && basePath != null) + { + _fileRefFullPath = Path.Combine(basePath, fileRefDetails[0]); + } + else + { + _fileRefFullPath = fileRefDetails[0]; + } + + _fileRefType = fileRefDetails[1]; + if (fileRefDetails.Length > 2) + { + _fileRefTextEncoding = fileRefDetails[2]; + } + } + } + } + + public string Comment + { + get + { + string result = _comment; + if (result is null && _nodeInfo != null) + { + result = _nodeInfo.Comment; + } + + return result ?? string.Empty; + } + set + { + _comment = value; + } + } + + public string Name + { + get + { + string result = _name; + if (result is null && _nodeInfo != null) + { + result = _nodeInfo.Name; + } + + return result; + } + set + { + //ArgumentNullException.ThrowIfNull(value, nameof(Name)); + if (value.Length == 0) + { + throw new ArgumentException(nameof(Name)); + } + + _name = value; + } + } + + public ResXFileRef FileRef + { + get + { + if (FileRefFullPath is null) + { + return null; + } + + if (_fileRef is null) + { + _fileRef = + string.IsNullOrEmpty(_fileRefTextEncoding) + ? new ResXFileRef(FileRefFullPath, FileRefType) + : new ResXFileRef(FileRefFullPath, FileRefType, Encoding.GetEncoding(FileRefTextEncoding)); + } + + return _fileRef; + } + } + + private string FileRefFullPath + { + get + { + return _fileRef?.FileName ?? _fileRefFullPath; + } + } + + private string FileRefType + { + get + { + return _fileRef?.TypeName ?? _fileRefType; + } + } + + private string FileRefTextEncoding + { + get + { + return _fileRef?.TextFileEncoding?.BodyName ?? _fileRefTextEncoding; + } + } + + private static string ToBase64WrappedString(byte[] data) + { + const int lineWrap = 80; + const string crlf = "\r\n"; + const string prefix = " "; + string raw = Convert.ToBase64String(data); + if (raw.Length > lineWrap) + { + StringBuilder output = new StringBuilder(raw.Length + (raw.Length / lineWrap) * 3); // word wrap on lineWrap chars, \r\n + int current = 0; + for (; current < raw.Length - lineWrap; current += lineWrap) + { + output.Append(crlf); + output.Append(prefix); + output.Append(raw, current, lineWrap); + } + + output.Append(crlf); + output.Append(prefix); + output.Append(raw, current, raw.Length - current); + output.Append(crlf); + return output.ToString(); + } + + return raw; + } + + private void FillDataNodeInfoFromObject(DataNodeInfo nodeInfo, object value) + { + if (value is CultureInfo ci) + { + // special-case CultureInfo, cannot use CultureInfoConverter for serialization + nodeInfo.ValueData = ci.Name; + nodeInfo.TypeName = MultitargetUtil.GetAssemblyQualifiedName(typeof(CultureInfo), _typeNameConverter); + } + else if (value is string str) + { + nodeInfo.ValueData = str; + } + else if (value is byte[] bytes) + { + nodeInfo.ValueData = ToBase64WrappedString(bytes); + nodeInfo.TypeName = MultitargetUtil.GetAssemblyQualifiedName(typeof(byte[]), _typeNameConverter); + } + else + { + Type valueType = (value is null) ? typeof(object) : value.GetType(); + if (value != null && !valueType.IsSerializable) + { + throw new InvalidOperationException(string.Format("SR.NotSerializableType,{0},{1}", _name, valueType.FullName)); + } + + TypeConverter tc = TypeDescriptor.GetConverter(valueType); + bool toString = tc.CanConvertTo(typeof(string)); + bool fromString = tc.CanConvertFrom(typeof(string)); + try + { + if (toString && fromString) + { + nodeInfo.ValueData = tc.ConvertToInvariantString(value); + nodeInfo.TypeName = MultitargetUtil.GetAssemblyQualifiedName(valueType, _typeNameConverter); + return; + } + } + catch (Exception ex) + { + // Some custom type converters will throw in ConvertTo(string) + // to indicate that this object should be serialized through ISerializable + // instead of as a string. This is semi-wrong, but something we will have to + // live with to allow user created Cursors to be serializable. + if (ClientUtils.IsCriticalException(ex)) + { + throw; + } + } + + bool toByteArray = tc.CanConvertTo(typeof(byte[])); + bool fromByteArray = tc.CanConvertFrom(typeof(byte[])); + if (toByteArray && fromByteArray) + { + byte[] data = (byte[])tc.ConvertTo(value, typeof(byte[])); + nodeInfo.ValueData = ToBase64WrappedString(data); + nodeInfo.MimeType = ResXResourceWriter.ByteArraySerializedObjectMimeType; + nodeInfo.TypeName = MultitargetUtil.GetAssemblyQualifiedName(valueType, _typeNameConverter); + return; + } + + if (value is null) + { + nodeInfo.ValueData = string.Empty; + nodeInfo.TypeName = MultitargetUtil.GetAssemblyQualifiedName(typeof(ResXNullRef), _typeNameConverter); + } + else + { + if (_binaryFormatter is null) + { + _binaryFormatter = new BinaryFormatter + { + Binder = new ResXSerializationBinder(_typeNameConverter) + }; + } + + using (MemoryStream ms = new MemoryStream()) + { +#pragma warning disable SYSLIB0011 // Type or member is obsolete + _binaryFormatter.Serialize(ms, value); +#pragma warning restore SYSLIB0011 // Type or member is obsolete + nodeInfo.ValueData = ToBase64WrappedString(ms.ToArray()); + } + + nodeInfo.MimeType = ResXResourceWriter.DefaultSerializedObjectMimeType; + } + } + } + + private object GenerateObjectFromDataNodeInfo(DataNodeInfo dataNodeInfo, ITypeResolutionService typeResolver) + { + object result = null; + string mimeTypeName = dataNodeInfo.MimeType; + // default behavior: if we don't have a type name, it's a string + string typeName = + string.IsNullOrEmpty(dataNodeInfo.TypeName) + ? MultitargetUtil.GetAssemblyQualifiedName(typeof(string), _typeNameConverter) + : dataNodeInfo.TypeName; + + if (!string.IsNullOrEmpty(mimeTypeName)) + { + if (string.Equals(mimeTypeName, ResXResourceWriter.BinSerializedObjectMimeType)) + { + string text = dataNodeInfo.ValueData; + byte[] serializedData = FromBase64WrappedString(text); + + if (_binaryFormatter is null) + { + _binaryFormatter = new BinaryFormatter + { + Binder = new ResXSerializationBinder(typeResolver) + }; + } + + IFormatter formatter = _binaryFormatter; + if (serializedData != null && serializedData.Length > 0) + { +#pragma warning disable SYSLIB0011 // Type or member is obsolete + result = formatter.Deserialize(new MemoryStream(serializedData)); +#pragma warning restore SYSLIB0011 // Type or member is obsolete + if (result is ResXNullRef) + { + result = null; + } + } + } + else if (string.Equals(mimeTypeName, ResXResourceWriter.ByteArraySerializedObjectMimeType)) + { + if (!string.IsNullOrEmpty(typeName)) + { + Type type = ResolveType(typeName, typeResolver); + if (type != null) + { + TypeConverter tc = TypeDescriptor.GetConverter(type); + if (tc.CanConvertFrom(typeof(byte[]))) + { + string text = dataNodeInfo.ValueData; + byte[] serializedData = FromBase64WrappedString(text); + + if (serializedData != null) + { + result = tc.ConvertFrom(serializedData); + } + } + } + else + { + string newMessage = string.Format("SR.TypeLoadException,{0},{1},{2}", typeName, dataNodeInfo.ReaderPosition.Y, dataNodeInfo.ReaderPosition.X); + XmlException xml = new XmlException(newMessage, null, dataNodeInfo.ReaderPosition.Y, dataNodeInfo.ReaderPosition.X); + TypeLoadException newTle = new TypeLoadException(newMessage, xml); + + throw newTle; + } + } + } + } + else if (!string.IsNullOrEmpty(typeName)) + { + Type type = ResolveType(typeName, typeResolver); + if (type != null) + { + if (type == typeof(ResXNullRef)) + { + result = null; + } + else if (type == typeof(byte[]) || + (typeName.Contains("System.Byte[]") && (typeName.Contains("mscorlib") || typeName.Contains("System.Private.CoreLib")))) + { + // Handle byte[]'s, which are stored as base-64 encoded strings. + // We can't hard-code byte[] type name due to version number + // updates & potential whitespace issues with ResX files. + result = FromBase64WrappedString(dataNodeInfo.ValueData); + } + else + { + TypeConverter tc = TypeDescriptor.GetConverter(type); + if (tc.CanConvertFrom(typeof(string))) + { + string text = dataNodeInfo.ValueData; + try + { + result = tc.ConvertFromInvariantString(text); + } + catch (NotSupportedException nse) + { + string newMessage = string.Format("SR.NotSupported,{0},{1},{2},{3}", typeName, dataNodeInfo.ReaderPosition.Y, dataNodeInfo.ReaderPosition.X, nse.Message); + XmlException xml = new XmlException(newMessage, nse, dataNodeInfo.ReaderPosition.Y, dataNodeInfo.ReaderPosition.X); + NotSupportedException newNse = new NotSupportedException(newMessage, xml); + throw newNse; + } + } + else + { + Debug.WriteLine("Converter for " + type.FullName + " doesn't support string conversion"); + } + } + } + else + { + string newMessage = string.Format("SR.TypeLoadException,{0},{1},{2}", typeName, dataNodeInfo.ReaderPosition.Y, dataNodeInfo.ReaderPosition.X); + XmlException xml = new XmlException(newMessage, null, dataNodeInfo.ReaderPosition.Y, dataNodeInfo.ReaderPosition.X); + TypeLoadException newTle = new TypeLoadException(newMessage, xml); + + throw newTle; + } + } + else + { + // if mimeTypeName and typeName are not filled in, the value must be a string + Debug.Assert(_value is string, "Resource entries with no Type or MimeType must be encoded as strings"); + } + + return result; + } + + internal DataNodeInfo GetDataNodeInfo() + { + bool shouldSerialize = true; + if (_nodeInfo != null) + { + shouldSerialize = false; + } + else + { + _nodeInfo = new DataNodeInfo(); + } + + _nodeInfo.Name = Name; + _nodeInfo.Comment = Comment; + + // We always serialize if this node represents a FileRef. This is because FileRef is a public property, + // so someone could have modified it. + if (shouldSerialize || FileRefFullPath != null) + { + // if we don't have a datanodeinfo it could be either + // a direct object OR a fileref + if (FileRefFullPath != null) + { + _nodeInfo.ValueData = FileRef.ToString(); + _nodeInfo.MimeType = null; + _nodeInfo.TypeName = MultitargetUtil.GetAssemblyQualifiedName(typeof(ResXFileRef), _typeNameConverter); + } + else + { + // serialize to string inside the nodeInfo + FillDataNodeInfoFromObject(_nodeInfo, _value); + } + } + + return _nodeInfo; + } + + /// + /// Might return the position in the resx file of the current node, if known + /// otherwise, will return Point(0,0) since point is a struct + /// + public Point GetNodePosition() + { + return _nodeInfo?.ReaderPosition ?? new Point(); + } + + /// + /// Get the FQ type name for this datanode. + /// We return typeof(object) for ResXNullRef + /// + public string GetValueTypeName(ITypeResolutionService typeResolver) + { + // the type name here is always a FQN + if (!string.IsNullOrEmpty(_typeName)) + { + return + _typeName == MultitargetUtil.GetAssemblyQualifiedName(typeof(ResXNullRef), _typeNameConverter) + ? MultitargetUtil.GetAssemblyQualifiedName(typeof(object), _typeNameConverter) + : _typeName; + } + + string result = FileRefType; + Type objectType = null; + // do we have a fileref? + if (result != null) + { + // try to resolve this type + objectType = ResolveType(FileRefType, typeResolver); + } + else if (_nodeInfo != null) + { + // we don't have a fileref, try to resolve the type of the datanode + result = _nodeInfo.TypeName; + // if typename is null, the default is just a string + if (string.IsNullOrEmpty(result)) + { + // we still don't know... do we have a mimetype? if yes, our only option is to + // deserialize to know what we're dealing with... very inefficient... + if (!string.IsNullOrEmpty(_nodeInfo.MimeType)) + { + object insideObject = null; + + try + { + insideObject = GenerateObjectFromDataNodeInfo(_nodeInfo, typeResolver); + } + catch (Exception ex) + { + // it'd be better to catch SerializationException but the underlying type resolver + // can throw things like FileNotFoundException which is kinda confusing, so I am catching all here.. + if (ClientUtils.IsCriticalException(ex)) + { + throw; + } + + // something went wrong, type is not specified at all or stream is corrupted + // return system.object + result = MultitargetUtil.GetAssemblyQualifiedName(typeof(object), _typeNameConverter); + } + + if (insideObject != null) + { + result = MultitargetUtil.GetAssemblyQualifiedName(insideObject.GetType(), _typeNameConverter); + } + } + else + { + // no typename, no mimetype, we have a string... + result = MultitargetUtil.GetAssemblyQualifiedName(typeof(string), _typeNameConverter); + } + } + else + { + objectType = ResolveType(_nodeInfo.TypeName, typeResolver); + } + } + + if (objectType != null) + { + if (objectType == typeof(ResXNullRef)) + { + result = MultitargetUtil.GetAssemblyQualifiedName(typeof(object), _typeNameConverter); + } + else + { + result = MultitargetUtil.GetAssemblyQualifiedName(objectType, _typeNameConverter); + } + } + + return result; + } + + /// + /// Get the FQ type name for this datanode + /// + public string GetValueTypeName(AssemblyName[] names) + { + return GetValueTypeName(new AssemblyNamesTypeResolutionService(names)); + } + + /// + /// Get the value contained in this datanode + /// + public object GetValue(ITypeResolutionService typeResolver) + { + if (_value != null) + { + return _value; + } + + object result = null; + if (FileRefFullPath != null) + { + Type objectType = ResolveType(FileRefType, typeResolver); + if (objectType != null) + { + // we have the FQN for this type + _fileRef = + FileRefTextEncoding != null + ? new ResXFileRef(FileRefFullPath, FileRefType, Encoding.GetEncoding(FileRefTextEncoding)) + : new ResXFileRef(FileRefFullPath, FileRefType); + TypeConverter tc = TypeDescriptor.GetConverter(typeof(ResXFileRef)); + result = tc.ConvertFrom(_fileRef.ToString()); + } + else + { + string newMessage = string.Format("R.TypeLoadExceptionShort,{0}", FileRefType); + TypeLoadException newTle = new TypeLoadException(newMessage); + throw (newTle); + } + } + else if (_nodeInfo.ValueData != null) + { + // it's embedded, we deserialize it + result = GenerateObjectFromDataNodeInfo(_nodeInfo, typeResolver); + } + else + { + // schema is wrong and say minOccur for Value is 0, + // but it's too late to change it... + // we need to return null here + return null; + } + + return result; + } + + /// + /// Get the value contained in this datanode + /// + public object GetValue(AssemblyName[] names) + { + return GetValue(new AssemblyNamesTypeResolutionService(names)); + } + + private static byte[] FromBase64WrappedString(string text) + { + if (text.IndexOfAny(s_specialChars) != -1) + { + StringBuilder sb = new StringBuilder(text.Length); + foreach (var ch in text) + { + switch (ch) + { + case ' ': + case '\r': + case '\n': + break; + default: + sb.Append(ch); + break; + } + } + + return Convert.FromBase64String(sb.ToString()); + } + + return Convert.FromBase64String(text); + } + + private static Type ResolveType(string typeName, ITypeResolutionService typeResolver) + { + Type resolvedType = null; + if (typeResolver != null) + { + // If we cannot find the strong-named type, then try to see + // if the TypeResolver can bind to partial names. For this, + // we will strip out the partial names and keep the rest of the + // strong-name information to try again. + + resolvedType = typeResolver.GetType(typeName, false); + if (resolvedType is null) + { + string[] typeParts = typeName.Split(','); + + // Break up the type name from the rest of the assembly strong name. + if (typeParts != null && typeParts.Length >= 2) + { + string partialName = typeParts[0].Trim(); + string assemblyName = typeParts[1].Trim(); + partialName = partialName + ", " + assemblyName; + resolvedType = typeResolver.GetType(partialName, false); + } + } + } + + if (resolvedType is null) + { + resolvedType = Type.GetType(typeName, false); + } + + return resolvedType; + } + + /// + /// Get the value contained in this datanode + /// + void ISerializable.GetObjectData(SerializationInfo si, StreamingContext context) + { + throw new PlatformNotSupportedException(); + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/ResXFileRef.cs b/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/ResXFileRef.cs new file mode 100644 index 0000000000000000000000000000000000000000..4703b1ea1a32d1580ed97a11a1756df94944d641 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/ResXFileRef.cs @@ -0,0 +1,132 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.ComponentModel; +using System.Globalization; +using System.IO; +using System.Text; +using GTKSystem.Resources.Extensions; + +namespace System.Resources +{ + /// + /// ResX File Reference class. This allows the developer to represent + /// a link to an external resource. When the resource manager asks + /// for the value of the resource item, the external resource is loaded. + /// + [TypeConverter(typeof(Converter))] + public partial class ResXFileRef + { + /// + /// Creates a new ResXFileRef that points to the specified file. + /// The type refered to by typeName must support a constructor + /// that accepts a System.IO.Stream as a parameter. + /// + public ResXFileRef(string fileName, string typeName) + { + FileName = fileName.OrThrowIfNull(); + TypeName = typeName.OrThrowIfNull(); + } + + /// + /// Creates a new ResXFileRef that points to the specified file. + /// The type refered to by typeName must support a constructor + /// that accepts a System.IO.Stream as a parameter. + /// + public ResXFileRef(string fileName, string typeName, Encoding textFileEncoding) : this(fileName, typeName) + { + TextFileEncoding = textFileEncoding; + } + + internal ResXFileRef Clone() + { + return new ResXFileRef(FileName, TypeName, TextFileEncoding); + } + + public string FileName { get; private set; } + + public string TypeName { get; } + + public Encoding TextFileEncoding { get; } + + /// + /// path1+result = path2 + /// A string which is the relative path difference between path1 and + /// path2 such that if path1 and the calculated difference are used + /// as arguments to Combine(), path2 is returned + /// + private static string PathDifference(string path1, string path2, bool compareCase) + { + int i; + int si = -1; + + for (i = 0; (i < path1.Length) && (i < path2.Length); ++i) + { + if ((path1[i] != path2[i]) && (compareCase || (char.ToLower(path1[i], CultureInfo.InvariantCulture) != char.ToLower(path2[i], CultureInfo.InvariantCulture)))) + { + break; + } + + if (path1[i] == Path.DirectorySeparatorChar) + { + si = i; + } + } + + if (i == 0) + { + return path2; + } + + if ((i == path1.Length) && (i == path2.Length)) + { + return string.Empty; + } + + StringBuilder relPath = new StringBuilder(); + + for (; i < path1.Length; ++i) + { + if (path1[i] == Path.DirectorySeparatorChar) + { + relPath.Append(".." + Path.DirectorySeparatorChar); + } + } + + return string.Concat(relPath.ToString(), path2.AsSpan(si + 1)); + } + + internal void MakeFilePathRelative(string basePath) + { + if (string.IsNullOrEmpty(basePath)) + { + return; + } + + FileName = PathDifference(basePath, FileName, false); + } + + public override string ToString() + { + string result = string.Empty; + + if (FileName.IndexOf(';') != -1 || FileName.IndexOf('\"') != -1) + { + result += ("\"" + FileName + "\";"); + } + else + { + result += (FileName + ";"); + } + + result += TypeName; + if (TextFileEncoding != null) + { + result += (";" + TextFileEncoding.WebName); + } + + return result; + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/ResXNullRef.cs b/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/ResXNullRef.cs new file mode 100644 index 0000000000000000000000000000000000000000..d235656a65b0660588e02784a3be3dc10e47a00e --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/ResXNullRef.cs @@ -0,0 +1,15 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace System.Resources +{ + /// + /// ResX Null Reference class. This class allows ResX to store null values. + /// It is a placeholder that is written into the file. On read, it is replaced + /// with null. + /// + internal sealed class ResXNullRef + { + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/ResXResourceReader.ReaderAliasResolver.cs b/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/ResXResourceReader.ReaderAliasResolver.cs new file mode 100644 index 0000000000000000000000000000000000000000..8ecd3cce3732387dd7f0af41e917c5a49f7eb058 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/ResXResourceReader.ReaderAliasResolver.cs @@ -0,0 +1,41 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Collections; +using System.Reflection; + +namespace System.Resources +{ + public partial class ResXResourceReader + { + private sealed class ReaderAliasResolver : IAliasResolver + { + private readonly Hashtable _cachedAliases; + + internal ReaderAliasResolver() + { + _cachedAliases = new Hashtable(); + } + + public AssemblyName ResolveAlias(string alias) + { + AssemblyName result = null; + if (_cachedAliases != null) + { + result = (AssemblyName)_cachedAliases[alias]; + } + + return result; + } + + public void PushAlias(string alias, AssemblyName name) + { + if (_cachedAliases != null && !string.IsNullOrEmpty(alias)) + { + _cachedAliases[alias] = name; + } + } + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/ResXResourceReader.cs b/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/ResXResourceReader.cs new file mode 100644 index 0000000000000000000000000000000000000000..1ebea9a6724ff8b5af3230d09376b7b0567f0561 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/ResXResourceReader.cs @@ -0,0 +1,703 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Collections; +using System.Collections.Specialized; +using System.ComponentModel.Design; +using System.Drawing; +using System.Globalization; +using System.IO; +using System.Reflection; +using System.Runtime.Serialization; +using System.Windows.Forms; +using System.Xml; + +namespace System.Resources +{ + /// + /// ResX resource reader. + /// + public partial class ResXResourceReader : IResourceReader + { + private readonly string _fileName; + private TextReader _reader; + private Stream _stream; + private string _fileContents; + private readonly AssemblyName[] _assemblyNames; + private string _basePath; + private bool _isReaderDirty; + private readonly ITypeResolutionService _typeResolver; + private readonly IAliasResolver _aliasResolver; + + private ListDictionary _resData; + private ListDictionary _resMetadata; + private string _resHeaderVersion; + private string _resHeaderMimeType; + private string _resHeaderReaderType; + private string _resHeaderWriterType; + private bool _useResXDataNodes; + + private ResXResourceReader(ITypeResolutionService typeResolver) + { + _typeResolver = typeResolver; + _aliasResolver = new ReaderAliasResolver(); + } + + private ResXResourceReader(AssemblyName[] assemblyNames) + { + _assemblyNames = assemblyNames; + _aliasResolver = new ReaderAliasResolver(); + } + + public ResXResourceReader(string fileName) : this(fileName, (ITypeResolutionService)null, null) + { + } + + public ResXResourceReader(string fileName, ITypeResolutionService typeResolver) : this(fileName, typeResolver, null) + { + } + + internal ResXResourceReader(string fileName, ITypeResolutionService typeResolver, IAliasResolver aliasResolver) + { + _fileName = fileName; + _typeResolver = typeResolver; + _aliasResolver = aliasResolver ?? new ReaderAliasResolver(); + } + + public ResXResourceReader(TextReader reader) : this(reader, (ITypeResolutionService)null, null) + { + } + + public ResXResourceReader(TextReader reader, ITypeResolutionService typeResolver) : this(reader, typeResolver, (IAliasResolver)null) + { + } + + internal ResXResourceReader(TextReader reader, ITypeResolutionService typeResolver, IAliasResolver aliasResolver) + { + _reader = reader; + _typeResolver = typeResolver; + _aliasResolver = aliasResolver ?? new ReaderAliasResolver(); + } + + public ResXResourceReader(Stream stream) : this(stream, (ITypeResolutionService)null, (IAliasResolver)null) + { + } + + public ResXResourceReader(Stream stream, ITypeResolutionService typeResolver) : this(stream, typeResolver, (IAliasResolver)null) + { + } + + internal ResXResourceReader(Stream stream, ITypeResolutionService typeResolver, IAliasResolver aliasResolver) + { + _stream = stream; + _typeResolver = typeResolver; + _aliasResolver = aliasResolver ?? new ReaderAliasResolver(); + } + + public ResXResourceReader(Stream stream, AssemblyName[] assemblyNames) : this(stream, assemblyNames, (IAliasResolver)null) + { + } + + internal ResXResourceReader(Stream stream, AssemblyName[] assemblyNames, IAliasResolver aliasResolver) + { + _stream = stream; + _assemblyNames = assemblyNames; + _aliasResolver = aliasResolver ?? new ReaderAliasResolver(); + } + + public ResXResourceReader(TextReader reader, AssemblyName[] assemblyNames) : this(reader, assemblyNames, (IAliasResolver)null) + { + } + + internal ResXResourceReader(TextReader reader, AssemblyName[] assemblyNames, IAliasResolver aliasResolver) + { + _reader = reader; + _assemblyNames = assemblyNames; + _aliasResolver = aliasResolver ?? new ReaderAliasResolver(); + } + + public ResXResourceReader(string fileName, AssemblyName[] assemblyNames) : this(fileName, assemblyNames, (IAliasResolver)null) + { + } + + internal ResXResourceReader(string fileName, AssemblyName[] assemblyNames, IAliasResolver aliasResolver) + { + _fileName = fileName; + _assemblyNames = assemblyNames; + _aliasResolver = aliasResolver ?? new ReaderAliasResolver(); + } + + ~ResXResourceReader() + { + Dispose(false); + } + + /// + /// BasePath for relatives filepaths with ResXFileRefs. + /// + public string BasePath + { + get + { + return _basePath; + } + set + { + if (_isReaderDirty) + { + throw new InvalidOperationException("SR.InvalidResXBasePathOperation"); + } + + _basePath = value; + } + } + + /// + /// ResXFileRef's TypeConverter automatically unwraps it, creates the referenced + /// object and returns it. This property gives the user control over whether this unwrapping should + /// happen, or a ResXFileRef object should be returned. Default is true for backward compat and common case + /// scenario. + /// + public bool UseResXDataNodes + { + get + { + return _useResXDataNodes; + } + set + { + if (_isReaderDirty) + { + throw new InvalidOperationException("SR.InvalidResXBasePathOperation"); + } + + _useResXDataNodes = value; + } + } + + /// + /// Closes and files or streams being used by the reader. + /// + public void Close() + { + ((IDisposable)this).Dispose(); + } + + void IDisposable.Dispose() + { + GC.SuppressFinalize(this); + Dispose(true); + } + + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + if (_fileName != null && _stream != null) + { + _stream.Close(); + _stream = null; + } + + if (_reader != null) + { + _reader.Close(); + _reader = null; + } + } + } + + private static void SetupNameTable(XmlReader reader) + { + reader.NameTable.Add(ResXResourceWriter.TypeStr); + reader.NameTable.Add(ResXResourceWriter.NameStr); + reader.NameTable.Add(ResXResourceWriter.DataStr); + reader.NameTable.Add(ResXResourceWriter.MetadataStr); + reader.NameTable.Add(ResXResourceWriter.MimeTypeStr); + reader.NameTable.Add(ResXResourceWriter.ValueStr); + reader.NameTable.Add(ResXResourceWriter.ResHeaderStr); + reader.NameTable.Add(ResXResourceWriter.VersionStr); + reader.NameTable.Add(ResXResourceWriter.ResMimeTypeStr); + reader.NameTable.Add(ResXResourceWriter.ReaderStr); + reader.NameTable.Add(ResXResourceWriter.WriterStr); + reader.NameTable.Add(ResXResourceWriter.BinSerializedObjectMimeType); + reader.NameTable.Add(ResXResourceWriter.SoapSerializedObjectMimeType); + reader.NameTable.Add(ResXResourceWriter.AssemblyStr); + reader.NameTable.Add(ResXResourceWriter.AliasStr); + } + + /// + /// Demand loads the resource data. + /// + private void EnsureResData() + { + if (_resData is null) + { + _resData = new ListDictionary(); + _resMetadata = new ListDictionary(); + + XmlTextReader contentReader = null; + + try + { + // Read data in any which way + if (_fileContents != null) + { + contentReader = new XmlTextReader(new StringReader(_fileContents)); + } + else if (_reader != null) + { + contentReader = new XmlTextReader(_reader); + } + else if (_fileName != null || _stream != null) + { + if (_stream is null) + { + _stream = new FileStream(_fileName, FileMode.Open, FileAccess.Read, FileShare.Read); + } + + contentReader = new XmlTextReader(_stream); + } + + SetupNameTable(contentReader); + contentReader.WhitespaceHandling = WhitespaceHandling.None; + ParseXml(contentReader); + } + finally + { + if (_fileName != null && _stream != null) + { + _stream.Close(); + _stream = null; + } + } + } + } + + /// + /// Creates a reader with the specified file contents. + /// + public static ResXResourceReader FromFileContents(string fileContents) + { + return FromFileContents(fileContents, (ITypeResolutionService)null); + } + + /// + /// Creates a reader with the specified file contents. + /// + public static ResXResourceReader FromFileContents(string fileContents, ITypeResolutionService typeResolver) + { + return new ResXResourceReader(typeResolver) + { + _fileContents = fileContents + }; + } + + /// + /// Creates a reader with the specified file contents. + /// + public static ResXResourceReader FromFileContents(string fileContents, AssemblyName[] assemblyNames) + { + return new ResXResourceReader(assemblyNames) + { + _fileContents = fileContents + }; + } + + IEnumerator IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + public IDictionaryEnumerator GetEnumerator() + { + _isReaderDirty = true; + EnsureResData(); + return _resData.GetEnumerator(); + } + + /// + /// Returns a dictionary enumerator that can be used to enumerate the <metadata> elements in the .resx file. + /// + public IDictionaryEnumerator GetMetadataEnumerator() + { + EnsureResData(); + return _resMetadata.GetEnumerator(); + } + + /// + /// Attempts to return the line and column (Y, X) of the XML reader. + /// + private static Point GetPosition(XmlReader reader) + { + Point pt = new Point(0, 0); + + if (reader is IXmlLineInfo lineInfo) + { + pt.Y = lineInfo.LineNumber; + pt.X = lineInfo.LinePosition; + } + + return pt; + } + + private void ParseXml(XmlTextReader reader) + { + bool success = false; + try + { + try + { + while (reader.Read()) + { + if (reader.NodeType == XmlNodeType.Element) + { + string s = reader.LocalName; + + if (reader.LocalName.Equals(ResXResourceWriter.AssemblyStr)) + { + ParseAssemblyNode(reader); + } + else if (reader.LocalName.Equals(ResXResourceWriter.DataStr)) + { + ParseDataNode(reader, false); + } + else if (reader.LocalName.Equals(ResXResourceWriter.ResHeaderStr)) + { + ParseResHeaderNode(reader); + } + else if (reader.LocalName.Equals(ResXResourceWriter.MetadataStr)) + { + ParseDataNode(reader, true); + } + } + } + + success = true; + } + catch (SerializationException se) + { + Point pt = GetPosition(reader); + string newMessage = string.Format("SR.SerializationException,{0},{1},{2},{3}", reader[ResXResourceWriter.TypeStr], pt.Y, pt.X, se.Message); + XmlException xml = new XmlException(newMessage, se, pt.Y, pt.X); + SerializationException newSe = new SerializationException(newMessage, xml); + + throw newSe; + } + catch (TargetInvocationException tie) + { + Point pt = GetPosition(reader); + string newMessage = string.Format("SR.InvocationException,{0},{1},{2},{3}", reader[ResXResourceWriter.TypeStr], pt.Y, pt.X, tie.InnerException.Message); + XmlException xml = new XmlException(newMessage, tie.InnerException, pt.Y, pt.X); + TargetInvocationException newTie = new TargetInvocationException(newMessage, xml); + + throw newTie; + } + catch (XmlException e) + { + throw new ArgumentException(string.Format("SR.InvalidResXFile,{0}", e.Message), e); + } + catch (Exception e) + { + if (ClientUtils.IsCriticalException(e)) + { + throw; + } + else + { + Point pt = GetPosition(reader); + XmlException xmlEx = new XmlException(e.Message, e, pt.Y, pt.X); + throw new ArgumentException(string.Format("SR.InvalidResXFile,{0}", xmlEx.Message), xmlEx); + } + } + } + finally + { + if (!success) + { + _resData = null; + _resMetadata = null; + } + } + + bool validFile = false; + + if (_resHeaderMimeType == ResXResourceWriter.ResMimeType) + { + Type readerType = typeof(ResXResourceReader); + Type writerType = typeof(ResXResourceWriter); + + string readerTypeName = _resHeaderReaderType; + string writerTypeName = _resHeaderWriterType; + if (readerTypeName != null && readerTypeName.IndexOf(',') != -1) + { + readerTypeName = readerTypeName.Split(',')[0].Trim(); + } + + if (writerTypeName != null && writerTypeName.IndexOf(',') != -1) + { + writerTypeName = writerTypeName.Split(',')[0].Trim(); + } + + if (readerTypeName != null && + writerTypeName != null && + readerTypeName.Equals(readerType.FullName) && + writerTypeName.Equals(writerType.FullName)) + { + validFile = true; + } + } + + if (!validFile) + { + _resData = null; + _resMetadata = null; + throw new ArgumentException("SR.InvalidResXFileReaderWriterTypes"); + } + } + + private void ParseResHeaderNode(XmlReader reader) + { + string name = reader[ResXResourceWriter.NameStr]; + if (name != null) + { + reader.ReadStartElement(); + + // The "1.1" schema requires the correct casing of the strings + // in the resheader, however the "1.0" schema had a different + // casing. By checking the Equals first, we should + // see significant performance improvements. + + if (name == ResXResourceWriter.VersionStr) + { + if (reader.NodeType == XmlNodeType.Element) + { + _resHeaderVersion = reader.ReadElementString(); + } + else + { + _resHeaderVersion = reader.Value.Trim(); + } + } + else if (name == ResXResourceWriter.ResMimeTypeStr) + { + if (reader.NodeType == XmlNodeType.Element) + { + _resHeaderMimeType = reader.ReadElementString(); + } + else + { + _resHeaderMimeType = reader.Value.Trim(); + } + } + else if (name == ResXResourceWriter.ReaderStr) + { + if (reader.NodeType == XmlNodeType.Element) + { + _resHeaderReaderType = reader.ReadElementString(); + } + else + { + _resHeaderReaderType = reader.Value.Trim(); + } + } + else if (name == ResXResourceWriter.WriterStr) + { + if (reader.NodeType == XmlNodeType.Element) + { + _resHeaderWriterType = reader.ReadElementString(); + } + else + { + _resHeaderWriterType = reader.Value.Trim(); + } + } + else + { + switch (name.ToLower(CultureInfo.InvariantCulture)) + { + case ResXResourceWriter.VersionStr: + if (reader.NodeType == XmlNodeType.Element) + { + _resHeaderVersion = reader.ReadElementString(); + } + else + { + _resHeaderVersion = reader.Value.Trim(); + } + + break; + case ResXResourceWriter.ResMimeTypeStr: + if (reader.NodeType == XmlNodeType.Element) + { + _resHeaderMimeType = reader.ReadElementString(); + } + else + { + _resHeaderMimeType = reader.Value.Trim(); + } + + break; + case ResXResourceWriter.ReaderStr: + if (reader.NodeType == XmlNodeType.Element) + { + _resHeaderReaderType = reader.ReadElementString(); + } + else + { + _resHeaderReaderType = reader.Value.Trim(); + } + + break; + case ResXResourceWriter.WriterStr: + if (reader.NodeType == XmlNodeType.Element) + { + _resHeaderWriterType = reader.ReadElementString(); + } + else + { + _resHeaderWriterType = reader.Value.Trim(); + } + + break; + } + } + } + } + + private void ParseAssemblyNode(XmlReader reader) + { + string alias = reader[ResXResourceWriter.AliasStr]; + string typeName = reader[ResXResourceWriter.NameStr]; + + AssemblyName assemblyName = new AssemblyName(typeName); + + if (string.IsNullOrEmpty(alias)) + { + alias = assemblyName.Name; + } + + _aliasResolver.PushAlias(alias, assemblyName); + } + + private void ParseDataNode(XmlTextReader reader, bool isMetaData) + { + DataNodeInfo nodeInfo = new DataNodeInfo + { + Name = reader[ResXResourceWriter.NameStr] + }; + + string typeName = reader[ResXResourceWriter.TypeStr]; + + string alias = null; + AssemblyName assemblyName = null; + + if (!string.IsNullOrEmpty(typeName)) + { + alias = GetAliasFromTypeName(typeName); + } + + if (!string.IsNullOrEmpty(alias)) + { + assemblyName = _aliasResolver.ResolveAlias(alias); + } + + if (assemblyName != null) + { + nodeInfo.TypeName = GetTypeFromTypeName(typeName) + ", " + assemblyName.FullName; + } + else + { + nodeInfo.TypeName = reader[ResXResourceWriter.TypeStr]; + } + + nodeInfo.MimeType = reader[ResXResourceWriter.MimeTypeStr]; + + bool finishedReadingDataNode = false; + nodeInfo.ReaderPosition = GetPosition(reader); + while (!finishedReadingDataNode && reader.Read()) + { + if (reader.NodeType == XmlNodeType.EndElement && (reader.LocalName.Equals(ResXResourceWriter.DataStr) || reader.LocalName.Equals(ResXResourceWriter.MetadataStr))) + { + // we just found , quit or + finishedReadingDataNode = true; + } + else + { + // could be a or a + if (reader.NodeType == XmlNodeType.Element) + { + if (reader.Name.Equals(ResXResourceWriter.ValueStr)) + { + WhitespaceHandling oldValue = reader.WhitespaceHandling; + try + { + // based on the documentation at https://docs.microsoft.com/dotnet/api/system.xml.xmltextreader.whitespacehandling + // this is ok because: + // "Because the XmlTextReader does not have DTD information available to it, + // SignificantWhitespace nodes are only returned within the an xml:space='preserve' scope." + // the xml:space would not be present for anything else than string and char (see ResXResourceWriter) + // so this would not cause any breaking change while reading data from Everett (we never outputted + // xml:space then) or from whidbey that is not specifically either a string or a char. + // However please note that manually editing a resx file in Everett and in Whidbey because of the addition + // of xml:space=preserve might have different consequences... + reader.WhitespaceHandling = WhitespaceHandling.Significant; + nodeInfo.ValueData = reader.ReadString(); + } + finally + { + reader.WhitespaceHandling = oldValue; + } + } + else if (reader.Name.Equals(ResXResourceWriter.CommentStr)) + { + nodeInfo.Comment = reader.ReadString(); + } + } + else + { + // weird, no tag, just the inside of as text + nodeInfo.ValueData = reader.Value.Trim(); + } + } + } + + if (nodeInfo.Name is null) + { + throw new ArgumentException(string.Format("SR.InvalidResXResourceNoName,{0}", nodeInfo.ValueData)); + } + + ResXDataNode dataNode = new ResXDataNode(nodeInfo, BasePath); + + if (UseResXDataNodes) + { + _resData[nodeInfo.Name] = dataNode; + } + else + { + IDictionary data = (isMetaData ? _resMetadata : _resData); + if (_assemblyNames is null) + { + data[nodeInfo.Name] = dataNode.GetValue(_typeResolver); + } + else + { + data[nodeInfo.Name] = dataNode.GetValue(_assemblyNames); + } + } + } + + private static string GetAliasFromTypeName(string typeName) + { + int indexStart = typeName.IndexOf(','); + return typeName.Substring(indexStart + 2); + } + + private static string GetTypeFromTypeName(string typeName) + { + int indexStart = typeName.IndexOf(','); + return typeName.Substring(0, indexStart); + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/ResXResourceSet.cs b/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/ResXResourceSet.cs new file mode 100644 index 0000000000000000000000000000000000000000..1c75bd3485f1e2ab0fdd653151beff8856cafb4e --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/ResXResourceSet.cs @@ -0,0 +1,38 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.IO; + +namespace System.Resources +{ + /// + /// ResX resource set. + /// + public class ResXResourceSet : ResourceSet + { + /// + /// Creates a resource set for the specified file. + /// + public ResXResourceSet(string fileName) : base(new ResXResourceReader(fileName)) + { + } + + /// + /// Creates a resource set for the specified stream. + /// + public ResXResourceSet(Stream stream) : base(new ResXResourceReader(stream)) + { + } + + /// + /// Gets the default reader type associated with this set. + /// + public override Type GetDefaultReader() => typeof(ResXResourceReader); + + /// + /// Gets the default writer type associated with this set. + /// + public override Type GetDefaultWriter() => typeof(ResXResourceWriter); + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/ResXResourceWriter.cs b/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/ResXResourceWriter.cs new file mode 100644 index 0000000000000000000000000000000000000000..219f132704442e5f64d92cdc731434cb9a939f47 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/ResXResourceWriter.cs @@ -0,0 +1,646 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Collections; +using System.Diagnostics; +using System.IO; +using System.Reflection; +using System.Text; +using System.Xml; + +namespace System.Resources +{ + /// + /// ResX resource writer. See the text in "ResourceSchema" for more + /// information. + /// + public class ResXResourceWriter : IResourceWriter + { + internal const string TypeStr = "type"; + internal const string NameStr = "name"; + internal const string DataStr = "data"; + internal const string MetadataStr = "metadata"; + internal const string MimeTypeStr = "mimetype"; + internal const string ValueStr = "value"; + internal const string ResHeaderStr = "resheader"; + internal const string VersionStr = "version"; + internal const string ResMimeTypeStr = "resmimetype"; + internal const string ReaderStr = "reader"; + internal const string WriterStr = "writer"; + internal const string CommentStr = "comment"; + internal const string AssemblyStr = "assembly"; + internal const string AliasStr = "alias"; + + private Hashtable _cachedAliases; + + private static readonly TraceSwitch s_resValueProviderSwitch = new TraceSwitch("ResX", "Debug the resource value provider"); + +#pragma warning disable IDE1006 // Naming Styles (Shipped public API) + public static readonly string BinSerializedObjectMimeType = "application/x-microsoft.net.object.binary.base64"; + public static readonly string SoapSerializedObjectMimeType = "application/x-microsoft.net.object.soap.base64"; + public static readonly string DefaultSerializedObjectMimeType = BinSerializedObjectMimeType; + public static readonly string ByteArraySerializedObjectMimeType = "application/x-microsoft.net.object.bytearray.base64"; + public static readonly string ResMimeType = "text/microsoft-resx"; + public static readonly string Version = "2.0"; + + public static readonly string ResourceSchema = @" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + "; +#pragma warning restore IDE1006 // Naming Styles + + private readonly string _fileName; + private Stream _stream; + private TextWriter _textWriter; + private XmlTextWriter _xmlTextWriter; + + private bool _hasBeenSaved; + private bool _initialized; + + private readonly Func _typeNameConverter; // no public property to be consistent with ResXDataNode class. + + /// + /// Base Path for ResXFileRefs. + /// + public string BasePath { get; set; } + + /// + /// Creates a new ResXResourceWriter that will write to the specified file. + /// + public ResXResourceWriter(string fileName) => _fileName = fileName; + + public ResXResourceWriter(string fileName, Func typeNameConverter) + { + _fileName = fileName; + _typeNameConverter = typeNameConverter; + } + + /// + /// Creates a new ResXResourceWriter that will write to the specified stream. + /// + public ResXResourceWriter(Stream stream) => _stream = stream; + + public ResXResourceWriter(Stream stream, Func typeNameConverter) + { + _stream = stream; + _typeNameConverter = typeNameConverter; + } + + /// + /// Creates a new ResXResourceWriter that will write to the specified TextWriter. + /// + public ResXResourceWriter(TextWriter textWriter) => _textWriter = textWriter; + + public ResXResourceWriter(TextWriter textWriter, Func typeNameConverter) + { + _textWriter = textWriter; + _typeNameConverter = typeNameConverter; + } + + ~ResXResourceWriter() + { + Dispose(false); + } + + private void InitializeWriter() + { + if (_xmlTextWriter is null) + { + bool writeHeaderRequired = false; + + if (_textWriter != null) + { + _textWriter.WriteLine(""); + writeHeaderRequired = true; + + _xmlTextWriter = new XmlTextWriter(_textWriter); + } + else if (_stream != null) + { + _xmlTextWriter = new XmlTextWriter(_stream, System.Text.Encoding.UTF8); + } + else + { + Debug.Assert(_fileName != null, "Nothing to output to"); + _xmlTextWriter = new XmlTextWriter(_fileName, System.Text.Encoding.UTF8); + } + + _xmlTextWriter.Formatting = Formatting.Indented; + _xmlTextWriter.Indentation = 2; + + if (!writeHeaderRequired) + { + _xmlTextWriter.WriteStartDocument(); // writes + } + } + else + { + _xmlTextWriter.WriteStartDocument(); + } + + _xmlTextWriter.WriteStartElement("root"); + XmlTextReader reader = new XmlTextReader(new StringReader(ResourceSchema)) + { + WhitespaceHandling = WhitespaceHandling.None + }; + _xmlTextWriter.WriteNode(reader, true); + + _xmlTextWriter.WriteStartElement(ResHeaderStr); + { + _xmlTextWriter.WriteAttributeString(NameStr, ResMimeTypeStr); + _xmlTextWriter.WriteStartElement(ValueStr); + { + _xmlTextWriter.WriteString(ResMimeType); + } + + _xmlTextWriter.WriteEndElement(); + } + + _xmlTextWriter.WriteEndElement(); + + _xmlTextWriter.WriteStartElement(ResHeaderStr); + { + _xmlTextWriter.WriteAttributeString(NameStr, VersionStr); + _xmlTextWriter.WriteStartElement(ValueStr); + { + _xmlTextWriter.WriteString(Version); + } + + _xmlTextWriter.WriteEndElement(); + } + + _xmlTextWriter.WriteEndElement(); + + _xmlTextWriter.WriteStartElement(ResHeaderStr); + { + _xmlTextWriter.WriteAttributeString(NameStr, ReaderStr); + _xmlTextWriter.WriteStartElement(ValueStr); + { + _xmlTextWriter.WriteString(MultitargetUtil.GetAssemblyQualifiedName(typeof(ResXResourceReader), _typeNameConverter)); + } + + _xmlTextWriter.WriteEndElement(); + } + + _xmlTextWriter.WriteEndElement(); + + _xmlTextWriter.WriteStartElement(ResHeaderStr); + { + _xmlTextWriter.WriteAttributeString(NameStr, WriterStr); + _xmlTextWriter.WriteStartElement(ValueStr); + { + _xmlTextWriter.WriteString(MultitargetUtil.GetAssemblyQualifiedName(typeof(ResXResourceWriter), _typeNameConverter)); + } + + _xmlTextWriter.WriteEndElement(); + } + + _xmlTextWriter.WriteEndElement(); + + _initialized = true; + } + + private XmlWriter Writer + { + get + { + if (!_initialized) + { + InitializeWriter(); + } + + return _xmlTextWriter; + } + } + + /// + /// Adds aliases to the resource file... + /// + public virtual void AddAlias(string aliasName, AssemblyName assemblyName) + { + //ArgumentNullException.ThrowIfNull(assemblyName); + + if (_cachedAliases is null) + { + _cachedAliases = new Hashtable(); + } + + _cachedAliases[assemblyName.FullName] = aliasName; + } + + /// + /// Adds the given value to the collection of metadata. These name/value pairs + /// will be emitted to the <metadata> elements in the .resx file. + /// + public void AddMetadata(string name, byte[] value) => AddDataRow(MetadataStr, name, value); + + /// + /// Adds the given value to the collection of metadata. These name/value pairs + /// will be emitted to the <metadata> elements in the .resx file. + /// + public void AddMetadata(string name, string value) => AddDataRow(MetadataStr, name, value); + + /// + /// Adds the given value to the collection of metadata. These name/value pairs + /// will be emitted to the <metadata> elements in the .resx file. + /// + public void AddMetadata(string name, object value) => AddDataRow(MetadataStr, name, value); + + /// + /// Adds a blob resource to the resources. + /// + public void AddResource(string name, byte[] value) => AddDataRow(DataStr, name, value); + + /// + /// Adds a resource to the resources. If the resource is a string, + /// it will be saved that way, otherwise it will be serialized + /// and stored as in binary. + /// + public void AddResource(string name, object value) + { + if (value is ResXDataNode node) + { + AddResource(node); + } + else + { + AddDataRow(DataStr, name, value); + } + } + + /// + /// Adds a string resource to the resources. + /// + public void AddResource(string name, string value) => AddDataRow(DataStr, name, value); + + /// + /// Adds a string resource to the resources. + /// + public void AddResource(ResXDataNode node) + { + // we're modifying the node as we're adding it to the resxwriter + // this is BAD, so we clone it. adding it to a writer doesnt change it + // we're messing with a copy + ResXDataNode nodeClone = node.DeepClone(); + + ResXFileRef fileRef = nodeClone.FileRef; + string modifiedBasePath = BasePath; + + if (!string.IsNullOrEmpty(modifiedBasePath)) + { + if (!modifiedBasePath.EndsWith("\\")) + { + modifiedBasePath += "\\"; + } + + fileRef?.MakeFilePathRelative(modifiedBasePath); + } + + DataNodeInfo info = nodeClone.GetDataNodeInfo(); + AddDataRow(DataStr, info.Name, info.ValueData, info.TypeName, info.MimeType, info.Comment); + } + + /// + /// Adds a blob resource to the resources. + /// + private void AddDataRow(string elementName, string name, byte[] value) + { + AddDataRow(elementName, name, ToBase64WrappedString(value), TypeNameWithAssembly(typeof(byte[])), null, null); + } + + /// + /// Adds a resource to the resources. If the resource is a string, + /// it will be saved that way, otherwise it will be serialized + /// and stored as in binary. + /// + private void AddDataRow(string elementName, string name, object value) + { + Debug.WriteLineIf(s_resValueProviderSwitch.TraceVerbose, " resx: adding resource " + name); + switch (value) + { + case string str: + AddDataRow(elementName, name, str); + break; + case byte[] bytes: + AddDataRow(elementName, name, bytes); + break; + case ResXFileRef fileRef: + { + ResXDataNode node = new ResXDataNode(name, fileRef, _typeNameConverter); + DataNodeInfo info = node.GetDataNodeInfo(); + AddDataRow(elementName, info.Name, info.ValueData, info.TypeName, info.MimeType, info.Comment); + break; + } + + default: + { + ResXDataNode node = new ResXDataNode(name, value, _typeNameConverter); + DataNodeInfo info = node.GetDataNodeInfo(); + AddDataRow(elementName, info.Name, info.ValueData, info.TypeName, info.MimeType, info.Comment); + break; + } + } + } + + /// + /// Adds a string resource to the resources. + /// + private void AddDataRow(string elementName, string name, string value) + { + // if it's a null string, set it here as a resxnullref + string typeName = + value is null + ? MultitargetUtil.GetAssemblyQualifiedName(typeof(ResXNullRef), _typeNameConverter) + : null; + AddDataRow(elementName, name, value, typeName, null, null); + } + + /// + /// Adds a new row to the Resources table. This helper is used because + /// we want to always late bind to the columns for greater flexibility. + /// + private void AddDataRow(string elementName, string name, string value, string type, string mimeType, string comment) + { + if (_hasBeenSaved) + { + throw new InvalidOperationException("SR.ResXResourceWriterSaved"); + } + + string alias = null; + if (!string.IsNullOrEmpty(type) && elementName == DataStr) + { + string assemblyName = GetFullName(type); + if (string.IsNullOrEmpty(assemblyName)) + { + try + { + Type typeObject = Type.GetType(type); + if (typeObject == typeof(string)) + { + type = null; + } + else if (typeObject != null) + { + assemblyName = GetFullName(MultitargetUtil.GetAssemblyQualifiedName(typeObject, _typeNameConverter)); + alias = GetAliasFromName(new AssemblyName(assemblyName)); + } + } + catch + { + } + } + else + { + alias = GetAliasFromName(new AssemblyName(GetFullName(type))); + } + } + + Writer.WriteStartElement(elementName); + { + Writer.WriteAttributeString(NameStr, name); + + if (!string.IsNullOrEmpty(alias) && !string.IsNullOrEmpty(type) && elementName == DataStr) + { + // CHANGE: we still output version information. This might have + // to change in 3.2 + string typeName = GetTypeName(type); + string typeValue = typeName + ", " + alias; + Writer.WriteAttributeString(TypeStr, typeValue); + } + else + { + if (type != null) + { + Writer.WriteAttributeString(TypeStr, type); + } + } + + if (mimeType != null) + { + Writer.WriteAttributeString(MimeTypeStr, mimeType); + } + + if ((type is null && mimeType is null) || (type != null && type.StartsWith("System.Char", StringComparison.Ordinal))) + { + Writer.WriteAttributeString("xml", "space", null, "preserve"); + } + + Writer.WriteStartElement(ValueStr); + { + if (!string.IsNullOrEmpty(value)) + { + Writer.WriteString(value); + } + } + + Writer.WriteEndElement(); + + if (!string.IsNullOrEmpty(comment)) + { + Writer.WriteStartElement(CommentStr); + { + Writer.WriteString(comment); + } + + Writer.WriteEndElement(); + } + } + + Writer.WriteEndElement(); + } + + private void AddAssemblyRow(string elementName, string alias, string name) + { + Writer.WriteStartElement(elementName); + { + if (!string.IsNullOrEmpty(alias)) + { + Writer.WriteAttributeString(AliasStr, alias); + } + + if (!string.IsNullOrEmpty(name)) + { + Writer.WriteAttributeString(NameStr, name); + } + } + + Writer.WriteEndElement(); + } + + private string GetAliasFromName(AssemblyName assemblyName) + { + if (_cachedAliases is null) + { + _cachedAliases = new Hashtable(); + } + + string alias = (string)_cachedAliases[assemblyName.FullName]; + + if (string.IsNullOrEmpty(alias)) + { + alias = assemblyName.Name; + AddAlias(alias, assemblyName); + AddAssemblyRow(AssemblyStr, alias, assemblyName.FullName); + } + + return alias; + } + + /// + /// Closes any files or streams locked by the writer. + /// + public void Close() + { + Dispose(); + } + + public virtual void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + if (!_hasBeenSaved) + { + Generate(); + } + + if (_xmlTextWriter != null) + { + _xmlTextWriter.Close(); + _xmlTextWriter = null; + } + + if (_stream != null) + { + _stream.Close(); + _stream = null; + } + + if (_textWriter != null) + { + _textWriter.Close(); + _textWriter = null; + } + } + } + + private static string GetTypeName(string typeName) + { + int indexStart = typeName.IndexOf(','); + return ((indexStart == -1) ? typeName : typeName.Substring(0, indexStart)); + } + + private static string GetFullName(string typeName) + { + int indexStart = typeName.IndexOf(','); + if (indexStart == -1) + { + return null; + } + + return typeName.Substring(indexStart + 2); + } + + static string ToBase64WrappedString(byte[] data) + { + const int lineWrap = 80; + const string crlf = "\r\n"; + const string prefix = " "; + string raw = Convert.ToBase64String(data); + if (raw.Length > lineWrap) + { + StringBuilder output = new StringBuilder(raw.Length + (raw.Length / lineWrap) * 3); // word wrap on lineWrap chars, \r\n + int current = 0; + for (; current < raw.Length - lineWrap; current += lineWrap) + { + output.Append(crlf); + output.Append(prefix); + output.Append(raw, current, lineWrap); + } + + output.Append(crlf); + output.Append(prefix); + output.Append(raw, current, raw.Length - current); + output.Append(crlf); + return output.ToString(); + } + + return raw; + } + + private string TypeNameWithAssembly(Type type) + { + string result = MultitargetUtil.GetAssemblyQualifiedName(type, _typeNameConverter); + return result; + } + + /// + /// Writes the resources out to the file or stream. + /// + public void Generate() + { + if (_hasBeenSaved) + { + throw new InvalidOperationException("SR.ResXResourceWriterSaved"); + } + + _hasBeenSaved = true; + Debug.WriteLineIf(s_resValueProviderSwitch.TraceVerbose, "writing XML"); + + Writer.WriteEndElement(); + Writer.Flush(); + + Debug.WriteLineIf(s_resValueProviderSwitch.TraceVerbose, "done"); + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/ResXSerializationBinder.cs b/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/ResXSerializationBinder.cs new file mode 100644 index 0000000000000000000000000000000000000000..9c0c9aaa895b7559064d08fc1cf0616116fa27e0 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/ResXSerializationBinder.cs @@ -0,0 +1,160 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.ComponentModel.Design; +using System.Diagnostics.CodeAnalysis; +using System.Runtime.Serialization; + +namespace System.Resources +{ + // This class implements a partial type resolver for the BinaryFormatter. + // This is needed to be able to read binary serialized content from older + // NDP types and map them to newer versions. + + internal class ResXSerializationBinder : SerializationBinder + { + private readonly ITypeResolutionService _typeResolver; + private readonly Func _typeNameConverter; + + internal ResXSerializationBinder(ITypeResolutionService typeResolver) + { + _typeResolver = typeResolver; + } + + internal ResXSerializationBinder(Func typeNameConverter) + { + _typeNameConverter = typeNameConverter; + } + + //public override Type BindToType(string assemblyName, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor)]string typeName) + //{ + // if (_typeResolver is null) + // { + // return null; + // } + + // typeName = typeName + ", " + assemblyName; + + // Type type = _typeResolver.GetType(typeName); + // if (type is null) + // { + // string[] typeParts = typeName.Split(','); + + // // Break up the assembly name from the rest of the assembly strong name. + // // we try 1) FQN 2) FQN without a version 3) just the short name + // if (typeParts != null && typeParts.Length > 2) + // { + // string partialName = typeParts[0].Trim(); + + // for (int i = 1; i < typeParts.Length; ++i) + // { + // string typePart = typeParts[i].Trim(); + // if (!typePart.StartsWith("Version=") && !typePart.StartsWith("version=")) + // { + // partialName = partialName + ", " + typePart; + // } + // } + + // type = _typeResolver.GetType(partialName); + // if (type is null) + // { + // type = _typeResolver.GetType(typeParts[0].Trim()); + // } + // } + // } + + // // Binder couldn't handle it, let the default loader take over. + // return type; + //} + public override Type BindToType(string assemblyName, string typeName) + { + if (_typeResolver is null) + { + return null; + } + + typeName = typeName + ", " + assemblyName; + + Type type = _typeResolver.GetType(typeName); + if (type is null) + { + string[] typeParts = typeName.Split(','); + + // Break up the assembly name from the rest of the assembly strong name. + // we try 1) FQN 2) FQN without a version 3) just the short name + if (typeParts is null) + { + + } + else if (typeParts.Length > 2) + // if (typeParts != null && typeParts.Length > 2) + { + string partialName = typeParts[0].Trim(); + + for (int i = 1; i < typeParts.Length; ++i) + { + string typePart = typeParts[i].Trim(); + if (!typePart.StartsWith("Version=") && !typePart.StartsWith("version=")) + { + partialName = partialName + ", " + typePart; + } + } + + type = _typeResolver.GetType(partialName); + if (type is null) + { + type = _typeResolver.GetType(typeParts[0].Trim()); + } + } + } + + // Binder couldn't handle it, let the default loader take over. + return type; + } + + // Get the multitarget-aware string representation for the give type. + public override void BindToName(Type serializedType, out string assemblyName, out string typeName) + { + // Normally we don't change typeName when changing the target framework, + // only assembly version or assembly name might change, thus we are setting + // typeName only if it changed with the framework version. + // If binder passes in a null, BinaryFormatter will use the original value or + // for un-serializable types will redirect to another type. + // For example: + // + // Encoding = Encoding.GetEncoding("shift_jis"); + // public Encoding Encoding { get; set; } + // property type (Encoding) is abstract, but the value is instantiated to a specific class, + // and should be serialized as a specific class in order to be able to instantiate the result. + // + // another example are singleton objects like DBNull.Value which are serialized by System.UnitySerializationHolder + typeName = null; + if(_typeNameConverter is null) + { + + }else + // if (_typeNameConverter != null) + { + string assemblyQualifiedTypeName = MultitargetUtil.GetAssemblyQualifiedName(serializedType, _typeNameConverter); + if (!string.IsNullOrEmpty(assemblyQualifiedTypeName)) + { + int pos = assemblyQualifiedTypeName.IndexOf(','); + if (pos > 0 && pos < assemblyQualifiedTypeName.Length - 1) + { + assemblyName = assemblyQualifiedTypeName.Substring(pos + 1).TrimStart(); + string newTypeName = assemblyQualifiedTypeName.Substring(0, pos); + if (!string.Equals(newTypeName, serializedType.FullName, StringComparison.InvariantCulture)) + { + typeName = newTypeName; + } + + return; + } + } + } + + base.BindToName(serializedType, out assemblyName, out typeName); + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/ResourceManager.cs b/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/ResourceManager.cs index 382c990a6f1ef094a0b2c799bbe4ba82bd5a1147..16a8760243bd84d41ea63947da5177bf58e4ec3c 100644 --- a/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/ResourceManager.cs +++ b/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/ResourceManager.cs @@ -1,12 +1,12 @@ -using System.Collections; -using System.Collections.Generic; +using System; +using System.Collections; using System.ComponentModel; using System.Globalization; using System.IO; using System.Reflection; using System.Resources; using System.Runtime.Serialization; -using System.Text; +using System.Windows.Forms; using System.Xml; namespace GTKSystem.Resources @@ -17,7 +17,7 @@ namespace GTKSystem.Resources public static readonly int HeaderVersionNumber = 1; public static readonly int MagicNumber = -1091581234; - //internal const string ResFileExtension = ".resources"; + internal const string ResFileExtension = ".resources"; //internal const int ResFileExtensionLength = 10; //internal static readonly int DEBUG = 0; @@ -26,6 +26,7 @@ namespace GTKSystem.Resources private System.Type _resourceSource; private Assembly _assembly; private string _baseName; + public ResourceInfo GetResourceInfo = new ResourceInfo(); public ResourceManager(System.Type resourceSource) : this(null, null, resourceSource) { @@ -39,6 +40,9 @@ namespace GTKSystem.Resources this._baseName = baseName; this._assembly = assembly; this._resourceSource = resourceSource; + GetResourceInfo.Assembly = assembly; + GetResourceInfo.BaseName = baseName; + GetResourceInfo.SourceType = resourceSource; } protected ResourceManager() { @@ -68,41 +72,33 @@ namespace GTKSystem.Resources try { string resourceDirctory = System.AppContext.BaseDirectory.Replace("\\", "/") + $"Resources";//linux路径必须用/ - //string[] files = Directory.GetFiles(resourceDirctory, $"{name}.*"); - //if (files != null && files.Length > 0) - //{ - // byte[] imagebytes = File.ReadAllBytes(files[0]); - // result = imagebytes; - //} - //else - //{ - string filepath = resourceDirctory + $"/{Path.GetExtension(_baseName).TrimStart('.')}.resx"; //linux路径必须用/ - if (System.IO.File.Exists(filepath)) + //string resourceDirctory = Environment.CurrentDirectory.Replace("\\", "/") + $"Resources";//linux路径必须用/ + string filepath = resourceDirctory + $"/{Path.GetExtension(_baseName).TrimStart('.')}.resx"; //linux路径必须用/ + if (System.IO.File.Exists(filepath)) + { + try { - try + XmlDocument doc = new XmlDocument(); + XmlReaderSettings xmlReaderSettings = new XmlReaderSettings { CheckCharacters = false }; + doc.Load(filepath); + var docElem = doc.DocumentElement; + XmlNodeList nodes = docElem.SelectNodes("data"); + // + // + // + + foreach (XmlNode xn in nodes) { - XmlDocument doc = new XmlDocument(); - XmlReaderSettings xmlReaderSettings = new XmlReaderSettings { CheckCharacters = false }; - doc.Load(filepath); - var docElem = doc.DocumentElement; - XmlNodeList nodes = docElem.SelectNodes("data"); - // - // - // - - foreach (XmlNode xn in nodes) + if (xn.Attributes["name"].Value == name) { - if (xn.Attributes["name"].Value == name) - { - string data = xn.SelectSingleNode("value").InnerText; - result = System.Convert.FromBase64String(data); - break; - } + string data = xn.SelectSingleNode("value").InnerText; + result = System.Convert.FromBase64String(data); + break; } } - catch { } } - //} + catch { } + } } catch (System.Exception ex) { @@ -116,24 +112,37 @@ namespace GTKSystem.Resources throw new FileNotFoundException(); else { - Stream stream = _assembly.GetManifestResourceStream(_baseName + ".resources"); - GTKSystem.Resources.Extensions.DeserializingResourceReader reader = new GTKSystem.Resources.Extensions.DeserializingResourceReader(stream); - IDictionaryEnumerator dict = reader.GetEnumerator(); - while (dict.MoveNext()) + try { - if (dict.Key.ToString() == name) + Stream stream = _assembly.GetManifestResourceStream(_baseName + ResFileExtension); + GTKSystem.Resources.Extensions.DeserializingResourceReader reader = new GTKSystem.Resources.Extensions.DeserializingResourceReader(stream); + IDictionaryEnumerator dict = reader.GetEnumerator(); + while (dict.MoveNext()) { - try - { - return dict.Value; - } - catch + if (dict.Key.ToString() == name) { - //图像格式内容不能提取 - return null; + try + { + if(dict.Value is ImageListStreamer streamer) + { + streamer.ResourceInfo = GetResourceInfo; + return streamer; + } + else + return dict.Value; + } + catch + { + //图像格式内容不能提取 + return null; + } } } } + catch + { + return null; + } } return null; } @@ -169,17 +178,54 @@ namespace GTKSystem.Resources } public virtual object GetObject(string name) { - object obj = ReadResourceData(name); - if (obj == null) - { - System.Drawing.Bitmap img = new System.Drawing.Bitmap(1, 1); - img.FileName = name; - img.PixbufData = ReadResourceFile(name); - return img; + GetResourceInfo.ResourceName = name; + //if (name.EndsWith(".ImageStream")) + //{ + // //图片组不能读取 + // try + // { + // return new ImageListStreamer(new MemoryStream(GetResourceInfo.ImageBytes)) { ResourceInfo = GetResourceInfo }; + // } + // catch + // { + // SerializationInfo info = new SerializationInfo(typeof(ImageListStreamer), new FormatterConverter()); + // return new ImageListStreamer(new ImageList()) { ResourceInfo = GetResourceInfo }; + // } + //} + //else + if (name.EndsWith(".Icon")) { + return new System.Drawing.Icon(name.Substring(0,name.Length-1)); } else { - return obj; + object obj = ReadResourceData(name); + if (obj == null) + { + if (name.EndsWith(".ImageStream")) + { + return new ImageListStreamer(new ImageList()) { ResourceInfo = GetResourceInfo }; + } + else + { + byte[] filebytes = ReadResourceFile(name); + if (filebytes == null) + { + return GetResourceInfo; + } + else + { + System.Drawing.Bitmap img = new System.Drawing.Bitmap(1, 1); + img.FileName = name; + img.PixbufData = filebytes; + return img; + } + } + } + else + { + GetResourceInfo.ImageBytes = obj as byte[]; + return obj; + } } } public virtual ResourceSet GetResourceSet(CultureInfo culture, bool createIfNotExists, bool tryParents) @@ -227,5 +273,14 @@ namespace GTKSystem.Resources return null; } + + public class ResourceInfo + { + public string ResourceName { get; set; } + public byte[] ImageBytes { get; set; } + public string BaseName { get; set; } + public Assembly Assembly { get; set; } + public System.Type SourceType { get; set; } + } } } \ No newline at end of file diff --git a/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/ResxFileRef.Converter.cs b/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/ResxFileRef.Converter.cs new file mode 100644 index 0000000000000000000000000000000000000000..b50897795d093eba7e9ecfa3c7b10a08a6ff08bd --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKSystem/Resources/ResxFileRef.Converter.cs @@ -0,0 +1,171 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.ComponentModel; +using System.Diagnostics; +using System.Drawing; +using System.Globalization; +using System.IO; +using System.Reflection; +using System.Text; + +namespace System.Resources +{ + public partial class ResXFileRef + { + public class Converter : TypeConverter + { + public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) + { + if (sourceType == typeof(string)) + { + return true; + } + + return false; + } + + public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) + { + return destinationType == typeof(string); + } + + public override object ConvertTo( + ITypeDescriptorContext context, + CultureInfo culture, + object value, + Type destinationType) + { + object created = null; + if (destinationType == typeof(string)) + { + created = ((ResXFileRef)value).ToString(); + } + + return created; + } + + // "value" is the parameter name of ConvertFrom, which calls this method. + internal static string[] ParseResxFileRefString(string stringValue) + { + string[] result = null; + if (stringValue != null) + { + stringValue = stringValue.Trim(); + string fileName; + string remainingString; + if (stringValue.StartsWith("\"")) + { + int lastIndexOfQuote = stringValue.LastIndexOf('\"'); + if (lastIndexOfQuote - 1 < 0) + { + throw new ArgumentException(nameof(stringValue)); + } + + fileName = stringValue.Substring(1, lastIndexOfQuote - 1); // remove the quotes in" ..... " + if (lastIndexOfQuote + 2 > stringValue.Length) + { + throw new ArgumentException(nameof(stringValue)); + } + + remainingString = stringValue.Substring(lastIndexOfQuote + 2); + } + else + { + int nextSemiColumn = stringValue.IndexOf(';'); + if (nextSemiColumn == -1) + { + throw new ArgumentException(nameof(stringValue)); + } + + fileName = stringValue.Substring(0, nextSemiColumn); + if (nextSemiColumn + 1 > stringValue.Length) + { + throw new ArgumentException(nameof(stringValue)); + } + + remainingString = stringValue.Substring(nextSemiColumn + 1); + } + + string[] parts = remainingString.Split(';'); + if (parts.Length > 1) + { + result = new string[] { fileName, parts[0], parts[1] }; + } + else if (parts.Length > 0) + { + result = new string[] { fileName, parts[0] }; + } + else + { + result = new string[] { fileName }; + } + } + + return result; + } + + public override object ConvertFrom( + ITypeDescriptorContext context, + CultureInfo culture, + object value) + { + if (value is string stringValue) + { + string[] parts = ParseResxFileRefString(stringValue); + string fileName = parts[0]; + Type toCreate = Type.GetType(parts[1], true); + + // special case string and byte[] + if (toCreate == typeof(string)) + { + // we have a string, now we need to check the encoding + Encoding textFileEncoding = + parts.Length > 2 + ? Encoding.GetEncoding(parts[2]) + : Encoding.Default; + using (StreamReader sr = new StreamReader(fileName, textFileEncoding)) + { + return sr.ReadToEnd(); + } + } + + // this is a regular file, we call it's constructor with a stream as a parameter + // or if it's a byte array we just return that + byte[] temp = null; + + using (FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + Debug.Assert(fileStream != null, "Couldn't open " + fileName); + temp = new byte[fileStream.Length]; + fileStream.Read(temp, 0, (int)fileStream.Length); + } + + if (toCreate == typeof(byte[])) + { + return temp; + } + + MemoryStream memStream = new MemoryStream(temp); + if (toCreate == typeof(MemoryStream)) + { + return memStream; + } + + if (toCreate == typeof(Bitmap) && fileName.EndsWith(".ico")) + { + // we special case the .ico bitmaps because GDI+ destroy the alpha channel component and + // we don't want that to happen + Icon ico = new Icon(memStream); + return ico.ToBitmap(); + } + + return Activator.CreateInstance(toCreate, BindingFlags.Instance | BindingFlags.Public | BindingFlags.CreateInstance, null, new object[] { memStream }, null); + } + + return null; + } + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKSystem/misc/ClientUtils.cs b/Source/GTKSystem.Windows.Forms/GTKSystem/misc/ClientUtils.cs new file mode 100644 index 0000000000000000000000000000000000000000..4822beede177ce7d6bc07fa0add60ea3e61b9d2d --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKSystem/misc/ClientUtils.cs @@ -0,0 +1,61 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using System.Globalization; +using System.Threading; + +namespace System.Windows.Forms +{ + static internal class ClientUtils + { + public static bool IsCriticalException(Exception ex) + => ex is NullReferenceException + || ex is StackOverflowException + || ex is OutOfMemoryException + || ex is ThreadAbortException + || ex is IndexOutOfRangeException + || ex is AccessViolationException; + + private enum CharType + { + None, + Word, + NonWord + } + + /// + /// Imitates the backwards word selection logic of the native SHAutoComplete Ctrl+Backspace handler. + /// The selection will consist of any run of word characters and any run of non-word characters at the end of that word. + /// If the selection reaches the second character in the input, and the first character is non-word, it is also selected. + /// Here, word characters are equivalent to the "\w" regex class but with UnicodeCategory.ConnectorPunctuation excluded. + /// + public static int GetWordBoundaryStart(string text, int endIndex) + { + bool seenWord = false; + CharType lastSeen = CharType.None; + int index = endIndex - 1; + for (; index >= 0; index--) + { + char character = text[index]; + if (char.IsSurrogate(character)) + { + break; + } + + bool isWord = char.IsLetterOrDigit(character) || + CharUnicodeInfo.GetUnicodeCategory(character) == UnicodeCategory.NonSpacingMark; + if ((isWord && lastSeen == CharType.NonWord && seenWord) || + (!isWord && lastSeen == CharType.Word && index != 0)) + { + break; + } + + seenWord |= isWord; + lastSeen = isWord ? CharType.Word : CharType.NonWord; + } + + return index + 1; + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/GTKSystem/misc/MultitargetUtil.cs b/Source/GTKSystem.Windows.Forms/GTKSystem/misc/MultitargetUtil.cs new file mode 100644 index 0000000000000000000000000000000000000000..fa407dc5ff96a8e7fd28b3b5cdb90bf8537e1d40 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/GTKSystem/misc/MultitargetUtil.cs @@ -0,0 +1,61 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +namespace System.Resources +{ + /// + /// Helper class supporting Multitarget type assembly qualified name resolution for ResX API. + /// Note: this file is compiled into different assemblies (runtime and VSIP assemblies ...) + /// + internal static class MultitargetUtil + { + /// + /// This method gets assembly info for the corresponding type. If the delegate + /// is provided it is used to get this information. + /// + public static string? GetAssemblyQualifiedName(Type? type, Func? typeNameConverter) + { + string? assemblyQualifiedName = null; + + if (type != null) + { + if (typeNameConverter != null) + { + try + { + assemblyQualifiedName = typeNameConverter(type); + } + catch (Exception e) + { + if (IsCriticalException(e)) + { + throw; + } + } + } + + if (string.IsNullOrEmpty(assemblyQualifiedName)) + { + assemblyQualifiedName = type.AssemblyQualifiedName; + } + } + + return assemblyQualifiedName; + } + + // ExecutionEngineException is obsolete and shouldn't be used (to catch, throw or reference) anymore. + // Pragma added to prevent converting the "type is obsolete" warning into build error. + private static bool IsCriticalException(Exception ex) + { + return ex is NullReferenceException + || ex is StackOverflowException + || ex is OutOfMemoryException + || ex is Threading.ThreadAbortException + || ex is ExecutionEngineException + || ex is IndexOutOfRangeException + || ex is AccessViolationException + || ex is Security.SecurityException; + } + } +} diff --git a/Source/GTKSystem.Windows.Forms/Properties/PublishProfiles/FolderProfile.pubxml b/Source/GTKSystem.Windows.Forms/Properties/PublishProfiles/FolderProfile.pubxml index 1641d733c08292a1a848ac12d3a3461a427d041f..867c00d29097a450a4607b123c4516adc95dcf27 100644 --- a/Source/GTKSystem.Windows.Forms/Properties/PublishProfiles/FolderProfile.pubxml +++ b/Source/GTKSystem.Windows.Forms/Properties/PublishProfiles/FolderProfile.pubxml @@ -6,10 +6,10 @@ https://go.microsoft.com/fwlink/?LinkID=208121. Release Any CPU - F:\我的项目\GTK\GTKWindowsForms\Libs + F:\我的项目\GTK\gtksystem-windows-forms\Libs FileSystem <_TargetId>Folder - netcoreapp3.1 + net8.0 false \ No newline at end of file diff --git a/Source/GTKSystem.Windows.Forms/Properties/PublishProfiles/FolderProfile.pubxml.user b/Source/GTKSystem.Windows.Forms/Properties/PublishProfiles/FolderProfile.pubxml.user index 85689991510fda531cee214c7e4500ef28a436e2..4f7f04d3fcba6bae95e2689ffcdbab223b24b21d 100644 --- a/Source/GTKSystem.Windows.Forms/Properties/PublishProfiles/FolderProfile.pubxml.user +++ b/Source/GTKSystem.Windows.Forms/Properties/PublishProfiles/FolderProfile.pubxml.user @@ -4,6 +4,7 @@ https://go.microsoft.com/fwlink/?LinkID=208121. --> - True|2023-11-19T15:02:57.4193432Z;True|2023-11-19T23:02:42.2310361+08:00;True|2023-11-19T22:55:21.1452507+08:00;True|2023-11-19T22:53:48.2487754+08:00;True|2023-11-19T22:52:56.1877291+08:00;True|2023-11-19T22:51:50.8322741+08:00;True|2023-11-19T22:47:10.3696395+08:00;True|2023-10-26T17:05:48.2942332+08:00;True|2023-10-26T16:35:57.8047909+08:00;True|2023-10-26T16:35:50.6502229+08:00;True|2023-10-26T16:35:03.0977921+08:00;False|2023-10-24T15:03:18.1822278+08:00;True|2023-10-24T14:37:39.9202288+08:00; + False|2024-02-21T09:20:00.8952129Z;False|2024-02-21T17:18:52.6621062+08:00;False|2024-02-21T16:53:22.2521723+08:00;True|2023-12-25T02:13:08.9945418+08:00;True|2023-12-25T01:20:44.6346537+08:00;True|2023-12-25T01:19:53.9243703+08:00;False|2023-12-25T01:19:07.8946994+08:00;False|2023-12-25T01:17:08.1855113+08:00;True|2023-11-19T23:02:57.4193432+08:00;True|2023-11-19T23:02:42.2310361+08:00;True|2023-11-19T22:55:21.1452507+08:00;True|2023-11-19T22:53:48.2487754+08:00;True|2023-11-19T22:52:56.1877291+08:00;True|2023-11-19T22:51:50.8322741+08:00;True|2023-11-19T22:47:10.3696395+08:00;True|2023-10-26T17:05:48.2942332+08:00;True|2023-10-26T16:35:57.8047909+08:00;True|2023-10-26T16:35:50.6502229+08:00;True|2023-10-26T16:35:03.0977921+08:00;False|2023-10-24T15:03:18.1822278+08:00;True|2023-10-24T14:37:39.9202288+08:00; + \ No newline at end of file diff --git a/Source/GTKSystem.Windows.Forms/Resources/System/CloseWin.png b/Source/GTKSystem.Windows.Forms/Resources/System/CloseWin.png new file mode 100644 index 0000000000000000000000000000000000000000..d2d264768aff385355c996f1e2be3218d89b6018 Binary files /dev/null and b/Source/GTKSystem.Windows.Forms/Resources/System/CloseWin.png differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/System/CloseWindow.png b/Source/GTKSystem.Windows.Forms/Resources/System/CloseWindow.png new file mode 100644 index 0000000000000000000000000000000000000000..620bcf8342586e157f39b0280058f7a01a76a778 Binary files /dev/null and b/Source/GTKSystem.Windows.Forms/Resources/System/CloseWindow.png differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/System/MaxWin.png b/Source/GTKSystem.Windows.Forms/Resources/System/MaxWin.png new file mode 100644 index 0000000000000000000000000000000000000000..1b1e50b02049fbd9ab5539bfddee8b8f1a1a0059 Binary files /dev/null and b/Source/GTKSystem.Windows.Forms/Resources/System/MaxWin.png differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/System/MaxWindow.png b/Source/GTKSystem.Windows.Forms/Resources/System/MaxWindow.png new file mode 100644 index 0000000000000000000000000000000000000000..55b8c01faeccd3664b7cdb630a0ebe206ffdceea Binary files /dev/null and b/Source/GTKSystem.Windows.Forms/Resources/System/MaxWindow.png differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/System/MinWin.png b/Source/GTKSystem.Windows.Forms/Resources/System/MinWin.png new file mode 100644 index 0000000000000000000000000000000000000000..4ed807756aa77f19faacf85cd8b8e1292ac8cf0b Binary files /dev/null and b/Source/GTKSystem.Windows.Forms/Resources/System/MinWin.png differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/System/MinWindow.png b/Source/GTKSystem.Windows.Forms/Resources/System/MinWindow.png new file mode 100644 index 0000000000000000000000000000000000000000..22e97019c468fe16b81858291687381a86dd9bf3 Binary files /dev/null and b/Source/GTKSystem.Windows.Forms/Resources/System/MinWindow.png differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/view-more-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/System/view-more.png similarity index 100% rename from Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/view-more-symbolic.symbolic.png rename to Source/GTKSystem.Windows.Forms/Resources/System/view-more.png diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/audio-volume-high.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/audio-volume-high.png deleted file mode 100644 index 3ece98e2ebb63f6509c00e533d73c67f620db1a5..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/audio-volume-high.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/audio-volume-low.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/audio-volume-low.png deleted file mode 100644 index 75bb78e9e5ef8123e1f513ecbd93dda56b9003c7..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/audio-volume-low.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/audio-volume-medium.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/audio-volume-medium.png deleted file mode 100644 index a51e1260b9fb5128bd9fc61a6cd1881429586cff..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/audio-volume-medium.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/audio-volume-muted.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/audio-volume-muted.png deleted file mode 100644 index 8fdb4cd920ce668203afecf64ce4100ef137a066..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/audio-volume-muted.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/bookmark-new-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/bookmark-new-symbolic.symbolic.png deleted file mode 100644 index 9ab55c62a516e14d5bcefd8f3bac7a90791518ac..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/bookmark-new-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/bookmark-new.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/bookmark-new.png deleted file mode 100644 index ff2655498d2b15cc1209b7ca335f7b4c3b7eb189..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/bookmark-new.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/color-select-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/color-select-symbolic.symbolic.png deleted file mode 100644 index 03aa7eccdafdb7cd9350fefeb297567d8b009602..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/color-select-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/document-open-recent-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/document-open-recent-symbolic.symbolic.png deleted file mode 100644 index 7a82e312a985a61eaa8cdf96ddc2a5301e0150db..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/document-open-recent-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/document-open-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/document-open-symbolic.symbolic.png deleted file mode 100644 index 8ff21781d67979519a3b17e00e88f429e2d2e28b..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/document-open-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/document-save-as-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/document-save-as-symbolic.symbolic.png deleted file mode 100644 index 22044c8fd20e14ad7eabeb0b814578273ca55884..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/document-save-as-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/document-save-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/document-save-symbolic.symbolic.png deleted file mode 100644 index 0fe35596c40c51e33416e7d9dfced823f7d42890..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/document-save-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/edit-clear-all-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/edit-clear-all-symbolic.symbolic.png deleted file mode 100644 index b494ef02c56b803dc56144355f6b36d823730982..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/edit-clear-all-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/edit-clear-symbolic-rtl.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/edit-clear-symbolic-rtl.symbolic.png deleted file mode 100644 index cb500b25e73c015325809b4b0162638e1ad6651b..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/edit-clear-symbolic-rtl.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/edit-clear-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/edit-clear-symbolic.symbolic.png deleted file mode 100644 index 0fab44a4346cdf75d9c33e16dc2123a176c2dbc8..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/edit-clear-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/edit-copy-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/edit-copy-symbolic.symbolic.png deleted file mode 100644 index ed0a46e880d539dd9c23d5fb866719f0678f8ddd..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/edit-copy-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/edit-cut-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/edit-cut-symbolic.symbolic.png deleted file mode 100644 index 8c6ec49c99e8ab84adb52e6a7bd64d0453511761..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/edit-cut-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/edit-delete-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/edit-delete-symbolic.symbolic.png deleted file mode 100644 index 53571a0684398d898b809deaa4f025df30ecb9d6..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/edit-delete-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/edit-find-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/edit-find-symbolic.symbolic.png deleted file mode 100644 index 74cf388d6f60d262cb15a1b34782113f8f3f744b..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/edit-find-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/edit-paste-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/edit-paste-symbolic.symbolic.png deleted file mode 100644 index 92278edf9704198afe84276242fd914d5c909704..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/edit-paste-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/edit-select-all-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/edit-select-all-symbolic.symbolic.png deleted file mode 100644 index 305c3f6dd9fab2da3334a96fa143e153a6c41009..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/edit-select-all-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/find-location-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/find-location-symbolic.symbolic.png deleted file mode 100644 index fc2191ce25086683c89cc7b18fa50d07f9ccdba2..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/find-location-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/folder-new-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/folder-new-symbolic.symbolic.png deleted file mode 100644 index ec3cd4a5ac732904dcd90eea7d50e8cb37b6f542..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/folder-new-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/folder-new.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/folder-new.png deleted file mode 100644 index 2426c6df1f177f7c00db2245102badffc3384702..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/folder-new.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/go-down-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/go-down-symbolic.symbolic.png deleted file mode 100644 index ee2970d5002bdd0b44b2f54a018efcbcd5bb752f..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/go-down-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/go-next-symbolic-rtl.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/go-next-symbolic-rtl.symbolic.png deleted file mode 100644 index 89deac50f014400aee226ffacd854baeb2505783..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/go-next-symbolic-rtl.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/go-next-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/go-next-symbolic.symbolic.png deleted file mode 100644 index e208e0ea0baee4c3e35fcfd734b2115bfc2c5fed..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/go-next-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/go-previous-symbolic-rtl.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/go-previous-symbolic-rtl.symbolic.png deleted file mode 100644 index e208e0ea0baee4c3e35fcfd734b2115bfc2c5fed..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/go-previous-symbolic-rtl.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/go-previous-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/go-previous-symbolic.symbolic.png deleted file mode 100644 index 89deac50f014400aee226ffacd854baeb2505783..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/go-previous-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/go-up-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/go-up-symbolic.symbolic.png deleted file mode 100644 index e6a5014d1cd72f02f11431da6d560cf6427c0d09..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/go-up-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/insert-image-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/insert-image-symbolic.symbolic.png deleted file mode 100644 index fdd79c4a618eed060af50692c08366c18baa74c6..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/insert-image-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/insert-image.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/insert-image.png deleted file mode 100644 index cf7082362b0d66317f2f47b8ccc13ef88a1b542d..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/insert-image.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/insert-object-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/insert-object-symbolic.symbolic.png deleted file mode 100644 index 71434c55ff734f231f2347def7c731482968b145..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/insert-object-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/insert-object.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/insert-object.png deleted file mode 100644 index 29415f3bae6fd045e66f070d7dc7c230223118d6..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/insert-object.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/list-add-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/list-add-symbolic.symbolic.png deleted file mode 100644 index c44642f24693a1e73ced7188c9f0c60d1fb6f430..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/list-add-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/list-add.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/list-add.png deleted file mode 100644 index d401aea2627133bac434c996894d209e88158410..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/list-add.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/list-remove-all-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/list-remove-all-symbolic.symbolic.png deleted file mode 100644 index 99d75fb6b2eec6877f18a34b1458253ce9d01c14..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/list-remove-all-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/list-remove-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/list-remove-symbolic.symbolic.png deleted file mode 100644 index 5dd2f10972561c2c0c4e6cb5a3c10d06dd6ca8d2..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/list-remove-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/list-remove.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/list-remove.png deleted file mode 100644 index 1cf6fef45539e9baa32a35556dcde4fe23435987..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/list-remove.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/media-eject-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/media-eject-symbolic.symbolic.png deleted file mode 100644 index 4dc8d4389c312fcacc226966bdc0da99b7ca2fef..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/media-eject-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/media-eject.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/media-eject.png deleted file mode 100644 index a7b77d8c0d87d4a575536b96ecdcc8cbd6c9ca43..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/media-eject.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/media-playback-pause-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/media-playback-pause-symbolic.symbolic.png deleted file mode 100644 index 14e6f9ac1133bf59d28772853eb2a1486ab3298f..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/media-playback-pause-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/media-playback-pause.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/media-playback-pause.png deleted file mode 100644 index 6cd5e19c85b15e4fb0a27f83f2dfa9880e647932..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/media-playback-pause.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/media-playback-start-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/media-playback-start-symbolic.symbolic.png deleted file mode 100644 index 2da3ddea0bdde78f48ead3f9a87804f48bb25711..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/media-playback-start-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/media-playback-start.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/media-playback-start.png deleted file mode 100644 index 54722efb29a9db6b6af4fd96956c2f9bbd4f9f3e..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/media-playback-start.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/media-playback-stop-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/media-playback-stop-symbolic.symbolic.png deleted file mode 100644 index 5d2e70a1f7e74525a1fdfac0f98b891987d519e9..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/media-playback-stop-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/media-playback-stop.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/media-playback-stop.png deleted file mode 100644 index 29feb6fa30f55213c81ab98d7c64d764ddeaaeeb..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/media-playback-stop.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/media-playlist-repeat.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/media-playlist-repeat.png deleted file mode 100644 index 102f29227ce178381d5dd14cc30e7b7d05203b94..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/media-playlist-repeat.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/media-record-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/media-record-symbolic.symbolic.png deleted file mode 100644 index 470593c2f97735a2e0c0eb8284d680b362f19312..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/media-record-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/media-record.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/media-record.png deleted file mode 100644 index 5014fdcd0f81ab1651b18cab6a82f0cf566c4ded..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/media-record.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/object-select-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/object-select-symbolic.symbolic.png deleted file mode 100644 index 4e9c924ff40a14a7a627d90bfdb341ff92c17aeb..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/object-select-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/open-menu-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/open-menu-symbolic.symbolic.png deleted file mode 100644 index 789f1de8b2c56d5edd544fb1dc89b3d29ab1275a..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/open-menu-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/pan-down-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/pan-down-symbolic.symbolic.png deleted file mode 100644 index feebd469f1b5040459816df1b0f7e9bdf7de2822..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/pan-down-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/pan-end-symbolic-rtl.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/pan-end-symbolic-rtl.symbolic.png deleted file mode 100644 index 9e95e93d1827e6832f2d7ef90766a3568e19c0f3..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/pan-end-symbolic-rtl.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/pan-end-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/pan-end-symbolic.symbolic.png deleted file mode 100644 index 6b042fe5a5483df88ed8ef9493fc057658ba220a..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/pan-end-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/pan-start-symbolic-rtl.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/pan-start-symbolic-rtl.symbolic.png deleted file mode 100644 index 6b042fe5a5483df88ed8ef9493fc057658ba220a..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/pan-start-symbolic-rtl.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/pan-start-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/pan-start-symbolic.symbolic.png deleted file mode 100644 index 9e95e93d1827e6832f2d7ef90766a3568e19c0f3..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/pan-start-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/pan-up-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/pan-up-symbolic.symbolic.png deleted file mode 100644 index 47881c5a3e4e38993248d51b6377b5328e460e24..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/pan-up-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/system-run-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/system-run-symbolic.symbolic.png deleted file mode 100644 index 5d31f8e52b50e782f776225103488be0d4b0423b..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/system-run-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/system-search-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/system-search-symbolic.symbolic.png deleted file mode 100644 index e805eba1bbb70eac56f251326af46850ce7d3563..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/system-search-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/value-decrease-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/value-decrease-symbolic.symbolic.png deleted file mode 100644 index b91230e671dcece83bd8fbfebb7adc01b2f3a51b..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/value-decrease-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/value-decrease.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/value-decrease.png deleted file mode 100644 index 1cf6fef45539e9baa32a35556dcde4fe23435987..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/value-decrease.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/value-increase-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/value-increase-symbolic.symbolic.png deleted file mode 100644 index 6f2d635511baee6e98959ec17933fbd0cf8b4e31..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/value-increase-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/value-increase.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/value-increase.png deleted file mode 100644 index d401aea2627133bac434c996894d209e88158410..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/value-increase.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/view-conceal-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/view-conceal-symbolic.symbolic.png deleted file mode 100644 index 1f085a1963ca6744027391bb3c8f2a2762689ebf..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/view-conceal-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/view-list-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/view-list-symbolic.symbolic.png deleted file mode 100644 index 9ac75ff49bf05355e937da908725193dc88546d3..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/view-list-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/view-refresh-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/view-refresh-symbolic.symbolic.png deleted file mode 100644 index 55fef6b65e89b7002559bd0071a01b2d8f0cbb46..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/view-refresh-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/view-reveal-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/view-reveal-symbolic.symbolic.png deleted file mode 100644 index 6ae93c2de78d3e2a0747bb199e1b73d5bbce7f9c..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/view-reveal-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/window-close-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/window-close-symbolic.symbolic.png deleted file mode 100644 index c8fd4c22cd8690a4b28ca9cb5bc641ba40de4cd0..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/window-close-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/window-close.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/window-close.png deleted file mode 100644 index 603fa3a7dbcf0e26105662331c72e0ed76edf187..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/window-close.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/window-maximize-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/window-maximize-symbolic.symbolic.png deleted file mode 100644 index c66b18c56bcf20f60c88fa9ddbb96cec028fbcb4..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/window-maximize-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/window-minimize-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/window-minimize-symbolic.symbolic.png deleted file mode 100644 index c1f38b7532d920eea5e74d8703392033bba9bb6b..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/window-minimize-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/window-restore-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/window-restore-symbolic.symbolic.png deleted file mode 100644 index f1740eaefd263e27b49f017705ddb8b92f52d4a2..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/actions/window-restore-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/categories/emoji-activities-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/categories/emoji-activities-symbolic.symbolic.png deleted file mode 100644 index f139d14e1aa735f6d46b5a79ebdf539c677564e1..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/categories/emoji-activities-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/categories/emoji-body-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/categories/emoji-body-symbolic.symbolic.png deleted file mode 100644 index 8bb98e9a756ef0fccb4a274d81543d446008a483..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/categories/emoji-body-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/categories/emoji-flags-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/categories/emoji-flags-symbolic.symbolic.png deleted file mode 100644 index b9d82dbae6673373b53ea0578e416585fd2e0d72..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/categories/emoji-flags-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/categories/emoji-food-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/categories/emoji-food-symbolic.symbolic.png deleted file mode 100644 index fad7195d657b7c74741b0e94e1fe1a48a46962b3..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/categories/emoji-food-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/categories/emoji-nature-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/categories/emoji-nature-symbolic.symbolic.png deleted file mode 100644 index 19cc28a11f96de3eb2cc0bf70aeb7b80c63608e1..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/categories/emoji-nature-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/categories/emoji-objects-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/categories/emoji-objects-symbolic.symbolic.png deleted file mode 100644 index a072b18831a316ff943a4ccd996cf6588c8bce61..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/categories/emoji-objects-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/categories/emoji-people-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/categories/emoji-people-symbolic.symbolic.png deleted file mode 100644 index cc2d6cc36a3aac12199aed6cad08de3230e6c9cd..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/categories/emoji-people-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/categories/emoji-recent-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/categories/emoji-recent-symbolic.symbolic.png deleted file mode 100644 index 85976e9ff9fdc411fd9269f2842217edccc77d65..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/categories/emoji-recent-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/categories/emoji-symbols-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/categories/emoji-symbols-symbolic.symbolic.png deleted file mode 100644 index d1ca6091c7047f6af17537868e24909b1ba9acd1..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/categories/emoji-symbols-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/categories/emoji-travel-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/categories/emoji-travel-symbolic.symbolic.png deleted file mode 100644 index 79136fa157e4a17fd44f10c92e40d2618b2ae06d..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/categories/emoji-travel-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/devices/drive-harddisk-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/devices/drive-harddisk-symbolic.symbolic.png deleted file mode 100644 index 925d07d9c3e67efe629ad314a3a0ddffb418bbd5..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/devices/drive-harddisk-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/devices/drive-harddisk.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/devices/drive-harddisk.png deleted file mode 100644 index bec3a098f135dc0348bf94d0ec6918c2b54005a0..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/devices/drive-harddisk.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/devices/printer-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/devices/printer-symbolic.symbolic.png deleted file mode 100644 index 68861172b2da0465d026a84fab0155872c80e066..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/devices/printer-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/emblems/emblem-important-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/emblems/emblem-important-symbolic.symbolic.png deleted file mode 100644 index 9ecf1ad14d7c80d741adc9318dd5732662cb8714..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/emblems/emblem-important-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/emblems/emblem-system-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/emblems/emblem-system-symbolic.symbolic.png deleted file mode 100644 index 5e3f28860dee75141c5264233aa227a8d1909352..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/emblems/emblem-system-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/emotes/face-smile-big-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/emotes/face-smile-big-symbolic.symbolic.png deleted file mode 100644 index 352ce9a5e1e6a6694185b02048adf1ce4171a13f..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/emotes/face-smile-big-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/emotes/face-smile-big.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/emotes/face-smile-big.png deleted file mode 100644 index 69a1fc8ee200738e0ca3027aec196c460a13f148..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/emotes/face-smile-big.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/emotes/face-smile-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/emotes/face-smile-symbolic.symbolic.png deleted file mode 100644 index 4a12fd578a39d5cc5d9d5e68fe28115caa751587..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/emotes/face-smile-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/emotes/face-smile.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/emotes/face-smile.png deleted file mode 100644 index add5282075d6dac5bc98be8b417bed1c1b1ba9ab..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/emotes/face-smile.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/mimetypes/application-x-executable-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/mimetypes/application-x-executable-symbolic.symbolic.png deleted file mode 100644 index 4d4a7001e2f4b0a901b4dcae525b46cc1f1d27bc..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/mimetypes/application-x-executable-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/mimetypes/application-x-executable.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/mimetypes/application-x-executable.png deleted file mode 100644 index e82f74fc26d98909b4dd0615653bf83ea8baa510..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/mimetypes/application-x-executable.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/mimetypes/text-x-generic-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/mimetypes/text-x-generic-symbolic.symbolic.png deleted file mode 100644 index 0f4f9016e0219df05b3e2ecbf8a5b465413475bd..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/mimetypes/text-x-generic-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/folder-documents-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/folder-documents-symbolic.symbolic.png deleted file mode 100644 index 0f4f9016e0219df05b3e2ecbf8a5b465413475bd..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/folder-documents-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/folder-download-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/folder-download-symbolic.symbolic.png deleted file mode 100644 index 4a1dbfc4f4e70e47d9479c66f25f236e48fcdf6f..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/folder-download-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/folder-music-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/folder-music-symbolic.symbolic.png deleted file mode 100644 index f69e691f896df68d86e954951ae53c5a74d98b97..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/folder-music-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/folder-pictures-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/folder-pictures-symbolic.symbolic.png deleted file mode 100644 index 73765c7667dfbce08b732ff443dc883a2d95094f..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/folder-pictures-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/folder-publicshare-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/folder-publicshare-symbolic.symbolic.png deleted file mode 100644 index f68c67847b84e8778e5f8ff4a4f2e076d9ce9b40..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/folder-publicshare-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/folder-remote-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/folder-remote-symbolic.symbolic.png deleted file mode 100644 index 57bc97c7a88124c536f3c9c0e1a05b28101f17d0..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/folder-remote-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/folder-saved-search-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/folder-saved-search-symbolic.symbolic.png deleted file mode 100644 index 606a4b87194750eea80a884bbd73df2e221cf4a1..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/folder-saved-search-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/folder-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/folder-symbolic.symbolic.png deleted file mode 100644 index 450ab7595aad32e32108d0d4eefc9820838f9710..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/folder-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/folder-templates-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/folder-templates-symbolic.symbolic.png deleted file mode 100644 index 2f950a77d73cd6554403ed0003c9c0c4a425a69a..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/folder-templates-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/folder-videos-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/folder-videos-symbolic.symbolic.png deleted file mode 100644 index b2c1d9c32e9f2dbf1ee00dbd3575229031131005..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/folder-videos-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/network-server-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/network-server-symbolic.symbolic.png deleted file mode 100644 index 2f751718b91f13d49d672e71f6165365f8577368..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/network-server-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/network-server.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/network-server.png deleted file mode 100644 index aa4fa40439e2bbac51ce4df2c93ff2cdde454906..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/network-server.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/network-workgroup-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/network-workgroup-symbolic.symbolic.png deleted file mode 100644 index 0001ae8af5256f8410728b0196d02a1a3cb0285d..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/network-workgroup-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/network-workgroup.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/network-workgroup.png deleted file mode 100644 index eadab2f39e9d01164ca177057be4d9c9f56292b9..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/network-workgroup.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/user-desktop-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/user-desktop-symbolic.symbolic.png deleted file mode 100644 index 450ab7595aad32e32108d0d4eefc9820838f9710..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/user-desktop-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/user-home-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/user-home-symbolic.symbolic.png deleted file mode 100644 index 2961f682676d0fffb9935e40b13029fe78647b64..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/user-home-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/user-trash-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/user-trash-symbolic.symbolic.png deleted file mode 100644 index 52f30d49d0caba9e814dc08932b5669aef7368e9..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/user-trash-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/user-trash.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/user-trash.png deleted file mode 100644 index e06fec8cd8ee0f2aad00148ba77844bcac7a1fc6..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/places/user-trash.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/audio-volume-high-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/audio-volume-high-symbolic.symbolic.png deleted file mode 100644 index ceb43e4404437a2413d5c610dc3a2c3f3ca314ea..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/audio-volume-high-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/audio-volume-high.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/audio-volume-high.png deleted file mode 100644 index 3ece98e2ebb63f6509c00e533d73c67f620db1a5..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/audio-volume-high.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/audio-volume-low-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/audio-volume-low-symbolic.symbolic.png deleted file mode 100644 index 5249ff33ad6fbd0430a131aad8fe9a9fc4687985..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/audio-volume-low-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/audio-volume-low.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/audio-volume-low.png deleted file mode 100644 index 75bb78e9e5ef8123e1f513ecbd93dda56b9003c7..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/audio-volume-low.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/audio-volume-medium-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/audio-volume-medium-symbolic.symbolic.png deleted file mode 100644 index 6d71ced5df59a0597282553f419a19e4961dc326..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/audio-volume-medium-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/audio-volume-medium.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/audio-volume-medium.png deleted file mode 100644 index a51e1260b9fb5128bd9fc61a6cd1881429586cff..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/audio-volume-medium.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/audio-volume-muted-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/audio-volume-muted-symbolic.symbolic.png deleted file mode 100644 index 61e2be3d8615dda34982cf6b7ff2bd51dc6924e7..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/audio-volume-muted-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/audio-volume-muted.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/audio-volume-muted.png deleted file mode 100644 index 8fdb4cd920ce668203afecf64ce4100ef137a066..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/audio-volume-muted.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/caps-lock-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/caps-lock-symbolic.symbolic.png deleted file mode 100644 index 9951c0370dcb470085b567d81b23baced21bba5a..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/caps-lock-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/changes-allow-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/changes-allow-symbolic.symbolic.png deleted file mode 100644 index e8ee33ecc0cd60cfdea3b9200041172ab8094fe4..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/changes-allow-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/changes-allow.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/changes-allow.png deleted file mode 100644 index 3222b378dd2bc9003e2a438de309e0a52084bcf1..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/changes-allow.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/changes-prevent-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/changes-prevent-symbolic.symbolic.png deleted file mode 100644 index d42ad10a83c4a742e87abf985f725dcad36d3a51..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/changes-prevent-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/changes-prevent.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/changes-prevent.png deleted file mode 100644 index d1731e90d537ac79f430359399fa1d2453ec06db..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/changes-prevent.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/dialog-error-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/dialog-error-symbolic.symbolic.png deleted file mode 100644 index 1c585b78aeb20f71b3f3024f63ed37c172c078c2..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/dialog-error-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/dialog-error.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/dialog-error.png deleted file mode 100644 index c874dc47b2ce4ddc4087781b153e17077a089216..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/dialog-error.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/dialog-information-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/dialog-information-symbolic.symbolic.png deleted file mode 100644 index 91699f2878cce4a792835ca03052406f0b69cfd0..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/dialog-information-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/dialog-information.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/dialog-information.png deleted file mode 100644 index 93a0fdc71b3f6187d6fc6f361e72baba2d1c22b1..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/dialog-information.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/dialog-password-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/dialog-password-symbolic.symbolic.png deleted file mode 100644 index b4403697aa4880d3869de0cec2a2ea13b67e9538..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/dialog-password-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/dialog-password.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/dialog-password.png deleted file mode 100644 index 66aa8ba729ac87448b698d85d6d1db3e91437bc8..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/dialog-password.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/dialog-question-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/dialog-question-symbolic.symbolic.png deleted file mode 100644 index 01ced815647a5b6d1335a457b15ee76ec165e499..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/dialog-question-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/dialog-question.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/dialog-question.png deleted file mode 100644 index 6df7daf1f642bb3d09f4967435a4188f21951e80..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/dialog-question.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/dialog-warning-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/dialog-warning-symbolic.symbolic.png deleted file mode 100644 index e790a310da53006ba35912878ed1cb3f32a0b40d..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/dialog-warning-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/dialog-warning.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/dialog-warning.png deleted file mode 100644 index b576a6bee318ea2ccf6d3cbb07f5a7b561deeb0b..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/dialog-warning.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/display-brightness-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/display-brightness-symbolic.symbolic.png deleted file mode 100644 index 5217710c225b203056ba4df7a1e1ee91653a867b..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/display-brightness-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/image-missing.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/image-missing.png deleted file mode 100644 index 509e3b647bb8998fdc4ecad56c42e8b7e59ec7bd..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/image-missing.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/media-playlist-repeat-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/media-playlist-repeat-symbolic.symbolic.png deleted file mode 100644 index 7e54b04c7d7ed87cb179240573b133d9d814b3f2..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/media-playlist-repeat-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/media-playlist-repeat.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/media-playlist-repeat.png deleted file mode 100644 index 102f29227ce178381d5dd14cc30e7b7d05203b94..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/media-playlist-repeat.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/orientation-landscape-inverse-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/orientation-landscape-inverse-symbolic.symbolic.png deleted file mode 100644 index 19289907e1e0068b1bb1e9c2f085b69c62c48b5e..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/orientation-landscape-inverse-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/orientation-landscape-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/orientation-landscape-symbolic.symbolic.png deleted file mode 100644 index 43b2e7d4d30b2d5ffa1355ab7f53826bc1a9e4ec..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/orientation-landscape-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/orientation-portrait-inverse-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/orientation-portrait-inverse-symbolic.symbolic.png deleted file mode 100644 index 77c640c985a85d941fe71f1dcb6b72c409fff00c..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/orientation-portrait-inverse-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/orientation-portrait-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/orientation-portrait-symbolic.symbolic.png deleted file mode 100644 index 3739605f270b1baca9a9f3bbd8598be44a9eae30..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/orientation-portrait-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/process-working-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/process-working-symbolic.symbolic.png deleted file mode 100644 index ab9624e0d6aa5a0c4a60e6428c2a999d61703636..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/process-working-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/switch-off-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/switch-off-symbolic.symbolic.png deleted file mode 100644 index f653ec18822ae5c47996c1a7e2701c067511612e..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/switch-off-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/switch-on-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/switch-on-symbolic.symbolic.png deleted file mode 100644 index 112a0e024e099c1475450f2bdd172ca4c81d4fe6..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/16x16/status/switch-on-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/32x32/devices/drive-harddisk.png b/Source/GTKSystem.Windows.Forms/Resources/icons/32x32/devices/drive-harddisk.png deleted file mode 100644 index e1be8f657a8a245094864468a56c3e79b11a053f..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/32x32/devices/drive-harddisk.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/32x32/places/network-workgroup.png b/Source/GTKSystem.Windows.Forms/Resources/icons/32x32/places/network-workgroup.png deleted file mode 100644 index f5f0d4adfefdae4d837dad8cb852992b74bd0f78..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/32x32/places/network-workgroup.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/64x64/actions/gesture-pinch-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/64x64/actions/gesture-pinch-symbolic.symbolic.png deleted file mode 100644 index bcce9086d86fbb9224ce626538457ebdb1f9f0b4..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/64x64/actions/gesture-pinch-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/64x64/actions/gesture-rotate-anticlockwise-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/64x64/actions/gesture-rotate-anticlockwise-symbolic.symbolic.png deleted file mode 100644 index 6d97665fd8122e2c985eeaf6ced06de99b998870..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/64x64/actions/gesture-rotate-anticlockwise-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/64x64/actions/gesture-rotate-clockwise-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/64x64/actions/gesture-rotate-clockwise-symbolic.symbolic.png deleted file mode 100644 index fda51ac672f2693c82fa1905613d4ec63a887406..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/64x64/actions/gesture-rotate-clockwise-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/64x64/actions/gesture-stretch-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/64x64/actions/gesture-stretch-symbolic.symbolic.png deleted file mode 100644 index 4505369762033f0007e87cd2765f0cbc0c77a230..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/64x64/actions/gesture-stretch-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/64x64/actions/gesture-swipe-left-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/64x64/actions/gesture-swipe-left-symbolic.symbolic.png deleted file mode 100644 index d085513259f9a45340fad1a4ae3e6aba4e62b50b..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/64x64/actions/gesture-swipe-left-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/64x64/actions/gesture-swipe-right-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/64x64/actions/gesture-swipe-right-symbolic.symbolic.png deleted file mode 100644 index 11206dadec3bd115fabbe2385b5054c8548c1bb8..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/64x64/actions/gesture-swipe-right-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/64x64/actions/gesture-two-finger-swipe-left-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/64x64/actions/gesture-two-finger-swipe-left-symbolic.symbolic.png deleted file mode 100644 index 067d0bfe4a8a870b27e6e230884a6cdcaf4e2e18..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/64x64/actions/gesture-two-finger-swipe-left-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/Resources/icons/64x64/actions/gesture-two-finger-swipe-right-symbolic.symbolic.png b/Source/GTKSystem.Windows.Forms/Resources/icons/64x64/actions/gesture-two-finger-swipe-right-symbolic.symbolic.png deleted file mode 100644 index bf5737ab98ed890c6f75a45951b67ca2a4f0de2c..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/Resources/icons/64x64/actions/gesture-two-finger-swipe-right-symbolic.symbolic.png and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/bin/Debug/GTKSystem.Windows.Forms.0.3.24.1.nupkg b/Source/GTKSystem.Windows.Forms/bin/Debug/GTKSystem.Windows.Forms.0.3.24.1.nupkg deleted file mode 100644 index 3c9cbd8b2c226f0a2c1053b30847fd13f408fbee..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/bin/Debug/GTKSystem.Windows.Forms.0.3.24.1.nupkg and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/bin/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.deps.json b/Source/GTKSystem.Windows.Forms/bin/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.deps.json deleted file mode 100644 index 4b693b1bbd77aa83a892b13ecf884b64b5f866dc..0000000000000000000000000000000000000000 --- a/Source/GTKSystem.Windows.Forms/bin/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.deps.json +++ /dev/null @@ -1,155 +0,0 @@ -{ - "runtimeTarget": { - "name": ".NETCoreApp,Version=v3.1", - "signature": "" - }, - "compilationOptions": {}, - "targets": { - ".NETCoreApp,Version=v3.1": { - "GTKSystem.Windows.Forms/0.3.24.1": { - "dependencies": { - "GtkSharp": "3.24.24.34" - }, - "runtime": { - "GTKSystem.Windows.Forms.dll": {} - } - }, - "AtkSharp/3.24.24.34": { - "dependencies": { - "GLibSharp": "3.24.24.34" - }, - "runtime": { - "lib/netstandard2.0/AtkSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "CairoSharp/3.24.24.34": { - "runtime": { - "lib/netstandard2.0/CairoSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "GdkSharp/3.24.24.34": { - "dependencies": { - "CairoSharp": "3.24.24.34", - "GLibSharp": "3.24.24.34", - "GioSharp": "3.24.24.34", - "PangoSharp": "3.24.24.34" - }, - "runtime": { - "lib/netstandard2.0/GdkSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "GioSharp/3.24.24.34": { - "dependencies": { - "GLibSharp": "3.24.24.34" - }, - "runtime": { - "lib/netstandard2.0/GioSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "GLibSharp/3.24.24.34": { - "runtime": { - "lib/netstandard2.0/GLibSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "GtkSharp/3.24.24.34": { - "dependencies": { - "AtkSharp": "3.24.24.34", - "CairoSharp": "3.24.24.34", - "GLibSharp": "3.24.24.34", - "GdkSharp": "3.24.24.34", - "GioSharp": "3.24.24.34", - "PangoSharp": "3.24.24.34" - }, - "runtime": { - "lib/netstandard2.0/GtkSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "PangoSharp/3.24.24.34": { - "dependencies": { - "CairoSharp": "3.24.24.34", - "GLibSharp": "3.24.24.34" - }, - "runtime": { - "lib/netstandard2.0/PangoSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - } - } - }, - "libraries": { - "GTKSystem.Windows.Forms/0.3.24.1": { - "type": "project", - "serviceable": false, - "sha512": "" - }, - "AtkSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-CNfTGhGDxcnow5e/u0THtOJeNWaZNDeeFmzYTMdC1tdUkmAtTFDareTGesLx+Gfj75m3415AKJSC9wQ6VyacYQ==", - "path": "atksharp/3.24.24.34", - "hashPath": "atksharp.3.24.24.34.nupkg.sha512" - }, - "CairoSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-hr75uYPGFlmB3RvpL3/6ZJtb+UiKsrpkyjb5VGI+8y1/lkY405FMBhPZKlxFqoEH0iIZ9gAMPBqKzT1lSVaDqA==", - "path": "cairosharp/3.24.24.34", - "hashPath": "cairosharp.3.24.24.34.nupkg.sha512" - }, - "GdkSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-COORB6Qd4yu6HWRbzVZXrkzr1T96Gy0wO7ckJfpYxWLbDUDnZVd/g2PICp9T05a0ZvLvkE++vsSjAWobwQeS0g==", - "path": "gdksharp/3.24.24.34", - "hashPath": "gdksharp.3.24.24.34.nupkg.sha512" - }, - "GioSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-Qyz8bhKjLMTWoxXu6cdNEtTLNUuw7Y1sPdXlyTfyWMP/JmsUE9smCsCC0kyQNSFW17flxdSoeDpG8l6zzJF0vQ==", - "path": "giosharp/3.24.24.34", - "hashPath": "giosharp.3.24.24.34.nupkg.sha512" - }, - "GLibSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-PSA7YJbxpnpeltjekoUk93FI9HWUMc2NtkxNIaWzHz7BavkkZDFmx8EKTKtuBrqbZZmEhlv5472NwGdiycSfxw==", - "path": "glibsharp/3.24.24.34", - "hashPath": "glibsharp.3.24.24.34.nupkg.sha512" - }, - "GtkSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-CVAz7ACMxW9xPhlrrg4Xe+v3jUnpN+emQl78aaXHtoiE7pf0tR8mP8mw0/eBHxMObrmg6DsLxbEFqE/7Yo4Uow==", - "path": "gtksharp/3.24.24.34", - "hashPath": "gtksharp.3.24.24.34.nupkg.sha512" - }, - "PangoSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-QpBEIiE29sxkewdW7l7rVRJR1p3SGoPauHrjm0A3yxpYxj+St5x45weHI8jquMJAZBUdVQuXYHSZDW1lQeJ+PQ==", - "path": "pangosharp/3.24.24.34", - "hashPath": "pangosharp.3.24.24.34.nupkg.sha512" - } - } -} \ No newline at end of file diff --git a/Source/GTKSystem.Windows.Forms/bin/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.dll b/Source/GTKSystem.Windows.Forms/bin/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.dll deleted file mode 100644 index afeaad248125718c4e2fba9626a760f7c70feb08..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/bin/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.dll and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/bin/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.pdb b/Source/GTKSystem.Windows.Forms/bin/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.pdb deleted file mode 100644 index c20da45b462bee0386cd8ed1c557a1bd059252e3..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/bin/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.pdb and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/bin/Release/netcoreapp3.1/GTKSystem.Windows.Forms.deps.json b/Source/GTKSystem.Windows.Forms/bin/Release/netcoreapp3.1/GTKSystem.Windows.Forms.deps.json deleted file mode 100644 index 4b693b1bbd77aa83a892b13ecf884b64b5f866dc..0000000000000000000000000000000000000000 --- a/Source/GTKSystem.Windows.Forms/bin/Release/netcoreapp3.1/GTKSystem.Windows.Forms.deps.json +++ /dev/null @@ -1,155 +0,0 @@ -{ - "runtimeTarget": { - "name": ".NETCoreApp,Version=v3.1", - "signature": "" - }, - "compilationOptions": {}, - "targets": { - ".NETCoreApp,Version=v3.1": { - "GTKSystem.Windows.Forms/0.3.24.1": { - "dependencies": { - "GtkSharp": "3.24.24.34" - }, - "runtime": { - "GTKSystem.Windows.Forms.dll": {} - } - }, - "AtkSharp/3.24.24.34": { - "dependencies": { - "GLibSharp": "3.24.24.34" - }, - "runtime": { - "lib/netstandard2.0/AtkSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "CairoSharp/3.24.24.34": { - "runtime": { - "lib/netstandard2.0/CairoSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "GdkSharp/3.24.24.34": { - "dependencies": { - "CairoSharp": "3.24.24.34", - "GLibSharp": "3.24.24.34", - "GioSharp": "3.24.24.34", - "PangoSharp": "3.24.24.34" - }, - "runtime": { - "lib/netstandard2.0/GdkSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "GioSharp/3.24.24.34": { - "dependencies": { - "GLibSharp": "3.24.24.34" - }, - "runtime": { - "lib/netstandard2.0/GioSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "GLibSharp/3.24.24.34": { - "runtime": { - "lib/netstandard2.0/GLibSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "GtkSharp/3.24.24.34": { - "dependencies": { - "AtkSharp": "3.24.24.34", - "CairoSharp": "3.24.24.34", - "GLibSharp": "3.24.24.34", - "GdkSharp": "3.24.24.34", - "GioSharp": "3.24.24.34", - "PangoSharp": "3.24.24.34" - }, - "runtime": { - "lib/netstandard2.0/GtkSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "PangoSharp/3.24.24.34": { - "dependencies": { - "CairoSharp": "3.24.24.34", - "GLibSharp": "3.24.24.34" - }, - "runtime": { - "lib/netstandard2.0/PangoSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - } - } - }, - "libraries": { - "GTKSystem.Windows.Forms/0.3.24.1": { - "type": "project", - "serviceable": false, - "sha512": "" - }, - "AtkSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-CNfTGhGDxcnow5e/u0THtOJeNWaZNDeeFmzYTMdC1tdUkmAtTFDareTGesLx+Gfj75m3415AKJSC9wQ6VyacYQ==", - "path": "atksharp/3.24.24.34", - "hashPath": "atksharp.3.24.24.34.nupkg.sha512" - }, - "CairoSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-hr75uYPGFlmB3RvpL3/6ZJtb+UiKsrpkyjb5VGI+8y1/lkY405FMBhPZKlxFqoEH0iIZ9gAMPBqKzT1lSVaDqA==", - "path": "cairosharp/3.24.24.34", - "hashPath": "cairosharp.3.24.24.34.nupkg.sha512" - }, - "GdkSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-COORB6Qd4yu6HWRbzVZXrkzr1T96Gy0wO7ckJfpYxWLbDUDnZVd/g2PICp9T05a0ZvLvkE++vsSjAWobwQeS0g==", - "path": "gdksharp/3.24.24.34", - "hashPath": "gdksharp.3.24.24.34.nupkg.sha512" - }, - "GioSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-Qyz8bhKjLMTWoxXu6cdNEtTLNUuw7Y1sPdXlyTfyWMP/JmsUE9smCsCC0kyQNSFW17flxdSoeDpG8l6zzJF0vQ==", - "path": "giosharp/3.24.24.34", - "hashPath": "giosharp.3.24.24.34.nupkg.sha512" - }, - "GLibSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-PSA7YJbxpnpeltjekoUk93FI9HWUMc2NtkxNIaWzHz7BavkkZDFmx8EKTKtuBrqbZZmEhlv5472NwGdiycSfxw==", - "path": "glibsharp/3.24.24.34", - "hashPath": "glibsharp.3.24.24.34.nupkg.sha512" - }, - "GtkSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-CVAz7ACMxW9xPhlrrg4Xe+v3jUnpN+emQl78aaXHtoiE7pf0tR8mP8mw0/eBHxMObrmg6DsLxbEFqE/7Yo4Uow==", - "path": "gtksharp/3.24.24.34", - "hashPath": "gtksharp.3.24.24.34.nupkg.sha512" - }, - "PangoSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-QpBEIiE29sxkewdW7l7rVRJR1p3SGoPauHrjm0A3yxpYxj+St5x45weHI8jquMJAZBUdVQuXYHSZDW1lQeJ+PQ==", - "path": "pangosharp/3.24.24.34", - "hashPath": "pangosharp.3.24.24.34.nupkg.sha512" - } - } -} \ No newline at end of file diff --git a/Source/GTKSystem.Windows.Forms/bin/Release/netcoreapp3.1/GTKSystem.Windows.Forms.dll b/Source/GTKSystem.Windows.Forms/bin/Release/netcoreapp3.1/GTKSystem.Windows.Forms.dll deleted file mode 100644 index cc27a9d7f5df2d19a8c7a7df13ea49abb3c2bdae..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/bin/Release/netcoreapp3.1/GTKSystem.Windows.Forms.dll and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/bin/Release/netcoreapp3.1/GTKSystem.Windows.Forms.pdb b/Source/GTKSystem.Windows.Forms/bin/Release/netcoreapp3.1/GTKSystem.Windows.Forms.pdb deleted file mode 100644 index e256c98466be8b309486b8876c224f2ee5f7d6f6..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/bin/Release/netcoreapp3.1/GTKSystem.Windows.Forms.pdb and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/bin/Release/netcoreapp3.1/publish/GTKSystem.Windows.Forms.0.3.24.1.nupkg b/Source/GTKSystem.Windows.Forms/bin/Release/netcoreapp3.1/publish/GTKSystem.Windows.Forms.0.3.24.1.nupkg deleted file mode 100644 index 1e96e758ef52d574fccaed394b20da434c63d0d9..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/bin/Release/netcoreapp3.1/publish/GTKSystem.Windows.Forms.0.3.24.1.nupkg and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/obj/Debug/GTKSystem.Windows.Forms.0.3.24.1.nuspec b/Source/GTKSystem.Windows.Forms/obj/Debug/GTKSystem.Windows.Forms.0.3.24.1.nuspec deleted file mode 100644 index c873798c9e70c2e1f7f15a4d42ead579b1cb8328..0000000000000000000000000000000000000000 --- a/Source/GTKSystem.Windows.Forms/obj/Debug/GTKSystem.Windows.Forms.0.3.24.1.nuspec +++ /dev/null @@ -1,24 +0,0 @@ - - - - GTKSystem.Windows.Forms - 0.3.24.1 - GTK跨平台winform组件,一次编译,跨windows和linux平台运行 - chenhongjin - false - https://gitee.com/easywebfactory/gtksystem-windows-forms - 基于GTK3.24.24.34版本组件开发,兼容原生C#控件winform界面的跨平台界面组件。 -使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows和linux运行。 -技术支持438865652@qq.com,https://gitee.com/easywebfactory/gtksystem-windows-forms - 一次编译,跨windows和linux平台运行 - 438865652@qq.com,chenhongjin - - - - - - - - - - \ No newline at end of file diff --git a/Source/GTKSystem.Windows.Forms/obj/Debug/GTKSystem.Windows.Forms.1.0.0.nuspec b/Source/GTKSystem.Windows.Forms/obj/Debug/GTKSystem.Windows.Forms.1.0.0.nuspec deleted file mode 100644 index b1bd90f9539d363d3d0f5e5a5bbe365d7ae436a6..0000000000000000000000000000000000000000 --- a/Source/GTKSystem.Windows.Forms/obj/Debug/GTKSystem.Windows.Forms.1.0.0.nuspec +++ /dev/null @@ -1,20 +0,0 @@ - - - - GTKSystem.Windows.Forms - 1.0.0 - chenhongjin - https://www.cnblogs.com/easywebfactory - Package Description - 已实现大部分常用功能,可以跨平台windows和linux(统信系统上测试)直接运行,无需分平台编译 - qq:438865652/email:438865652@qq.com - - - - - - - - - - \ No newline at end of file diff --git a/Source/GTKSystem.Windows.Forms/obj/Debug/net5.0/.NETCoreApp,Version=v5.0.AssemblyAttributes.cs b/Source/GTKSystem.Windows.Forms/obj/Debug/net5.0/.NETCoreApp,Version=v5.0.AssemblyAttributes.cs deleted file mode 100644 index 2f7e5ec5afa156f8313c6a17e8a80a25246858f5..0000000000000000000000000000000000000000 --- a/Source/GTKSystem.Windows.Forms/obj/Debug/net5.0/.NETCoreApp,Version=v5.0.AssemblyAttributes.cs +++ /dev/null @@ -1,4 +0,0 @@ -// -using System; -using System.Reflection; -[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v5.0", FrameworkDisplayName = "")] diff --git a/Source/GTKSystem.Windows.Forms/obj/Debug/net5.0/System.Windows.Forms.AssemblyInfoInputs.cache b/Source/GTKSystem.Windows.Forms/obj/Debug/net5.0/System.Windows.Forms.AssemblyInfoInputs.cache deleted file mode 100644 index 531d1f5b2c7281767724497117d99624d20f0cef..0000000000000000000000000000000000000000 --- a/Source/GTKSystem.Windows.Forms/obj/Debug/net5.0/System.Windows.Forms.AssemblyInfoInputs.cache +++ /dev/null @@ -1 +0,0 @@ -97867c57fed1c9d8faa9386b2d160ae12096845d diff --git a/Source/GTKSystem.Windows.Forms/obj/Debug/net5.0/System.Windows.Forms.GeneratedMSBuildEditorConfig.editorconfig b/Source/GTKSystem.Windows.Forms/obj/Debug/net5.0/System.Windows.Forms.GeneratedMSBuildEditorConfig.editorconfig deleted file mode 100644 index d7e29835d585d70c36f9ec99b31f5a63a0912174..0000000000000000000000000000000000000000 --- a/Source/GTKSystem.Windows.Forms/obj/Debug/net5.0/System.Windows.Forms.GeneratedMSBuildEditorConfig.editorconfig +++ /dev/null @@ -1,8 +0,0 @@ -is_global = true -build_property.TargetFramework = net5.0 -build_property.TargetPlatformMinVersion = -build_property.UsingMicrosoftNETSdkWeb = -build_property.ProjectTypeGuids = -build_property.PublishSingleFile = -build_property.IncludeAllContentForSelfExtract = -build_property._SupportedPlatformList = Android,iOS,Linux,macOS,Windows diff --git a/Source/GTKSystem.Windows.Forms/obj/Debug/net5.0/System.Windows.Forms.assets.cache b/Source/GTKSystem.Windows.Forms/obj/Debug/net5.0/System.Windows.Forms.assets.cache deleted file mode 100644 index 7cdcf55e05ffc438d4fb69a6ba26e235ffa1a671..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/obj/Debug/net5.0/System.Windows.Forms.assets.cache and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/obj/Debug/net5.0/System.Windows.Forms.csproj.CoreCompileInputs.cache b/Source/GTKSystem.Windows.Forms/obj/Debug/net5.0/System.Windows.Forms.csproj.CoreCompileInputs.cache deleted file mode 100644 index f9806d52088325d03a60f130755cfae91ea51869..0000000000000000000000000000000000000000 --- a/Source/GTKSystem.Windows.Forms/obj/Debug/net5.0/System.Windows.Forms.csproj.CoreCompileInputs.cache +++ /dev/null @@ -1 +0,0 @@ -ef24db6dc83a1093683d31bea5b611d6a2d3504d diff --git a/Source/GTKSystem.Windows.Forms/obj/Debug/net5.0/System.Windows.Forms.csproj.FileListAbsolute.txt b/Source/GTKSystem.Windows.Forms/obj/Debug/net5.0/System.Windows.Forms.csproj.FileListAbsolute.txt deleted file mode 100644 index 65b3dee2c3190e52ba6dd102d0fd181bad1feff7..0000000000000000000000000000000000000000 --- a/Source/GTKSystem.Windows.Forms/obj/Debug/net5.0/System.Windows.Forms.csproj.FileListAbsolute.txt +++ /dev/null @@ -1,11 +0,0 @@ -F:\GTK项目\WindowsFormsApp1\System.Windows.Forms\bin\Debug\net5.0\System.Windows.Forms.deps.json -F:\GTK项目\WindowsFormsApp1\System.Windows.Forms\bin\Debug\net5.0\System.Windows.Forms.dll -F:\GTK项目\WindowsFormsApp1\System.Windows.Forms\bin\Debug\net5.0\ref\System.Windows.Forms.dll -F:\GTK项目\WindowsFormsApp1\System.Windows.Forms\bin\Debug\net5.0\System.Windows.Forms.pdb -F:\GTK项目\WindowsFormsApp1\System.Windows.Forms\obj\Debug\net5.0\System.Windows.Forms.GeneratedMSBuildEditorConfig.editorconfig -F:\GTK项目\WindowsFormsApp1\System.Windows.Forms\obj\Debug\net5.0\System.Windows.Forms.AssemblyInfoInputs.cache -F:\GTK项目\WindowsFormsApp1\System.Windows.Forms\obj\Debug\net5.0\System.Windows.Forms.AssemblyInfo.cs -F:\GTK项目\WindowsFormsApp1\System.Windows.Forms\obj\Debug\net5.0\System.Windows.Forms.csproj.CoreCompileInputs.cache -F:\GTK项目\WindowsFormsApp1\System.Windows.Forms\obj\Debug\net5.0\System.Windows.Forms.dll -F:\GTK项目\WindowsFormsApp1\System.Windows.Forms\obj\Debug\net5.0\ref\System.Windows.Forms.dll -F:\GTK项目\WindowsFormsApp1\System.Windows.Forms\obj\Debug\net5.0\System.Windows.Forms.pdb diff --git a/Source/GTKSystem.Windows.Forms/obj/Debug/net5.0/System.Windows.Forms.dll b/Source/GTKSystem.Windows.Forms/obj/Debug/net5.0/System.Windows.Forms.dll deleted file mode 100644 index 00b60b56941d284df6eb986a5d194940ff69deca..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/obj/Debug/net5.0/System.Windows.Forms.dll and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/obj/Debug/net5.0/System.Windows.Forms.pdb b/Source/GTKSystem.Windows.Forms/obj/Debug/net5.0/System.Windows.Forms.pdb deleted file mode 100644 index 641485bcfe3e367da9f3fa8db2dcc2e8e94b26f3..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/obj/Debug/net5.0/System.Windows.Forms.pdb and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/obj/Debug/net5.0/ref/System.Windows.Forms.dll b/Source/GTKSystem.Windows.Forms/obj/Debug/net5.0/ref/System.Windows.Forms.dll deleted file mode 100644 index cf302eac03db62ee4c3ff6cba9cad96a87abd3c0..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/obj/Debug/net5.0/ref/System.Windows.Forms.dll and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/.NETCoreApp,Version=v3.1.AssemblyAttributes.cs b/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/.NETCoreApp,Version=v3.1.AssemblyAttributes.cs deleted file mode 100644 index ad8dfe1a6310302587a2d0c0111d81b250eb4105..0000000000000000000000000000000000000000 --- a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/.NETCoreApp,Version=v3.1.AssemblyAttributes.cs +++ /dev/null @@ -1,4 +0,0 @@ -// -using System; -using System.Reflection; -[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v3.1", FrameworkDisplayName = "")] diff --git a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/FxResources.System.Resources.Extensions.SR.resources b/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/FxResources.System.Resources.Extensions.SR.resources deleted file mode 100644 index b7dc292c83c4249b2aacbf28cd1a88c9d8916754..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/FxResources.System.Resources.Extensions.SR.resources and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.AssemblyInfo.cs b/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.AssemblyInfo.cs deleted file mode 100644 index 26353608b516c6cd27dc04270b4af397252cb04d..0000000000000000000000000000000000000000 --- a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.AssemblyInfo.cs +++ /dev/null @@ -1,27 +0,0 @@ -//------------------------------------------------------------------------------ -// -// 此代码由工具生成。 -// 运行时版本:4.0.30319.42000 -// -// 对此文件的更改可能会导致不正确的行为,并且如果 -// 重新生成代码,这些更改将会丢失。 -// -//------------------------------------------------------------------------------ - -using System; -using System.Reflection; - -[assembly: System.Reflection.AssemblyCompanyAttribute("chenhongjin")] -[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] -[assembly: System.Reflection.AssemblyCopyrightAttribute("438865652@qq.com,chenhongjin")] -[assembly: System.Reflection.AssemblyDescriptionAttribute("基于GTK3.24.24.34版本组件开发,兼容原生C#控件winform界面的跨平台界面组件。\r\n使用本组件GTKSystem.Windows.Forms代替M" + - "icrosoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows和linux运行。\r\n技术支持438865652" + - "@qq.com,https://gitee.com/easywebfactory/gtksystem-windows-forms\r\n\t")] -[assembly: System.Reflection.AssemblyFileVersionAttribute("0.3.24.1")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("0.3.24.1")] -[assembly: System.Reflection.AssemblyProductAttribute("GTKSystem.Windows.Forms")] -[assembly: System.Reflection.AssemblyTitleAttribute("GTKSystem.Windows.Forms")] -[assembly: System.Reflection.AssemblyVersionAttribute("0.3.24.1")] - -// 由 MSBuild WriteCodeFragment 类生成。 - diff --git a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.AssemblyInfoInputs.cache b/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.AssemblyInfoInputs.cache deleted file mode 100644 index 59d2c77dd30c6d8ebdbb96bc823cc8a65fce8977..0000000000000000000000000000000000000000 --- a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.AssemblyInfoInputs.cache +++ /dev/null @@ -1 +0,0 @@ -e9143ce084b05ea10430a1e05b7927cb1deb5137 diff --git a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.Properties.Resources.resources b/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.Properties.Resources.resources deleted file mode 100644 index 7462d764b01c76dd5ca7c8ec8bf80b6ac48ac40e..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.Properties.Resources.resources and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.assets.cache b/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.assets.cache deleted file mode 100644 index d2888cfe2b09c2a95072bb84ad204ee1145950c3..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.assets.cache and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.csproj.BuildWithSkipAnalyzers b/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.csproj.BuildWithSkipAnalyzers deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.csproj.CoreCompileInputs.cache b/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.csproj.CoreCompileInputs.cache deleted file mode 100644 index e3fe012f58067c1ed9151c627f41337f12ae7b16..0000000000000000000000000000000000000000 --- a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.csproj.CoreCompileInputs.cache +++ /dev/null @@ -1 +0,0 @@ -1001e39944f4d67db59133039689a300eddb8798 diff --git a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.csproj.FileListAbsolute.txt b/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.csproj.FileListAbsolute.txt deleted file mode 100644 index 5e93bdae7fe3338c7bd5b95d8224a71bda79b73d..0000000000000000000000000000000000000000 --- a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.csproj.FileListAbsolute.txt +++ /dev/null @@ -1,47 +0,0 @@ -F:\GTK项目\WindowsFormsApp1\GTKSystem.Windows.Forms\obj\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.csproj.AssemblyReference.cache -F:\GTK项目\WindowsFormsApp1\GTKSystem.Windows.Forms\obj\Debug\netcoreapp3.1\FxResources.System.Resources.Extensions.SR.resources -F:\GTK项目\WindowsFormsApp1\GTKSystem.Windows.Forms\obj\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.Properties.Resources.resources -F:\GTK项目\WindowsFormsApp1\GTKSystem.Windows.Forms\obj\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.csproj.GenerateResource.cache -F:\GTK项目\WindowsFormsApp1\GTKSystem.Windows.Forms\obj\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.GeneratedMSBuildEditorConfig.editorconfig -F:\GTK项目\WindowsFormsApp1\GTKSystem.Windows.Forms\obj\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.AssemblyInfoInputs.cache -F:\GTK项目\WindowsFormsApp1\GTKSystem.Windows.Forms\obj\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.AssemblyInfo.cs -F:\GTK项目\WindowsFormsApp1\GTKSystem.Windows.Forms\obj\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.csproj.CoreCompileInputs.cache -F:\GTK项目\WindowsFormsApp1\GTKSystem.Windows.Forms\bin\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.deps.json -F:\GTK项目\WindowsFormsApp1\GTKSystem.Windows.Forms\bin\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.dll -F:\GTK项目\WindowsFormsApp1\GTKSystem.Windows.Forms\bin\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.pdb -F:\GTK项目\WindowsFormsApp1\GTKSystem.Windows.Forms\obj\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.dll -F:\GTK项目\WindowsFormsApp1\GTKSystem.Windows.Forms\obj\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.pdb -F:\我的项目\GTK\GTKSystem.Windows.Forms\bin\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.deps.json -F:\我的项目\GTK\GTKSystem.Windows.Forms\bin\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.dll -F:\我的项目\GTK\GTKSystem.Windows.Forms\bin\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.pdb -F:\我的项目\GTK\GTKSystem.Windows.Forms\obj\Debug\netcoreapp3.1\FxResources.System.Resources.Extensions.SR.resources -F:\我的项目\GTK\GTKSystem.Windows.Forms\obj\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.Properties.Resources.resources -F:\我的项目\GTK\GTKSystem.Windows.Forms\obj\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.csproj.GenerateResource.cache -F:\我的项目\GTK\GTKSystem.Windows.Forms\obj\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.AssemblyInfoInputs.cache -F:\我的项目\GTK\GTKSystem.Windows.Forms\obj\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.AssemblyInfo.cs -F:\我的项目\GTK\GTKSystem.Windows.Forms\obj\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.csproj.CoreCompileInputs.cache -F:\我的项目\GTK\GTKSystem.Windows.Forms\obj\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.dll -F:\我的项目\GTK\GTKSystem.Windows.Forms\obj\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.pdb -F:\我的项目\GTK\GTKWindowsForms\Source\GTKSystem.Windows.Forms\bin\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.deps.json -F:\我的项目\GTK\GTKWindowsForms\Source\GTKSystem.Windows.Forms\bin\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.dll -F:\我的项目\GTK\GTKWindowsForms\Source\GTKSystem.Windows.Forms\bin\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.pdb -F:\我的项目\GTK\GTKWindowsForms\Source\GTKSystem.Windows.Forms\obj\Debug\netcoreapp3.1\FxResources.System.Resources.Extensions.SR.resources -F:\我的项目\GTK\GTKWindowsForms\Source\GTKSystem.Windows.Forms\obj\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.Properties.Resources.resources -F:\我的项目\GTK\GTKWindowsForms\Source\GTKSystem.Windows.Forms\obj\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.csproj.GenerateResource.cache -F:\我的项目\GTK\GTKWindowsForms\Source\GTKSystem.Windows.Forms\obj\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.AssemblyInfoInputs.cache -F:\我的项目\GTK\GTKWindowsForms\Source\GTKSystem.Windows.Forms\obj\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.AssemblyInfo.cs -F:\我的项目\GTK\GTKWindowsForms\Source\GTKSystem.Windows.Forms\obj\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.csproj.CoreCompileInputs.cache -F:\我的项目\GTK\GTKWindowsForms\Source\GTKSystem.Windows.Forms\obj\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.dll -F:\我的项目\GTK\GTKWindowsForms\Source\GTKSystem.Windows.Forms\obj\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.pdb -F:\我的项目\GTK\gtksystem-windows-forms\Source\GTKSystem.Windows.Forms\bin\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.deps.json -F:\我的项目\GTK\gtksystem-windows-forms\Source\GTKSystem.Windows.Forms\bin\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.dll -F:\我的项目\GTK\gtksystem-windows-forms\Source\GTKSystem.Windows.Forms\bin\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.pdb -F:\我的项目\GTK\gtksystem-windows-forms\Source\GTKSystem.Windows.Forms\obj\Debug\netcoreapp3.1\FxResources.System.Resources.Extensions.SR.resources -F:\我的项目\GTK\gtksystem-windows-forms\Source\GTKSystem.Windows.Forms\obj\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.Properties.Resources.resources -F:\我的项目\GTK\gtksystem-windows-forms\Source\GTKSystem.Windows.Forms\obj\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.csproj.GenerateResource.cache -F:\我的项目\GTK\gtksystem-windows-forms\Source\GTKSystem.Windows.Forms\obj\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.AssemblyInfoInputs.cache -F:\我的项目\GTK\gtksystem-windows-forms\Source\GTKSystem.Windows.Forms\obj\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.AssemblyInfo.cs -F:\我的项目\GTK\gtksystem-windows-forms\Source\GTKSystem.Windows.Forms\obj\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.csproj.CoreCompileInputs.cache -F:\我的项目\GTK\gtksystem-windows-forms\Source\GTKSystem.Windows.Forms\obj\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.dll -F:\我的项目\GTK\gtksystem-windows-forms\Source\GTKSystem.Windows.Forms\obj\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.pdb -F:\我的项目\GTK\gtksystem-windows-forms\Source\GTKSystem.Windows.Forms\obj\Debug\netcoreapp3.1\GTKSystem.Windows.Forms.csprojAssemblyReference.cache diff --git a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.csproj.GenerateResource.cache b/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.csproj.GenerateResource.cache deleted file mode 100644 index 5e7a31ee4389e272f7f2c3e56a47316ec4ba7335..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.csproj.GenerateResource.cache and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.csprojAssemblyReference.cache b/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.csprojAssemblyReference.cache deleted file mode 100644 index 0edace1f1eafdf81178e5b00eb1879fab0015104..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.csprojAssemblyReference.cache and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.designer.deps.json b/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.designer.deps.json deleted file mode 100644 index d2d72175755182870ea25d9e127120645ee66895..0000000000000000000000000000000000000000 --- a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.designer.deps.json +++ /dev/null @@ -1,142 +0,0 @@ -{ - "runtimeTarget": { - "name": ".NETCoreApp,Version=v3.1", - "signature": "" - }, - "compilationOptions": {}, - "targets": { - ".NETCoreApp,Version=v3.1": { - "AtkSharp/3.24.24.34": { - "dependencies": { - "GLibSharp": "3.24.24.34" - }, - "runtime": { - "lib/netstandard2.0/AtkSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "CairoSharp/3.24.24.34": { - "runtime": { - "lib/netstandard2.0/CairoSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "GdkSharp/3.24.24.34": { - "dependencies": { - "CairoSharp": "3.24.24.34", - "GLibSharp": "3.24.24.34", - "GioSharp": "3.24.24.34", - "PangoSharp": "3.24.24.34" - }, - "runtime": { - "lib/netstandard2.0/GdkSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "GioSharp/3.24.24.34": { - "dependencies": { - "GLibSharp": "3.24.24.34" - }, - "runtime": { - "lib/netstandard2.0/GioSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "GLibSharp/3.24.24.34": { - "runtime": { - "lib/netstandard2.0/GLibSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "GtkSharp/3.24.24.34": { - "dependencies": { - "AtkSharp": "3.24.24.34", - "CairoSharp": "3.24.24.34", - "GLibSharp": "3.24.24.34", - "GdkSharp": "3.24.24.34", - "GioSharp": "3.24.24.34", - "PangoSharp": "3.24.24.34" - }, - "runtime": { - "lib/netstandard2.0/GtkSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "PangoSharp/3.24.24.34": { - "dependencies": { - "CairoSharp": "3.24.24.34", - "GLibSharp": "3.24.24.34" - }, - "runtime": { - "lib/netstandard2.0/PangoSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - } - } - }, - "libraries": { - "AtkSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-CNfTGhGDxcnow5e/u0THtOJeNWaZNDeeFmzYTMdC1tdUkmAtTFDareTGesLx+Gfj75m3415AKJSC9wQ6VyacYQ==", - "path": "atksharp/3.24.24.34", - "hashPath": "atksharp.3.24.24.34.nupkg.sha512" - }, - "CairoSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-hr75uYPGFlmB3RvpL3/6ZJtb+UiKsrpkyjb5VGI+8y1/lkY405FMBhPZKlxFqoEH0iIZ9gAMPBqKzT1lSVaDqA==", - "path": "cairosharp/3.24.24.34", - "hashPath": "cairosharp.3.24.24.34.nupkg.sha512" - }, - "GdkSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-COORB6Qd4yu6HWRbzVZXrkzr1T96Gy0wO7ckJfpYxWLbDUDnZVd/g2PICp9T05a0ZvLvkE++vsSjAWobwQeS0g==", - "path": "gdksharp/3.24.24.34", - "hashPath": "gdksharp.3.24.24.34.nupkg.sha512" - }, - "GioSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-Qyz8bhKjLMTWoxXu6cdNEtTLNUuw7Y1sPdXlyTfyWMP/JmsUE9smCsCC0kyQNSFW17flxdSoeDpG8l6zzJF0vQ==", - "path": "giosharp/3.24.24.34", - "hashPath": "giosharp.3.24.24.34.nupkg.sha512" - }, - "GLibSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-PSA7YJbxpnpeltjekoUk93FI9HWUMc2NtkxNIaWzHz7BavkkZDFmx8EKTKtuBrqbZZmEhlv5472NwGdiycSfxw==", - "path": "glibsharp/3.24.24.34", - "hashPath": "glibsharp.3.24.24.34.nupkg.sha512" - }, - "GtkSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-CVAz7ACMxW9xPhlrrg4Xe+v3jUnpN+emQl78aaXHtoiE7pf0tR8mP8mw0/eBHxMObrmg6DsLxbEFqE/7Yo4Uow==", - "path": "gtksharp/3.24.24.34", - "hashPath": "gtksharp.3.24.24.34.nupkg.sha512" - }, - "PangoSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-QpBEIiE29sxkewdW7l7rVRJR1p3SGoPauHrjm0A3yxpYxj+St5x45weHI8jquMJAZBUdVQuXYHSZDW1lQeJ+PQ==", - "path": "pangosharp/3.24.24.34", - "hashPath": "pangosharp.3.24.24.34.nupkg.sha512" - } - } -} \ No newline at end of file diff --git a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.designer.runtimeconfig.json b/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.designer.runtimeconfig.json deleted file mode 100644 index 3268a6b868d45105eb160d7f1c106fc348d5c5dc..0000000000000000000000000000000000000000 --- a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.designer.runtimeconfig.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "runtimeOptions": { - "tfm": "netcoreapp3.1", - "framework": { - "name": "Microsoft.NETCore.App", - "version": "3.1.0" - }, - "additionalProbingPaths": [ - "C:\\Users\\Administrator\\.nuget\\packages", - "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" - ], - "configProperties": { - "Microsoft.NETCore.DotNetHostPolicy.SetAppPaths": true - } - } -} \ No newline at end of file diff --git a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.dll b/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.dll deleted file mode 100644 index afeaad248125718c4e2fba9626a760f7c70feb08..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.dll and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.pdb b/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.pdb deleted file mode 100644 index c20da45b462bee0386cd8ed1c557a1bd059252e3..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/GTKSystem.Windows.Forms.pdb and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/System.Windows.Forms.AssemblyInfo.cs b/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/System.Windows.Forms.AssemblyInfo.cs deleted file mode 100644 index 01f82076dc8fa6d69b6eca203e9b307b523fb742..0000000000000000000000000000000000000000 --- a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/System.Windows.Forms.AssemblyInfo.cs +++ /dev/null @@ -1,23 +0,0 @@ -//------------------------------------------------------------------------------ -// -// 此代码由工具生成。 -// 运行时版本:4.0.30319.42000 -// -// 对此文件的更改可能会导致不正确的行为,并且如果 -// 重新生成代码,这些更改将会丢失。 -// -//------------------------------------------------------------------------------ - -using System; -using System.Reflection; - -[assembly: System.Reflection.AssemblyCompanyAttribute("System.Windows.Forms")] -[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] -[assembly: System.Reflection.AssemblyFileVersionAttribute("4.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("4.0.0")] -[assembly: System.Reflection.AssemblyProductAttribute("System.Windows.Forms")] -[assembly: System.Reflection.AssemblyTitleAttribute("System.Windows.Forms")] -[assembly: System.Reflection.AssemblyVersionAttribute("4.0.0.0")] - -// 由 MSBuild WriteCodeFragment 类生成。 - diff --git a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/System.Windows.Forms.AssemblyInfoInputs.cache b/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/System.Windows.Forms.AssemblyInfoInputs.cache deleted file mode 100644 index 531d1f5b2c7281767724497117d99624d20f0cef..0000000000000000000000000000000000000000 --- a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/System.Windows.Forms.AssemblyInfoInputs.cache +++ /dev/null @@ -1 +0,0 @@ -97867c57fed1c9d8faa9386b2d160ae12096845d diff --git a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/System.Windows.Forms.GeneratedMSBuildEditorConfig.editorconfig b/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/System.Windows.Forms.GeneratedMSBuildEditorConfig.editorconfig deleted file mode 100644 index bef5fb9aa76c7437153fc88625944c2cc537c92a..0000000000000000000000000000000000000000 --- a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/System.Windows.Forms.GeneratedMSBuildEditorConfig.editorconfig +++ /dev/null @@ -1,3 +0,0 @@ -is_global = true -build_property.RootNamespace = System.Windows.Forms -build_property.ProjectDir = F:\GTK项目\WindowsFormsApp1\System.Windows.Forms\ diff --git a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/System.Windows.Forms.Properties.Resources.resources b/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/System.Windows.Forms.Properties.Resources.resources deleted file mode 100644 index 7462d764b01c76dd5ca7c8ec8bf80b6ac48ac40e..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/System.Windows.Forms.Properties.Resources.resources and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/System.Windows.Forms.assets.cache b/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/System.Windows.Forms.assets.cache deleted file mode 100644 index f023185196c36d849d7cf2d7cd9fa8ee9bc5df40..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/System.Windows.Forms.assets.cache and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/System.Windows.Forms.csproj.AssemblyReference.cache b/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/System.Windows.Forms.csproj.AssemblyReference.cache deleted file mode 100644 index 0f3a6d1af17ce29781655e43f4ea52f92f1ddc35..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/System.Windows.Forms.csproj.AssemblyReference.cache and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/System.Windows.Forms.csproj.CopyComplete b/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/System.Windows.Forms.csproj.CopyComplete deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/System.Windows.Forms.csproj.CoreCompileInputs.cache b/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/System.Windows.Forms.csproj.CoreCompileInputs.cache deleted file mode 100644 index d263abae1ceb8ef48d6717ffffecbdc3e4d11ffe..0000000000000000000000000000000000000000 --- a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/System.Windows.Forms.csproj.CoreCompileInputs.cache +++ /dev/null @@ -1 +0,0 @@ -00337dec6469aec04a752cbe7bafd5db6748bb24 diff --git a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/System.Windows.Forms.csproj.FileListAbsolute.txt b/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/System.Windows.Forms.csproj.FileListAbsolute.txt deleted file mode 100644 index 34d0df07c57bc060d18cdbf95cbe264452fedd64..0000000000000000000000000000000000000000 --- a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/System.Windows.Forms.csproj.FileListAbsolute.txt +++ /dev/null @@ -1,25 +0,0 @@ -F:\GTK项目\WindowsFormsApp1\System.Windows.Forms\bin\Debug\netcoreapp3.1\System.Windows.Forms.deps.json -F:\GTK项目\WindowsFormsApp1\System.Windows.Forms\bin\Debug\netcoreapp3.1\System.Windows.Forms.dll -F:\GTK项目\WindowsFormsApp1\System.Windows.Forms\bin\Debug\netcoreapp3.1\System.Windows.Forms.pdb -F:\GTK项目\WindowsFormsApp1\System.Windows.Forms\obj\Debug\netcoreapp3.1\System.Windows.Forms.AssemblyInfoInputs.cache -F:\GTK项目\WindowsFormsApp1\System.Windows.Forms\obj\Debug\netcoreapp3.1\System.Windows.Forms.AssemblyInfo.cs -F:\GTK项目\WindowsFormsApp1\System.Windows.Forms\obj\Debug\netcoreapp3.1\System.Windows.Forms.csproj.CoreCompileInputs.cache -F:\GTK项目\WindowsFormsApp1\System.Windows.Forms\obj\Debug\netcoreapp3.1\System.Windows.Forms.dll -F:\GTK项目\WindowsFormsApp1\System.Windows.Forms\obj\Debug\netcoreapp3.1\System.Windows.Forms.pdb -F:\GTK项目\WindowsFormsApp1\System.Windows.Forms\bin\Debug\netcoreapp3.1\System.Resources.Extensions.dll -F:\GTK项目\WindowsFormsApp1\System.Windows.Forms\obj\Debug\netcoreapp3.1\System.Windows.Forms.csproj.CopyComplete -F:\GTK项目\WindowsFormsApp1\System.Windows.Forms\obj\Debug\netcoreapp3.1\System.Windows.Forms.csproj.AssemblyReference.cache -F:\GTK项目\WindowsFormsApp1\System.Windows.Forms\obj\Debug\netcoreapp3.1\System.Windows.Forms.GeneratedMSBuildEditorConfig.editorconfig -F:\test\WindowsFormsApp1\System.Windows.Forms\bin\Debug\netcoreapp3.1\System.Windows.Forms.deps.json -F:\test\WindowsFormsApp1\System.Windows.Forms\bin\Debug\netcoreapp3.1\System.Windows.Forms.dll -F:\test\WindowsFormsApp1\System.Windows.Forms\bin\Debug\netcoreapp3.1\System.Windows.Forms.pdb -F:\test\WindowsFormsApp1\System.Windows.Forms\bin\Debug\netcoreapp3.1\System.Resources.Extensions.dll -F:\test\WindowsFormsApp1\System.Windows.Forms\obj\Debug\netcoreapp3.1\System.Windows.Forms.AssemblyInfoInputs.cache -F:\test\WindowsFormsApp1\System.Windows.Forms\obj\Debug\netcoreapp3.1\System.Windows.Forms.AssemblyInfo.cs -F:\test\WindowsFormsApp1\System.Windows.Forms\obj\Debug\netcoreapp3.1\System.Windows.Forms.csproj.CoreCompileInputs.cache -F:\test\WindowsFormsApp1\System.Windows.Forms\obj\Debug\netcoreapp3.1\System.Windows.Forms.csproj.CopyComplete -F:\test\WindowsFormsApp1\System.Windows.Forms\obj\Debug\netcoreapp3.1\System.Windows.Forms.dll -F:\test\WindowsFormsApp1\System.Windows.Forms\obj\Debug\netcoreapp3.1\System.Windows.Forms.pdb -F:\test\WindowsFormsApp1\System.Windows.Forms\bin\Debug\netcoreapp3.1\Resources\System\DateTimePicker.ico -F:\test\WindowsFormsApp1\System.Windows.Forms\obj\Debug\netcoreapp3.1\System.Windows.Forms.Properties.Resources.resources -F:\test\WindowsFormsApp1\System.Windows.Forms\obj\Debug\netcoreapp3.1\System.Windows.Forms.csproj.GenerateResource.cache diff --git a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/System.Windows.Forms.csproj.GenerateResource.cache b/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/System.Windows.Forms.csproj.GenerateResource.cache deleted file mode 100644 index df5a6a49c636836a17d8c783dec1f6fba77d3914..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/System.Windows.Forms.csproj.GenerateResource.cache and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/System.Windows.Forms.csprojAssemblyReference.cache b/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/System.Windows.Forms.csprojAssemblyReference.cache deleted file mode 100644 index 829fb1a20f739ee2b12aa556de0600cc0865b597..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/System.Windows.Forms.csprojAssemblyReference.cache and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/System.Windows.Forms.designer.deps.json b/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/System.Windows.Forms.designer.deps.json deleted file mode 100644 index d2d72175755182870ea25d9e127120645ee66895..0000000000000000000000000000000000000000 --- a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/System.Windows.Forms.designer.deps.json +++ /dev/null @@ -1,142 +0,0 @@ -{ - "runtimeTarget": { - "name": ".NETCoreApp,Version=v3.1", - "signature": "" - }, - "compilationOptions": {}, - "targets": { - ".NETCoreApp,Version=v3.1": { - "AtkSharp/3.24.24.34": { - "dependencies": { - "GLibSharp": "3.24.24.34" - }, - "runtime": { - "lib/netstandard2.0/AtkSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "CairoSharp/3.24.24.34": { - "runtime": { - "lib/netstandard2.0/CairoSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "GdkSharp/3.24.24.34": { - "dependencies": { - "CairoSharp": "3.24.24.34", - "GLibSharp": "3.24.24.34", - "GioSharp": "3.24.24.34", - "PangoSharp": "3.24.24.34" - }, - "runtime": { - "lib/netstandard2.0/GdkSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "GioSharp/3.24.24.34": { - "dependencies": { - "GLibSharp": "3.24.24.34" - }, - "runtime": { - "lib/netstandard2.0/GioSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "GLibSharp/3.24.24.34": { - "runtime": { - "lib/netstandard2.0/GLibSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "GtkSharp/3.24.24.34": { - "dependencies": { - "AtkSharp": "3.24.24.34", - "CairoSharp": "3.24.24.34", - "GLibSharp": "3.24.24.34", - "GdkSharp": "3.24.24.34", - "GioSharp": "3.24.24.34", - "PangoSharp": "3.24.24.34" - }, - "runtime": { - "lib/netstandard2.0/GtkSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - }, - "PangoSharp/3.24.24.34": { - "dependencies": { - "CairoSharp": "3.24.24.34", - "GLibSharp": "3.24.24.34" - }, - "runtime": { - "lib/netstandard2.0/PangoSharp.dll": { - "assemblyVersion": "3.24.24.34", - "fileVersion": "3.24.24.34" - } - } - } - } - }, - "libraries": { - "AtkSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-CNfTGhGDxcnow5e/u0THtOJeNWaZNDeeFmzYTMdC1tdUkmAtTFDareTGesLx+Gfj75m3415AKJSC9wQ6VyacYQ==", - "path": "atksharp/3.24.24.34", - "hashPath": "atksharp.3.24.24.34.nupkg.sha512" - }, - "CairoSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-hr75uYPGFlmB3RvpL3/6ZJtb+UiKsrpkyjb5VGI+8y1/lkY405FMBhPZKlxFqoEH0iIZ9gAMPBqKzT1lSVaDqA==", - "path": "cairosharp/3.24.24.34", - "hashPath": "cairosharp.3.24.24.34.nupkg.sha512" - }, - "GdkSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-COORB6Qd4yu6HWRbzVZXrkzr1T96Gy0wO7ckJfpYxWLbDUDnZVd/g2PICp9T05a0ZvLvkE++vsSjAWobwQeS0g==", - "path": "gdksharp/3.24.24.34", - "hashPath": "gdksharp.3.24.24.34.nupkg.sha512" - }, - "GioSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-Qyz8bhKjLMTWoxXu6cdNEtTLNUuw7Y1sPdXlyTfyWMP/JmsUE9smCsCC0kyQNSFW17flxdSoeDpG8l6zzJF0vQ==", - "path": "giosharp/3.24.24.34", - "hashPath": "giosharp.3.24.24.34.nupkg.sha512" - }, - "GLibSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-PSA7YJbxpnpeltjekoUk93FI9HWUMc2NtkxNIaWzHz7BavkkZDFmx8EKTKtuBrqbZZmEhlv5472NwGdiycSfxw==", - "path": "glibsharp/3.24.24.34", - "hashPath": "glibsharp.3.24.24.34.nupkg.sha512" - }, - "GtkSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-CVAz7ACMxW9xPhlrrg4Xe+v3jUnpN+emQl78aaXHtoiE7pf0tR8mP8mw0/eBHxMObrmg6DsLxbEFqE/7Yo4Uow==", - "path": "gtksharp/3.24.24.34", - "hashPath": "gtksharp.3.24.24.34.nupkg.sha512" - }, - "PangoSharp/3.24.24.34": { - "type": "package", - "serviceable": true, - "sha512": "sha512-QpBEIiE29sxkewdW7l7rVRJR1p3SGoPauHrjm0A3yxpYxj+St5x45weHI8jquMJAZBUdVQuXYHSZDW1lQeJ+PQ==", - "path": "pangosharp/3.24.24.34", - "hashPath": "pangosharp.3.24.24.34.nupkg.sha512" - } - } -} \ No newline at end of file diff --git a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/System.Windows.Forms.designer.runtimeconfig.json b/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/System.Windows.Forms.designer.runtimeconfig.json deleted file mode 100644 index 0300c34532e9192e71671560ce6d4efef7dd326c..0000000000000000000000000000000000000000 --- a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/System.Windows.Forms.designer.runtimeconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "runtimeOptions": { - "tfm": "netcoreapp3.1", - "framework": { - "name": "Microsoft.NETCore.App", - "version": "3.1.0" - }, - "additionalProbingPaths": [ - "C:\\Users\\Administrator\\.nuget\\packages", - "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages", - "C:\\Program Files (x86)\\Microsoft\\Xamarin\\NuGet" - ], - "configProperties": { - "Microsoft.NETCore.DotNetHostPolicy.SetAppPaths": true - } - } -} \ No newline at end of file diff --git a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/System.Windows.Forms.dll b/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/System.Windows.Forms.dll deleted file mode 100644 index 27ae183b5203f7e0cf3546fec5a7de3d67b10b06..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/System.Windows.Forms.dll and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/System.Windows.Forms.pdb b/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/System.Windows.Forms.pdb deleted file mode 100644 index 5335e250afd31e3a3d3a40d14ae50b61faf5e57e..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/System.Windows.Forms.pdb and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/TempPE/Properties.Resources.Designer.cs.dll b/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/TempPE/Properties.Resources.Designer.cs.dll deleted file mode 100644 index d2cb6bba56f108984d78b9789d99ba7d32dcd8b3..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/obj/Debug/netcoreapp3.1/TempPE/Properties.Resources.Designer.cs.dll and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/obj/DotnetToolSettings.xml b/Source/GTKSystem.Windows.Forms/obj/DotnetToolSettings.xml new file mode 100644 index 0000000000000000000000000000000000000000..ebc7e3d963c88eed15fe3e29d5564900d5c0d893 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/obj/DotnetToolSettings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Source/GTKSystem.Windows.Forms/obj/GTKSystem.Windows.Forms.csproj.nuget.dgspec.json b/Source/GTKSystem.Windows.Forms/obj/GTKSystem.Windows.Forms.csproj.nuget.dgspec.json index 1e82bc3dc4270c540d95d8217f5944eff84a3e20..ab597f1de3dd1f7dc41b6aae6d02146998b15199 100644 --- a/Source/GTKSystem.Windows.Forms/obj/GTKSystem.Windows.Forms.csproj.nuget.dgspec.json +++ b/Source/GTKSystem.Windows.Forms/obj/GTKSystem.Windows.Forms.csproj.nuget.dgspec.json @@ -5,7 +5,7 @@ }, "projects": { "F:\\我的项目\\GTK\\gtksystem-windows-forms\\Source\\GTKSystem.Windows.Forms\\GTKSystem.Windows.Forms.csproj": { - "version": "0.3.24.1", + "version": "1.3.24.23", "restore": { "projectUniqueName": "F:\\我的项目\\GTK\\gtksystem-windows-forms\\Source\\GTKSystem.Windows.Forms\\GTKSystem.Windows.Forms.csproj", "projectName": "GTKSystem.Windows.Forms", @@ -13,17 +13,25 @@ "packagesPath": "C:\\Users\\chj\\.nuget\\packages\\", "outputPath": "F:\\我的项目\\GTK\\gtksystem-windows-forms\\Source\\GTKSystem.Windows.Forms\\obj\\", "projectStyle": "PackageReference", + "crossTargeting": true, "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages", "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder" ], "configFilePaths": [ "C:\\Users\\chj\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" ], "originalTargetFrameworks": [ + "net6.0", + "net7.0", + "net8.0", "netcoreapp3.1" ], "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "C:\\Users\\chj\\.nuget\\packages": {}, "https://api.nuget.org/v3/index.json": {}, "https://www.nuget.org/api/v2/": {} }, @@ -31,6 +39,18 @@ "netcoreapp3.1": { "targetAlias": "netcoreapp3.1", "projectReferences": {} + }, + "net6.0": { + "targetAlias": "net6.0", + "projectReferences": {} + }, + "net7.0": { + "targetAlias": "net7.0", + "projectReferences": {} + }, + "net8.0": { + "targetAlias": "net8.0", + "projectReferences": {} } }, "warningProperties": { @@ -45,7 +65,171 @@ "dependencies": { "GtkSharp": { "target": "Package", - "version": "[3.24.24.34, )" + "version": "[3.24.24.95, )" + }, + "Microsoft.NET.ILLink.Analyzers": { + "suppressParent": "All", + "target": "Package", + "version": "[7.0.100-1.23211.1, )", + "autoReferenced": true + }, + "Microsoft.NET.ILLink.Tasks": { + "suppressParent": "All", + "target": "Package", + "version": "[7.0.100-1.23211.1, )", + "autoReferenced": true + }, + "System.Resources.Extensions": { + "target": "Package", + "version": "[8.0.0, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.100\\RuntimeIdentifierGraph.json" + }, + "net6.0": { + "targetAlias": "net6.0", + "dependencies": { + "GtkSharp": { + "target": "Package", + "version": "[3.24.24.95, )" + }, + "Microsoft.NET.ILLink.Analyzers": { + "suppressParent": "All", + "target": "Package", + "version": "[7.0.100-1.23211.1, )", + "autoReferenced": true + }, + "Microsoft.NET.ILLink.Tasks": { + "suppressParent": "All", + "target": "Package", + "version": "[7.0.100-1.23211.1, )", + "autoReferenced": true + }, + "System.Resources.Extensions": { + "target": "Package", + "version": "[8.0.0, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "downloadDependencies": [ + { + "name": "Microsoft.AspNetCore.App.Ref", + "version": "[6.0.25, 6.0.25]" + }, + { + "name": "Microsoft.NETCore.App.Ref", + "version": "[6.0.25, 6.0.25]" + }, + { + "name": "Microsoft.WindowsDesktop.App.Ref", + "version": "[6.0.25, 6.0.25]" + } + ], + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.100\\RuntimeIdentifierGraph.json" + }, + "net7.0": { + "targetAlias": "net7.0", + "dependencies": { + "GtkSharp": { + "target": "Package", + "version": "[3.24.24.95, )" + }, + "Microsoft.NET.ILLink.Analyzers": { + "suppressParent": "All", + "target": "Package", + "version": "[7.0.100-1.23211.1, )", + "autoReferenced": true + }, + "Microsoft.NET.ILLink.Tasks": { + "suppressParent": "All", + "target": "Package", + "version": "[7.0.100-1.23211.1, )", + "autoReferenced": true + }, + "System.Resources.Extensions": { + "target": "Package", + "version": "[8.0.0, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "downloadDependencies": [ + { + "name": "Microsoft.AspNetCore.App.Ref", + "version": "[7.0.14, 7.0.14]" + }, + { + "name": "Microsoft.NETCore.App.Ref", + "version": "[7.0.14, 7.0.14]" + }, + { + "name": "Microsoft.WindowsDesktop.App.Ref", + "version": "[7.0.14, 7.0.14]" + } + ], + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.100\\RuntimeIdentifierGraph.json" + }, + "net8.0": { + "targetAlias": "net8.0", + "dependencies": { + "GtkSharp": { + "target": "Package", + "version": "[3.24.24.95, )" + }, + "Microsoft.NET.ILLink.Tasks": { + "suppressParent": "All", + "target": "Package", + "version": "[8.0.0, )", + "autoReferenced": true + }, + "System.Resources.Extensions": { + "target": "Package", + "version": "[8.0.0, )" } }, "imports": [ @@ -54,7 +238,8 @@ "net47", "net471", "net472", - "net48" + "net48", + "net481" ], "assetTargetFallback": true, "warn": true, @@ -63,7 +248,7 @@ "privateAssets": "all" } }, - "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\5.0.203\\RuntimeIdentifierGraph.json" + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.100/PortableRuntimeIdentifierGraph.json" } } } diff --git a/Source/GTKSystem.Windows.Forms/obj/GTKSystem.Windows.Forms.csproj.nuget.g.props b/Source/GTKSystem.Windows.Forms/obj/GTKSystem.Windows.Forms.csproj.nuget.g.props index dcc4c3f5c5d34053a37b465e53d2585fe328b5a5..c7acfb00f6d22a1d997b176b61696e27693e9063 100644 --- a/Source/GTKSystem.Windows.Forms/obj/GTKSystem.Windows.Forms.csproj.nuget.g.props +++ b/Source/GTKSystem.Windows.Forms/obj/GTKSystem.Windows.Forms.csproj.nuget.g.props @@ -5,14 +5,40 @@ NuGet $(MSBuildThisFileDirectory)project.assets.json $(UserProfile)\.nuget\packages\ - C:\Users\chj\.nuget\packages\;C:\Program Files\dotnet\sdk\NuGetFallbackFolder + C:\Users\chj\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages;C:\Program Files\dotnet\sdk\NuGetFallbackFolder PackageReference - 5.8.1 + 6.8.0 - + + + - - $(MSBuildAllProjects);$(MSBuildThisFileFullPath) + + + + + + + + + + + + + + + + + C:\Users\chj\.nuget\packages\microsoft.net.illink.tasks\7.0.100-1.23211.1 + + + C:\Users\chj\.nuget\packages\microsoft.net.illink.tasks\7.0.100-1.23211.1 + + + C:\Users\chj\.nuget\packages\microsoft.net.illink.tasks\8.0.0 + + + C:\Users\chj\.nuget\packages\microsoft.net.illink.tasks\7.0.100-1.23211.1 \ No newline at end of file diff --git a/Source/GTKSystem.Windows.Forms/obj/GTKSystem.Windows.Forms.csproj.nuget.g.targets b/Source/GTKSystem.Windows.Forms/obj/GTKSystem.Windows.Forms.csproj.nuget.g.targets index 4fc8c64b6358bce89c7ecb5d319d7933c17506f8..e37a546d39001e9b84683bec3603892ac8c90900 100644 --- a/Source/GTKSystem.Windows.Forms/obj/GTKSystem.Windows.Forms.csproj.nuget.g.targets +++ b/Source/GTKSystem.Windows.Forms/obj/GTKSystem.Windows.Forms.csproj.nuget.g.targets @@ -1,9 +1,16 @@  - - $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - - - + + + + + + + + + + + + \ No newline at end of file diff --git a/Source/GTKSystem.Windows.Forms/obj/Release/GTKSystem.Windows.Forms.0.3.24.1.nuspec b/Source/GTKSystem.Windows.Forms/obj/Release/GTKSystem.Windows.Forms.0.3.24.1.nuspec deleted file mode 100644 index b3e57741db8d0d6be9dd56cdcafac8baab4c56bb..0000000000000000000000000000000000000000 --- a/Source/GTKSystem.Windows.Forms/obj/Release/GTKSystem.Windows.Forms.0.3.24.1.nuspec +++ /dev/null @@ -1,24 +0,0 @@ - - - - GTKSystem.Windows.Forms - 0.3.24.1 - GTK跨平台winform组件,一次编译,跨windows和linux平台运行 - chenhongjin - false - https://gitee.com/easywebfactory/gtksystem-windows-forms - 基于GTK3.24.24.34版本组件开发,兼容原生C#控件winform界面的跨平台界面组件。 -使用本组件GTKSystem.Windows.Forms代替Microsoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows和linux运行。 -技术支持438865652@qq.com,https://gitee.com/easywebfactory/gtksystem-windows-forms - 一次编译,跨windows和linux平台运行 - 438865652@qq.com,chenhongjin - - - - - - - - - - \ No newline at end of file diff --git a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/.NETCoreApp,Version=v3.1.AssemblyAttributes.cs b/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/.NETCoreApp,Version=v3.1.AssemblyAttributes.cs deleted file mode 100644 index ad8dfe1a6310302587a2d0c0111d81b250eb4105..0000000000000000000000000000000000000000 --- a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/.NETCoreApp,Version=v3.1.AssemblyAttributes.cs +++ /dev/null @@ -1,4 +0,0 @@ -// -using System; -using System.Reflection; -[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v3.1", FrameworkDisplayName = "")] diff --git a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/FxResources.System.Resources.Extensions.SR.resources b/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/FxResources.System.Resources.Extensions.SR.resources deleted file mode 100644 index b7dc292c83c4249b2aacbf28cd1a88c9d8916754..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/FxResources.System.Resources.Extensions.SR.resources and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/GTKSystem.Windows.Forms.AssemblyInfo.cs b/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/GTKSystem.Windows.Forms.AssemblyInfo.cs deleted file mode 100644 index 211689d0e5887d579d97d2347ac6a00c2e4081b4..0000000000000000000000000000000000000000 --- a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/GTKSystem.Windows.Forms.AssemblyInfo.cs +++ /dev/null @@ -1,27 +0,0 @@ -//------------------------------------------------------------------------------ -// -// 此代码由工具生成。 -// 运行时版本:4.0.30319.42000 -// -// 对此文件的更改可能会导致不正确的行为,并且如果 -// 重新生成代码,这些更改将会丢失。 -// -//------------------------------------------------------------------------------ - -using System; -using System.Reflection; - -[assembly: System.Reflection.AssemblyCompanyAttribute("chenhongjin")] -[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")] -[assembly: System.Reflection.AssemblyCopyrightAttribute("438865652@qq.com,chenhongjin")] -[assembly: System.Reflection.AssemblyDescriptionAttribute("基于GTK3.24.24.34版本组件开发,兼容原生C#控件winform界面的跨平台界面组件。\r\n使用本组件GTKSystem.Windows.Forms代替M" + - "icrosoft.WindowsDesktop.App.WindowsForms,一次编译,跨平台windows和linux运行。\r\n技术支持438865652" + - "@qq.com,https://gitee.com/easywebfactory/gtksystem-windows-forms\r\n\t")] -[assembly: System.Reflection.AssemblyFileVersionAttribute("0.3.24.1")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("0.3.24.1")] -[assembly: System.Reflection.AssemblyProductAttribute("GTKSystem.Windows.Forms")] -[assembly: System.Reflection.AssemblyTitleAttribute("GTKSystem.Windows.Forms")] -[assembly: System.Reflection.AssemblyVersionAttribute("0.3.24.1")] - -// 由 MSBuild WriteCodeFragment 类生成。 - diff --git a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/GTKSystem.Windows.Forms.AssemblyInfoInputs.cache b/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/GTKSystem.Windows.Forms.AssemblyInfoInputs.cache deleted file mode 100644 index 842ef188d3568a35e6e20731d7e09376e8999dcf..0000000000000000000000000000000000000000 --- a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/GTKSystem.Windows.Forms.AssemblyInfoInputs.cache +++ /dev/null @@ -1 +0,0 @@ -9706ed435369f343231c069ab1aa12c588e44be7 diff --git a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/GTKSystem.Windows.Forms.GeneratedMSBuildEditorConfig.editorconfig b/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/GTKSystem.Windows.Forms.GeneratedMSBuildEditorConfig.editorconfig deleted file mode 100644 index 0490503b44beea8a2bc987cd2276c056bcfc13de..0000000000000000000000000000000000000000 --- a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/GTKSystem.Windows.Forms.GeneratedMSBuildEditorConfig.editorconfig +++ /dev/null @@ -1,3 +0,0 @@ -is_global = true -build_property.RootNamespace = GTKSystem.Windows.Forms -build_property.ProjectDir = F:\GTK项目\GTKWinFormsDemo\GTKSystem.Windows.Forms\ diff --git a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/GTKSystem.Windows.Forms.Properties.Resources.resources b/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/GTKSystem.Windows.Forms.Properties.Resources.resources deleted file mode 100644 index 7462d764b01c76dd5ca7c8ec8bf80b6ac48ac40e..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/GTKSystem.Windows.Forms.Properties.Resources.resources and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/GTKSystem.Windows.Forms.assets.cache b/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/GTKSystem.Windows.Forms.assets.cache deleted file mode 100644 index 5be954b3a7f55b5a9c706d79208f2390f326c44b..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/GTKSystem.Windows.Forms.assets.cache and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/GTKSystem.Windows.Forms.csproj.AssemblyReference.cache b/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/GTKSystem.Windows.Forms.csproj.AssemblyReference.cache deleted file mode 100644 index ecbc7edbfdd7c6294e02c78b341d15b8f38e7a59..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/GTKSystem.Windows.Forms.csproj.AssemblyReference.cache and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/GTKSystem.Windows.Forms.csproj.CoreCompileInputs.cache b/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/GTKSystem.Windows.Forms.csproj.CoreCompileInputs.cache deleted file mode 100644 index fed5cf5ac1632897e41458c0dd1ee1ea3ae579da..0000000000000000000000000000000000000000 --- a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/GTKSystem.Windows.Forms.csproj.CoreCompileInputs.cache +++ /dev/null @@ -1 +0,0 @@ -089fccf12aa85bba3b96229a629103fb97179ef5 diff --git a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/GTKSystem.Windows.Forms.csproj.FileListAbsolute.txt b/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/GTKSystem.Windows.Forms.csproj.FileListAbsolute.txt deleted file mode 100644 index cbc77de490fd09028426bad3df7c19fda7097386..0000000000000000000000000000000000000000 --- a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/GTKSystem.Windows.Forms.csproj.FileListAbsolute.txt +++ /dev/null @@ -1,62 +0,0 @@ -F:\GTK项目\WindowsFormsApp1\GTKSystem.Windows.Forms\obj\Release\netcoreapp3.1\GTKSystem.Windows.Forms.csproj.AssemblyReference.cache -F:\GTK项目\WindowsFormsApp1\GTKSystem.Windows.Forms\obj\Release\netcoreapp3.1\FxResources.System.Resources.Extensions.SR.resources -F:\GTK项目\WindowsFormsApp1\GTKSystem.Windows.Forms\obj\Release\netcoreapp3.1\GTKSystem.Windows.Forms.Properties.Resources.resources -F:\GTK项目\WindowsFormsApp1\GTKSystem.Windows.Forms\obj\Release\netcoreapp3.1\GTKSystem.Windows.Forms.csproj.GenerateResource.cache -F:\GTK项目\WindowsFormsApp1\GTKSystem.Windows.Forms\obj\Release\netcoreapp3.1\GTKSystem.Windows.Forms.GeneratedMSBuildEditorConfig.editorconfig -F:\GTK项目\WindowsFormsApp1\GTKSystem.Windows.Forms\obj\Release\netcoreapp3.1\GTKSystem.Windows.Forms.AssemblyInfoInputs.cache -F:\GTK项目\WindowsFormsApp1\GTKSystem.Windows.Forms\obj\Release\netcoreapp3.1\GTKSystem.Windows.Forms.AssemblyInfo.cs -F:\GTK项目\WindowsFormsApp1\GTKSystem.Windows.Forms\obj\Release\netcoreapp3.1\GTKSystem.Windows.Forms.csproj.CoreCompileInputs.cache -F:\GTK项目\WindowsFormsApp1\GTKSystem.Windows.Forms\bin\Release\netcoreapp3.1\GTKSystem.Windows.Forms.deps.json -F:\GTK项目\WindowsFormsApp1\GTKSystem.Windows.Forms\bin\Release\netcoreapp3.1\GTKSystem.Windows.Forms.dll -F:\GTK项目\WindowsFormsApp1\GTKSystem.Windows.Forms\bin\Release\netcoreapp3.1\GTKSystem.Windows.Forms.pdb -F:\GTK项目\WindowsFormsApp1\GTKSystem.Windows.Forms\obj\Release\netcoreapp3.1\GTKSystem.Windows.Forms.dll -F:\GTK项目\WindowsFormsApp1\GTKSystem.Windows.Forms\obj\Release\netcoreapp3.1\GTKSystem.Windows.Forms.pdb -F:\GTK项目\GTKWinFormsDemo\GTKSystem.Windows.Forms\bin\Release\netcoreapp3.1\GTKSystem.Windows.Forms.deps.json -F:\GTK项目\GTKWinFormsDemo\GTKSystem.Windows.Forms\bin\Release\netcoreapp3.1\GTKSystem.Windows.Forms.dll -F:\GTK项目\GTKWinFormsDemo\GTKSystem.Windows.Forms\bin\Release\netcoreapp3.1\GTKSystem.Windows.Forms.pdb -F:\GTK项目\GTKWinFormsDemo\GTKSystem.Windows.Forms\obj\Release\netcoreapp3.1\GTKSystem.Windows.Forms.csproj.AssemblyReference.cache -F:\GTK项目\GTKWinFormsDemo\GTKSystem.Windows.Forms\obj\Release\netcoreapp3.1\FxResources.System.Resources.Extensions.SR.resources -F:\GTK项目\GTKWinFormsDemo\GTKSystem.Windows.Forms\obj\Release\netcoreapp3.1\GTKSystem.Windows.Forms.Properties.Resources.resources -F:\GTK项目\GTKWinFormsDemo\GTKSystem.Windows.Forms\obj\Release\netcoreapp3.1\GTKSystem.Windows.Forms.csproj.GenerateResource.cache -F:\GTK项目\GTKWinFormsDemo\GTKSystem.Windows.Forms\obj\Release\netcoreapp3.1\GTKSystem.Windows.Forms.GeneratedMSBuildEditorConfig.editorconfig -F:\GTK项目\GTKWinFormsDemo\GTKSystem.Windows.Forms\obj\Release\netcoreapp3.1\GTKSystem.Windows.Forms.AssemblyInfoInputs.cache -F:\GTK项目\GTKWinFormsDemo\GTKSystem.Windows.Forms\obj\Release\netcoreapp3.1\GTKSystem.Windows.Forms.AssemblyInfo.cs -F:\GTK项目\GTKWinFormsDemo\GTKSystem.Windows.Forms\obj\Release\netcoreapp3.1\GTKSystem.Windows.Forms.csproj.CoreCompileInputs.cache -F:\GTK项目\GTKWinFormsDemo\GTKSystem.Windows.Forms\obj\Release\netcoreapp3.1\GTKSystem.Windows.Forms.dll -F:\GTK项目\GTKWinFormsDemo\GTKSystem.Windows.Forms\obj\Release\netcoreapp3.1\GTKSystem.Windows.Forms.pdb -F:\我的项目\GTK\GTKSystem.Windows.Forms\bin\Release\netcoreapp3.1\GTKSystem.Windows.Forms.deps.json -F:\我的项目\GTK\GTKSystem.Windows.Forms\bin\Release\netcoreapp3.1\GTKSystem.Windows.Forms.dll -F:\我的项目\GTK\GTKSystem.Windows.Forms\bin\Release\netcoreapp3.1\GTKSystem.Windows.Forms.pdb -F:\我的项目\GTK\GTKSystem.Windows.Forms\obj\Release\netcoreapp3.1\GTKSystem.Windows.Forms.csprojAssemblyReference.cache -F:\我的项目\GTK\GTKSystem.Windows.Forms\obj\Release\netcoreapp3.1\FxResources.System.Resources.Extensions.SR.resources -F:\我的项目\GTK\GTKSystem.Windows.Forms\obj\Release\netcoreapp3.1\GTKSystem.Windows.Forms.Properties.Resources.resources -F:\我的项目\GTK\GTKSystem.Windows.Forms\obj\Release\netcoreapp3.1\GTKSystem.Windows.Forms.csproj.GenerateResource.cache -F:\我的项目\GTK\GTKSystem.Windows.Forms\obj\Release\netcoreapp3.1\GTKSystem.Windows.Forms.AssemblyInfoInputs.cache -F:\我的项目\GTK\GTKSystem.Windows.Forms\obj\Release\netcoreapp3.1\GTKSystem.Windows.Forms.AssemblyInfo.cs -F:\我的项目\GTK\GTKSystem.Windows.Forms\obj\Release\netcoreapp3.1\GTKSystem.Windows.Forms.csproj.CoreCompileInputs.cache -F:\我的项目\GTK\GTKSystem.Windows.Forms\obj\Release\netcoreapp3.1\GTKSystem.Windows.Forms.dll -F:\我的项目\GTK\GTKSystem.Windows.Forms\obj\Release\netcoreapp3.1\GTKSystem.Windows.Forms.pdb -F:\我的项目\GTK\GTKWindowsForms\Source\GTKSystem.Windows.Forms\bin\Release\netcoreapp3.1\GTKSystem.Windows.Forms.deps.json -F:\我的项目\GTK\GTKWindowsForms\Source\GTKSystem.Windows.Forms\bin\Release\netcoreapp3.1\GTKSystem.Windows.Forms.dll -F:\我的项目\GTK\GTKWindowsForms\Source\GTKSystem.Windows.Forms\bin\Release\netcoreapp3.1\GTKSystem.Windows.Forms.pdb -F:\我的项目\GTK\GTKWindowsForms\Source\GTKSystem.Windows.Forms\obj\Release\netcoreapp3.1\GTKSystem.Windows.Forms.csprojAssemblyReference.cache -F:\我的项目\GTK\GTKWindowsForms\Source\GTKSystem.Windows.Forms\obj\Release\netcoreapp3.1\FxResources.System.Resources.Extensions.SR.resources -F:\我的项目\GTK\GTKWindowsForms\Source\GTKSystem.Windows.Forms\obj\Release\netcoreapp3.1\GTKSystem.Windows.Forms.Properties.Resources.resources -F:\我的项目\GTK\GTKWindowsForms\Source\GTKSystem.Windows.Forms\obj\Release\netcoreapp3.1\GTKSystem.Windows.Forms.csproj.GenerateResource.cache -F:\我的项目\GTK\GTKWindowsForms\Source\GTKSystem.Windows.Forms\obj\Release\netcoreapp3.1\GTKSystem.Windows.Forms.AssemblyInfoInputs.cache -F:\我的项目\GTK\GTKWindowsForms\Source\GTKSystem.Windows.Forms\obj\Release\netcoreapp3.1\GTKSystem.Windows.Forms.AssemblyInfo.cs -F:\我的项目\GTK\GTKWindowsForms\Source\GTKSystem.Windows.Forms\obj\Release\netcoreapp3.1\GTKSystem.Windows.Forms.csproj.CoreCompileInputs.cache -F:\我的项目\GTK\GTKWindowsForms\Source\GTKSystem.Windows.Forms\obj\Release\netcoreapp3.1\GTKSystem.Windows.Forms.dll -F:\我的项目\GTK\GTKWindowsForms\Source\GTKSystem.Windows.Forms\obj\Release\netcoreapp3.1\GTKSystem.Windows.Forms.pdb -F:\我的项目\GTK\gtksystem-windows-forms\Source\GTKSystem.Windows.Forms\bin\Release\netcoreapp3.1\GTKSystem.Windows.Forms.deps.json -F:\我的项目\GTK\gtksystem-windows-forms\Source\GTKSystem.Windows.Forms\bin\Release\netcoreapp3.1\GTKSystem.Windows.Forms.dll -F:\我的项目\GTK\gtksystem-windows-forms\Source\GTKSystem.Windows.Forms\bin\Release\netcoreapp3.1\GTKSystem.Windows.Forms.pdb -F:\我的项目\GTK\gtksystem-windows-forms\Source\GTKSystem.Windows.Forms\obj\Release\netcoreapp3.1\GTKSystem.Windows.Forms.csprojAssemblyReference.cache -F:\我的项目\GTK\gtksystem-windows-forms\Source\GTKSystem.Windows.Forms\obj\Release\netcoreapp3.1\FxResources.System.Resources.Extensions.SR.resources -F:\我的项目\GTK\gtksystem-windows-forms\Source\GTKSystem.Windows.Forms\obj\Release\netcoreapp3.1\GTKSystem.Windows.Forms.Properties.Resources.resources -F:\我的项目\GTK\gtksystem-windows-forms\Source\GTKSystem.Windows.Forms\obj\Release\netcoreapp3.1\GTKSystem.Windows.Forms.csproj.GenerateResource.cache -F:\我的项目\GTK\gtksystem-windows-forms\Source\GTKSystem.Windows.Forms\obj\Release\netcoreapp3.1\GTKSystem.Windows.Forms.AssemblyInfoInputs.cache -F:\我的项目\GTK\gtksystem-windows-forms\Source\GTKSystem.Windows.Forms\obj\Release\netcoreapp3.1\GTKSystem.Windows.Forms.AssemblyInfo.cs -F:\我的项目\GTK\gtksystem-windows-forms\Source\GTKSystem.Windows.Forms\obj\Release\netcoreapp3.1\GTKSystem.Windows.Forms.csproj.CoreCompileInputs.cache -F:\我的项目\GTK\gtksystem-windows-forms\Source\GTKSystem.Windows.Forms\obj\Release\netcoreapp3.1\GTKSystem.Windows.Forms.dll -F:\我的项目\GTK\gtksystem-windows-forms\Source\GTKSystem.Windows.Forms\obj\Release\netcoreapp3.1\GTKSystem.Windows.Forms.pdb diff --git a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/GTKSystem.Windows.Forms.csproj.GenerateResource.cache b/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/GTKSystem.Windows.Forms.csproj.GenerateResource.cache deleted file mode 100644 index 5e7a31ee4389e272f7f2c3e56a47316ec4ba7335..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/GTKSystem.Windows.Forms.csproj.GenerateResource.cache and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/GTKSystem.Windows.Forms.csprojAssemblyReference.cache b/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/GTKSystem.Windows.Forms.csprojAssemblyReference.cache deleted file mode 100644 index ce852700da62f47a7840b163994b7589bc30c856..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/GTKSystem.Windows.Forms.csprojAssemblyReference.cache and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/GTKSystem.Windows.Forms.dll b/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/GTKSystem.Windows.Forms.dll deleted file mode 100644 index cc27a9d7f5df2d19a8c7a7df13ea49abb3c2bdae..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/GTKSystem.Windows.Forms.dll and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/GTKSystem.Windows.Forms.pdb b/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/GTKSystem.Windows.Forms.pdb deleted file mode 100644 index e256c98466be8b309486b8876c224f2ee5f7d6f6..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/GTKSystem.Windows.Forms.pdb and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/System.Windows.Forms.AssemblyInfo.cs b/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/System.Windows.Forms.AssemblyInfo.cs deleted file mode 100644 index d1526248056ad1c6314bbffec1b12d40703f409c..0000000000000000000000000000000000000000 --- a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/System.Windows.Forms.AssemblyInfo.cs +++ /dev/null @@ -1,23 +0,0 @@ -//------------------------------------------------------------------------------ -// -// 此代码由工具生成。 -// 运行时版本:4.0.30319.42000 -// -// 对此文件的更改可能会导致不正确的行为,并且如果 -// 重新生成代码,这些更改将会丢失。 -// -//------------------------------------------------------------------------------ - -using System; -using System.Reflection; - -[assembly: System.Reflection.AssemblyCompanyAttribute("System.Windows.Forms")] -[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")] -[assembly: System.Reflection.AssemblyFileVersionAttribute("4.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("4.0.0")] -[assembly: System.Reflection.AssemblyProductAttribute("System.Windows.Forms")] -[assembly: System.Reflection.AssemblyTitleAttribute("System.Windows.Forms")] -[assembly: System.Reflection.AssemblyVersionAttribute("4.0.0.0")] - -// 由 MSBuild WriteCodeFragment 类生成。 - diff --git a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/System.Windows.Forms.AssemblyInfoInputs.cache b/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/System.Windows.Forms.AssemblyInfoInputs.cache deleted file mode 100644 index 2a5b3644ebea9fb740c886670c4dbce070114994..0000000000000000000000000000000000000000 --- a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/System.Windows.Forms.AssemblyInfoInputs.cache +++ /dev/null @@ -1 +0,0 @@ -1b527046b46846fe539d3ccbc280eddc94a034c1 diff --git a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/System.Windows.Forms.GeneratedMSBuildEditorConfig.editorconfig b/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/System.Windows.Forms.GeneratedMSBuildEditorConfig.editorconfig deleted file mode 100644 index bef5fb9aa76c7437153fc88625944c2cc537c92a..0000000000000000000000000000000000000000 --- a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/System.Windows.Forms.GeneratedMSBuildEditorConfig.editorconfig +++ /dev/null @@ -1,3 +0,0 @@ -is_global = true -build_property.RootNamespace = System.Windows.Forms -build_property.ProjectDir = F:\GTK项目\WindowsFormsApp1\System.Windows.Forms\ diff --git a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/System.Windows.Forms.Properties.Resources.resources b/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/System.Windows.Forms.Properties.Resources.resources deleted file mode 100644 index 7462d764b01c76dd5ca7c8ec8bf80b6ac48ac40e..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/System.Windows.Forms.Properties.Resources.resources and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/System.Windows.Forms.assets.cache b/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/System.Windows.Forms.assets.cache deleted file mode 100644 index 2a03ed15cd2aff16175d111a6441ad81e5ad6f6b..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/System.Windows.Forms.assets.cache and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/System.Windows.Forms.csproj.AssemblyReference.cache b/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/System.Windows.Forms.csproj.AssemblyReference.cache deleted file mode 100644 index 43b9cb8c579a3d2b17c26be2436f658c8bd0b447..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/System.Windows.Forms.csproj.AssemblyReference.cache and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/System.Windows.Forms.csproj.BuildWithSkipAnalyzers b/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/System.Windows.Forms.csproj.BuildWithSkipAnalyzers deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/System.Windows.Forms.csproj.CopyComplete b/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/System.Windows.Forms.csproj.CopyComplete deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/System.Windows.Forms.csproj.CoreCompileInputs.cache b/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/System.Windows.Forms.csproj.CoreCompileInputs.cache deleted file mode 100644 index c66fa21a1c77071bb469f3801c6ddbf1d910c5ce..0000000000000000000000000000000000000000 --- a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/System.Windows.Forms.csproj.CoreCompileInputs.cache +++ /dev/null @@ -1 +0,0 @@ -e9bdda96059fbbeac7f54e4340f15c55afa159b4 diff --git a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/System.Windows.Forms.csproj.FileListAbsolute.txt b/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/System.Windows.Forms.csproj.FileListAbsolute.txt deleted file mode 100644 index 215d8c79ab35200c02cc115a8323b29c1a4f4e41..0000000000000000000000000000000000000000 --- a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/System.Windows.Forms.csproj.FileListAbsolute.txt +++ /dev/null @@ -1,16 +0,0 @@ -F:\GTK项目\WindowsFormsApp1\System.Windows.Forms\obj\Release\netcoreapp3.1\System.Windows.Forms.csproj.AssemblyReference.cache -F:\GTK项目\WindowsFormsApp1\System.Windows.Forms\obj\Release\netcoreapp3.1\System.Windows.Forms.Properties.Resources.resources -F:\GTK项目\WindowsFormsApp1\System.Windows.Forms\obj\Release\netcoreapp3.1\System.Windows.Forms.csproj.GenerateResource.cache -F:\GTK项目\WindowsFormsApp1\System.Windows.Forms\obj\Release\netcoreapp3.1\System.Windows.Forms.GeneratedMSBuildEditorConfig.editorconfig -F:\GTK项目\WindowsFormsApp1\System.Windows.Forms\obj\Release\netcoreapp3.1\System.Windows.Forms.AssemblyInfoInputs.cache -F:\GTK项目\WindowsFormsApp1\System.Windows.Forms\obj\Release\netcoreapp3.1\System.Windows.Forms.AssemblyInfo.cs -F:\GTK项目\WindowsFormsApp1\System.Windows.Forms\obj\Release\netcoreapp3.1\System.Windows.Forms.csproj.CoreCompileInputs.cache -F:\GTK项目\WindowsFormsApp1\System.Windows.Forms\bin\Release\netcoreapp3.1\Resources\System\DateTimePicker.ico -F:\GTK项目\WindowsFormsApp1\System.Windows.Forms\bin\Release\netcoreapp3.1\System.Windows.Forms.deps.json -F:\GTK项目\WindowsFormsApp1\System.Windows.Forms\bin\Release\netcoreapp3.1\System.Windows.Forms.dll -F:\GTK项目\WindowsFormsApp1\System.Windows.Forms\bin\Release\netcoreapp3.1\System.Windows.Forms.pdb -F:\GTK项目\WindowsFormsApp1\System.Windows.Forms\bin\Release\netcoreapp3.1\System.Resources.Extensions.dll -F:\GTK项目\WindowsFormsApp1\System.Windows.Forms\obj\Release\netcoreapp3.1\System.Windows.Forms.csproj.CopyComplete -F:\GTK项目\WindowsFormsApp1\System.Windows.Forms\obj\Release\netcoreapp3.1\System.Windows.Forms.dll -F:\GTK项目\WindowsFormsApp1\System.Windows.Forms\obj\Release\netcoreapp3.1\System.Windows.Forms.pdb -F:\GTK项目\WindowsFormsApp1\System.Windows.Forms\obj\Release\netcoreapp3.1\FxResources.System.Resources.Extensions.SR.resources diff --git a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/System.Windows.Forms.csproj.GenerateResource.cache b/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/System.Windows.Forms.csproj.GenerateResource.cache deleted file mode 100644 index d1ebb9ad5eb98ee187e2504a9f803e0575ff8e08..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/System.Windows.Forms.csproj.GenerateResource.cache and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/System.Windows.Forms.dll b/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/System.Windows.Forms.dll deleted file mode 100644 index 767f9a0037f3e90e96d39c3a7d43482206f738ef..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/System.Windows.Forms.dll and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/System.Windows.Forms.pdb b/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/System.Windows.Forms.pdb deleted file mode 100644 index 092a3f947591e276f133170d7d4c51f509b8b12c..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/System.Windows.Forms.pdb and /dev/null differ diff --git a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/TempPE/Properties.Resources.Designer.cs.dll b/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/TempPE/Properties.Resources.Designer.cs.dll deleted file mode 100644 index ad4a13faca43e4e44b7f486b21aa98bd469098ec..0000000000000000000000000000000000000000 Binary files a/Source/GTKSystem.Windows.Forms/obj/Release/netcoreapp3.1/TempPE/Properties.Resources.Designer.cs.dll and /dev/null differ diff --git "a/Source/GTKSystem.Windows.Forms/obj/Release/\344\270\200\346\254\241\347\274\226\350\257\221\357\274\214\350\267\250windows\345\222\214linux\345\271\263\345\217\260\350\277\220\350\241\214.0.3.24.1.nuspec" "b/Source/GTKSystem.Windows.Forms/obj/Release/\344\270\200\346\254\241\347\274\226\350\257\221\357\274\214\350\267\250windows\345\222\214linux\345\271\263\345\217\260\350\277\220\350\241\214.0.3.24.1.nuspec" deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/Source/GTKSystem.Windows.Forms/obj/project.assets.json b/Source/GTKSystem.Windows.Forms/obj/project.assets.json index c2a19feea0be14e81a39e4bb4a7748c4d4c193e4..c57b543b5c85f54d8e83a9bd4880de99ad65007d 100644 --- a/Source/GTKSystem.Windows.Forms/obj/project.assets.json +++ b/Source/GTKSystem.Windows.Forms/obj/project.assets.json @@ -2,10 +2,10 @@ "version": 3, "targets": { ".NETCoreApp,Version=v3.1": { - "AtkSharp/3.24.24.34": { + "AtkSharp/3.24.24.95": { "type": "package", "dependencies": { - "GLibSharp": "3.24.24.34" + "GLibSharp": "3.24.24.95" }, "compile": { "lib/netstandard2.0/AtkSharp.dll": {} @@ -14,7 +14,7 @@ "lib/netstandard2.0/AtkSharp.dll": {} } }, - "CairoSharp/3.24.24.34": { + "CairoSharp/3.24.24.95": { "type": "package", "compile": { "lib/netstandard2.0/CairoSharp.dll": {} @@ -23,13 +23,13 @@ "lib/netstandard2.0/CairoSharp.dll": {} } }, - "GdkSharp/3.24.24.34": { + "GdkSharp/3.24.24.95": { "type": "package", "dependencies": { - "CairoSharp": "3.24.24.34", - "GLibSharp": "3.24.24.34", - "GioSharp": "3.24.24.34", - "PangoSharp": "3.24.24.34" + "CairoSharp": "3.24.24.95", + "GLibSharp": "3.24.24.95", + "GioSharp": "3.24.24.95", + "PangoSharp": "3.24.24.95" }, "compile": { "lib/netstandard2.0/GdkSharp.dll": {} @@ -38,10 +38,10 @@ "lib/netstandard2.0/GdkSharp.dll": {} } }, - "GioSharp/3.24.24.34": { + "GioSharp/3.24.24.95": { "type": "package", "dependencies": { - "GLibSharp": "3.24.24.34" + "GLibSharp": "3.24.24.95" }, "compile": { "lib/netstandard2.0/GioSharp.dll": {} @@ -50,7 +50,7 @@ "lib/netstandard2.0/GioSharp.dll": {} } }, - "GLibSharp/3.24.24.34": { + "GLibSharp/3.24.24.95": { "type": "package", "compile": { "lib/netstandard2.0/GLibSharp.dll": {} @@ -59,15 +59,15 @@ "lib/netstandard2.0/GLibSharp.dll": {} } }, - "GtkSharp/3.24.24.34": { + "GtkSharp/3.24.24.95": { "type": "package", "dependencies": { - "AtkSharp": "3.24.24.34", - "CairoSharp": "3.24.24.34", - "GLibSharp": "3.24.24.34", - "GdkSharp": "3.24.24.34", - "GioSharp": "3.24.24.34", - "PangoSharp": "3.24.24.34" + "AtkSharp": "3.24.24.95", + "CairoSharp": "3.24.24.95", + "GLibSharp": "3.24.24.95", + "GdkSharp": "3.24.24.95", + "GioSharp": "3.24.24.95", + "PangoSharp": "3.24.24.95" }, "compile": { "lib/netstandard2.0/GtkSharp.dll": {} @@ -79,11 +79,23 @@ "build/GtkSharp.targets": {} } }, - "PangoSharp/3.24.24.34": { + "Microsoft.NET.ILLink.Analyzers/7.0.100-1.23211.1": { + "type": "package", + "build": { + "build/Microsoft.NET.ILLink.Analyzers.props": {} + } + }, + "Microsoft.NET.ILLink.Tasks/7.0.100-1.23211.1": { + "type": "package", + "build": { + "build/Microsoft.NET.ILLink.Tasks.props": {} + } + }, + "PangoSharp/3.24.24.95": { "type": "package", "dependencies": { - "CairoSharp": "3.24.24.34", - "GLibSharp": "3.24.24.34" + "CairoSharp": "3.24.24.95", + "GLibSharp": "3.24.24.95" }, "compile": { "lib/netstandard2.0/PangoSharp.dll": {} @@ -91,107 +103,667 @@ "runtime": { "lib/netstandard2.0/PangoSharp.dll": {} } + }, + "System.Memory/4.5.5": { + "type": "package", + "compile": { + "ref/netcoreapp2.1/_._": {} + }, + "runtime": { + "lib/netcoreapp2.1/_._": {} + } + }, + "System.Resources.Extensions/8.0.0": { + "type": "package", + "dependencies": { + "System.Memory": "4.5.5" + }, + "compile": { + "lib/netstandard2.0/System.Resources.Extensions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/System.Resources.Extensions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/netcoreapp2.0/System.Resources.Extensions.targets": {} + } + } + }, + "net6.0": { + "AtkSharp/3.24.24.95": { + "type": "package", + "dependencies": { + "GLibSharp": "3.24.24.95" + }, + "compile": { + "lib/net6.0/AtkSharp.dll": {} + }, + "runtime": { + "lib/net6.0/AtkSharp.dll": {} + } + }, + "CairoSharp/3.24.24.95": { + "type": "package", + "compile": { + "lib/net6.0/CairoSharp.dll": {} + }, + "runtime": { + "lib/net6.0/CairoSharp.dll": {} + } + }, + "GdkSharp/3.24.24.95": { + "type": "package", + "dependencies": { + "CairoSharp": "3.24.24.95", + "GLibSharp": "3.24.24.95", + "GioSharp": "3.24.24.95", + "PangoSharp": "3.24.24.95" + }, + "compile": { + "lib/net6.0/GdkSharp.dll": {} + }, + "runtime": { + "lib/net6.0/GdkSharp.dll": {} + } + }, + "GioSharp/3.24.24.95": { + "type": "package", + "dependencies": { + "GLibSharp": "3.24.24.95" + }, + "compile": { + "lib/net6.0/GioSharp.dll": {} + }, + "runtime": { + "lib/net6.0/GioSharp.dll": {} + } + }, + "GLibSharp/3.24.24.95": { + "type": "package", + "compile": { + "lib/net6.0/GLibSharp.dll": {} + }, + "runtime": { + "lib/net6.0/GLibSharp.dll": {} + } + }, + "GtkSharp/3.24.24.95": { + "type": "package", + "dependencies": { + "AtkSharp": "3.24.24.95", + "CairoSharp": "3.24.24.95", + "GLibSharp": "3.24.24.95", + "GdkSharp": "3.24.24.95", + "GioSharp": "3.24.24.95", + "PangoSharp": "3.24.24.95" + }, + "compile": { + "lib/net6.0/GtkSharp.dll": {} + }, + "runtime": { + "lib/net6.0/GtkSharp.dll": {} + }, + "build": { + "build/GtkSharp.targets": {} + } + }, + "Microsoft.NET.ILLink.Analyzers/7.0.100-1.23211.1": { + "type": "package", + "build": { + "build/Microsoft.NET.ILLink.Analyzers.props": {} + } + }, + "Microsoft.NET.ILLink.Tasks/7.0.100-1.23211.1": { + "type": "package", + "build": { + "build/Microsoft.NET.ILLink.Tasks.props": {} + } + }, + "PangoSharp/3.24.24.95": { + "type": "package", + "dependencies": { + "CairoSharp": "3.24.24.95", + "GLibSharp": "3.24.24.95" + }, + "compile": { + "lib/net6.0/PangoSharp.dll": {} + }, + "runtime": { + "lib/net6.0/PangoSharp.dll": {} + } + }, + "System.Resources.Extensions/8.0.0": { + "type": "package", + "compile": { + "lib/net6.0/System.Resources.Extensions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net6.0/System.Resources.Extensions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + } + }, + "net7.0": { + "AtkSharp/3.24.24.95": { + "type": "package", + "dependencies": { + "GLibSharp": "3.24.24.95" + }, + "compile": { + "lib/net6.0/AtkSharp.dll": {} + }, + "runtime": { + "lib/net6.0/AtkSharp.dll": {} + } + }, + "CairoSharp/3.24.24.95": { + "type": "package", + "compile": { + "lib/net6.0/CairoSharp.dll": {} + }, + "runtime": { + "lib/net6.0/CairoSharp.dll": {} + } + }, + "GdkSharp/3.24.24.95": { + "type": "package", + "dependencies": { + "CairoSharp": "3.24.24.95", + "GLibSharp": "3.24.24.95", + "GioSharp": "3.24.24.95", + "PangoSharp": "3.24.24.95" + }, + "compile": { + "lib/net6.0/GdkSharp.dll": {} + }, + "runtime": { + "lib/net6.0/GdkSharp.dll": {} + } + }, + "GioSharp/3.24.24.95": { + "type": "package", + "dependencies": { + "GLibSharp": "3.24.24.95" + }, + "compile": { + "lib/net6.0/GioSharp.dll": {} + }, + "runtime": { + "lib/net6.0/GioSharp.dll": {} + } + }, + "GLibSharp/3.24.24.95": { + "type": "package", + "compile": { + "lib/net6.0/GLibSharp.dll": {} + }, + "runtime": { + "lib/net6.0/GLibSharp.dll": {} + } + }, + "GtkSharp/3.24.24.95": { + "type": "package", + "dependencies": { + "AtkSharp": "3.24.24.95", + "CairoSharp": "3.24.24.95", + "GLibSharp": "3.24.24.95", + "GdkSharp": "3.24.24.95", + "GioSharp": "3.24.24.95", + "PangoSharp": "3.24.24.95" + }, + "compile": { + "lib/net6.0/GtkSharp.dll": {} + }, + "runtime": { + "lib/net6.0/GtkSharp.dll": {} + }, + "build": { + "build/GtkSharp.targets": {} + } + }, + "Microsoft.NET.ILLink.Analyzers/7.0.100-1.23211.1": { + "type": "package", + "build": { + "build/Microsoft.NET.ILLink.Analyzers.props": {} + } + }, + "Microsoft.NET.ILLink.Tasks/7.0.100-1.23211.1": { + "type": "package", + "build": { + "build/Microsoft.NET.ILLink.Tasks.props": {} + } + }, + "PangoSharp/3.24.24.95": { + "type": "package", + "dependencies": { + "CairoSharp": "3.24.24.95", + "GLibSharp": "3.24.24.95" + }, + "compile": { + "lib/net6.0/PangoSharp.dll": {} + }, + "runtime": { + "lib/net6.0/PangoSharp.dll": {} + } + }, + "System.Resources.Extensions/8.0.0": { + "type": "package", + "compile": { + "lib/net7.0/System.Resources.Extensions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/System.Resources.Extensions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + } + }, + "net8.0": { + "AtkSharp/3.24.24.95": { + "type": "package", + "dependencies": { + "GLibSharp": "3.24.24.95" + }, + "compile": { + "lib/net6.0/AtkSharp.dll": {} + }, + "runtime": { + "lib/net6.0/AtkSharp.dll": {} + } + }, + "CairoSharp/3.24.24.95": { + "type": "package", + "compile": { + "lib/net6.0/CairoSharp.dll": {} + }, + "runtime": { + "lib/net6.0/CairoSharp.dll": {} + } + }, + "GdkSharp/3.24.24.95": { + "type": "package", + "dependencies": { + "CairoSharp": "3.24.24.95", + "GLibSharp": "3.24.24.95", + "GioSharp": "3.24.24.95", + "PangoSharp": "3.24.24.95" + }, + "compile": { + "lib/net6.0/GdkSharp.dll": {} + }, + "runtime": { + "lib/net6.0/GdkSharp.dll": {} + } + }, + "GioSharp/3.24.24.95": { + "type": "package", + "dependencies": { + "GLibSharp": "3.24.24.95" + }, + "compile": { + "lib/net6.0/GioSharp.dll": {} + }, + "runtime": { + "lib/net6.0/GioSharp.dll": {} + } + }, + "GLibSharp/3.24.24.95": { + "type": "package", + "compile": { + "lib/net6.0/GLibSharp.dll": {} + }, + "runtime": { + "lib/net6.0/GLibSharp.dll": {} + } + }, + "GtkSharp/3.24.24.95": { + "type": "package", + "dependencies": { + "AtkSharp": "3.24.24.95", + "CairoSharp": "3.24.24.95", + "GLibSharp": "3.24.24.95", + "GdkSharp": "3.24.24.95", + "GioSharp": "3.24.24.95", + "PangoSharp": "3.24.24.95" + }, + "compile": { + "lib/net6.0/GtkSharp.dll": {} + }, + "runtime": { + "lib/net6.0/GtkSharp.dll": {} + }, + "build": { + "build/GtkSharp.targets": {} + } + }, + "Microsoft.NET.ILLink.Tasks/8.0.0": { + "type": "package", + "build": { + "build/Microsoft.NET.ILLink.Tasks.props": {} + } + }, + "PangoSharp/3.24.24.95": { + "type": "package", + "dependencies": { + "CairoSharp": "3.24.24.95", + "GLibSharp": "3.24.24.95" + }, + "compile": { + "lib/net6.0/PangoSharp.dll": {} + }, + "runtime": { + "lib/net6.0/PangoSharp.dll": {} + } + }, + "System.Resources.Extensions/8.0.0": { + "type": "package", + "compile": { + "lib/net8.0/System.Resources.Extensions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/System.Resources.Extensions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } } } }, "libraries": { - "AtkSharp/3.24.24.34": { - "sha512": "CNfTGhGDxcnow5e/u0THtOJeNWaZNDeeFmzYTMdC1tdUkmAtTFDareTGesLx+Gfj75m3415AKJSC9wQ6VyacYQ==", + "AtkSharp/3.24.24.95": { + "sha512": "LnSfsc0y11gfzczZj5bnpwcFkXFZuVTSSd92ML/FcHIM7FU+cAfm1UkAonv5BdwTRhzDbNDE39vihao/k75sUA==", "type": "package", - "path": "atksharp/3.24.24.34", + "path": "atksharp/3.24.24.95", "files": [ ".nupkg.metadata", ".signature.p7s", - "atksharp.3.24.24.34.nupkg.sha512", + "atksharp.3.24.24.95.nupkg.sha512", "atksharp.nuspec", + "lib/net6.0/AtkSharp.dll", "lib/netstandard2.0/AtkSharp.dll" ] }, - "CairoSharp/3.24.24.34": { - "sha512": "hr75uYPGFlmB3RvpL3/6ZJtb+UiKsrpkyjb5VGI+8y1/lkY405FMBhPZKlxFqoEH0iIZ9gAMPBqKzT1lSVaDqA==", + "CairoSharp/3.24.24.95": { + "sha512": "EZ9KT3pwVAol35XbZW0Uwdg2LqhDvPnWdhqIrsedhDx+Omnu56hLzxh8mZGqmQvEwJE8Opbda4w9CqDtXbX6Vw==", "type": "package", - "path": "cairosharp/3.24.24.34", + "path": "cairosharp/3.24.24.95", "files": [ ".nupkg.metadata", ".signature.p7s", - "cairosharp.3.24.24.34.nupkg.sha512", + "cairosharp.3.24.24.95.nupkg.sha512", "cairosharp.nuspec", + "lib/net6.0/CairoSharp.dll", "lib/netstandard2.0/CairoSharp.dll" ] }, - "GdkSharp/3.24.24.34": { - "sha512": "COORB6Qd4yu6HWRbzVZXrkzr1T96Gy0wO7ckJfpYxWLbDUDnZVd/g2PICp9T05a0ZvLvkE++vsSjAWobwQeS0g==", + "GdkSharp/3.24.24.95": { + "sha512": "rABpIGkxr8lOdyhEmrKXzjih3z3932kjqUmm5qaQhWVSvu9YepEk3J1FApgnKCW/EWEzlerzxnJArsyOlgMsZQ==", "type": "package", - "path": "gdksharp/3.24.24.34", + "path": "gdksharp/3.24.24.95", "files": [ ".nupkg.metadata", ".signature.p7s", - "gdksharp.3.24.24.34.nupkg.sha512", + "gdksharp.3.24.24.95.nupkg.sha512", "gdksharp.nuspec", + "lib/net6.0/GdkSharp.dll", "lib/netstandard2.0/GdkSharp.dll" ] }, - "GioSharp/3.24.24.34": { - "sha512": "Qyz8bhKjLMTWoxXu6cdNEtTLNUuw7Y1sPdXlyTfyWMP/JmsUE9smCsCC0kyQNSFW17flxdSoeDpG8l6zzJF0vQ==", + "GioSharp/3.24.24.95": { + "sha512": "avYEDFlYgbogb+Y7ZhIXQpyJfL83bnPpBKY642YEW9PQ+pRK3qf2k0opvd5oHccXfByj6kAQjmRUSIS0pj19Fg==", "type": "package", - "path": "giosharp/3.24.24.34", + "path": "giosharp/3.24.24.95", "files": [ ".nupkg.metadata", ".signature.p7s", - "giosharp.3.24.24.34.nupkg.sha512", + "giosharp.3.24.24.95.nupkg.sha512", "giosharp.nuspec", + "lib/net6.0/GioSharp.dll", "lib/netstandard2.0/GioSharp.dll" ] }, - "GLibSharp/3.24.24.34": { - "sha512": "PSA7YJbxpnpeltjekoUk93FI9HWUMc2NtkxNIaWzHz7BavkkZDFmx8EKTKtuBrqbZZmEhlv5472NwGdiycSfxw==", + "GLibSharp/3.24.24.95": { + "sha512": "1viZRMVjddf2HUCW7WDXT47rHssteHkAOimXQ2/pI8oGrPGNFuuw5MbX8BOIy73hCWVqo7JEMONv3z32OrCoCQ==", "type": "package", - "path": "glibsharp/3.24.24.34", + "path": "glibsharp/3.24.24.95", "files": [ ".nupkg.metadata", ".signature.p7s", - "glibsharp.3.24.24.34.nupkg.sha512", + "glibsharp.3.24.24.95.nupkg.sha512", "glibsharp.nuspec", + "lib/net6.0/GLibSharp.dll", "lib/netstandard2.0/GLibSharp.dll" ] }, - "GtkSharp/3.24.24.34": { - "sha512": "CVAz7ACMxW9xPhlrrg4Xe+v3jUnpN+emQl78aaXHtoiE7pf0tR8mP8mw0/eBHxMObrmg6DsLxbEFqE/7Yo4Uow==", + "GtkSharp/3.24.24.95": { + "sha512": "RRUY45hAa5gsMcadvVjcLUzMjVtmuHSYTcIwM6j8LNgKhzFFHk69qM1D5ULfGxaWmVjicqNWiFtOtk8WsvPqaQ==", "type": "package", - "path": "gtksharp/3.24.24.34", + "path": "gtksharp/3.24.24.95", "files": [ ".nupkg.metadata", ".signature.p7s", "build/GtkSharp.targets", - "gtksharp.3.24.24.34.nupkg.sha512", + "gtksharp.3.24.24.95.nupkg.sha512", "gtksharp.nuspec", + "lib/net6.0/GtkSharp.dll", "lib/netstandard2.0/GtkSharp.dll" ] }, - "PangoSharp/3.24.24.34": { - "sha512": "QpBEIiE29sxkewdW7l7rVRJR1p3SGoPauHrjm0A3yxpYxj+St5x45weHI8jquMJAZBUdVQuXYHSZDW1lQeJ+PQ==", + "Microsoft.NET.ILLink.Analyzers/7.0.100-1.23211.1": { + "sha512": "0GvbEgDGcUQA9KuWcQU1WwYHXt1tBzNr1Nls/M57rM7NA/AndFwCaCEoJpJkmxRY7xLlPDBnmGp8h5+FNqUngg==", + "type": "package", + "path": "microsoft.net.illink.analyzers/7.0.100-1.23211.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "analyzers/dotnet/cs/ILLink.CodeFixProvider.dll", + "analyzers/dotnet/cs/ILLink.RoslynAnalyzer.dll", + "build/Microsoft.NET.ILLink.Analyzers.props", + "microsoft.net.illink.analyzers.7.0.100-1.23211.1.nupkg.sha512", + "microsoft.net.illink.analyzers.nuspec" + ] + }, + "Microsoft.NET.ILLink.Tasks/7.0.100-1.23211.1": { + "sha512": "tvG8XZYLjT0o3WicCyKBZysVWo1jC9HdCFmNRmddx3WbAz0UCsd0qKZqpiEo99VLA8Re+FzWK51OcRldQPbt2Q==", + "type": "package", + "path": "microsoft.net.illink.tasks/7.0.100-1.23211.1", + "hasTools": true, + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "Sdk/Sdk.props", + "build/6.0_suppressions.xml", + "build/Microsoft.NET.ILLink.Tasks.props", + "build/Microsoft.NET.ILLink.targets", + "microsoft.net.illink.tasks.7.0.100-1.23211.1.nupkg.sha512", + "microsoft.net.illink.tasks.nuspec", + "tools/net472/ILLink.Tasks.dll", + "tools/net472/Mono.Cecil.dll", + "tools/net472/System.Buffers.dll", + "tools/net472/System.Collections.Immutable.dll", + "tools/net472/System.Memory.dll", + "tools/net472/System.Numerics.Vectors.dll", + "tools/net472/System.Reflection.Metadata.dll", + "tools/net472/System.Runtime.CompilerServices.Unsafe.dll", + "tools/net7.0/ILLink.Tasks.deps.json", + "tools/net7.0/ILLink.Tasks.dll", + "tools/net7.0/Mono.Cecil.Pdb.dll", + "tools/net7.0/Mono.Cecil.dll", + "tools/net7.0/illink.deps.json", + "tools/net7.0/illink.dll", + "tools/net7.0/illink.runtimeconfig.json" + ] + }, + "Microsoft.NET.ILLink.Tasks/8.0.0": { + "sha512": "B3etT5XQ2nlWkZGO2m/ytDYrOmSsQG1XNBaM6ZYlX5Ch/tDrMFadr0/mK6gjZwaQc55g+5+WZMw4Cz3m8VEF7g==", "type": "package", - "path": "pangosharp/3.24.24.34", + "path": "microsoft.net.illink.tasks/8.0.0", + "hasTools": true, "files": [ ".nupkg.metadata", ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "Sdk/Sdk.props", + "THIRD-PARTY-NOTICES.TXT", + "analyzers/dotnet/cs/ILLink.CodeFixProvider.dll", + "analyzers/dotnet/cs/ILLink.RoslynAnalyzer.dll", + "build/Microsoft.NET.ILLink.Analyzers.props", + "build/Microsoft.NET.ILLink.Tasks.props", + "build/Microsoft.NET.ILLink.targets", + "microsoft.net.illink.tasks.8.0.0.nupkg.sha512", + "microsoft.net.illink.tasks.nuspec", + "tools/net472/ILLink.Tasks.dll", + "tools/net472/ILLink.Tasks.dll.config", + "tools/net472/Mono.Cecil.Mdb.dll", + "tools/net472/Mono.Cecil.Pdb.dll", + "tools/net472/Mono.Cecil.Rocks.dll", + "tools/net472/Mono.Cecil.dll", + "tools/net472/Sdk/Sdk.props", + "tools/net472/System.Buffers.dll", + "tools/net472/System.Collections.Immutable.dll", + "tools/net472/System.Memory.dll", + "tools/net472/System.Numerics.Vectors.dll", + "tools/net472/System.Reflection.Metadata.dll", + "tools/net472/System.Runtime.CompilerServices.Unsafe.dll", + "tools/net472/build/Microsoft.NET.ILLink.Analyzers.props", + "tools/net472/build/Microsoft.NET.ILLink.Tasks.props", + "tools/net472/build/Microsoft.NET.ILLink.targets", + "tools/net8.0/ILLink.Tasks.deps.json", + "tools/net8.0/ILLink.Tasks.dll", + "tools/net8.0/Mono.Cecil.Mdb.dll", + "tools/net8.0/Mono.Cecil.Pdb.dll", + "tools/net8.0/Mono.Cecil.Rocks.dll", + "tools/net8.0/Mono.Cecil.dll", + "tools/net8.0/Sdk/Sdk.props", + "tools/net8.0/build/Microsoft.NET.ILLink.Analyzers.props", + "tools/net8.0/build/Microsoft.NET.ILLink.Tasks.props", + "tools/net8.0/build/Microsoft.NET.ILLink.targets", + "tools/net8.0/illink.deps.json", + "tools/net8.0/illink.dll", + "tools/net8.0/illink.runtimeconfig.json", + "useSharedDesignerContext.txt" + ] + }, + "PangoSharp/3.24.24.95": { + "sha512": "H7JeyEvLsgvsbamGpRgoNtdvzPiGwwsUuoeTobN1C/JRjw1J8Snw0yf2WBr7CKx5GLwbrwpQYOb7N/HD17ME8A==", + "type": "package", + "path": "pangosharp/3.24.24.95", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/net6.0/PangoSharp.dll", "lib/netstandard2.0/PangoSharp.dll", - "pangosharp.3.24.24.34.nupkg.sha512", + "pangosharp.3.24.24.95.nupkg.sha512", "pangosharp.nuspec" ] + }, + "System.Memory/4.5.5": { + "sha512": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==", + "type": "package", + "path": "system.memory/4.5.5", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "lib/net461/System.Memory.dll", + "lib/net461/System.Memory.xml", + "lib/netcoreapp2.1/_._", + "lib/netstandard1.1/System.Memory.dll", + "lib/netstandard1.1/System.Memory.xml", + "lib/netstandard2.0/System.Memory.dll", + "lib/netstandard2.0/System.Memory.xml", + "ref/netcoreapp2.1/_._", + "system.memory.4.5.5.nupkg.sha512", + "system.memory.nuspec", + "useSharedDesignerContext.txt", + "version.txt" + ] + }, + "System.Resources.Extensions/8.0.0": { + "sha512": "psnQ6GRQOvt+evda5C4nD5EuV49mz2Tv0DD2JDVDEbE/TKoMukxSkGJcsBJ0pajpPuFRr67syFYlkJ4Wj6A5Zw==", + "type": "package", + "path": "system.resources.extensions/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Resources.Extensions.targets", + "buildTransitive/net462/System.Resources.Extensions.targets", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Resources.Extensions.targets", + "lib/net462/System.Resources.Extensions.dll", + "lib/net462/System.Resources.Extensions.xml", + "lib/net6.0/System.Resources.Extensions.dll", + "lib/net6.0/System.Resources.Extensions.xml", + "lib/net7.0/System.Resources.Extensions.dll", + "lib/net7.0/System.Resources.Extensions.xml", + "lib/net8.0/System.Resources.Extensions.dll", + "lib/net8.0/System.Resources.Extensions.xml", + "lib/netstandard2.0/System.Resources.Extensions.dll", + "lib/netstandard2.0/System.Resources.Extensions.xml", + "system.resources.extensions.8.0.0.nupkg.sha512", + "system.resources.extensions.nuspec", + "useSharedDesignerContext.txt" + ] } }, "projectFileDependencyGroups": { ".NETCoreApp,Version=v3.1": [ - "GtkSharp >= 3.24.24.34" + "GtkSharp >= 3.24.24.95", + "Microsoft.NET.ILLink.Analyzers >= 7.0.100-1.23211.1", + "Microsoft.NET.ILLink.Tasks >= 7.0.100-1.23211.1", + "System.Resources.Extensions >= 8.0.0" + ], + "net6.0": [ + "GtkSharp >= 3.24.24.95", + "Microsoft.NET.ILLink.Analyzers >= 7.0.100-1.23211.1", + "Microsoft.NET.ILLink.Tasks >= 7.0.100-1.23211.1", + "System.Resources.Extensions >= 8.0.0" + ], + "net7.0": [ + "GtkSharp >= 3.24.24.95", + "Microsoft.NET.ILLink.Analyzers >= 7.0.100-1.23211.1", + "Microsoft.NET.ILLink.Tasks >= 7.0.100-1.23211.1", + "System.Resources.Extensions >= 8.0.0" + ], + "net8.0": [ + "GtkSharp >= 3.24.24.95", + "Microsoft.NET.ILLink.Tasks >= 8.0.0", + "System.Resources.Extensions >= 8.0.0" ] }, "packageFolders": { "C:\\Users\\chj\\.nuget\\packages\\": {}, + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {}, "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder": {} }, "project": { - "version": "0.3.24.1", + "version": "1.3.24.23", "restore": { "projectUniqueName": "F:\\我的项目\\GTK\\gtksystem-windows-forms\\Source\\GTKSystem.Windows.Forms\\GTKSystem.Windows.Forms.csproj", "projectName": "GTKSystem.Windows.Forms", @@ -199,17 +771,25 @@ "packagesPath": "C:\\Users\\chj\\.nuget\\packages\\", "outputPath": "F:\\我的项目\\GTK\\gtksystem-windows-forms\\Source\\GTKSystem.Windows.Forms\\obj\\", "projectStyle": "PackageReference", + "crossTargeting": true, "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages", "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder" ], "configFilePaths": [ "C:\\Users\\chj\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" ], "originalTargetFrameworks": [ + "net6.0", + "net7.0", + "net8.0", "netcoreapp3.1" ], "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "C:\\Users\\chj\\.nuget\\packages": {}, "https://api.nuget.org/v3/index.json": {}, "https://www.nuget.org/api/v2/": {} }, @@ -217,6 +797,18 @@ "netcoreapp3.1": { "targetAlias": "netcoreapp3.1", "projectReferences": {} + }, + "net6.0": { + "targetAlias": "net6.0", + "projectReferences": {} + }, + "net7.0": { + "targetAlias": "net7.0", + "projectReferences": {} + }, + "net8.0": { + "targetAlias": "net8.0", + "projectReferences": {} } }, "warningProperties": { @@ -231,7 +823,171 @@ "dependencies": { "GtkSharp": { "target": "Package", - "version": "[3.24.24.34, )" + "version": "[3.24.24.95, )" + }, + "Microsoft.NET.ILLink.Analyzers": { + "suppressParent": "All", + "target": "Package", + "version": "[7.0.100-1.23211.1, )", + "autoReferenced": true + }, + "Microsoft.NET.ILLink.Tasks": { + "suppressParent": "All", + "target": "Package", + "version": "[7.0.100-1.23211.1, )", + "autoReferenced": true + }, + "System.Resources.Extensions": { + "target": "Package", + "version": "[8.0.0, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.100\\RuntimeIdentifierGraph.json" + }, + "net6.0": { + "targetAlias": "net6.0", + "dependencies": { + "GtkSharp": { + "target": "Package", + "version": "[3.24.24.95, )" + }, + "Microsoft.NET.ILLink.Analyzers": { + "suppressParent": "All", + "target": "Package", + "version": "[7.0.100-1.23211.1, )", + "autoReferenced": true + }, + "Microsoft.NET.ILLink.Tasks": { + "suppressParent": "All", + "target": "Package", + "version": "[7.0.100-1.23211.1, )", + "autoReferenced": true + }, + "System.Resources.Extensions": { + "target": "Package", + "version": "[8.0.0, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "downloadDependencies": [ + { + "name": "Microsoft.AspNetCore.App.Ref", + "version": "[6.0.25, 6.0.25]" + }, + { + "name": "Microsoft.NETCore.App.Ref", + "version": "[6.0.25, 6.0.25]" + }, + { + "name": "Microsoft.WindowsDesktop.App.Ref", + "version": "[6.0.25, 6.0.25]" + } + ], + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.100\\RuntimeIdentifierGraph.json" + }, + "net7.0": { + "targetAlias": "net7.0", + "dependencies": { + "GtkSharp": { + "target": "Package", + "version": "[3.24.24.95, )" + }, + "Microsoft.NET.ILLink.Analyzers": { + "suppressParent": "All", + "target": "Package", + "version": "[7.0.100-1.23211.1, )", + "autoReferenced": true + }, + "Microsoft.NET.ILLink.Tasks": { + "suppressParent": "All", + "target": "Package", + "version": "[7.0.100-1.23211.1, )", + "autoReferenced": true + }, + "System.Resources.Extensions": { + "target": "Package", + "version": "[8.0.0, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "downloadDependencies": [ + { + "name": "Microsoft.AspNetCore.App.Ref", + "version": "[7.0.14, 7.0.14]" + }, + { + "name": "Microsoft.NETCore.App.Ref", + "version": "[7.0.14, 7.0.14]" + }, + { + "name": "Microsoft.WindowsDesktop.App.Ref", + "version": "[7.0.14, 7.0.14]" + } + ], + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.100\\RuntimeIdentifierGraph.json" + }, + "net8.0": { + "targetAlias": "net8.0", + "dependencies": { + "GtkSharp": { + "target": "Package", + "version": "[3.24.24.95, )" + }, + "Microsoft.NET.ILLink.Tasks": { + "suppressParent": "All", + "target": "Package", + "version": "[8.0.0, )", + "autoReferenced": true + }, + "System.Resources.Extensions": { + "target": "Package", + "version": "[8.0.0, )" } }, "imports": [ @@ -240,7 +996,8 @@ "net47", "net471", "net472", - "net48" + "net48", + "net481" ], "assetTargetFallback": true, "warn": true, @@ -249,7 +1006,7 @@ "privateAssets": "all" } }, - "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\5.0.203\\RuntimeIdentifierGraph.json" + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.100/PortableRuntimeIdentifierGraph.json" } } } diff --git a/Source/GTKSystem.Windows.Forms/obj/project.nuget.cache b/Source/GTKSystem.Windows.Forms/obj/project.nuget.cache index c1fc52c8d4d78059dc711db2f2f45c3199fc9ac5..ecbd3f78ce4b5f8923e823a2f491974cdf16d3df 100644 --- a/Source/GTKSystem.Windows.Forms/obj/project.nuget.cache +++ b/Source/GTKSystem.Windows.Forms/obj/project.nuget.cache @@ -1,16 +1,27 @@ { "version": 2, - "dgSpecHash": "slaRWwsut896NzXJ6TBYe8StTHIFKYOnZredf2A8J+CPH5jOT20XldQr0pMSITQLohfW3Y0KRxgaXraCmTu0Cw==", + "dgSpecHash": "DUcRg/LESiIcgfP3tALS/Lc1Bc1dGxRmQ3mtmNyOdSHwVVtqjySaO+15ot8X1PcnUo+r2fE5hsR0NsFqhj89ag==", "success": true, "projectFilePath": "F:\\我的项目\\GTK\\gtksystem-windows-forms\\Source\\GTKSystem.Windows.Forms\\GTKSystem.Windows.Forms.csproj", "expectedPackageFiles": [ - "C:\\Users\\chj\\.nuget\\packages\\atksharp\\3.24.24.34\\atksharp.3.24.24.34.nupkg.sha512", - "C:\\Users\\chj\\.nuget\\packages\\cairosharp\\3.24.24.34\\cairosharp.3.24.24.34.nupkg.sha512", - "C:\\Users\\chj\\.nuget\\packages\\gdksharp\\3.24.24.34\\gdksharp.3.24.24.34.nupkg.sha512", - "C:\\Users\\chj\\.nuget\\packages\\giosharp\\3.24.24.34\\giosharp.3.24.24.34.nupkg.sha512", - "C:\\Users\\chj\\.nuget\\packages\\glibsharp\\3.24.24.34\\glibsharp.3.24.24.34.nupkg.sha512", - "C:\\Users\\chj\\.nuget\\packages\\gtksharp\\3.24.24.34\\gtksharp.3.24.24.34.nupkg.sha512", - "C:\\Users\\chj\\.nuget\\packages\\pangosharp\\3.24.24.34\\pangosharp.3.24.24.34.nupkg.sha512" + "C:\\Users\\chj\\.nuget\\packages\\atksharp\\3.24.24.95\\atksharp.3.24.24.95.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\cairosharp\\3.24.24.95\\cairosharp.3.24.24.95.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\gdksharp\\3.24.24.95\\gdksharp.3.24.24.95.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\giosharp\\3.24.24.95\\giosharp.3.24.24.95.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\glibsharp\\3.24.24.95\\glibsharp.3.24.24.95.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\gtksharp\\3.24.24.95\\gtksharp.3.24.24.95.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\microsoft.net.illink.analyzers\\7.0.100-1.23211.1\\microsoft.net.illink.analyzers.7.0.100-1.23211.1.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\microsoft.net.illink.tasks\\7.0.100-1.23211.1\\microsoft.net.illink.tasks.7.0.100-1.23211.1.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\microsoft.net.illink.tasks\\8.0.0\\microsoft.net.illink.tasks.8.0.0.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\pangosharp\\3.24.24.95\\pangosharp.3.24.24.95.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\system.memory\\4.5.5\\system.memory.4.5.5.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\system.resources.extensions\\8.0.0\\system.resources.extensions.8.0.0.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\6.0.25\\microsoft.windowsdesktop.app.ref.6.0.25.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\microsoft.netcore.app.ref\\6.0.25\\microsoft.netcore.app.ref.6.0.25.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\microsoft.aspnetcore.app.ref\\6.0.25\\microsoft.aspnetcore.app.ref.6.0.25.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\7.0.14\\microsoft.windowsdesktop.app.ref.7.0.14.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\microsoft.netcore.app.ref\\7.0.14\\microsoft.netcore.app.ref.7.0.14.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\microsoft.aspnetcore.app.ref\\7.0.14\\microsoft.aspnetcore.app.ref.7.0.14.nupkg.sha512" ], "logs": [] } \ No newline at end of file diff --git a/Source/GTKSystem.Windows.Forms/obj/publish/win-x64/GTKSystem.Windows.Forms.csproj.nuget.dgspec.json b/Source/GTKSystem.Windows.Forms/obj/publish/win-x64/GTKSystem.Windows.Forms.csproj.nuget.dgspec.json new file mode 100644 index 0000000000000000000000000000000000000000..97b4831aa8bc8b031b47be8a02fade50b474d9f0 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/obj/publish/win-x64/GTKSystem.Windows.Forms.csproj.nuget.dgspec.json @@ -0,0 +1,102 @@ +{ + "format": 1, + "restore": { + "F:\\我的项目\\GTK\\gtksystem-windows-forms\\Source\\GTKSystem.Windows.Forms\\GTKSystem.Windows.Forms.csproj": {} + }, + "projects": { + "F:\\我的项目\\GTK\\gtksystem-windows-forms\\Source\\GTKSystem.Windows.Forms\\GTKSystem.Windows.Forms.csproj": { + "version": "1.3.24.6", + "restore": { + "projectUniqueName": "F:\\我的项目\\GTK\\gtksystem-windows-forms\\Source\\GTKSystem.Windows.Forms\\GTKSystem.Windows.Forms.csproj", + "projectName": "GTKSystem.Windows.Forms", + "projectPath": "F:\\我的项目\\GTK\\gtksystem-windows-forms\\Source\\GTKSystem.Windows.Forms\\GTKSystem.Windows.Forms.csproj", + "packagesPath": "C:\\Users\\chj\\.nuget\\packages\\", + "outputPath": "F:\\我的项目\\GTK\\gtksystem-windows-forms\\Source\\GTKSystem.Windows.Forms\\obj\\publish\\win-x64\\", + "projectStyle": "PackageReference", + "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages", + "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder" + ], + "configFilePaths": [ + "C:\\Users\\chj\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net8.0" + ], + "sources": { + "C:\\Users\\chj\\.nuget\\packages": {}, + "https://api.nuget.org/v3/index.json": {}, + "https://www.nuget.org/api/v2/": {} + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + } + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "dependencies": { + "GtkSharp": { + "target": "Package", + "version": "[3.24.24.95, )" + }, + "Microsoft.DotNet.ILCompiler": { + "suppressParent": "All", + "target": "Package", + "version": "[8.0.0, )", + "autoReferenced": true + }, + "Microsoft.NET.ILLink.Tasks": { + "suppressParent": "All", + "target": "Package", + "version": "[8.0.0, )", + "autoReferenced": true + }, + "System.Resources.Extensions": { + "target": "Package", + "version": "[8.0.0, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "downloadDependencies": [ + { + "name": "runtime.win-x64.Microsoft.DotNet.ILCompiler", + "version": "[8.0.0, 8.0.0]" + } + ], + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.100/PortableRuntimeIdentifierGraph.json" + } + }, + "runtimes": { + "win-x64": { + "#import": [] + } + } + } + } +} \ No newline at end of file diff --git a/Source/GTKSystem.Windows.Forms/obj/publish/win-x64/GTKSystem.Windows.Forms.csproj.nuget.g.props b/Source/GTKSystem.Windows.Forms/obj/publish/win-x64/GTKSystem.Windows.Forms.csproj.nuget.g.props new file mode 100644 index 0000000000000000000000000000000000000000..48fb5a96cf5b4f3557a1cc01e0d435a7a3d79638 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/obj/publish/win-x64/GTKSystem.Windows.Forms.csproj.nuget.g.props @@ -0,0 +1,25 @@ + + + + True + NuGet + $(MSBuildThisFileDirectory)project.assets.json + $(UserProfile)\.nuget\packages\ + C:\Users\chj\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages;C:\Program Files\dotnet\sdk\NuGetFallbackFolder + PackageReference + 6.8.0 + + + + + + + + + + + + C:\Users\chj\.nuget\packages\microsoft.net.illink.tasks\8.0.0 + C:\Users\chj\.nuget\packages\microsoft.dotnet.ilcompiler\8.0.0 + + \ No newline at end of file diff --git a/Source/GTKSystem.Windows.Forms/obj/publish/win-x64/GTKSystem.Windows.Forms.csproj.nuget.g.targets b/Source/GTKSystem.Windows.Forms/obj/publish/win-x64/GTKSystem.Windows.Forms.csproj.nuget.g.targets new file mode 100644 index 0000000000000000000000000000000000000000..052bd2f35861996bef6a0d318441dd9d36fcddd0 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/obj/publish/win-x64/GTKSystem.Windows.Forms.csproj.nuget.g.targets @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Source/GTKSystem.Windows.Forms/obj/publish/win-x64/project.assets.json b/Source/GTKSystem.Windows.Forms/obj/publish/win-x64/project.assets.json new file mode 100644 index 0000000000000000000000000000000000000000..6143d50d3bfc128ccebedec33927d647808988e5 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/obj/publish/win-x64/project.assets.json @@ -0,0 +1,998 @@ +{ + "version": 3, + "targets": { + "net8.0": { + "AtkSharp/3.24.24.95": { + "type": "package", + "dependencies": { + "GLibSharp": "3.24.24.95" + }, + "compile": { + "lib/net6.0/AtkSharp.dll": {} + }, + "runtime": { + "lib/net6.0/AtkSharp.dll": {} + } + }, + "CairoSharp/3.24.24.95": { + "type": "package", + "compile": { + "lib/net6.0/CairoSharp.dll": {} + }, + "runtime": { + "lib/net6.0/CairoSharp.dll": {} + } + }, + "GdkSharp/3.24.24.95": { + "type": "package", + "dependencies": { + "CairoSharp": "3.24.24.95", + "GLibSharp": "3.24.24.95", + "GioSharp": "3.24.24.95", + "PangoSharp": "3.24.24.95" + }, + "compile": { + "lib/net6.0/GdkSharp.dll": {} + }, + "runtime": { + "lib/net6.0/GdkSharp.dll": {} + } + }, + "GioSharp/3.24.24.95": { + "type": "package", + "dependencies": { + "GLibSharp": "3.24.24.95" + }, + "compile": { + "lib/net6.0/GioSharp.dll": {} + }, + "runtime": { + "lib/net6.0/GioSharp.dll": {} + } + }, + "GLibSharp/3.24.24.95": { + "type": "package", + "compile": { + "lib/net6.0/GLibSharp.dll": {} + }, + "runtime": { + "lib/net6.0/GLibSharp.dll": {} + } + }, + "GtkSharp/3.24.24.95": { + "type": "package", + "dependencies": { + "AtkSharp": "3.24.24.95", + "CairoSharp": "3.24.24.95", + "GLibSharp": "3.24.24.95", + "GdkSharp": "3.24.24.95", + "GioSharp": "3.24.24.95", + "PangoSharp": "3.24.24.95" + }, + "compile": { + "lib/net6.0/GtkSharp.dll": {} + }, + "runtime": { + "lib/net6.0/GtkSharp.dll": {} + }, + "build": { + "build/GtkSharp.targets": {} + } + }, + "Microsoft.DotNet.ILCompiler/8.0.0": { + "type": "package", + "build": { + "build/Microsoft.DotNet.ILCompiler.props": {} + } + }, + "Microsoft.NET.ILLink.Tasks/8.0.0": { + "type": "package", + "build": { + "build/Microsoft.NET.ILLink.Tasks.props": {} + } + }, + "PangoSharp/3.24.24.95": { + "type": "package", + "dependencies": { + "CairoSharp": "3.24.24.95", + "GLibSharp": "3.24.24.95" + }, + "compile": { + "lib/net6.0/PangoSharp.dll": {} + }, + "runtime": { + "lib/net6.0/PangoSharp.dll": {} + } + }, + "System.Resources.Extensions/8.0.0": { + "type": "package", + "compile": { + "lib/net8.0/System.Resources.Extensions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/System.Resources.Extensions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + } + }, + "net8.0/win-x64": { + "AtkSharp/3.24.24.95": { + "type": "package", + "dependencies": { + "GLibSharp": "3.24.24.95" + }, + "compile": { + "lib/net6.0/AtkSharp.dll": {} + }, + "runtime": { + "lib/net6.0/AtkSharp.dll": {} + } + }, + "CairoSharp/3.24.24.95": { + "type": "package", + "compile": { + "lib/net6.0/CairoSharp.dll": {} + }, + "runtime": { + "lib/net6.0/CairoSharp.dll": {} + } + }, + "GdkSharp/3.24.24.95": { + "type": "package", + "dependencies": { + "CairoSharp": "3.24.24.95", + "GLibSharp": "3.24.24.95", + "GioSharp": "3.24.24.95", + "PangoSharp": "3.24.24.95" + }, + "compile": { + "lib/net6.0/GdkSharp.dll": {} + }, + "runtime": { + "lib/net6.0/GdkSharp.dll": {} + } + }, + "GioSharp/3.24.24.95": { + "type": "package", + "dependencies": { + "GLibSharp": "3.24.24.95" + }, + "compile": { + "lib/net6.0/GioSharp.dll": {} + }, + "runtime": { + "lib/net6.0/GioSharp.dll": {} + } + }, + "GLibSharp/3.24.24.95": { + "type": "package", + "compile": { + "lib/net6.0/GLibSharp.dll": {} + }, + "runtime": { + "lib/net6.0/GLibSharp.dll": {} + } + }, + "GtkSharp/3.24.24.95": { + "type": "package", + "dependencies": { + "AtkSharp": "3.24.24.95", + "CairoSharp": "3.24.24.95", + "GLibSharp": "3.24.24.95", + "GdkSharp": "3.24.24.95", + "GioSharp": "3.24.24.95", + "PangoSharp": "3.24.24.95" + }, + "compile": { + "lib/net6.0/GtkSharp.dll": {} + }, + "runtime": { + "lib/net6.0/GtkSharp.dll": {} + }, + "build": { + "build/GtkSharp.targets": {} + } + }, + "Microsoft.DotNet.ILCompiler/8.0.0": { + "type": "package", + "dependencies": { + "runtime.win-x64.Microsoft.DotNet.ILCompiler": "8.0.0" + }, + "build": { + "build/Microsoft.DotNet.ILCompiler.props": {} + } + }, + "Microsoft.NET.ILLink.Tasks/8.0.0": { + "type": "package", + "build": { + "build/Microsoft.NET.ILLink.Tasks.props": {} + } + }, + "PangoSharp/3.24.24.95": { + "type": "package", + "dependencies": { + "CairoSharp": "3.24.24.95", + "GLibSharp": "3.24.24.95" + }, + "compile": { + "lib/net6.0/PangoSharp.dll": {} + }, + "runtime": { + "lib/net6.0/PangoSharp.dll": {} + } + }, + "runtime.win-x64.Microsoft.DotNet.ILCompiler/8.0.0": { + "type": "package" + }, + "System.Resources.Extensions/8.0.0": { + "type": "package", + "compile": { + "lib/net8.0/System.Resources.Extensions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/System.Resources.Extensions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + } + } + }, + "libraries": { + "AtkSharp/3.24.24.95": { + "sha512": "LnSfsc0y11gfzczZj5bnpwcFkXFZuVTSSd92ML/FcHIM7FU+cAfm1UkAonv5BdwTRhzDbNDE39vihao/k75sUA==", + "type": "package", + "path": "atksharp/3.24.24.95", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "atksharp.3.24.24.95.nupkg.sha512", + "atksharp.nuspec", + "lib/net6.0/AtkSharp.dll", + "lib/netstandard2.0/AtkSharp.dll" + ] + }, + "CairoSharp/3.24.24.95": { + "sha512": "EZ9KT3pwVAol35XbZW0Uwdg2LqhDvPnWdhqIrsedhDx+Omnu56hLzxh8mZGqmQvEwJE8Opbda4w9CqDtXbX6Vw==", + "type": "package", + "path": "cairosharp/3.24.24.95", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "cairosharp.3.24.24.95.nupkg.sha512", + "cairosharp.nuspec", + "lib/net6.0/CairoSharp.dll", + "lib/netstandard2.0/CairoSharp.dll" + ] + }, + "GdkSharp/3.24.24.95": { + "sha512": "rABpIGkxr8lOdyhEmrKXzjih3z3932kjqUmm5qaQhWVSvu9YepEk3J1FApgnKCW/EWEzlerzxnJArsyOlgMsZQ==", + "type": "package", + "path": "gdksharp/3.24.24.95", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "gdksharp.3.24.24.95.nupkg.sha512", + "gdksharp.nuspec", + "lib/net6.0/GdkSharp.dll", + "lib/netstandard2.0/GdkSharp.dll" + ] + }, + "GioSharp/3.24.24.95": { + "sha512": "avYEDFlYgbogb+Y7ZhIXQpyJfL83bnPpBKY642YEW9PQ+pRK3qf2k0opvd5oHccXfByj6kAQjmRUSIS0pj19Fg==", + "type": "package", + "path": "giosharp/3.24.24.95", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "giosharp.3.24.24.95.nupkg.sha512", + "giosharp.nuspec", + "lib/net6.0/GioSharp.dll", + "lib/netstandard2.0/GioSharp.dll" + ] + }, + "GLibSharp/3.24.24.95": { + "sha512": "1viZRMVjddf2HUCW7WDXT47rHssteHkAOimXQ2/pI8oGrPGNFuuw5MbX8BOIy73hCWVqo7JEMONv3z32OrCoCQ==", + "type": "package", + "path": "glibsharp/3.24.24.95", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "glibsharp.3.24.24.95.nupkg.sha512", + "glibsharp.nuspec", + "lib/net6.0/GLibSharp.dll", + "lib/netstandard2.0/GLibSharp.dll" + ] + }, + "GtkSharp/3.24.24.95": { + "sha512": "RRUY45hAa5gsMcadvVjcLUzMjVtmuHSYTcIwM6j8LNgKhzFFHk69qM1D5ULfGxaWmVjicqNWiFtOtk8WsvPqaQ==", + "type": "package", + "path": "gtksharp/3.24.24.95", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "build/GtkSharp.targets", + "gtksharp.3.24.24.95.nupkg.sha512", + "gtksharp.nuspec", + "lib/net6.0/GtkSharp.dll", + "lib/netstandard2.0/GtkSharp.dll" + ] + }, + "Microsoft.DotNet.ILCompiler/8.0.0": { + "sha512": "zuTbpcWDCCvESnOAvpHuwum1C3jJIeDl+grYcRDqyoHsPAUutIB6wb7iJV3Y2Q96crKC6cObqf92eOVEiG7keQ==", + "type": "package", + "path": "microsoft.dotnet.ilcompiler/8.0.0", + "hasTools": true, + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "build/BuildFrameworkNativeObjects.proj", + "build/Microsoft.DotNet.ILCompiler.SingleEntry.targets", + "build/Microsoft.DotNet.ILCompiler.props", + "build/Microsoft.NETCore.Native.Publish.targets", + "build/Microsoft.NETCore.Native.Unix.targets", + "build/Microsoft.NETCore.Native.Windows.targets", + "build/Microsoft.NETCore.Native.targets", + "build/NativeAOT.natstepfilter", + "build/NativeAOT.natvis", + "build/WindowsAPIs.txt", + "build/findvcvarsall.bat", + "microsoft.dotnet.ilcompiler.8.0.0.nupkg.sha512", + "microsoft.dotnet.ilcompiler.nuspec", + "runtime.json", + "tools/netstandard/ILCompiler.Build.Tasks.deps.json", + "tools/netstandard/ILCompiler.Build.Tasks.dll", + "tools/netstandard/ILCompiler.Build.Tasks.pdb" + ] + }, + "Microsoft.NET.ILLink.Tasks/8.0.0": { + "sha512": "B3etT5XQ2nlWkZGO2m/ytDYrOmSsQG1XNBaM6ZYlX5Ch/tDrMFadr0/mK6gjZwaQc55g+5+WZMw4Cz3m8VEF7g==", + "type": "package", + "path": "microsoft.net.illink.tasks/8.0.0", + "hasTools": true, + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "Sdk/Sdk.props", + "THIRD-PARTY-NOTICES.TXT", + "analyzers/dotnet/cs/ILLink.CodeFixProvider.dll", + "analyzers/dotnet/cs/ILLink.RoslynAnalyzer.dll", + "build/Microsoft.NET.ILLink.Analyzers.props", + "build/Microsoft.NET.ILLink.Tasks.props", + "build/Microsoft.NET.ILLink.targets", + "microsoft.net.illink.tasks.8.0.0.nupkg.sha512", + "microsoft.net.illink.tasks.nuspec", + "tools/net472/ILLink.Tasks.dll", + "tools/net472/ILLink.Tasks.dll.config", + "tools/net472/Mono.Cecil.Mdb.dll", + "tools/net472/Mono.Cecil.Pdb.dll", + "tools/net472/Mono.Cecil.Rocks.dll", + "tools/net472/Mono.Cecil.dll", + "tools/net472/Sdk/Sdk.props", + "tools/net472/System.Buffers.dll", + "tools/net472/System.Collections.Immutable.dll", + "tools/net472/System.Memory.dll", + "tools/net472/System.Numerics.Vectors.dll", + "tools/net472/System.Reflection.Metadata.dll", + "tools/net472/System.Runtime.CompilerServices.Unsafe.dll", + "tools/net472/build/Microsoft.NET.ILLink.Analyzers.props", + "tools/net472/build/Microsoft.NET.ILLink.Tasks.props", + "tools/net472/build/Microsoft.NET.ILLink.targets", + "tools/net8.0/ILLink.Tasks.deps.json", + "tools/net8.0/ILLink.Tasks.dll", + "tools/net8.0/Mono.Cecil.Mdb.dll", + "tools/net8.0/Mono.Cecil.Pdb.dll", + "tools/net8.0/Mono.Cecil.Rocks.dll", + "tools/net8.0/Mono.Cecil.dll", + "tools/net8.0/Sdk/Sdk.props", + "tools/net8.0/build/Microsoft.NET.ILLink.Analyzers.props", + "tools/net8.0/build/Microsoft.NET.ILLink.Tasks.props", + "tools/net8.0/build/Microsoft.NET.ILLink.targets", + "tools/net8.0/illink.deps.json", + "tools/net8.0/illink.dll", + "tools/net8.0/illink.runtimeconfig.json", + "useSharedDesignerContext.txt" + ] + }, + "PangoSharp/3.24.24.95": { + "sha512": "H7JeyEvLsgvsbamGpRgoNtdvzPiGwwsUuoeTobN1C/JRjw1J8Snw0yf2WBr7CKx5GLwbrwpQYOb7N/HD17ME8A==", + "type": "package", + "path": "pangosharp/3.24.24.95", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "lib/net6.0/PangoSharp.dll", + "lib/netstandard2.0/PangoSharp.dll", + "pangosharp.3.24.24.95.nupkg.sha512", + "pangosharp.nuspec" + ] + }, + "runtime.win-x64.Microsoft.DotNet.ILCompiler/8.0.0": { + "sha512": "iDP98FDvgLAFG40UkHybKTyPlDSiN/vqYJHlLmN7V4W8Yi+H+wxPGDjsaMN9TGkdkpTk/UHbMflWmro9IkPSYw==", + "type": "package", + "path": "runtime.win-x64.microsoft.dotnet.ilcompiler/8.0.0", + "hasTools": true, + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "build/BuildFrameworkNativeObjects.proj", + "build/Microsoft.DotNet.ILCompiler.SingleEntry.targets", + "build/Microsoft.DotNet.ILCompiler.props", + "build/Microsoft.NETCore.Native.Publish.targets", + "build/Microsoft.NETCore.Native.Unix.targets", + "build/Microsoft.NETCore.Native.Windows.targets", + "build/Microsoft.NETCore.Native.targets", + "build/NativeAOT.natstepfilter", + "build/NativeAOT.natvis", + "build/WindowsAPIs.txt", + "build/findvcvarsall.bat", + "framework/Microsoft.CSharp.dll", + "framework/Microsoft.CSharp.pdb", + "framework/Microsoft.VisualBasic.Core.dll", + "framework/Microsoft.VisualBasic.Core.pdb", + "framework/Microsoft.VisualBasic.dll", + "framework/Microsoft.VisualBasic.pdb", + "framework/Microsoft.Win32.Primitives.dll", + "framework/Microsoft.Win32.Primitives.pdb", + "framework/Microsoft.Win32.Registry.dll", + "framework/Microsoft.Win32.Registry.pdb", + "framework/System.AppContext.dll", + "framework/System.AppContext.pdb", + "framework/System.Buffers.dll", + "framework/System.Buffers.pdb", + "framework/System.Collections.Concurrent.dll", + "framework/System.Collections.Concurrent.pdb", + "framework/System.Collections.Immutable.dll", + "framework/System.Collections.Immutable.pdb", + "framework/System.Collections.NonGeneric.dll", + "framework/System.Collections.NonGeneric.pdb", + "framework/System.Collections.Specialized.dll", + "framework/System.Collections.Specialized.pdb", + "framework/System.Collections.dll", + "framework/System.Collections.pdb", + "framework/System.ComponentModel.Annotations.dll", + "framework/System.ComponentModel.Annotations.pdb", + "framework/System.ComponentModel.DataAnnotations.dll", + "framework/System.ComponentModel.DataAnnotations.pdb", + "framework/System.ComponentModel.EventBasedAsync.dll", + "framework/System.ComponentModel.EventBasedAsync.pdb", + "framework/System.ComponentModel.Primitives.dll", + "framework/System.ComponentModel.Primitives.pdb", + "framework/System.ComponentModel.TypeConverter.dll", + "framework/System.ComponentModel.TypeConverter.pdb", + "framework/System.ComponentModel.dll", + "framework/System.ComponentModel.pdb", + "framework/System.Configuration.dll", + "framework/System.Configuration.pdb", + "framework/System.Console.dll", + "framework/System.Console.pdb", + "framework/System.Core.dll", + "framework/System.Core.pdb", + "framework/System.Data.Common.dll", + "framework/System.Data.Common.pdb", + "framework/System.Data.DataSetExtensions.dll", + "framework/System.Data.DataSetExtensions.pdb", + "framework/System.Data.dll", + "framework/System.Data.pdb", + "framework/System.Diagnostics.Contracts.dll", + "framework/System.Diagnostics.Contracts.pdb", + "framework/System.Diagnostics.Debug.dll", + "framework/System.Diagnostics.Debug.pdb", + "framework/System.Diagnostics.DiagnosticSource.dll", + "framework/System.Diagnostics.DiagnosticSource.pdb", + "framework/System.Diagnostics.FileVersionInfo.dll", + "framework/System.Diagnostics.FileVersionInfo.pdb", + "framework/System.Diagnostics.Process.dll", + "framework/System.Diagnostics.Process.pdb", + "framework/System.Diagnostics.StackTrace.dll", + "framework/System.Diagnostics.StackTrace.pdb", + "framework/System.Diagnostics.TextWriterTraceListener.dll", + "framework/System.Diagnostics.TextWriterTraceListener.pdb", + "framework/System.Diagnostics.Tools.dll", + "framework/System.Diagnostics.Tools.pdb", + "framework/System.Diagnostics.TraceSource.dll", + "framework/System.Diagnostics.TraceSource.pdb", + "framework/System.Diagnostics.Tracing.dll", + "framework/System.Diagnostics.Tracing.pdb", + "framework/System.Drawing.Primitives.dll", + "framework/System.Drawing.Primitives.pdb", + "framework/System.Drawing.dll", + "framework/System.Drawing.pdb", + "framework/System.Dynamic.Runtime.dll", + "framework/System.Dynamic.Runtime.pdb", + "framework/System.Formats.Asn1.dll", + "framework/System.Formats.Asn1.pdb", + "framework/System.Formats.Tar.dll", + "framework/System.Formats.Tar.pdb", + "framework/System.Globalization.Calendars.dll", + "framework/System.Globalization.Calendars.pdb", + "framework/System.Globalization.Extensions.dll", + "framework/System.Globalization.Extensions.pdb", + "framework/System.Globalization.dll", + "framework/System.Globalization.pdb", + "framework/System.IO.Compression.Brotli.dll", + "framework/System.IO.Compression.Brotli.pdb", + "framework/System.IO.Compression.FileSystem.dll", + "framework/System.IO.Compression.FileSystem.pdb", + "framework/System.IO.Compression.Native.dll", + "framework/System.IO.Compression.Native.pdb", + "framework/System.IO.Compression.ZipFile.dll", + "framework/System.IO.Compression.ZipFile.pdb", + "framework/System.IO.Compression.dll", + "framework/System.IO.Compression.pdb", + "framework/System.IO.FileSystem.AccessControl.dll", + "framework/System.IO.FileSystem.AccessControl.pdb", + "framework/System.IO.FileSystem.DriveInfo.dll", + "framework/System.IO.FileSystem.DriveInfo.pdb", + "framework/System.IO.FileSystem.Primitives.dll", + "framework/System.IO.FileSystem.Primitives.pdb", + "framework/System.IO.FileSystem.Watcher.dll", + "framework/System.IO.FileSystem.Watcher.pdb", + "framework/System.IO.FileSystem.dll", + "framework/System.IO.FileSystem.pdb", + "framework/System.IO.IsolatedStorage.dll", + "framework/System.IO.IsolatedStorage.pdb", + "framework/System.IO.MemoryMappedFiles.dll", + "framework/System.IO.MemoryMappedFiles.pdb", + "framework/System.IO.Pipes.AccessControl.dll", + "framework/System.IO.Pipes.AccessControl.pdb", + "framework/System.IO.Pipes.dll", + "framework/System.IO.Pipes.pdb", + "framework/System.IO.UnmanagedMemoryStream.dll", + "framework/System.IO.UnmanagedMemoryStream.pdb", + "framework/System.IO.dll", + "framework/System.IO.pdb", + "framework/System.Linq.Expressions.dll", + "framework/System.Linq.Expressions.pdb", + "framework/System.Linq.Parallel.dll", + "framework/System.Linq.Parallel.pdb", + "framework/System.Linq.Queryable.dll", + "framework/System.Linq.Queryable.pdb", + "framework/System.Linq.dll", + "framework/System.Linq.pdb", + "framework/System.Memory.dll", + "framework/System.Memory.pdb", + "framework/System.Net.Http.Json.dll", + "framework/System.Net.Http.Json.pdb", + "framework/System.Net.Http.dll", + "framework/System.Net.Http.pdb", + "framework/System.Net.HttpListener.dll", + "framework/System.Net.HttpListener.pdb", + "framework/System.Net.Mail.dll", + "framework/System.Net.Mail.pdb", + "framework/System.Net.NameResolution.dll", + "framework/System.Net.NameResolution.pdb", + "framework/System.Net.NetworkInformation.dll", + "framework/System.Net.NetworkInformation.pdb", + "framework/System.Net.Ping.dll", + "framework/System.Net.Ping.pdb", + "framework/System.Net.Primitives.dll", + "framework/System.Net.Primitives.pdb", + "framework/System.Net.Quic.dll", + "framework/System.Net.Quic.pdb", + "framework/System.Net.Requests.dll", + "framework/System.Net.Requests.pdb", + "framework/System.Net.Security.dll", + "framework/System.Net.Security.pdb", + "framework/System.Net.ServicePoint.dll", + "framework/System.Net.ServicePoint.pdb", + "framework/System.Net.Sockets.dll", + "framework/System.Net.Sockets.pdb", + "framework/System.Net.WebClient.dll", + "framework/System.Net.WebClient.pdb", + "framework/System.Net.WebHeaderCollection.dll", + "framework/System.Net.WebHeaderCollection.pdb", + "framework/System.Net.WebProxy.dll", + "framework/System.Net.WebProxy.pdb", + "framework/System.Net.WebSockets.Client.dll", + "framework/System.Net.WebSockets.Client.pdb", + "framework/System.Net.WebSockets.dll", + "framework/System.Net.WebSockets.pdb", + "framework/System.Net.dll", + "framework/System.Net.pdb", + "framework/System.Numerics.Vectors.dll", + "framework/System.Numerics.Vectors.pdb", + "framework/System.Numerics.dll", + "framework/System.Numerics.pdb", + "framework/System.ObjectModel.dll", + "framework/System.ObjectModel.pdb", + "framework/System.Private.DataContractSerialization.dll", + "framework/System.Private.DataContractSerialization.pdb", + "framework/System.Private.Uri.dll", + "framework/System.Private.Uri.pdb", + "framework/System.Private.Xml.Linq.dll", + "framework/System.Private.Xml.Linq.pdb", + "framework/System.Private.Xml.dll", + "framework/System.Private.Xml.pdb", + "framework/System.Reflection.DispatchProxy.dll", + "framework/System.Reflection.DispatchProxy.pdb", + "framework/System.Reflection.Emit.ILGeneration.dll", + "framework/System.Reflection.Emit.ILGeneration.pdb", + "framework/System.Reflection.Emit.Lightweight.dll", + "framework/System.Reflection.Emit.Lightweight.pdb", + "framework/System.Reflection.Emit.dll", + "framework/System.Reflection.Emit.pdb", + "framework/System.Reflection.Extensions.dll", + "framework/System.Reflection.Extensions.pdb", + "framework/System.Reflection.Metadata.dll", + "framework/System.Reflection.Metadata.pdb", + "framework/System.Reflection.Primitives.dll", + "framework/System.Reflection.Primitives.pdb", + "framework/System.Reflection.TypeExtensions.dll", + "framework/System.Reflection.TypeExtensions.pdb", + "framework/System.Reflection.dll", + "framework/System.Reflection.pdb", + "framework/System.Resources.Reader.dll", + "framework/System.Resources.Reader.pdb", + "framework/System.Resources.ResourceManager.dll", + "framework/System.Resources.ResourceManager.pdb", + "framework/System.Resources.Writer.dll", + "framework/System.Resources.Writer.pdb", + "framework/System.Runtime.CompilerServices.Unsafe.dll", + "framework/System.Runtime.CompilerServices.Unsafe.pdb", + "framework/System.Runtime.CompilerServices.VisualC.dll", + "framework/System.Runtime.CompilerServices.VisualC.pdb", + "framework/System.Runtime.Extensions.dll", + "framework/System.Runtime.Extensions.pdb", + "framework/System.Runtime.Handles.dll", + "framework/System.Runtime.Handles.pdb", + "framework/System.Runtime.InteropServices.JavaScript.dll", + "framework/System.Runtime.InteropServices.JavaScript.pdb", + "framework/System.Runtime.InteropServices.RuntimeInformation.dll", + "framework/System.Runtime.InteropServices.RuntimeInformation.pdb", + "framework/System.Runtime.InteropServices.dll", + "framework/System.Runtime.InteropServices.pdb", + "framework/System.Runtime.Intrinsics.dll", + "framework/System.Runtime.Intrinsics.pdb", + "framework/System.Runtime.Loader.dll", + "framework/System.Runtime.Loader.pdb", + "framework/System.Runtime.Numerics.dll", + "framework/System.Runtime.Numerics.pdb", + "framework/System.Runtime.Serialization.Formatters.dll", + "framework/System.Runtime.Serialization.Formatters.pdb", + "framework/System.Runtime.Serialization.Json.dll", + "framework/System.Runtime.Serialization.Json.pdb", + "framework/System.Runtime.Serialization.Primitives.dll", + "framework/System.Runtime.Serialization.Primitives.pdb", + "framework/System.Runtime.Serialization.Xml.dll", + "framework/System.Runtime.Serialization.Xml.pdb", + "framework/System.Runtime.Serialization.dll", + "framework/System.Runtime.Serialization.pdb", + "framework/System.Runtime.dll", + "framework/System.Runtime.pdb", + "framework/System.Security.AccessControl.dll", + "framework/System.Security.AccessControl.pdb", + "framework/System.Security.Claims.dll", + "framework/System.Security.Claims.pdb", + "framework/System.Security.Cryptography.Algorithms.dll", + "framework/System.Security.Cryptography.Algorithms.pdb", + "framework/System.Security.Cryptography.Cng.dll", + "framework/System.Security.Cryptography.Cng.pdb", + "framework/System.Security.Cryptography.Csp.dll", + "framework/System.Security.Cryptography.Csp.pdb", + "framework/System.Security.Cryptography.Encoding.dll", + "framework/System.Security.Cryptography.Encoding.pdb", + "framework/System.Security.Cryptography.OpenSsl.dll", + "framework/System.Security.Cryptography.OpenSsl.pdb", + "framework/System.Security.Cryptography.Primitives.dll", + "framework/System.Security.Cryptography.Primitives.pdb", + "framework/System.Security.Cryptography.X509Certificates.dll", + "framework/System.Security.Cryptography.X509Certificates.pdb", + "framework/System.Security.Cryptography.dll", + "framework/System.Security.Cryptography.pdb", + "framework/System.Security.Principal.Windows.dll", + "framework/System.Security.Principal.Windows.pdb", + "framework/System.Security.Principal.dll", + "framework/System.Security.Principal.pdb", + "framework/System.Security.SecureString.dll", + "framework/System.Security.SecureString.pdb", + "framework/System.Security.dll", + "framework/System.Security.pdb", + "framework/System.ServiceModel.Web.dll", + "framework/System.ServiceModel.Web.pdb", + "framework/System.ServiceProcess.dll", + "framework/System.ServiceProcess.pdb", + "framework/System.Text.Encoding.CodePages.dll", + "framework/System.Text.Encoding.CodePages.pdb", + "framework/System.Text.Encoding.Extensions.dll", + "framework/System.Text.Encoding.Extensions.pdb", + "framework/System.Text.Encoding.dll", + "framework/System.Text.Encoding.pdb", + "framework/System.Text.Encodings.Web.dll", + "framework/System.Text.Encodings.Web.pdb", + "framework/System.Text.Json.dll", + "framework/System.Text.Json.pdb", + "framework/System.Text.RegularExpressions.dll", + "framework/System.Text.RegularExpressions.pdb", + "framework/System.Threading.Channels.dll", + "framework/System.Threading.Channels.pdb", + "framework/System.Threading.Overlapped.dll", + "framework/System.Threading.Overlapped.pdb", + "framework/System.Threading.Tasks.Dataflow.dll", + "framework/System.Threading.Tasks.Dataflow.pdb", + "framework/System.Threading.Tasks.Extensions.dll", + "framework/System.Threading.Tasks.Extensions.pdb", + "framework/System.Threading.Tasks.Parallel.dll", + "framework/System.Threading.Tasks.Parallel.pdb", + "framework/System.Threading.Tasks.dll", + "framework/System.Threading.Tasks.pdb", + "framework/System.Threading.Thread.dll", + "framework/System.Threading.Thread.pdb", + "framework/System.Threading.ThreadPool.dll", + "framework/System.Threading.ThreadPool.pdb", + "framework/System.Threading.Timer.dll", + "framework/System.Threading.Timer.pdb", + "framework/System.Threading.dll", + "framework/System.Threading.pdb", + "framework/System.Transactions.Local.dll", + "framework/System.Transactions.Local.pdb", + "framework/System.Transactions.dll", + "framework/System.Transactions.pdb", + "framework/System.ValueTuple.dll", + "framework/System.ValueTuple.pdb", + "framework/System.Web.HttpUtility.dll", + "framework/System.Web.HttpUtility.pdb", + "framework/System.Web.dll", + "framework/System.Web.pdb", + "framework/System.Windows.dll", + "framework/System.Windows.pdb", + "framework/System.Xml.Linq.dll", + "framework/System.Xml.Linq.pdb", + "framework/System.Xml.ReaderWriter.dll", + "framework/System.Xml.ReaderWriter.pdb", + "framework/System.Xml.Serialization.dll", + "framework/System.Xml.Serialization.pdb", + "framework/System.Xml.XDocument.dll", + "framework/System.Xml.XDocument.pdb", + "framework/System.Xml.XPath.XDocument.dll", + "framework/System.Xml.XPath.XDocument.pdb", + "framework/System.Xml.XPath.dll", + "framework/System.Xml.XPath.pdb", + "framework/System.Xml.XmlDocument.dll", + "framework/System.Xml.XmlDocument.pdb", + "framework/System.Xml.XmlSerializer.dll", + "framework/System.Xml.XmlSerializer.pdb", + "framework/System.Xml.dll", + "framework/System.Xml.pdb", + "framework/System.dll", + "framework/System.pdb", + "framework/WindowsBase.dll", + "framework/WindowsBase.pdb", + "framework/mscorlib.dll", + "framework/mscorlib.pdb", + "framework/msquic.dll", + "framework/msquic.pdb", + "framework/netstandard.dll", + "framework/netstandard.pdb", + "mibc/DotNet_Adhoc.mibc", + "mibc/DotNet_FSharp.mibc", + "mibc/DotNet_FirstTimeXP.mibc", + "mibc/DotNet_HelloWorld.mibc", + "mibc/DotNet_OrchardCore.mibc", + "mibc/DotNet_TechEmpower.mibc", + "runtime.win-x64.microsoft.dotnet.ilcompiler.8.0.0.nupkg.sha512", + "runtime.win-x64.microsoft.dotnet.ilcompiler.nuspec", + "sdk/Runtime.ServerGC.GuardCF.lib", + "sdk/Runtime.ServerGC.GuardCF.pdb", + "sdk/Runtime.ServerGC.lib", + "sdk/Runtime.ServerGC.pdb", + "sdk/Runtime.VxsortDisabled.lib", + "sdk/Runtime.VxsortDisabled.pdb", + "sdk/Runtime.VxsortEnabled.GuardCF.lib", + "sdk/Runtime.VxsortEnabled.GuardCF.pdb", + "sdk/Runtime.VxsortEnabled.lib", + "sdk/Runtime.VxsortEnabled.pdb", + "sdk/Runtime.WorkstationGC.lib", + "sdk/Runtime.WorkstationGC.pdb", + "sdk/System.Globalization.Native.Aot.GuardCF.lib", + "sdk/System.Globalization.Native.Aot.GuardCF.pdb", + "sdk/System.Globalization.Native.Aot.lib", + "sdk/System.Globalization.Native.Aot.pdb", + "sdk/System.IO.Compression.Native.Aot.GuardCF.lib", + "sdk/System.IO.Compression.Native.Aot.GuardCF.pdb", + "sdk/System.IO.Compression.Native.Aot.lib", + "sdk/System.IO.Compression.Native.Aot.pdb", + "sdk/System.Private.CoreLib.dll", + "sdk/System.Private.CoreLib.pdb", + "sdk/System.Private.CoreLib.xml", + "sdk/System.Private.DisabledReflection.dll", + "sdk/System.Private.DisabledReflection.pdb", + "sdk/System.Private.DisabledReflection.xml", + "sdk/System.Private.Reflection.Execution.dll", + "sdk/System.Private.Reflection.Execution.pdb", + "sdk/System.Private.Reflection.Execution.xml", + "sdk/System.Private.StackTraceMetadata.dll", + "sdk/System.Private.StackTraceMetadata.pdb", + "sdk/System.Private.StackTraceMetadata.xml", + "sdk/System.Private.TypeLoader.dll", + "sdk/System.Private.TypeLoader.pdb", + "sdk/System.Private.TypeLoader.xml", + "sdk/bootstrapper.GuardCF.obj", + "sdk/bootstrapper.GuardCF.pdb", + "sdk/bootstrapper.obj", + "sdk/bootstrapper.pdb", + "sdk/bootstrapperdll.GuardCF.obj", + "sdk/bootstrapperdll.GuardCF.pdb", + "sdk/bootstrapperdll.obj", + "sdk/bootstrapperdll.pdb", + "sdk/eventpipe-disabled.GuardCF.lib", + "sdk/eventpipe-disabled.GuardCF.pdb", + "sdk/eventpipe-disabled.lib", + "sdk/eventpipe-disabled.pdb", + "sdk/eventpipe-enabled.lib", + "sdk/eventpipe-enabled.pdb", + "tools/ILCompiler.Compiler.pdb", + "tools/ILCompiler.DependencyAnalysisFramework.pdb", + "tools/ILCompiler.MetadataTransform.pdb", + "tools/ILCompiler.RyuJit.pdb", + "tools/ILCompiler.TypeSystem.pdb", + "tools/clrjit_universal_arm64_x64.dll", + "tools/clrjit_universal_arm_x64.dll", + "tools/clrjit_unix_x64_x64.dll", + "tools/clrjit_win_x64_x64.dll", + "tools/clrjit_win_x86_x64.dll", + "tools/ilc.exe", + "tools/ilc.pdb", + "tools/jitinterface_x64.dll", + "tools/netstandard/ILCompiler.Build.Tasks.deps.json", + "tools/netstandard/ILCompiler.Build.Tasks.dll", + "tools/netstandard/ILCompiler.Build.Tasks.pdb", + "tools/objwriter.dll" + ] + }, + "System.Resources.Extensions/8.0.0": { + "sha512": "psnQ6GRQOvt+evda5C4nD5EuV49mz2Tv0DD2JDVDEbE/TKoMukxSkGJcsBJ0pajpPuFRr67syFYlkJ4Wj6A5Zw==", + "type": "package", + "path": "system.resources.extensions/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Resources.Extensions.targets", + "buildTransitive/net462/System.Resources.Extensions.targets", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Resources.Extensions.targets", + "lib/net462/System.Resources.Extensions.dll", + "lib/net462/System.Resources.Extensions.xml", + "lib/net6.0/System.Resources.Extensions.dll", + "lib/net6.0/System.Resources.Extensions.xml", + "lib/net7.0/System.Resources.Extensions.dll", + "lib/net7.0/System.Resources.Extensions.xml", + "lib/net8.0/System.Resources.Extensions.dll", + "lib/net8.0/System.Resources.Extensions.xml", + "lib/netstandard2.0/System.Resources.Extensions.dll", + "lib/netstandard2.0/System.Resources.Extensions.xml", + "system.resources.extensions.8.0.0.nupkg.sha512", + "system.resources.extensions.nuspec", + "useSharedDesignerContext.txt" + ] + } + }, + "projectFileDependencyGroups": { + "net8.0": [ + "GtkSharp >= 3.24.24.95", + "Microsoft.DotNet.ILCompiler >= 8.0.0", + "Microsoft.NET.ILLink.Tasks >= 8.0.0", + "System.Resources.Extensions >= 8.0.0" + ] + }, + "packageFolders": { + "C:\\Users\\chj\\.nuget\\packages\\": {}, + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {}, + "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder": {} + }, + "project": { + "version": "1.3.24.6", + "restore": { + "projectUniqueName": "F:\\我的项目\\GTK\\gtksystem-windows-forms\\Source\\GTKSystem.Windows.Forms\\GTKSystem.Windows.Forms.csproj", + "projectName": "GTKSystem.Windows.Forms", + "projectPath": "F:\\我的项目\\GTK\\gtksystem-windows-forms\\Source\\GTKSystem.Windows.Forms\\GTKSystem.Windows.Forms.csproj", + "packagesPath": "C:\\Users\\chj\\.nuget\\packages\\", + "outputPath": "F:\\我的项目\\GTK\\gtksystem-windows-forms\\Source\\GTKSystem.Windows.Forms\\obj\\publish\\win-x64\\", + "projectStyle": "PackageReference", + "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages", + "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder" + ], + "configFilePaths": [ + "C:\\Users\\chj\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net8.0" + ], + "sources": { + "C:\\Users\\chj\\.nuget\\packages": {}, + "https://api.nuget.org/v3/index.json": {}, + "https://www.nuget.org/api/v2/": {} + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + } + }, + "frameworks": { + "net8.0": { + "targetAlias": "net8.0", + "dependencies": { + "GtkSharp": { + "target": "Package", + "version": "[3.24.24.95, )" + }, + "Microsoft.DotNet.ILCompiler": { + "suppressParent": "All", + "target": "Package", + "version": "[8.0.0, )", + "autoReferenced": true + }, + "Microsoft.NET.ILLink.Tasks": { + "suppressParent": "All", + "target": "Package", + "version": "[8.0.0, )", + "autoReferenced": true + }, + "System.Resources.Extensions": { + "target": "Package", + "version": "[8.0.0, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "downloadDependencies": [ + { + "name": "runtime.win-x64.Microsoft.DotNet.ILCompiler", + "version": "[8.0.0, 8.0.0]" + } + ], + "frameworkReferences": { + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.100/PortableRuntimeIdentifierGraph.json" + } + }, + "runtimes": { + "win-x64": { + "#import": [] + } + } + } +} \ No newline at end of file diff --git a/Source/GTKSystem.Windows.Forms/obj/publish/win-x64/project.nuget.cache b/Source/GTKSystem.Windows.Forms/obj/publish/win-x64/project.nuget.cache new file mode 100644 index 0000000000000000000000000000000000000000..6b4ad6adc7a08da1189acd6c15d324762ef61462 --- /dev/null +++ b/Source/GTKSystem.Windows.Forms/obj/publish/win-x64/project.nuget.cache @@ -0,0 +1,21 @@ +{ + "version": 2, + "dgSpecHash": "6gTN6aOqw0G/0GNd5TAT+xaatCrld3I/UfK3VacjrQFUZWz1NgK4QaiJLocfoSFJUOrFJTqQj6YPUQ0ah2PWuA==", + "success": true, + "projectFilePath": "F:\\我的项目\\GTK\\gtksystem-windows-forms\\Source\\GTKSystem.Windows.Forms\\GTKSystem.Windows.Forms.csproj", + "expectedPackageFiles": [ + "C:\\Users\\chj\\.nuget\\packages\\atksharp\\3.24.24.95\\atksharp.3.24.24.95.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\cairosharp\\3.24.24.95\\cairosharp.3.24.24.95.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\gdksharp\\3.24.24.95\\gdksharp.3.24.24.95.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\giosharp\\3.24.24.95\\giosharp.3.24.24.95.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\glibsharp\\3.24.24.95\\glibsharp.3.24.24.95.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\gtksharp\\3.24.24.95\\gtksharp.3.24.24.95.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\microsoft.dotnet.ilcompiler\\8.0.0\\microsoft.dotnet.ilcompiler.8.0.0.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\microsoft.net.illink.tasks\\8.0.0\\microsoft.net.illink.tasks.8.0.0.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\pangosharp\\3.24.24.95\\pangosharp.3.24.24.95.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\runtime.win-x64.microsoft.dotnet.ilcompiler\\8.0.0\\runtime.win-x64.microsoft.dotnet.ilcompiler.8.0.0.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\system.resources.extensions\\8.0.0\\system.resources.extensions.8.0.0.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\runtime.win-x64.microsoft.dotnet.ilcompiler\\8.0.0\\runtime.win-x64.microsoft.dotnet.ilcompiler.8.0.0.nupkg.sha512" + ], + "logs": [] +} \ No newline at end of file diff --git a/Source/System.Resources.Extensions/Properties/PublishProfiles/FolderProfile.pubxml b/Source/System.Resources.Extensions/Properties/PublishProfiles/FolderProfile.pubxml index c3df1f73f7b594e85be43dec0da2fbff3184b117..b6bf97bf2f1171865e1a336dcf0a65e63583ec15 100644 --- a/Source/System.Resources.Extensions/Properties/PublishProfiles/FolderProfile.pubxml +++ b/Source/System.Resources.Extensions/Properties/PublishProfiles/FolderProfile.pubxml @@ -6,8 +6,10 @@ https://go.microsoft.com/fwlink/?LinkID=208121. Release Any CPU - bin\Release\netcoreapp3.1\publish\ + F:\我的项目\GTK\gtksystem-windows-forms\Libs FileSystem <_TargetId>Folder + net8.0 + false \ No newline at end of file diff --git a/Source/System.Resources.Extensions/System.Resources.Extensions.csproj b/Source/System.Resources.Extensions/System.Resources.Extensions.csproj index 2f0ccbd7abdf8cd5cf26d3745e29f6431dda11f6..e47f3ab92570652514265bd7e6def93981452d75 100644 --- a/Source/System.Resources.Extensions/System.Resources.Extensions.csproj +++ b/Source/System.Resources.Extensions/System.Resources.Extensions.csproj @@ -1,6 +1,6 @@  - netcoreapp3.1 + net6.0 True diff --git a/Source/System.Resources.Extensions/bin/Debug/System.Resources.Extensions.1.0.0.nupkg b/Source/System.Resources.Extensions/bin/Debug/System.Resources.Extensions.1.0.0.nupkg index 7a2c6441afb29591ad27625ec089f194329fb01f..d4a597db086d4643de4ad219b43ba0c3463afa21 100644 Binary files a/Source/System.Resources.Extensions/bin/Debug/System.Resources.Extensions.1.0.0.nupkg and b/Source/System.Resources.Extensions/bin/Debug/System.Resources.Extensions.1.0.0.nupkg differ diff --git a/Source/System.Resources.Extensions/bin/Debug/netcoreapp3.1/System.Resources.Extensions.deps.json b/Source/System.Resources.Extensions/bin/Debug/net6.0/System.Resources.Extensions.deps.json similarity index 83% rename from Source/System.Resources.Extensions/bin/Debug/netcoreapp3.1/System.Resources.Extensions.deps.json rename to Source/System.Resources.Extensions/bin/Debug/net6.0/System.Resources.Extensions.deps.json index 46f42fed53d7456b1ba24c542cfd0a80eab3557b..c5929874ee4b34b65a656e03e970ed02817cf470 100644 --- a/Source/System.Resources.Extensions/bin/Debug/netcoreapp3.1/System.Resources.Extensions.deps.json +++ b/Source/System.Resources.Extensions/bin/Debug/net6.0/System.Resources.Extensions.deps.json @@ -1,11 +1,11 @@ { "runtimeTarget": { - "name": ".NETCoreApp,Version=v3.1", + "name": ".NETCoreApp,Version=v6.0", "signature": "" }, "compilationOptions": {}, "targets": { - ".NETCoreApp,Version=v3.1": { + ".NETCoreApp,Version=v6.0": { "System.Resources.Extensions/1.0.0": { "runtime": { "System.Resources.Extensions.dll": {} diff --git a/Source/System.Resources.Extensions/bin/Debug/net6.0/System.Resources.Extensions.dll b/Source/System.Resources.Extensions/bin/Debug/net6.0/System.Resources.Extensions.dll new file mode 100644 index 0000000000000000000000000000000000000000..1138f9421f9dbfaad30c76b1ab25658f5046322c Binary files /dev/null and b/Source/System.Resources.Extensions/bin/Debug/net6.0/System.Resources.Extensions.dll differ diff --git a/Source/System.Resources.Extensions/bin/Debug/net6.0/System.Resources.Extensions.pdb b/Source/System.Resources.Extensions/bin/Debug/net6.0/System.Resources.Extensions.pdb new file mode 100644 index 0000000000000000000000000000000000000000..8b73926a71564a1acae627e1c49d7bf7a0c97a14 Binary files /dev/null and b/Source/System.Resources.Extensions/bin/Debug/net6.0/System.Resources.Extensions.pdb differ diff --git a/Source/System.Resources.Extensions/bin/Debug/netcoreapp3.1/System.Resources.Extensions.dll b/Source/System.Resources.Extensions/bin/Debug/netcoreapp3.1/System.Resources.Extensions.dll deleted file mode 100644 index bff4b05b72120643b9686d9daf8746114e38d1f6..0000000000000000000000000000000000000000 Binary files a/Source/System.Resources.Extensions/bin/Debug/netcoreapp3.1/System.Resources.Extensions.dll and /dev/null differ diff --git a/Source/System.Resources.Extensions/bin/Debug/netcoreapp3.1/System.Resources.Extensions.pdb b/Source/System.Resources.Extensions/bin/Debug/netcoreapp3.1/System.Resources.Extensions.pdb deleted file mode 100644 index 50292ba86af16938e826884ce348362237135879..0000000000000000000000000000000000000000 Binary files a/Source/System.Resources.Extensions/bin/Debug/netcoreapp3.1/System.Resources.Extensions.pdb and /dev/null differ diff --git a/Source/System.Resources.Extensions/bin/Release/netcoreapp3.1/System.Resources.Extensions.deps.json b/Source/System.Resources.Extensions/bin/Release/netcoreapp3.1/System.Resources.Extensions.deps.json deleted file mode 100644 index 46f42fed53d7456b1ba24c542cfd0a80eab3557b..0000000000000000000000000000000000000000 --- a/Source/System.Resources.Extensions/bin/Release/netcoreapp3.1/System.Resources.Extensions.deps.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "runtimeTarget": { - "name": ".NETCoreApp,Version=v3.1", - "signature": "" - }, - "compilationOptions": {}, - "targets": { - ".NETCoreApp,Version=v3.1": { - "System.Resources.Extensions/1.0.0": { - "runtime": { - "System.Resources.Extensions.dll": {} - } - } - } - }, - "libraries": { - "System.Resources.Extensions/1.0.0": { - "type": "project", - "serviceable": false, - "sha512": "" - } - } -} \ No newline at end of file diff --git a/Source/System.Resources.Extensions/bin/Release/netcoreapp3.1/System.Resources.Extensions.dll b/Source/System.Resources.Extensions/bin/Release/netcoreapp3.1/System.Resources.Extensions.dll deleted file mode 100644 index b299d9d0ff10ca1c11a4e565a9d8594f58fa941c..0000000000000000000000000000000000000000 Binary files a/Source/System.Resources.Extensions/bin/Release/netcoreapp3.1/System.Resources.Extensions.dll and /dev/null differ diff --git a/Source/System.Resources.Extensions/bin/Release/netcoreapp3.1/System.Resources.Extensions.pdb b/Source/System.Resources.Extensions/bin/Release/netcoreapp3.1/System.Resources.Extensions.pdb deleted file mode 100644 index c41fe38fe5e278a51f6138b191f791ccf3d0acf6..0000000000000000000000000000000000000000 Binary files a/Source/System.Resources.Extensions/bin/Release/netcoreapp3.1/System.Resources.Extensions.pdb and /dev/null differ diff --git a/Source/System.Resources.Extensions/bin/Release/netcoreapp3.1/publish/System.Resources.Extensions.1.0.0.nupkg b/Source/System.Resources.Extensions/bin/Release/netcoreapp3.1/publish/System.Resources.Extensions.1.0.0.nupkg deleted file mode 100644 index 3e17304efe8e420071659a91755d3e1969cea710..0000000000000000000000000000000000000000 Binary files a/Source/System.Resources.Extensions/bin/Release/netcoreapp3.1/publish/System.Resources.Extensions.1.0.0.nupkg and /dev/null differ diff --git a/Source/System.Resources.Extensions/obj/Debug/System.Resources.Extensions.1.0.0.nuspec b/Source/System.Resources.Extensions/obj/Debug/System.Resources.Extensions.1.0.0.nuspec index 0d7cc9b3f2b1b1add9bdfd29766de05e4ec8e999..69f42bad449506b32fb6c5e904a523dd4fa541c7 100644 --- a/Source/System.Resources.Extensions/obj/Debug/System.Resources.Extensions.1.0.0.nuspec +++ b/Source/System.Resources.Extensions/obj/Debug/System.Resources.Extensions.1.0.0.nuspec @@ -4,15 +4,13 @@ System.Resources.Extensions 1.0.0 System.Resources.Extensions - false Package Description + - - - + - + \ No newline at end of file diff --git a/Source/System.Resources.Extensions/obj/Debug/netcoreapp3.1/System.Resources.Extensions.AssemblyInfo.cs b/Source/System.Resources.Extensions/obj/Debug/net6.0/System.Resources.Extensions.AssemblyInfo.cs similarity index 100% rename from Source/System.Resources.Extensions/obj/Debug/netcoreapp3.1/System.Resources.Extensions.AssemblyInfo.cs rename to Source/System.Resources.Extensions/obj/Debug/net6.0/System.Resources.Extensions.AssemblyInfo.cs diff --git a/Source/System.Resources.Extensions/obj/Debug/net6.0/System.Resources.Extensions.AssemblyInfoInputs.cache b/Source/System.Resources.Extensions/obj/Debug/net6.0/System.Resources.Extensions.AssemblyInfoInputs.cache new file mode 100644 index 0000000000000000000000000000000000000000..39b1eb9631f32b474585438ba831452810c8d1a0 --- /dev/null +++ b/Source/System.Resources.Extensions/obj/Debug/net6.0/System.Resources.Extensions.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +4bc17e9422fb8668a7931f485e44ab0157c9d9245fc4416584a7160b808e5456 diff --git a/Source/System.Resources.Extensions/obj/Debug/net6.0/System.Resources.Extensions.GeneratedMSBuildEditorConfig.editorconfig b/Source/System.Resources.Extensions/obj/Debug/net6.0/System.Resources.Extensions.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000000000000000000000000000000000000..44fcaec1d4f2451769deadf690ef643525147716 --- /dev/null +++ b/Source/System.Resources.Extensions/obj/Debug/net6.0/System.Resources.Extensions.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,13 @@ +is_global = true +build_property.TargetFramework = net6.0 +build_property.TargetPlatformMinVersion = +build_property.UsingMicrosoftNETSdkWeb = +build_property.ProjectTypeGuids = +build_property.InvariantGlobalization = +build_property.PlatformNeutralAssembly = +build_property.EnforceExtendedAnalyzerRules = +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property.RootNamespace = System.Resources.Extensions +build_property.ProjectDir = F:\我的项目\GTK\gtksystem-windows-forms\Source\System.Resources.Extensions\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = diff --git a/Source/System.Resources.Extensions/obj/Debug/net6.0/System.Resources.Extensions.assets.cache b/Source/System.Resources.Extensions/obj/Debug/net6.0/System.Resources.Extensions.assets.cache new file mode 100644 index 0000000000000000000000000000000000000000..2dbbac9f23086fbb6d1b5212751b14852a4b9945 Binary files /dev/null and b/Source/System.Resources.Extensions/obj/Debug/net6.0/System.Resources.Extensions.assets.cache differ diff --git a/Source/System.Resources.Extensions/obj/Debug/net6.0/System.Resources.Extensions.csproj.CoreCompileInputs.cache b/Source/System.Resources.Extensions/obj/Debug/net6.0/System.Resources.Extensions.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000000000000000000000000000000000000..3943b0c7bdb791294d3a90b341e327813cb06556 --- /dev/null +++ b/Source/System.Resources.Extensions/obj/Debug/net6.0/System.Resources.Extensions.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +220958163d328124cebdd6efbf8733394d135914345ceb262e2d6455969e9947 diff --git a/Source/System.Resources.Extensions/obj/Debug/net6.0/System.Resources.Extensions.csproj.FileListAbsolute.txt b/Source/System.Resources.Extensions/obj/Debug/net6.0/System.Resources.Extensions.csproj.FileListAbsolute.txt new file mode 100644 index 0000000000000000000000000000000000000000..79fac22dcabb14e24795ab835719e220c35bfeb4 --- /dev/null +++ b/Source/System.Resources.Extensions/obj/Debug/net6.0/System.Resources.Extensions.csproj.FileListAbsolute.txt @@ -0,0 +1,11 @@ +F:\我的项目\GTK\gtksystem-windows-forms\Source\System.Resources.Extensions\bin\Debug\net6.0\System.Resources.Extensions.deps.json +F:\我的项目\GTK\gtksystem-windows-forms\Source\System.Resources.Extensions\bin\Debug\net6.0\System.Resources.Extensions.dll +F:\我的项目\GTK\gtksystem-windows-forms\Source\System.Resources.Extensions\bin\Debug\net6.0\System.Resources.Extensions.pdb +F:\我的项目\GTK\gtksystem-windows-forms\Source\System.Resources.Extensions\obj\Debug\net6.0\System.Resources.Extensions.GeneratedMSBuildEditorConfig.editorconfig +F:\我的项目\GTK\gtksystem-windows-forms\Source\System.Resources.Extensions\obj\Debug\net6.0\System.Resources.Extensions.AssemblyInfoInputs.cache +F:\我的项目\GTK\gtksystem-windows-forms\Source\System.Resources.Extensions\obj\Debug\net6.0\System.Resources.Extensions.AssemblyInfo.cs +F:\我的项目\GTK\gtksystem-windows-forms\Source\System.Resources.Extensions\obj\Debug\net6.0\System.Resources.Extensions.csproj.CoreCompileInputs.cache +F:\我的项目\GTK\gtksystem-windows-forms\Source\System.Resources.Extensions\obj\Debug\net6.0\System.Resources.Extensions.dll +F:\我的项目\GTK\gtksystem-windows-forms\Source\System.Resources.Extensions\obj\Debug\net6.0\refint\System.Resources.Extensions.dll +F:\我的项目\GTK\gtksystem-windows-forms\Source\System.Resources.Extensions\obj\Debug\net6.0\System.Resources.Extensions.pdb +F:\我的项目\GTK\gtksystem-windows-forms\Source\System.Resources.Extensions\obj\Debug\net6.0\ref\System.Resources.Extensions.dll diff --git a/Source/System.Resources.Extensions/obj/Debug/net6.0/System.Resources.Extensions.dll b/Source/System.Resources.Extensions/obj/Debug/net6.0/System.Resources.Extensions.dll new file mode 100644 index 0000000000000000000000000000000000000000..1138f9421f9dbfaad30c76b1ab25658f5046322c Binary files /dev/null and b/Source/System.Resources.Extensions/obj/Debug/net6.0/System.Resources.Extensions.dll differ diff --git a/Source/System.Resources.Extensions/obj/Debug/net6.0/System.Resources.Extensions.pdb b/Source/System.Resources.Extensions/obj/Debug/net6.0/System.Resources.Extensions.pdb new file mode 100644 index 0000000000000000000000000000000000000000..8b73926a71564a1acae627e1c49d7bf7a0c97a14 Binary files /dev/null and b/Source/System.Resources.Extensions/obj/Debug/net6.0/System.Resources.Extensions.pdb differ diff --git a/Source/System.Resources.Extensions/obj/Debug/net6.0/ref/System.Resources.Extensions.dll b/Source/System.Resources.Extensions/obj/Debug/net6.0/ref/System.Resources.Extensions.dll new file mode 100644 index 0000000000000000000000000000000000000000..4fb873add4d200a86fb0a60686d792bea1a76e4f Binary files /dev/null and b/Source/System.Resources.Extensions/obj/Debug/net6.0/ref/System.Resources.Extensions.dll differ diff --git a/Source/System.Resources.Extensions/obj/Debug/net6.0/refint/System.Resources.Extensions.dll b/Source/System.Resources.Extensions/obj/Debug/net6.0/refint/System.Resources.Extensions.dll new file mode 100644 index 0000000000000000000000000000000000000000..4fb873add4d200a86fb0a60686d792bea1a76e4f Binary files /dev/null and b/Source/System.Resources.Extensions/obj/Debug/net6.0/refint/System.Resources.Extensions.dll differ diff --git a/Source/GTKSystem.Windows.Forms/obj/Debug/net5.0/System.Windows.Forms.AssemblyInfo.cs b/Source/System.Resources.Extensions/obj/Debug/net8.0/System.Resources.Extensions.AssemblyInfo.cs similarity index 59% rename from Source/GTKSystem.Windows.Forms/obj/Debug/net5.0/System.Windows.Forms.AssemblyInfo.cs rename to Source/System.Resources.Extensions/obj/Debug/net8.0/System.Resources.Extensions.AssemblyInfo.cs index 01f82076dc8fa6d69b6eca203e9b307b523fb742..115e7c9c9833f6ddb6b2a36fdf963bfff21cd9e7 100644 --- a/Source/GTKSystem.Windows.Forms/obj/Debug/net5.0/System.Windows.Forms.AssemblyInfo.cs +++ b/Source/System.Resources.Extensions/obj/Debug/net8.0/System.Resources.Extensions.AssemblyInfo.cs @@ -11,13 +11,13 @@ using System; using System.Reflection; -[assembly: System.Reflection.AssemblyCompanyAttribute("System.Windows.Forms")] +[assembly: System.Reflection.AssemblyCompanyAttribute("System.Resources.Extensions")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] -[assembly: System.Reflection.AssemblyFileVersionAttribute("4.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("4.0.0")] -[assembly: System.Reflection.AssemblyProductAttribute("System.Windows.Forms")] -[assembly: System.Reflection.AssemblyTitleAttribute("System.Windows.Forms")] -[assembly: System.Reflection.AssemblyVersionAttribute("4.0.0.0")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+9889efd2383c8b27bc1fa78c909af9ad8f1ff9bc")] +[assembly: System.Reflection.AssemblyProductAttribute("System.Resources.Extensions")] +[assembly: System.Reflection.AssemblyTitleAttribute("System.Resources.Extensions")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] // 由 MSBuild WriteCodeFragment 类生成。 diff --git a/Source/System.Resources.Extensions/obj/Debug/net8.0/System.Resources.Extensions.AssemblyInfoInputs.cache b/Source/System.Resources.Extensions/obj/Debug/net8.0/System.Resources.Extensions.AssemblyInfoInputs.cache new file mode 100644 index 0000000000000000000000000000000000000000..6b44d9d2e0c0a417885d00080ab0012ff012b0a8 --- /dev/null +++ b/Source/System.Resources.Extensions/obj/Debug/net8.0/System.Resources.Extensions.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +6d51bd1bc10c0ec0ef8dfb2355f9d5a73899ae7799ba2b4223cbef09da337b48 diff --git a/Source/System.Resources.Extensions/obj/Debug/net8.0/System.Resources.Extensions.GeneratedMSBuildEditorConfig.editorconfig b/Source/System.Resources.Extensions/obj/Debug/net8.0/System.Resources.Extensions.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000000000000000000000000000000000000..8f22a3e42899a1a3e11a09efda048da7b294c0fb --- /dev/null +++ b/Source/System.Resources.Extensions/obj/Debug/net8.0/System.Resources.Extensions.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,13 @@ +is_global = true +build_property.TargetFramework = net8.0 +build_property.TargetPlatformMinVersion = +build_property.UsingMicrosoftNETSdkWeb = +build_property.ProjectTypeGuids = +build_property.InvariantGlobalization = +build_property.PlatformNeutralAssembly = +build_property.EnforceExtendedAnalyzerRules = +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property.RootNamespace = System.Resources.Extensions +build_property.ProjectDir = F:\我的项目\GTK\gtksystem-windows-forms\Source\System.Resources.Extensions\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = diff --git a/Source/System.Resources.Extensions/obj/Debug/net8.0/System.Resources.Extensions.assets.cache b/Source/System.Resources.Extensions/obj/Debug/net8.0/System.Resources.Extensions.assets.cache new file mode 100644 index 0000000000000000000000000000000000000000..c1f3b2682b1e561bcd172c78f1fc8e82519ff8e6 Binary files /dev/null and b/Source/System.Resources.Extensions/obj/Debug/net8.0/System.Resources.Extensions.assets.cache differ diff --git a/Source/System.Resources.Extensions/obj/Debug/net8.0/System.Resources.Extensions.csproj.CoreCompileInputs.cache b/Source/System.Resources.Extensions/obj/Debug/net8.0/System.Resources.Extensions.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000000000000000000000000000000000000..00918c1317198dcd7e742f20ee127e5c71206928 --- /dev/null +++ b/Source/System.Resources.Extensions/obj/Debug/net8.0/System.Resources.Extensions.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +0f0b5bf1d525e3a322e5f47d1bea286fead7f902d61a428335a631e5bfc17224 diff --git a/Source/System.Resources.Extensions/obj/Debug/net8.0/System.Resources.Extensions.csproj.FileListAbsolute.txt b/Source/System.Resources.Extensions/obj/Debug/net8.0/System.Resources.Extensions.csproj.FileListAbsolute.txt new file mode 100644 index 0000000000000000000000000000000000000000..9bf074e6563175d15c057587b6dd508f0d099b3f --- /dev/null +++ b/Source/System.Resources.Extensions/obj/Debug/net8.0/System.Resources.Extensions.csproj.FileListAbsolute.txt @@ -0,0 +1,11 @@ +F:\我的项目\GTK\gtksystem-windows-forms\Source\System.Resources.Extensions\bin\Debug\net8.0\System.Resources.Extensions.deps.json +F:\我的项目\GTK\gtksystem-windows-forms\Source\System.Resources.Extensions\bin\Debug\net8.0\System.Resources.Extensions.dll +F:\我的项目\GTK\gtksystem-windows-forms\Source\System.Resources.Extensions\bin\Debug\net8.0\System.Resources.Extensions.pdb +F:\我的项目\GTK\gtksystem-windows-forms\Source\System.Resources.Extensions\obj\Debug\net8.0\System.Resources.Extensions.GeneratedMSBuildEditorConfig.editorconfig +F:\我的项目\GTK\gtksystem-windows-forms\Source\System.Resources.Extensions\obj\Debug\net8.0\System.Resources.Extensions.AssemblyInfoInputs.cache +F:\我的项目\GTK\gtksystem-windows-forms\Source\System.Resources.Extensions\obj\Debug\net8.0\System.Resources.Extensions.AssemblyInfo.cs +F:\我的项目\GTK\gtksystem-windows-forms\Source\System.Resources.Extensions\obj\Debug\net8.0\System.Resources.Extensions.csproj.CoreCompileInputs.cache +F:\我的项目\GTK\gtksystem-windows-forms\Source\System.Resources.Extensions\obj\Debug\net8.0\System.Resources.Extensions.dll +F:\我的项目\GTK\gtksystem-windows-forms\Source\System.Resources.Extensions\obj\Debug\net8.0\refint\System.Resources.Extensions.dll +F:\我的项目\GTK\gtksystem-windows-forms\Source\System.Resources.Extensions\obj\Debug\net8.0\System.Resources.Extensions.pdb +F:\我的项目\GTK\gtksystem-windows-forms\Source\System.Resources.Extensions\obj\Debug\net8.0\ref\System.Resources.Extensions.dll diff --git a/Source/System.Resources.Extensions/obj/Debug/net8.0/System.Resources.Extensions.dll b/Source/System.Resources.Extensions/obj/Debug/net8.0/System.Resources.Extensions.dll new file mode 100644 index 0000000000000000000000000000000000000000..114e41159275402556e0272bce5cc68b79ccfb83 Binary files /dev/null and b/Source/System.Resources.Extensions/obj/Debug/net8.0/System.Resources.Extensions.dll differ diff --git a/Source/System.Resources.Extensions/obj/Debug/net8.0/System.Resources.Extensions.pdb b/Source/System.Resources.Extensions/obj/Debug/net8.0/System.Resources.Extensions.pdb new file mode 100644 index 0000000000000000000000000000000000000000..4b3aa55bd76336f4ddfeb94ff83fbab1d4c7fc0c Binary files /dev/null and b/Source/System.Resources.Extensions/obj/Debug/net8.0/System.Resources.Extensions.pdb differ diff --git a/Source/System.Resources.Extensions/obj/Debug/net8.0/ref/System.Resources.Extensions.dll b/Source/System.Resources.Extensions/obj/Debug/net8.0/ref/System.Resources.Extensions.dll new file mode 100644 index 0000000000000000000000000000000000000000..dee617318f3dc2510e16d5e1746a4eced5318967 Binary files /dev/null and b/Source/System.Resources.Extensions/obj/Debug/net8.0/ref/System.Resources.Extensions.dll differ diff --git a/Source/System.Resources.Extensions/obj/Debug/net8.0/refint/System.Resources.Extensions.dll b/Source/System.Resources.Extensions/obj/Debug/net8.0/refint/System.Resources.Extensions.dll new file mode 100644 index 0000000000000000000000000000000000000000..dee617318f3dc2510e16d5e1746a4eced5318967 Binary files /dev/null and b/Source/System.Resources.Extensions/obj/Debug/net8.0/refint/System.Resources.Extensions.dll differ diff --git a/Source/System.Resources.Extensions/obj/Debug/netcoreapp3.1/System.Resources.Extensions.AssemblyInfoInputs.cache b/Source/System.Resources.Extensions/obj/Debug/netcoreapp3.1/System.Resources.Extensions.AssemblyInfoInputs.cache deleted file mode 100644 index 2ceda356a53415a0272512ca1028159d31130db2..0000000000000000000000000000000000000000 --- a/Source/System.Resources.Extensions/obj/Debug/netcoreapp3.1/System.Resources.Extensions.AssemblyInfoInputs.cache +++ /dev/null @@ -1 +0,0 @@ -7817da1bbd9601d81e8bf6f21c97f34f03205f32 diff --git a/Source/System.Resources.Extensions/obj/Debug/netcoreapp3.1/System.Resources.Extensions.GeneratedMSBuildEditorConfig.editorconfig b/Source/System.Resources.Extensions/obj/Debug/netcoreapp3.1/System.Resources.Extensions.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000000000000000000000000000000000000..ec04d701a55cf6304d6c22b4f535d6b4a927c165 --- /dev/null +++ b/Source/System.Resources.Extensions/obj/Debug/netcoreapp3.1/System.Resources.Extensions.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,5 @@ +is_global = true +build_property.RootNamespace = System.Resources.Extensions +build_property.ProjectDir = F:\我的项目\GTK\gtksystem-windows-forms\Source\System.Resources.Extensions\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = diff --git a/Source/System.Resources.Extensions/obj/Debug/netcoreapp3.1/System.Resources.Extensions.assets.cache b/Source/System.Resources.Extensions/obj/Debug/netcoreapp3.1/System.Resources.Extensions.assets.cache deleted file mode 100644 index 63477b4d256794bdadf37cdaac773fc6d496b95a..0000000000000000000000000000000000000000 Binary files a/Source/System.Resources.Extensions/obj/Debug/netcoreapp3.1/System.Resources.Extensions.assets.cache and /dev/null differ diff --git a/Source/System.Resources.Extensions/obj/Debug/netcoreapp3.1/System.Resources.Extensions.csproj.CoreCompileInputs.cache b/Source/System.Resources.Extensions/obj/Debug/netcoreapp3.1/System.Resources.Extensions.csproj.CoreCompileInputs.cache deleted file mode 100644 index 66efb29349d23ec219de08bbf8ad16a7ab4ff06a..0000000000000000000000000000000000000000 --- a/Source/System.Resources.Extensions/obj/Debug/netcoreapp3.1/System.Resources.Extensions.csproj.CoreCompileInputs.cache +++ /dev/null @@ -1 +0,0 @@ -3689fc5fe22dadece7ff17646d5a59cdf11b2ca3 diff --git a/Source/System.Resources.Extensions/obj/Debug/netcoreapp3.1/System.Resources.Extensions.csproj.FileListAbsolute.txt b/Source/System.Resources.Extensions/obj/Debug/netcoreapp3.1/System.Resources.Extensions.csproj.FileListAbsolute.txt deleted file mode 100644 index 062a9634e3f16f15109d673ac41d5eda6cd7c0a7..0000000000000000000000000000000000000000 --- a/Source/System.Resources.Extensions/obj/Debug/netcoreapp3.1/System.Resources.Extensions.csproj.FileListAbsolute.txt +++ /dev/null @@ -1,16 +0,0 @@ -F:\我的项目\GTK\System.Resources.Extensions\bin\Debug\netcoreapp3.1\System.Resources.Extensions.deps.json -F:\我的项目\GTK\System.Resources.Extensions\bin\Debug\netcoreapp3.1\System.Resources.Extensions.dll -F:\我的项目\GTK\System.Resources.Extensions\bin\Debug\netcoreapp3.1\System.Resources.Extensions.pdb -F:\我的项目\GTK\System.Resources.Extensions\obj\Debug\netcoreapp3.1\System.Resources.Extensions.AssemblyInfoInputs.cache -F:\我的项目\GTK\System.Resources.Extensions\obj\Debug\netcoreapp3.1\System.Resources.Extensions.AssemblyInfo.cs -F:\我的项目\GTK\System.Resources.Extensions\obj\Debug\netcoreapp3.1\System.Resources.Extensions.csproj.CoreCompileInputs.cache -F:\我的项目\GTK\System.Resources.Extensions\obj\Debug\netcoreapp3.1\System.Resources.Extensions.dll -F:\我的项目\GTK\System.Resources.Extensions\obj\Debug\netcoreapp3.1\System.Resources.Extensions.pdb -F:\我的项目\GTK\GTKWindowsForms\Source\System.Resources.Extensions\bin\Debug\netcoreapp3.1\System.Resources.Extensions.deps.json -F:\我的项目\GTK\GTKWindowsForms\Source\System.Resources.Extensions\bin\Debug\netcoreapp3.1\System.Resources.Extensions.dll -F:\我的项目\GTK\GTKWindowsForms\Source\System.Resources.Extensions\bin\Debug\netcoreapp3.1\System.Resources.Extensions.pdb -F:\我的项目\GTK\GTKWindowsForms\Source\System.Resources.Extensions\obj\Debug\netcoreapp3.1\System.Resources.Extensions.AssemblyInfoInputs.cache -F:\我的项目\GTK\GTKWindowsForms\Source\System.Resources.Extensions\obj\Debug\netcoreapp3.1\System.Resources.Extensions.AssemblyInfo.cs -F:\我的项目\GTK\GTKWindowsForms\Source\System.Resources.Extensions\obj\Debug\netcoreapp3.1\System.Resources.Extensions.csproj.CoreCompileInputs.cache -F:\我的项目\GTK\GTKWindowsForms\Source\System.Resources.Extensions\obj\Debug\netcoreapp3.1\System.Resources.Extensions.dll -F:\我的项目\GTK\GTKWindowsForms\Source\System.Resources.Extensions\obj\Debug\netcoreapp3.1\System.Resources.Extensions.pdb diff --git a/Source/System.Resources.Extensions/obj/Debug/netcoreapp3.1/System.Resources.Extensions.csprojAssemblyReference.cache b/Source/System.Resources.Extensions/obj/Debug/netcoreapp3.1/System.Resources.Extensions.csprojAssemblyReference.cache deleted file mode 100644 index f857ea296911086b0e98085ad2dd703fd0f9680d..0000000000000000000000000000000000000000 Binary files a/Source/System.Resources.Extensions/obj/Debug/netcoreapp3.1/System.Resources.Extensions.csprojAssemblyReference.cache and /dev/null differ diff --git a/Source/System.Resources.Extensions/obj/Debug/netcoreapp3.1/System.Resources.Extensions.dll b/Source/System.Resources.Extensions/obj/Debug/netcoreapp3.1/System.Resources.Extensions.dll deleted file mode 100644 index bff4b05b72120643b9686d9daf8746114e38d1f6..0000000000000000000000000000000000000000 Binary files a/Source/System.Resources.Extensions/obj/Debug/netcoreapp3.1/System.Resources.Extensions.dll and /dev/null differ diff --git a/Source/System.Resources.Extensions/obj/Debug/netcoreapp3.1/System.Resources.Extensions.pdb b/Source/System.Resources.Extensions/obj/Debug/netcoreapp3.1/System.Resources.Extensions.pdb deleted file mode 100644 index 50292ba86af16938e826884ce348362237135879..0000000000000000000000000000000000000000 Binary files a/Source/System.Resources.Extensions/obj/Debug/netcoreapp3.1/System.Resources.Extensions.pdb and /dev/null differ diff --git a/Source/System.Resources.Extensions/obj/Release/netcoreapp3.1/System.Resources.Extensions.AssemblyInfo.cs b/Source/System.Resources.Extensions/obj/Release/net6.0/System.Resources.Extensions.AssemblyInfo.cs similarity index 100% rename from Source/System.Resources.Extensions/obj/Release/netcoreapp3.1/System.Resources.Extensions.AssemblyInfo.cs rename to Source/System.Resources.Extensions/obj/Release/net6.0/System.Resources.Extensions.AssemblyInfo.cs diff --git a/Source/System.Resources.Extensions/obj/Release/net6.0/System.Resources.Extensions.AssemblyInfoInputs.cache b/Source/System.Resources.Extensions/obj/Release/net6.0/System.Resources.Extensions.AssemblyInfoInputs.cache new file mode 100644 index 0000000000000000000000000000000000000000..ddf1cae2de5a72929b0216e9fcbc477f719ea106 --- /dev/null +++ b/Source/System.Resources.Extensions/obj/Release/net6.0/System.Resources.Extensions.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +eb1929b6464fa3576d4c95389d06940a646dfd405f8b9635397f9e7143de8851 diff --git a/Source/System.Resources.Extensions/obj/Release/net6.0/System.Resources.Extensions.GeneratedMSBuildEditorConfig.editorconfig b/Source/System.Resources.Extensions/obj/Release/net6.0/System.Resources.Extensions.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000000000000000000000000000000000000..44fcaec1d4f2451769deadf690ef643525147716 --- /dev/null +++ b/Source/System.Resources.Extensions/obj/Release/net6.0/System.Resources.Extensions.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,13 @@ +is_global = true +build_property.TargetFramework = net6.0 +build_property.TargetPlatformMinVersion = +build_property.UsingMicrosoftNETSdkWeb = +build_property.ProjectTypeGuids = +build_property.InvariantGlobalization = +build_property.PlatformNeutralAssembly = +build_property.EnforceExtendedAnalyzerRules = +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property.RootNamespace = System.Resources.Extensions +build_property.ProjectDir = F:\我的项目\GTK\gtksystem-windows-forms\Source\System.Resources.Extensions\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = diff --git a/Source/System.Resources.Extensions/obj/Release/net6.0/System.Resources.Extensions.assets.cache b/Source/System.Resources.Extensions/obj/Release/net6.0/System.Resources.Extensions.assets.cache new file mode 100644 index 0000000000000000000000000000000000000000..37d952e98f932e73898b915bf4d2967e8945a0b3 Binary files /dev/null and b/Source/System.Resources.Extensions/obj/Release/net6.0/System.Resources.Extensions.assets.cache differ diff --git a/Source/System.Resources.Extensions/obj/Release/net8.0/PublishOutputs.91dcc6f36a.txt b/Source/System.Resources.Extensions/obj/Release/net8.0/PublishOutputs.91dcc6f36a.txt new file mode 100644 index 0000000000000000000000000000000000000000..4ff7a98fd1996545f791c4e999454d9e03c604b7 --- /dev/null +++ b/Source/System.Resources.Extensions/obj/Release/net8.0/PublishOutputs.91dcc6f36a.txt @@ -0,0 +1,3 @@ +F:\我的项目\GTK\gtksystem-windows-forms\Libs\System.Resources.Extensions.dll +F:\我的项目\GTK\gtksystem-windows-forms\Libs\System.Resources.Extensions.deps.json +F:\我的项目\GTK\gtksystem-windows-forms\Libs\System.Resources.Extensions.pdb diff --git a/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.AssemblyInfo.cs b/Source/System.Resources.Extensions/obj/Release/net8.0/System.Resources.Extensions.AssemblyInfo.cs similarity index 75% rename from Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.AssemblyInfo.cs rename to Source/System.Resources.Extensions/obj/Release/net8.0/System.Resources.Extensions.AssemblyInfo.cs index feb2363c09f67924dbc52696a8db357f718b2949..eaefaa598c98c51c44bdc4bfee77cc11f666fbbd 100644 --- a/Samples/GTKWinFormsApp/obj/Release/netcoreapp3.1/GTKWinFormsApp.AssemblyInfo.cs +++ b/Source/System.Resources.Extensions/obj/Release/net8.0/System.Resources.Extensions.AssemblyInfo.cs @@ -11,12 +11,12 @@ using System; using System.Reflection; -[assembly: System.Reflection.AssemblyCompanyAttribute("GTKWinFormsApp")] +[assembly: System.Reflection.AssemblyCompanyAttribute("System.Resources.Extensions")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Release")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] [assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")] -[assembly: System.Reflection.AssemblyProductAttribute("GTKWinFormsApp")] -[assembly: System.Reflection.AssemblyTitleAttribute("GTKWinFormsApp")] +[assembly: System.Reflection.AssemblyProductAttribute("System.Resources.Extensions")] +[assembly: System.Reflection.AssemblyTitleAttribute("System.Resources.Extensions")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] // 由 MSBuild WriteCodeFragment 类生成。 diff --git a/Source/System.Resources.Extensions/obj/Release/net8.0/System.Resources.Extensions.AssemblyInfoInputs.cache b/Source/System.Resources.Extensions/obj/Release/net8.0/System.Resources.Extensions.AssemblyInfoInputs.cache new file mode 100644 index 0000000000000000000000000000000000000000..ddf1cae2de5a72929b0216e9fcbc477f719ea106 --- /dev/null +++ b/Source/System.Resources.Extensions/obj/Release/net8.0/System.Resources.Extensions.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +eb1929b6464fa3576d4c95389d06940a646dfd405f8b9635397f9e7143de8851 diff --git a/Source/System.Resources.Extensions/obj/Release/net8.0/System.Resources.Extensions.GeneratedMSBuildEditorConfig.editorconfig b/Source/System.Resources.Extensions/obj/Release/net8.0/System.Resources.Extensions.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 0000000000000000000000000000000000000000..8f22a3e42899a1a3e11a09efda048da7b294c0fb --- /dev/null +++ b/Source/System.Resources.Extensions/obj/Release/net8.0/System.Resources.Extensions.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,13 @@ +is_global = true +build_property.TargetFramework = net8.0 +build_property.TargetPlatformMinVersion = +build_property.UsingMicrosoftNETSdkWeb = +build_property.ProjectTypeGuids = +build_property.InvariantGlobalization = +build_property.PlatformNeutralAssembly = +build_property.EnforceExtendedAnalyzerRules = +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property.RootNamespace = System.Resources.Extensions +build_property.ProjectDir = F:\我的项目\GTK\gtksystem-windows-forms\Source\System.Resources.Extensions\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = diff --git a/Source/System.Resources.Extensions/obj/Release/net8.0/System.Resources.Extensions.assets.cache b/Source/System.Resources.Extensions/obj/Release/net8.0/System.Resources.Extensions.assets.cache new file mode 100644 index 0000000000000000000000000000000000000000..cd198058a524ea379345a26fdabe336715db5f09 Binary files /dev/null and b/Source/System.Resources.Extensions/obj/Release/net8.0/System.Resources.Extensions.assets.cache differ diff --git a/Source/System.Resources.Extensions/obj/Release/net8.0/System.Resources.Extensions.csproj.CoreCompileInputs.cache b/Source/System.Resources.Extensions/obj/Release/net8.0/System.Resources.Extensions.csproj.CoreCompileInputs.cache new file mode 100644 index 0000000000000000000000000000000000000000..014220b73512edb90bc42025e48fa2a68289dd59 --- /dev/null +++ b/Source/System.Resources.Extensions/obj/Release/net8.0/System.Resources.Extensions.csproj.CoreCompileInputs.cache @@ -0,0 +1 @@ +81e42194717014666f19c97846ec60aa362c918f900b1f1e3ebed294e0fcd45a diff --git a/Source/System.Resources.Extensions/obj/Release/net8.0/System.Resources.Extensions.csproj.FileListAbsolute.txt b/Source/System.Resources.Extensions/obj/Release/net8.0/System.Resources.Extensions.csproj.FileListAbsolute.txt new file mode 100644 index 0000000000000000000000000000000000000000..d76bc4def5d51f9b8f025b990b9db889dfb5d029 --- /dev/null +++ b/Source/System.Resources.Extensions/obj/Release/net8.0/System.Resources.Extensions.csproj.FileListAbsolute.txt @@ -0,0 +1,11 @@ +F:\我的项目\GTK\gtksystem-windows-forms\Source\System.Resources.Extensions\bin\Release\net8.0\System.Resources.Extensions.deps.json +F:\我的项目\GTK\gtksystem-windows-forms\Source\System.Resources.Extensions\bin\Release\net8.0\System.Resources.Extensions.dll +F:\我的项目\GTK\gtksystem-windows-forms\Source\System.Resources.Extensions\bin\Release\net8.0\System.Resources.Extensions.pdb +F:\我的项目\GTK\gtksystem-windows-forms\Source\System.Resources.Extensions\obj\Release\net8.0\System.Resources.Extensions.GeneratedMSBuildEditorConfig.editorconfig +F:\我的项目\GTK\gtksystem-windows-forms\Source\System.Resources.Extensions\obj\Release\net8.0\System.Resources.Extensions.AssemblyInfoInputs.cache +F:\我的项目\GTK\gtksystem-windows-forms\Source\System.Resources.Extensions\obj\Release\net8.0\System.Resources.Extensions.AssemblyInfo.cs +F:\我的项目\GTK\gtksystem-windows-forms\Source\System.Resources.Extensions\obj\Release\net8.0\System.Resources.Extensions.csproj.CoreCompileInputs.cache +F:\我的项目\GTK\gtksystem-windows-forms\Source\System.Resources.Extensions\obj\Release\net8.0\System.Resources.Extensions.dll +F:\我的项目\GTK\gtksystem-windows-forms\Source\System.Resources.Extensions\obj\Release\net8.0\refint\System.Resources.Extensions.dll +F:\我的项目\GTK\gtksystem-windows-forms\Source\System.Resources.Extensions\obj\Release\net8.0\System.Resources.Extensions.pdb +F:\我的项目\GTK\gtksystem-windows-forms\Source\System.Resources.Extensions\obj\Release\net8.0\ref\System.Resources.Extensions.dll diff --git a/Source/System.Resources.Extensions/obj/Release/net8.0/System.Resources.Extensions.dll b/Source/System.Resources.Extensions/obj/Release/net8.0/System.Resources.Extensions.dll new file mode 100644 index 0000000000000000000000000000000000000000..5615adc58fddb263946b5757e6dbc0c50355bb4b Binary files /dev/null and b/Source/System.Resources.Extensions/obj/Release/net8.0/System.Resources.Extensions.dll differ diff --git a/Source/System.Resources.Extensions/obj/Release/net8.0/System.Resources.Extensions.pdb b/Source/System.Resources.Extensions/obj/Release/net8.0/System.Resources.Extensions.pdb new file mode 100644 index 0000000000000000000000000000000000000000..a20bbf8e3da27a91f026246759e8ff56e363c738 Binary files /dev/null and b/Source/System.Resources.Extensions/obj/Release/net8.0/System.Resources.Extensions.pdb differ diff --git a/Source/System.Resources.Extensions/obj/Release/net8.0/ref/System.Resources.Extensions.dll b/Source/System.Resources.Extensions/obj/Release/net8.0/ref/System.Resources.Extensions.dll new file mode 100644 index 0000000000000000000000000000000000000000..233ad04baeb6d95bd316c97f8ae9f0677d62bd40 Binary files /dev/null and b/Source/System.Resources.Extensions/obj/Release/net8.0/ref/System.Resources.Extensions.dll differ diff --git a/Source/System.Resources.Extensions/obj/Release/net8.0/refint/System.Resources.Extensions.dll b/Source/System.Resources.Extensions/obj/Release/net8.0/refint/System.Resources.Extensions.dll new file mode 100644 index 0000000000000000000000000000000000000000..233ad04baeb6d95bd316c97f8ae9f0677d62bd40 Binary files /dev/null and b/Source/System.Resources.Extensions/obj/Release/net8.0/refint/System.Resources.Extensions.dll differ diff --git a/Source/System.Resources.Extensions/obj/Release/netcoreapp3.1/System.Resources.Extensions.AssemblyInfoInputs.cache b/Source/System.Resources.Extensions/obj/Release/netcoreapp3.1/System.Resources.Extensions.AssemblyInfoInputs.cache deleted file mode 100644 index 70b67a96ee08a21ffeba7dfaec54a279978743eb..0000000000000000000000000000000000000000 --- a/Source/System.Resources.Extensions/obj/Release/netcoreapp3.1/System.Resources.Extensions.AssemblyInfoInputs.cache +++ /dev/null @@ -1 +0,0 @@ -41ed68c9c916235fd8728fa150927fa26adcbd79 diff --git a/Source/System.Resources.Extensions/obj/Release/netcoreapp3.1/System.Resources.Extensions.assets.cache b/Source/System.Resources.Extensions/obj/Release/netcoreapp3.1/System.Resources.Extensions.assets.cache deleted file mode 100644 index 13b8c8bdcbae277d44a2a3743871efd1d101648d..0000000000000000000000000000000000000000 Binary files a/Source/System.Resources.Extensions/obj/Release/netcoreapp3.1/System.Resources.Extensions.assets.cache and /dev/null differ diff --git a/Source/System.Resources.Extensions/obj/Release/netcoreapp3.1/System.Resources.Extensions.csproj.CoreCompileInputs.cache b/Source/System.Resources.Extensions/obj/Release/netcoreapp3.1/System.Resources.Extensions.csproj.CoreCompileInputs.cache deleted file mode 100644 index 313fa25185393509be06ddfb9e5cc1ad41ff0184..0000000000000000000000000000000000000000 --- a/Source/System.Resources.Extensions/obj/Release/netcoreapp3.1/System.Resources.Extensions.csproj.CoreCompileInputs.cache +++ /dev/null @@ -1 +0,0 @@ -82b163d3df80207ea79ec490ff9c91e32e336815 diff --git a/Source/System.Resources.Extensions/obj/Release/netcoreapp3.1/System.Resources.Extensions.csproj.FileListAbsolute.txt b/Source/System.Resources.Extensions/obj/Release/netcoreapp3.1/System.Resources.Extensions.csproj.FileListAbsolute.txt deleted file mode 100644 index 4d981826475c2c4862d736859e55293e73209dc1..0000000000000000000000000000000000000000 --- a/Source/System.Resources.Extensions/obj/Release/netcoreapp3.1/System.Resources.Extensions.csproj.FileListAbsolute.txt +++ /dev/null @@ -1,8 +0,0 @@ -F:\我的项目\GTK\GTKWindowsForms\Source\System.Resources.Extensions\bin\Release\netcoreapp3.1\System.Resources.Extensions.deps.json -F:\我的项目\GTK\GTKWindowsForms\Source\System.Resources.Extensions\bin\Release\netcoreapp3.1\System.Resources.Extensions.dll -F:\我的项目\GTK\GTKWindowsForms\Source\System.Resources.Extensions\bin\Release\netcoreapp3.1\System.Resources.Extensions.pdb -F:\我的项目\GTK\GTKWindowsForms\Source\System.Resources.Extensions\obj\Release\netcoreapp3.1\System.Resources.Extensions.AssemblyInfoInputs.cache -F:\我的项目\GTK\GTKWindowsForms\Source\System.Resources.Extensions\obj\Release\netcoreapp3.1\System.Resources.Extensions.AssemblyInfo.cs -F:\我的项目\GTK\GTKWindowsForms\Source\System.Resources.Extensions\obj\Release\netcoreapp3.1\System.Resources.Extensions.csproj.CoreCompileInputs.cache -F:\我的项目\GTK\GTKWindowsForms\Source\System.Resources.Extensions\obj\Release\netcoreapp3.1\System.Resources.Extensions.dll -F:\我的项目\GTK\GTKWindowsForms\Source\System.Resources.Extensions\obj\Release\netcoreapp3.1\System.Resources.Extensions.pdb diff --git a/Source/System.Resources.Extensions/obj/Release/netcoreapp3.1/System.Resources.Extensions.csprojAssemblyReference.cache b/Source/System.Resources.Extensions/obj/Release/netcoreapp3.1/System.Resources.Extensions.csprojAssemblyReference.cache deleted file mode 100644 index 74fe67b1ca671095970d4a7fbcae2417231e8f41..0000000000000000000000000000000000000000 Binary files a/Source/System.Resources.Extensions/obj/Release/netcoreapp3.1/System.Resources.Extensions.csprojAssemblyReference.cache and /dev/null differ diff --git a/Source/System.Resources.Extensions/obj/Release/netcoreapp3.1/System.Resources.Extensions.dll b/Source/System.Resources.Extensions/obj/Release/netcoreapp3.1/System.Resources.Extensions.dll deleted file mode 100644 index b299d9d0ff10ca1c11a4e565a9d8594f58fa941c..0000000000000000000000000000000000000000 Binary files a/Source/System.Resources.Extensions/obj/Release/netcoreapp3.1/System.Resources.Extensions.dll and /dev/null differ diff --git a/Source/System.Resources.Extensions/obj/Release/netcoreapp3.1/System.Resources.Extensions.pdb b/Source/System.Resources.Extensions/obj/Release/netcoreapp3.1/System.Resources.Extensions.pdb deleted file mode 100644 index c41fe38fe5e278a51f6138b191f791ccf3d0acf6..0000000000000000000000000000000000000000 Binary files a/Source/System.Resources.Extensions/obj/Release/netcoreapp3.1/System.Resources.Extensions.pdb and /dev/null differ diff --git a/Source/System.Resources.Extensions/obj/System.Resources.Extensions.csproj.nuget.dgspec.json b/Source/System.Resources.Extensions/obj/System.Resources.Extensions.csproj.nuget.dgspec.json index 0aab655673090fb6162830ba7f2485d1b78ceca3..834fff81ec56efd607b2670f0de4fed871703f00 100644 --- a/Source/System.Resources.Extensions/obj/System.Resources.Extensions.csproj.nuget.dgspec.json +++ b/Source/System.Resources.Extensions/obj/System.Resources.Extensions.csproj.nuget.dgspec.json @@ -14,22 +14,26 @@ "outputPath": "F:\\我的项目\\GTK\\gtksystem-windows-forms\\Source\\System.Resources.Extensions\\obj\\", "projectStyle": "PackageReference", "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages", "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder" ], "configFilePaths": [ "C:\\Users\\chj\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" ], "originalTargetFrameworks": [ - "netcoreapp3.1" + "net6.0" ], "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "C:\\Users\\chj\\.nuget\\packages": {}, "https://api.nuget.org/v3/index.json": {}, "https://www.nuget.org/api/v2/": {} }, "frameworks": { - "netcoreapp3.1": { - "targetAlias": "netcoreapp3.1", + "net6.0": { + "targetAlias": "net6.0", "projectReferences": {} } }, @@ -40,24 +44,39 @@ } }, "frameworks": { - "netcoreapp3.1": { - "targetAlias": "netcoreapp3.1", + "net6.0": { + "targetAlias": "net6.0", "imports": [ "net461", "net462", "net47", "net471", "net472", - "net48" + "net48", + "net481" ], "assetTargetFallback": true, "warn": true, + "downloadDependencies": [ + { + "name": "Microsoft.AspNetCore.App.Ref", + "version": "[6.0.25, 6.0.25]" + }, + { + "name": "Microsoft.NETCore.App.Ref", + "version": "[6.0.25, 6.0.25]" + }, + { + "name": "Microsoft.WindowsDesktop.App.Ref", + "version": "[6.0.25, 6.0.25]" + } + ], "frameworkReferences": { "Microsoft.NETCore.App": { "privateAssets": "all" } }, - "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\5.0.203\\RuntimeIdentifierGraph.json" + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.100\\RuntimeIdentifierGraph.json" } } } diff --git a/Source/System.Resources.Extensions/obj/System.Resources.Extensions.csproj.nuget.g.props b/Source/System.Resources.Extensions/obj/System.Resources.Extensions.csproj.nuget.g.props index dcc4c3f5c5d34053a37b465e53d2585fe328b5a5..279cc9bad2537080538ee8d34a9eb2e2bf68cdae 100644 --- a/Source/System.Resources.Extensions/obj/System.Resources.Extensions.csproj.nuget.g.props +++ b/Source/System.Resources.Extensions/obj/System.Resources.Extensions.csproj.nuget.g.props @@ -5,14 +5,13 @@ NuGet $(MSBuildThisFileDirectory)project.assets.json $(UserProfile)\.nuget\packages\ - C:\Users\chj\.nuget\packages\;C:\Program Files\dotnet\sdk\NuGetFallbackFolder + C:\Users\chj\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages;C:\Program Files\dotnet\sdk\NuGetFallbackFolder PackageReference - 5.8.1 + 6.8.0 - + + + - - $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - \ No newline at end of file diff --git a/Source/System.Resources.Extensions/obj/System.Resources.Extensions.csproj.nuget.g.targets b/Source/System.Resources.Extensions/obj/System.Resources.Extensions.csproj.nuget.g.targets index 53cfaa19b16f3769b2bfc33db3b5c0053c16fdba..3dc06ef3cc4057524bf5d2cd49936dff789cebe8 100644 --- a/Source/System.Resources.Extensions/obj/System.Resources.Extensions.csproj.nuget.g.targets +++ b/Source/System.Resources.Extensions/obj/System.Resources.Extensions.csproj.nuget.g.targets @@ -1,6 +1,2 @@  - - - $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - - \ No newline at end of file + \ No newline at end of file diff --git a/Source/System.Resources.Extensions/obj/project.assets.json b/Source/System.Resources.Extensions/obj/project.assets.json index aa8481bbda4a5dd35cc9ef5e534976d48e855400..325bdb18ce6670a3dd31646d036a06f038757b1b 100644 --- a/Source/System.Resources.Extensions/obj/project.assets.json +++ b/Source/System.Resources.Extensions/obj/project.assets.json @@ -1,14 +1,15 @@ { "version": 3, "targets": { - ".NETCoreApp,Version=v3.1": {} + "net6.0": {} }, "libraries": {}, "projectFileDependencyGroups": { - ".NETCoreApp,Version=v3.1": [] + "net6.0": [] }, "packageFolders": { "C:\\Users\\chj\\.nuget\\packages\\": {}, + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {}, "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder": {} }, "project": { @@ -21,22 +22,26 @@ "outputPath": "F:\\我的项目\\GTK\\gtksystem-windows-forms\\Source\\System.Resources.Extensions\\obj\\", "projectStyle": "PackageReference", "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages", "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder" ], "configFilePaths": [ "C:\\Users\\chj\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" ], "originalTargetFrameworks": [ - "netcoreapp3.1" + "net6.0" ], "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "C:\\Users\\chj\\.nuget\\packages": {}, "https://api.nuget.org/v3/index.json": {}, "https://www.nuget.org/api/v2/": {} }, "frameworks": { - "netcoreapp3.1": { - "targetAlias": "netcoreapp3.1", + "net6.0": { + "targetAlias": "net6.0", "projectReferences": {} } }, @@ -47,24 +52,39 @@ } }, "frameworks": { - "netcoreapp3.1": { - "targetAlias": "netcoreapp3.1", + "net6.0": { + "targetAlias": "net6.0", "imports": [ "net461", "net462", "net47", "net471", "net472", - "net48" + "net48", + "net481" ], "assetTargetFallback": true, "warn": true, + "downloadDependencies": [ + { + "name": "Microsoft.AspNetCore.App.Ref", + "version": "[6.0.25, 6.0.25]" + }, + { + "name": "Microsoft.NETCore.App.Ref", + "version": "[6.0.25, 6.0.25]" + }, + { + "name": "Microsoft.WindowsDesktop.App.Ref", + "version": "[6.0.25, 6.0.25]" + } + ], "frameworkReferences": { "Microsoft.NETCore.App": { "privateAssets": "all" } }, - "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\5.0.203\\RuntimeIdentifierGraph.json" + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\8.0.100\\RuntimeIdentifierGraph.json" } } } diff --git a/Source/System.Resources.Extensions/obj/project.nuget.cache b/Source/System.Resources.Extensions/obj/project.nuget.cache index 42b744b850453c23b0539eb153ecf9ae695439c5..84bd14ce0cfd4695cdb9403a33a835cda057b3bb 100644 --- a/Source/System.Resources.Extensions/obj/project.nuget.cache +++ b/Source/System.Resources.Extensions/obj/project.nuget.cache @@ -1,8 +1,12 @@ { "version": 2, - "dgSpecHash": "7qarfaf3fxKTV54OySE7KVHHJdFWP8YuDMsZdhiTUoPr9OTlkF1bZZCqLiBHYVys0Yl8Xg3Bl6MZn1OxT2aVMA==", + "dgSpecHash": "cbdsMO6ChiO3Sb+wzfySwtwaMMl5Dgrw7iJbhNvcwPQkBxRjueSkVOeIcvaVk5aO0c14E6sYqNfRvEuX2oKNfg==", "success": true, "projectFilePath": "F:\\我的项目\\GTK\\gtksystem-windows-forms\\Source\\System.Resources.Extensions\\System.Resources.Extensions.csproj", - "expectedPackageFiles": [], + "expectedPackageFiles": [ + "C:\\Users\\chj\\.nuget\\packages\\microsoft.windowsdesktop.app.ref\\6.0.25\\microsoft.windowsdesktop.app.ref.6.0.25.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\microsoft.netcore.app.ref\\6.0.25\\microsoft.netcore.app.ref.6.0.25.nupkg.sha512", + "C:\\Users\\chj\\.nuget\\packages\\microsoft.aspnetcore.app.ref\\6.0.25\\microsoft.aspnetcore.app.ref.6.0.25.nupkg.sha512" + ], "logs": [] } \ No newline at end of file diff --git a/Source/licenses/LICENSE.txt b/Source/licenses/LICENSE.txt new file mode 100644 index 0000000000000000000000000000000000000000..153d416dc8d2d60076698ec3cbfce34d91436a03 --- /dev/null +++ b/Source/licenses/LICENSE.txt @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. \ No newline at end of file diff --git a/Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/GTKWinFormsApp.csproj.CopyComplete b/TextFile1.txt similarity index 100% rename from Samples/GTKWinFormsApp/obj/Debug/netcoreapp3.1/GTKWinFormsApp.csproj.CopyComplete rename to TextFile1.txt diff --git "a/VisualStudio\346\217\222\344\273\266/GTKWinform\345\274\200\345\217\221\346\217\222\344\273\266.zip" "b/VisualStudio\346\217\222\344\273\266/GTKWinform\345\274\200\345\217\221\346\217\222\344\273\266.zip" new file mode 100644 index 0000000000000000000000000000000000000000..dde3cff6b6bca05ca5213732ed5570ca963bc85e Binary files /dev/null and "b/VisualStudio\346\217\222\344\273\266/GTKWinform\345\274\200\345\217\221\346\217\222\344\273\266.zip" differ diff --git "a/VisualStudio\346\217\222\344\273\266/VisualStudio\345\274\200\345\217\221\346\217\222\344\273\266.zip" "b/VisualStudio\346\217\222\344\273\266/VisualStudio\345\274\200\345\217\221\346\217\222\344\273\266.zip" new file mode 100644 index 0000000000000000000000000000000000000000..dde3cff6b6bca05ca5213732ed5570ca963bc85e Binary files /dev/null and "b/VisualStudio\346\217\222\344\273\266/VisualStudio\345\274\200\345\217\221\346\217\222\344\273\266.zip" differ diff --git a/pic/2023-11-06 072903.jpg b/pic/2023-11-06 072903.jpg index e8234e457a598f0cabba3cb74e14772a1a638527..723c654e607d85edb969c2d5258a1ea4bd995825 100644 Binary files a/pic/2023-11-06 072903.jpg and b/pic/2023-11-06 072903.jpg differ diff --git a/pic/249207-20231027143142395-1499055570.png b/pic/249207-20231027143142395-1499055570.png new file mode 100644 index 0000000000000000000000000000000000000000..6d751563738f63b4fa37b0ec3e39f868226e419c Binary files /dev/null and b/pic/249207-20231027143142395-1499055570.png differ diff --git a/pic/backgroundimage.jpg b/pic/backgroundimage.jpg new file mode 100644 index 0000000000000000000000000000000000000000..049111c8b99ba090713c7eda496ce489daedd9d4 Binary files /dev/null and b/pic/backgroundimage.jpg differ diff --git a/pic/contact_weixin.png b/pic/contact_weixin.png new file mode 100644 index 0000000000000000000000000000000000000000..c11e0d6f9927a81bbb6eb5a854e90b5f157d7789 Binary files /dev/null and b/pic/contact_weixin.png differ diff --git a/pic/listview.png b/pic/listview.png new file mode 100644 index 0000000000000000000000000000000000000000..db6311039b75cb49a024138b6f0b3d2eb46d9c52 Binary files /dev/null and b/pic/listview.png differ diff --git a/pic/love_reward_qrcode_.png b/pic/love_reward_qrcode_.png new file mode 100644 index 0000000000000000000000000000000000000000..9a9eba9d29d0aa2cac8068f61ac8cc1342d767aa Binary files /dev/null and b/pic/love_reward_qrcode_.png differ diff --git a/pic/qqchat.png b/pic/qqchat.png new file mode 100644 index 0000000000000000000000000000000000000000..9093bd2b7376ae57d2cb4c3d2eaec843f228966d Binary files /dev/null and b/pic/qqchat.png differ diff --git a/pic/run.jpg b/pic/run.jpg index a5b6a5930646939d3e1a92f9723d562124807d63..723c654e607d85edb969c2d5258a1ea4bd995825 100644 Binary files a/pic/run.jpg and b/pic/run.jpg differ diff --git a/pic/run.png b/pic/run.png new file mode 100644 index 0000000000000000000000000000000000000000..b0945ba0871ddb298c566b10759a707ea3ad59ac Binary files /dev/null and b/pic/run.png differ diff --git a/pic/toolstrip.jpeg b/pic/toolstrip.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..6c9c490ead3598a7b780f7119e1d4ab282b9a619 Binary files /dev/null and b/pic/toolstrip.jpeg differ diff --git a/pic/vs_vsix.jpeg b/pic/vs_vsix.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..13ec52357634e7d4db495b3fe72130f379d17d34 Binary files /dev/null and b/pic/vs_vsix.jpeg differ