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、菜单增加设置/修复窗体设计器
+
+
#### 使用说明
@@ -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效果
-
-#### mac运行效果
-
-#### 颜色主题
-
+
+
+#### 工具栏菜单
+
+
+#### 图文窗口
+
-#### 交流
+#### 交流/合作/商务/赞助
QQ群:236066073
+邮箱:438865652@qq.com
+
-#### 参与贡献
+#### 支持作者,获取技术服务
+ 
+
+#### 添加作者微信,更多服务帮助
+ 
+
+#### 常见问题
+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