├── .gitignore ├── ChromeTest ├── ChromeTest.sln └── ChromeTest │ ├── App.config │ ├── ChangeAddressForm.Designer.cs │ ├── ChangeAddressForm.cs │ ├── ChangeAddressForm.resx │ ├── ChromeDevToolsSystemMenu.cs │ ├── ChromeTest.csproj │ ├── ChromeUtils.cs │ ├── Demos │ ├── BootStrapForm.Designer.cs │ ├── BootStrapForm.cs │ ├── BootStrapForm.resx │ ├── BootStrapForm2.Designer.cs │ ├── BootStrapForm2.cs │ ├── BootStrapForm2.resx │ ├── DemoLauncherForm.Designer.cs │ ├── DemoLauncherForm.cs │ ├── DemoLauncherForm.resx │ ├── GenericHTMLForm.Designer.cs │ ├── GenericHTMLForm.cs │ └── GenericHTMLForm.resx │ ├── FormTestJsCommunication.Designer.cs │ ├── FormTestJsCommunication.cs │ ├── FormTestJsCommunication.resx │ ├── HTMLResources │ ├── html │ │ ├── BasicPage.html │ │ ├── BootstrapExample.html │ │ ├── BootstrapFormExample.html │ │ ├── BootstrapFormExample2.html │ │ ├── WinformInteractionExample.html │ │ ├── amChartExample.html │ │ ├── canvas-bubbles-with-bootstrap.html │ │ ├── canvas-bubbles.html │ │ ├── canvas-particle.html │ │ ├── css3-demo.html │ │ └── starter-template.css │ ├── js │ │ └── bubbles │ │ │ ├── bubbles.js │ │ │ └── index.php │ └── libs │ │ ├── amcharts │ │ ├── amcharts.js │ │ ├── amstock.js │ │ ├── serial.js │ │ ├── style.css │ │ └── themes │ │ │ ├── black.js │ │ │ ├── chalk.js │ │ │ ├── dark.js │ │ │ ├── light.js │ │ │ └── patterns.js │ │ ├── bootstrap │ │ ├── css │ │ │ ├── bootstrap-theme.css │ │ │ ├── bootstrap-theme.css.map │ │ │ ├── bootstrap-theme.min.css │ │ │ ├── bootstrap.css │ │ │ ├── bootstrap.css.map │ │ │ └── bootstrap.min.css │ │ ├── fonts │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ ├── glyphicons-halflings-regular.svg │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ ├── glyphicons-halflings-regular.woff │ │ │ └── glyphicons-halflings-regular.woff2 │ │ └── js │ │ │ ├── bootstrap.js │ │ │ ├── bootstrap.min.js │ │ │ └── npm.js │ │ └── jquery │ │ └── jquery-2.1.3.min.js │ ├── JavaScriptInteractionObj.cs │ ├── MainForm.Designer.cs │ ├── MainForm.cs │ ├── MainForm.resx │ ├── Program.cs │ ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ ├── Settings.Designer.cs │ └── Settings.settings │ └── packages.config ├── README.md └── Screenshots ├── image001.gif └── image002.png /.gitignore: -------------------------------------------------------------------------------- 1 | /ChromeTest/packages 2 | /ChromeTest/ChromeTest/bin 3 | /ChromeTest/*.suo 4 | /ChromeTest/ChromeTest/obj 5 | -------------------------------------------------------------------------------- /ChromeTest/ChromeTest.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 2013 4 | VisualStudioVersion = 12.0.40629.0 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ChromeTest", "ChromeTest\ChromeTest.csproj", "{2E1427FD-050E-44B6-8E15-0504630C3F40}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|x64 = Debug|x64 11 | Debug|x86 = Debug|x86 12 | Release|x64 = Release|x64 13 | Release|x86 = Release|x86 14 | EndGlobalSection 15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 16 | {2E1427FD-050E-44B6-8E15-0504630C3F40}.Debug|x64.ActiveCfg = Debug|x64 17 | {2E1427FD-050E-44B6-8E15-0504630C3F40}.Debug|x64.Build.0 = Debug|x64 18 | {2E1427FD-050E-44B6-8E15-0504630C3F40}.Debug|x86.ActiveCfg = Debug|x86 19 | {2E1427FD-050E-44B6-8E15-0504630C3F40}.Debug|x86.Build.0 = Debug|x86 20 | {2E1427FD-050E-44B6-8E15-0504630C3F40}.Release|x64.ActiveCfg = Release|x64 21 | {2E1427FD-050E-44B6-8E15-0504630C3F40}.Release|x64.Build.0 = Release|x64 22 | {2E1427FD-050E-44B6-8E15-0504630C3F40}.Release|x86.ActiveCfg = Release|x86 23 | {2E1427FD-050E-44B6-8E15-0504630C3F40}.Release|x86.Build.0 = Release|x86 24 | EndGlobalSection 25 | GlobalSection(SolutionProperties) = preSolution 26 | HideSolutionNode = FALSE 27 | EndGlobalSection 28 | EndGlobal 29 | -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/ChangeAddressForm.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace ChromeTest 2 | { 3 | partial class ChangeAddressForm 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | this.buttonOK = new System.Windows.Forms.Button(); 32 | this.textBoxAddress = new System.Windows.Forms.TextBox(); 33 | this.label1 = new System.Windows.Forms.Label(); 34 | this.SuspendLayout(); 35 | // 36 | // buttonOK 37 | // 38 | this.buttonOK.Location = new System.Drawing.Point(237, 58); 39 | this.buttonOK.Name = "buttonOK"; 40 | this.buttonOK.Size = new System.Drawing.Size(75, 23); 41 | this.buttonOK.TabIndex = 0; 42 | this.buttonOK.Text = "OK"; 43 | this.buttonOK.UseVisualStyleBackColor = true; 44 | this.buttonOK.Click += new System.EventHandler(this.buttonOK_Click); 45 | // 46 | // textBoxAddress 47 | // 48 | this.textBoxAddress.Location = new System.Drawing.Point(50, 25); 49 | this.textBoxAddress.Name = "textBoxAddress"; 50 | this.textBoxAddress.Size = new System.Drawing.Size(262, 20); 51 | this.textBoxAddress.TabIndex = 1; 52 | this.textBoxAddress.Text = "https://html5test.com/"; 53 | // 54 | // label1 55 | // 56 | this.label1.AutoSize = true; 57 | this.label1.Location = new System.Drawing.Point(12, 28); 58 | this.label1.Name = "label1"; 59 | this.label1.Size = new System.Drawing.Size(32, 13); 60 | this.label1.TabIndex = 2; 61 | this.label1.Text = "URL:"; 62 | // 63 | // ChangeAddressForm 64 | // 65 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 66 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 67 | this.ClientSize = new System.Drawing.Size(330, 93); 68 | this.Controls.Add(this.label1); 69 | this.Controls.Add(this.textBoxAddress); 70 | this.Controls.Add(this.buttonOK); 71 | this.Name = "ChangeAddressForm"; 72 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; 73 | this.Text = "ChangeAddressForm"; 74 | this.Load += new System.EventHandler(this.ChangeAddressForm_Load); 75 | this.ResumeLayout(false); 76 | this.PerformLayout(); 77 | 78 | } 79 | 80 | #endregion 81 | 82 | private System.Windows.Forms.Button buttonOK; 83 | public System.Windows.Forms.TextBox textBoxAddress; 84 | private System.Windows.Forms.Label label1; 85 | } 86 | } -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/ChangeAddressForm.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Data; 5 | using System.Drawing; 6 | using System.Linq; 7 | using System.Text; 8 | using System.Threading.Tasks; 9 | using System.Windows.Forms; 10 | 11 | namespace ChromeTest 12 | { 13 | public partial class ChangeAddressForm : Form 14 | { 15 | public ChangeAddressForm() 16 | { 17 | InitializeComponent(); 18 | } 19 | 20 | private void buttonOK_Click(object sender, EventArgs e) 21 | { 22 | DialogResult = System.Windows.Forms.DialogResult.OK; 23 | } 24 | 25 | private void ChangeAddressForm_Load(object sender, EventArgs e) 26 | { 27 | 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/ChangeAddressForm.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/ChromeDevToolsSystemMenu.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.InteropServices; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | using System.Windows.Forms; 8 | 9 | namespace ChromeTest 10 | { 11 | static class ChromeDevToolsSystemMenu 12 | { 13 | // P/Invoke constants 14 | public static int WM_SYSCOMMAND = 0x112; 15 | public static int MF_STRING = 0x0; 16 | public static int MF_SEPARATOR = 0x800; 17 | 18 | // P/Invoke declarations 19 | [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] 20 | private static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert); 21 | 22 | [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] 23 | private static extern bool AppendMenu(IntPtr hMenu, int uFlags, int uIDNewItem, string lpNewItem); 24 | 25 | [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] 26 | private static extern bool InsertMenu(IntPtr hMenu, int uPosition, int uFlags, int uIDNewItem, string lpNewItem); 27 | 28 | // ID for the Chrome dev tools item on the system menu 29 | public static int SYSMENU_CHROME_DEV_TOOLS = 0x1; 30 | 31 | public static void CreateSysMenu(Form frm) 32 | { 33 | // in your form override the OnHandleCreated function and call this method e.g: 34 | // protected override void OnHandleCreated(EventArgs e) 35 | // { 36 | // ChromeDevToolsSystemMenu.CreateSysMenu(frm,e); 37 | // } 38 | 39 | // Get a handle to a copy of this form's system (window) menu 40 | IntPtr hSysMenu = GetSystemMenu(frm.Handle, false); 41 | 42 | // Add a separator 43 | AppendMenu(hSysMenu, MF_SEPARATOR, 0, string.Empty); 44 | 45 | // Add the About menu item 46 | AppendMenu(hSysMenu, MF_STRING, SYSMENU_CHROME_DEV_TOOLS, "&Chrome Dev Tools"); 47 | } 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/ChromeTest.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | Debug 8 | AnyCPU 9 | {2E1427FD-050E-44B6-8E15-0504630C3F40} 10 | WinExe 11 | Properties 12 | ChromeTest 13 | ChromeTest 14 | v4.5 15 | 512 16 | publish\ 17 | true 18 | Disk 19 | false 20 | Foreground 21 | 7 22 | Days 23 | false 24 | false 25 | true 26 | 0 27 | 1.0.0.%2a 28 | false 29 | false 30 | true 31 | f9934477 32 | 33 | 34 | x86 35 | true 36 | full 37 | false 38 | bin\Debug\ 39 | DEBUG;TRACE 40 | prompt 41 | 4 42 | 43 | 44 | AnyCPU 45 | pdbonly 46 | true 47 | bin\Release\ 48 | TRACE 49 | prompt 50 | 4 51 | 52 | 53 | true 54 | bin\x64\Debug\ 55 | DEBUG;TRACE 56 | full 57 | x64 58 | prompt 59 | MinimumRecommendedRules.ruleset 60 | true 61 | 62 | 63 | bin\x64\Release\ 64 | TRACE 65 | true 66 | pdbonly 67 | x64 68 | prompt 69 | MinimumRecommendedRules.ruleset 70 | true 71 | 72 | 73 | true 74 | bin\x86\Debug\ 75 | DEBUG;TRACE 76 | full 77 | x86 78 | prompt 79 | MinimumRecommendedRules.ruleset 80 | true 81 | 82 | 83 | bin\x86\Release\ 84 | TRACE 85 | true 86 | pdbonly 87 | x86 88 | prompt 89 | MinimumRecommendedRules.ruleset 90 | true 91 | 92 | 93 | 94 | ..\packages\Newtonsoft.Json.6.0.8\lib\net45\Newtonsoft.Json.dll 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | Form 110 | 111 | 112 | ChangeAddressForm.cs 113 | 114 | 115 | 116 | 117 | Form 118 | 119 | 120 | BootStrapForm.cs 121 | 122 | 123 | Form 124 | 125 | 126 | BootStrapForm2.cs 127 | 128 | 129 | Form 130 | 131 | 132 | DemoLauncherForm.cs 133 | 134 | 135 | Form 136 | 137 | 138 | GenericHTMLForm.cs 139 | 140 | 141 | Form 142 | 143 | 144 | MainForm.cs 145 | 146 | 147 | Form 148 | 149 | 150 | FormTestJsCommunication.cs 151 | 152 | 153 | 154 | 155 | 156 | ChangeAddressForm.cs 157 | 158 | 159 | BootStrapForm.cs 160 | 161 | 162 | BootStrapForm2.cs 163 | 164 | 165 | DemoLauncherForm.cs 166 | 167 | 168 | GenericHTMLForm.cs 169 | 170 | 171 | MainForm.cs 172 | 173 | 174 | FormTestJsCommunication.cs 175 | 176 | 177 | ResXFileCodeGenerator 178 | Resources.Designer.cs 179 | Designer 180 | 181 | 182 | True 183 | Resources.resx 184 | 185 | 186 | Always 187 | 188 | 189 | Always 190 | 191 | 192 | Always 193 | 194 | 195 | Always 196 | 197 | 198 | Always 199 | 200 | 201 | Always 202 | 203 | 204 | Always 205 | 206 | 207 | Always 208 | 209 | 210 | Always 211 | 212 | 213 | Always 214 | 215 | 216 | Always 217 | 218 | 219 | Always 220 | 221 | 222 | Always 223 | 224 | 225 | Always 226 | 227 | 228 | Always 229 | 230 | 231 | Always 232 | 233 | 234 | Always 235 | 236 | 237 | Always 238 | 239 | 240 | Always 241 | 242 | 243 | Always 244 | 245 | 246 | Always 247 | 248 | 249 | Always 250 | 251 | 252 | Always 253 | 254 | 255 | 256 | 257 | SettingsSingleFileGenerator 258 | Settings.Designer.cs 259 | 260 | 261 | True 262 | Settings.settings 263 | True 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | False 272 | Microsoft .NET Framework 4.5 %28x86 and x64%29 273 | true 274 | 275 | 276 | False 277 | .NET Framework 3.5 SP1 Client Profile 278 | false 279 | 280 | 281 | False 282 | .NET Framework 3.5 SP1 283 | false 284 | 285 | 286 | 287 | 288 | 289 | Always 290 | 291 | 292 | Always 293 | 294 | 295 | Always 296 | 297 | 298 | Always 299 | 300 | 301 | Always 302 | 303 | 304 | Always 305 | 306 | 307 | Always 308 | 309 | 310 | Always 311 | 312 | 313 | Always 314 | 315 | 316 | Always 317 | 318 | 319 | Always 320 | 321 | 322 | 323 | 324 | 325 | 326 | This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. 327 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | 343 | -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/ChromeUtils.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Runtime.InteropServices; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace ChromeTest 9 | { 10 | class ChromeUtils 11 | { 12 | // P/Invoke constants 13 | private const int WM_SYSCOMMAND = 0x112; 14 | private const int MF_STRING = 0x0; 15 | private const int MF_SEPARATOR = 0x800; 16 | 17 | // P/Invoke declarations 18 | [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] 19 | private static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert); 20 | 21 | [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] 22 | private static extern bool AppendMenu(IntPtr hMenu, int uFlags, int uIDNewItem, string lpNewItem); 23 | 24 | [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] 25 | private static extern bool InsertMenu(IntPtr hMenu, int uPosition, int uFlags, int uIDNewItem, string lpNewItem); 26 | 27 | // ID for the Chrome dev tools item on the system menu 28 | private int SYSMENU_CHROME_DEV_TOOLS = 0x1; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/Demos/BootStrapForm.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace ChromeTest.Demos 2 | { 3 | partial class BootStrapForm 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | this.SuspendLayout(); 32 | // 33 | // BootStrapForm 34 | // 35 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 36 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 37 | this.ClientSize = new System.Drawing.Size(584, 309); 38 | this.Name = "BootStrapForm"; 39 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; 40 | this.Text = "BootStrapForm"; 41 | this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.BootStrapForm_FormClosing); 42 | this.Load += new System.EventHandler(this.BootStrapForm_Load); 43 | this.ResumeLayout(false); 44 | 45 | } 46 | 47 | #endregion 48 | } 49 | } -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/Demos/BootStrapForm.cs: -------------------------------------------------------------------------------- 1 | using CefSharp; 2 | using CefSharp.WinForms; 3 | using System; 4 | using System.Collections.Generic; 5 | using System.ComponentModel; 6 | using System.Data; 7 | using System.Drawing; 8 | using System.Linq; 9 | using System.Text; 10 | using System.Threading.Tasks; 11 | using System.Windows.Forms; 12 | 13 | namespace ChromeTest.Demos 14 | { 15 | public partial class BootStrapForm : Form 16 | { 17 | ChromiumWebBrowser m_chromeBrowser = null; 18 | 19 | public BootStrapForm() 20 | { 21 | InitializeComponent(); 22 | } 23 | 24 | private void BootStrapForm_Load(object sender, EventArgs e) 25 | { 26 | // Cef.Initialize(); 27 | 28 | string page = string.Format("{0}HTMLResources/html/BootstrapExample.html", GetAppLocation()); 29 | m_chromeBrowser = new ChromiumWebBrowser(page); 30 | 31 | Controls.Add(m_chromeBrowser); 32 | 33 | ChromeDevToolsSystemMenu.CreateSysMenu(this); 34 | } 35 | 36 | protected override void WndProc(ref Message m) 37 | { 38 | base.WndProc(ref m); 39 | 40 | // Test if the About item was selected from the system menu 41 | if ((m.Msg == ChromeDevToolsSystemMenu.WM_SYSCOMMAND) && ((int)m.WParam == ChromeDevToolsSystemMenu.SYSMENU_CHROME_DEV_TOOLS)) 42 | { 43 | m_chromeBrowser.ShowDevTools(); 44 | } 45 | } 46 | 47 | private void BootStrapForm_FormClosing(object sender, FormClosingEventArgs e) 48 | { 49 | //Cef.Shutdown(); 50 | } 51 | 52 | public static string GetAppLocation() 53 | { 54 | return AppDomain.CurrentDomain.BaseDirectory; 55 | } 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/Demos/BootStrapForm.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/Demos/BootStrapForm2.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace ChromeTest.Demos 2 | { 3 | partial class BootStrapForm2 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | this.SuspendLayout(); 32 | // 33 | // BootStrapForm2 34 | // 35 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 36 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 37 | this.ClientSize = new System.Drawing.Size(549, 341); 38 | this.Name = "BootStrapForm2"; 39 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; 40 | this.Text = "BootStrapForm2"; 41 | this.Load += new System.EventHandler(this.BootStrapForm2_Load); 42 | this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.BootStrapForm2_KeyDown); 43 | this.PreviewKeyDown += new System.Windows.Forms.PreviewKeyDownEventHandler(this.BootStrapForm2_PreviewKeyDown); 44 | this.ResumeLayout(false); 45 | 46 | } 47 | 48 | #endregion 49 | } 50 | } -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/Demos/BootStrapForm2.cs: -------------------------------------------------------------------------------- 1 | using CefSharp; 2 | using CefSharp.WinForms; 3 | using System; 4 | using System.Collections.Generic; 5 | using System.ComponentModel; 6 | using System.Data; 7 | using System.Drawing; 8 | using System.Linq; 9 | using System.Text; 10 | using System.Threading.Tasks; 11 | using System.Windows.Forms; 12 | 13 | namespace ChromeTest.Demos 14 | { 15 | public partial class BootStrapForm2 : Form 16 | { 17 | ChromiumWebBrowser m_chromeBrowser = null; 18 | 19 | SomeClass m_javascriptSvc = null; 20 | 21 | public BootStrapForm2() 22 | { 23 | InitializeComponent(); 24 | this.KeyPreview = true; 25 | } 26 | 27 | public static string GetAppLocation() 28 | { 29 | return AppDomain.CurrentDomain.BaseDirectory; 30 | } 31 | 32 | private void BootStrapForm2_Load(object sender, EventArgs e) 33 | { 34 | string page = string.Format("{0}HTMLResources/html/BootstrapFormExample.html", GetAppLocation()); 35 | m_chromeBrowser = new ChromiumWebBrowser(page); 36 | m_javascriptSvc = new SomeClass(m_chromeBrowser); 37 | 38 | 39 | // Register the JavaScriptInteractionObj class with JS 40 | m_chromeBrowser.RegisterJsObject("winformObj", m_javascriptSvc); 41 | 42 | Controls.Add(m_chromeBrowser); 43 | 44 | ChromeDevToolsSystemMenu.CreateSysMenu(this); 45 | } 46 | 47 | protected override void WndProc(ref Message m) 48 | { 49 | base.WndProc(ref m); 50 | 51 | // Test if the About item was selected from the system menu 52 | if ((m.Msg == ChromeDevToolsSystemMenu.WM_SYSCOMMAND) && ((int)m.WParam == ChromeDevToolsSystemMenu.SYSMENU_CHROME_DEV_TOOLS)) 53 | { 54 | m_chromeBrowser.ShowDevTools(); 55 | } 56 | } 57 | 58 | private void BootStrapForm2_KeyPress(object sender, KeyPressEventArgs e) 59 | { 60 | } 61 | 62 | private void BootStrapForm2_KeyDown(object sender, KeyEventArgs e) 63 | { 64 | if (e.KeyCode == Keys.F12) 65 | { 66 | m_chromeBrowser.ShowDevTools(); 67 | } 68 | } 69 | 70 | private void BootStrapForm2_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) 71 | { 72 | 73 | } 74 | } 75 | 76 | public class SomeClass 77 | { 78 | public Person m_theMan = null; 79 | 80 | [JavascriptIgnore] 81 | public ChromiumWebBrowser m_chromeBrowser { get; set; } 82 | 83 | public SomeClass(ChromiumWebBrowser webBrwsr ) 84 | { 85 | m_chromeBrowser = webBrwsr; 86 | } 87 | 88 | public string SomeFunction() 89 | { 90 | return "yippieee"; 91 | } 92 | 93 | public void ButtonPressed(string buttonName) 94 | { 95 | //MessageBox.Show(string.Format("Message box from C# winforms. Msg: {0}", buttonName)); 96 | 97 | // var script = "document.body.style.backgroundColor = 'red';"; 98 | //var script = "$('#inputEmail').val('a@a.com');"; 99 | 100 | // var script = "var x = 1234"; 101 | var script = "msgBoxFromJavaScript();"; 102 | 103 | m_chromeBrowser.ExecuteScriptAsync(script); 104 | 105 | } 106 | } 107 | } 108 | -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/Demos/BootStrapForm2.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/Demos/DemoLauncherForm.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace ChromeTest.Demos 2 | { 3 | partial class DemoLauncherForm 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | this.buttonBootstrapDemo1 = new System.Windows.Forms.Button(); 32 | this.buttonBootstrapDemo2 = new System.Windows.Forms.Button(); 33 | this.buttonAmChartsDemo = new System.Windows.Forms.Button(); 34 | this.buttonWebGLDemo = new System.Windows.Forms.Button(); 35 | this.buttonCanvasParticleDemo = new System.Windows.Forms.Button(); 36 | this.buttonJQWidgetsDemo = new System.Windows.Forms.Button(); 37 | this.buttonCanvasBubblesDemo = new System.Windows.Forms.Button(); 38 | this.buttonBootStrapDemo3 = new System.Windows.Forms.Button(); 39 | this.SuspendLayout(); 40 | // 41 | // buttonBootstrapDemo1 42 | // 43 | this.buttonBootstrapDemo1.Location = new System.Drawing.Point(39, 18); 44 | this.buttonBootstrapDemo1.Name = "buttonBootstrapDemo1"; 45 | this.buttonBootstrapDemo1.Size = new System.Drawing.Size(180, 51); 46 | this.buttonBootstrapDemo1.TabIndex = 0; 47 | this.buttonBootstrapDemo1.Text = "Bootstrap Landing Page Demo 1"; 48 | this.buttonBootstrapDemo1.UseVisualStyleBackColor = true; 49 | this.buttonBootstrapDemo1.Click += new System.EventHandler(this.buttonBootstrapDemo1_Click); 50 | // 51 | // buttonBootstrapDemo2 52 | // 53 | this.buttonBootstrapDemo2.Location = new System.Drawing.Point(39, 91); 54 | this.buttonBootstrapDemo2.Name = "buttonBootstrapDemo2"; 55 | this.buttonBootstrapDemo2.Size = new System.Drawing.Size(180, 46); 56 | this.buttonBootstrapDemo2.TabIndex = 1; 57 | this.buttonBootstrapDemo2.Text = "Bootstrap Form Entry Demo 2"; 58 | this.buttonBootstrapDemo2.UseVisualStyleBackColor = true; 59 | this.buttonBootstrapDemo2.Click += new System.EventHandler(this.buttonBootstrapDemo2_Click); 60 | // 61 | // buttonAmChartsDemo 62 | // 63 | this.buttonAmChartsDemo.Location = new System.Drawing.Point(458, 88); 64 | this.buttonAmChartsDemo.Name = "buttonAmChartsDemo"; 65 | this.buttonAmChartsDemo.Size = new System.Drawing.Size(180, 46); 66 | this.buttonAmChartsDemo.TabIndex = 3; 67 | this.buttonAmChartsDemo.Text = "AM Charts Demo"; 68 | this.buttonAmChartsDemo.UseVisualStyleBackColor = true; 69 | this.buttonAmChartsDemo.Click += new System.EventHandler(this.buttonAmChartsDemo_Click); 70 | // 71 | // buttonWebGLDemo 72 | // 73 | this.buttonWebGLDemo.Location = new System.Drawing.Point(250, 16); 74 | this.buttonWebGLDemo.Name = "buttonWebGLDemo"; 75 | this.buttonWebGLDemo.Size = new System.Drawing.Size(180, 46); 76 | this.buttonWebGLDemo.TabIndex = 5; 77 | this.buttonWebGLDemo.Text = "WebGL Demo"; 78 | this.buttonWebGLDemo.UseVisualStyleBackColor = true; 79 | this.buttonWebGLDemo.Click += new System.EventHandler(this.buttonWebGLDemo_Click); 80 | // 81 | // buttonCanvasParticleDemo 82 | // 83 | this.buttonCanvasParticleDemo.Location = new System.Drawing.Point(250, 88); 84 | this.buttonCanvasParticleDemo.Name = "buttonCanvasParticleDemo"; 85 | this.buttonCanvasParticleDemo.Size = new System.Drawing.Size(180, 46); 86 | this.buttonCanvasParticleDemo.TabIndex = 6; 87 | this.buttonCanvasParticleDemo.Text = "Canvas Particle Demo"; 88 | this.buttonCanvasParticleDemo.UseVisualStyleBackColor = true; 89 | this.buttonCanvasParticleDemo.Click += new System.EventHandler(this.buttonCanvasParticleDemo_Click); 90 | // 91 | // buttonJQWidgetsDemo 92 | // 93 | this.buttonJQWidgetsDemo.Location = new System.Drawing.Point(250, 163); 94 | this.buttonJQWidgetsDemo.Name = "buttonJQWidgetsDemo"; 95 | this.buttonJQWidgetsDemo.Size = new System.Drawing.Size(180, 46); 96 | this.buttonJQWidgetsDemo.TabIndex = 7; 97 | this.buttonJQWidgetsDemo.Text = "JQWidgets Demo"; 98 | this.buttonJQWidgetsDemo.UseVisualStyleBackColor = true; 99 | // 100 | // buttonCanvasBubblesDemo 101 | // 102 | this.buttonCanvasBubblesDemo.Location = new System.Drawing.Point(458, 16); 103 | this.buttonCanvasBubblesDemo.Name = "buttonCanvasBubblesDemo"; 104 | this.buttonCanvasBubblesDemo.Size = new System.Drawing.Size(180, 46); 105 | this.buttonCanvasBubblesDemo.TabIndex = 8; 106 | this.buttonCanvasBubblesDemo.Text = "Canvas Bubbles Demo"; 107 | this.buttonCanvasBubblesDemo.UseVisualStyleBackColor = true; 108 | this.buttonCanvasBubblesDemo.Click += new System.EventHandler(this.buttonCanvasBubblesDemo_Click); 109 | // 110 | // buttonBootStrapDemo3 111 | // 112 | this.buttonBootStrapDemo3.Location = new System.Drawing.Point(39, 163); 113 | this.buttonBootStrapDemo3.Name = "buttonBootStrapDemo3"; 114 | this.buttonBootStrapDemo3.Size = new System.Drawing.Size(180, 46); 115 | this.buttonBootStrapDemo3.TabIndex = 9; 116 | this.buttonBootStrapDemo3.Text = "Bootstrap Form Entry Demo 3"; 117 | this.buttonBootStrapDemo3.UseVisualStyleBackColor = true; 118 | this.buttonBootStrapDemo3.Click += new System.EventHandler(this.buttonBootStrapDemo3_Click); 119 | // 120 | // DemoLauncherForm 121 | // 122 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 123 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 124 | this.ClientSize = new System.Drawing.Size(691, 243); 125 | this.Controls.Add(this.buttonBootStrapDemo3); 126 | this.Controls.Add(this.buttonCanvasBubblesDemo); 127 | this.Controls.Add(this.buttonJQWidgetsDemo); 128 | this.Controls.Add(this.buttonCanvasParticleDemo); 129 | this.Controls.Add(this.buttonWebGLDemo); 130 | this.Controls.Add(this.buttonAmChartsDemo); 131 | this.Controls.Add(this.buttonBootstrapDemo2); 132 | this.Controls.Add(this.buttonBootstrapDemo1); 133 | this.Name = "DemoLauncherForm"; 134 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; 135 | this.Text = "DemoLauncherForm"; 136 | this.Load += new System.EventHandler(this.DemoLauncherForm_Load); 137 | this.ResumeLayout(false); 138 | 139 | } 140 | 141 | #endregion 142 | 143 | private System.Windows.Forms.Button buttonBootstrapDemo1; 144 | private System.Windows.Forms.Button buttonBootstrapDemo2; 145 | private System.Windows.Forms.Button buttonAmChartsDemo; 146 | private System.Windows.Forms.Button buttonWebGLDemo; 147 | private System.Windows.Forms.Button buttonCanvasParticleDemo; 148 | private System.Windows.Forms.Button buttonJQWidgetsDemo; 149 | private System.Windows.Forms.Button buttonCanvasBubblesDemo; 150 | private System.Windows.Forms.Button buttonBootStrapDemo3; 151 | } 152 | } -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/Demos/DemoLauncherForm.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Data; 5 | using System.Drawing; 6 | using System.Linq; 7 | using System.Text; 8 | using System.Threading.Tasks; 9 | using System.Windows.Forms; 10 | 11 | namespace ChromeTest.Demos 12 | { 13 | public partial class DemoLauncherForm : Form 14 | { 15 | public DemoLauncherForm() 16 | { 17 | InitializeComponent(); 18 | } 19 | 20 | public static string GetAppLocation() 21 | { 22 | return AppDomain.CurrentDomain.BaseDirectory; 23 | } 24 | 25 | private void buttonBootstrapDemo1_Click(object sender, EventArgs e) 26 | { 27 | BootStrapForm form = new BootStrapForm(); 28 | if (form.ShowDialog() == System.Windows.Forms.DialogResult.OK) 29 | { 30 | MessageBox.Show("user pressed ok"); 31 | } 32 | } 33 | 34 | private void buttonBootstrapDemo2_Click(object sender, EventArgs e) 35 | { 36 | BootStrapForm2 form = new BootStrapForm2(); 37 | if (form.ShowDialog() == System.Windows.Forms.DialogResult.OK) 38 | { 39 | MessageBox.Show("user pressed ok"); 40 | } 41 | } 42 | 43 | private void DemoLauncherForm_Load(object sender, EventArgs e) 44 | { 45 | 46 | } 47 | 48 | private void buttonGenericHTMLForm_Click(object sender, EventArgs e) 49 | { 50 | 51 | } 52 | 53 | private void buttonCanvasParticleDemo_Click(object sender, EventArgs e) 54 | { 55 | string page = string.Format("{0}HTMLResources/html/canvas-particle.html", GetAppLocation()); 56 | 57 | GenericHTMLForm form = new GenericHTMLForm("Canvas Particle Example", page); 58 | if (form.ShowDialog() == System.Windows.Forms.DialogResult.OK) 59 | { 60 | MessageBox.Show("user pressed ok"); 61 | } 62 | } 63 | 64 | private void buttonCanvasBubblesDemo_Click(object sender, EventArgs e) 65 | { 66 | string page = string.Format("{0}HTMLResources/html/canvas-bubbles.html", GetAppLocation()); 67 | 68 | GenericHTMLForm form = new GenericHTMLForm("Canvas Bubbles Example", page); 69 | if (form.ShowDialog() == System.Windows.Forms.DialogResult.OK) 70 | { 71 | MessageBox.Show("user pressed ok"); 72 | } 73 | } 74 | 75 | private void buttonCSS3Demo_Click(object sender, EventArgs e) 76 | { 77 | GenericHTMLForm form = new GenericHTMLForm("CSS3 Demo", "http://daneden.github.io/animate.css/"); 78 | if (form.ShowDialog() == System.Windows.Forms.DialogResult.OK) 79 | { 80 | MessageBox.Show("user pressed ok"); 81 | } 82 | } 83 | 84 | private void buttonWebGLDemo_Click(object sender, EventArgs e) 85 | { 86 | GenericHTMLForm form = new GenericHTMLForm("WebGL Demo", "http://www.bongiovi.tw/experiments/webgl/blossom/");// "http://myshards.com/"); 87 | if (form.ShowDialog() == System.Windows.Forms.DialogResult.OK) 88 | { 89 | MessageBox.Show("user pressed ok"); 90 | } 91 | } 92 | 93 | private void buttonBootStrapDemo3_Click(object sender, EventArgs e) 94 | { 95 | string page = string.Format("{0}HTMLResources/html/BootstrapFormExample2.html", GetAppLocation()); 96 | 97 | GenericHTMLForm form = new GenericHTMLForm("Bootstrap Form Example", page); 98 | if (form.ShowDialog() == System.Windows.Forms.DialogResult.OK) 99 | { 100 | MessageBox.Show("user pressed ok"); 101 | } 102 | } 103 | 104 | private void buttonAmChartsDemo_Click(object sender, EventArgs e) 105 | { 106 | string page = string.Format("{0}HTMLResources/html/amChartExample.html", GetAppLocation()); 107 | 108 | GenericHTMLForm form = new GenericHTMLForm("AM Chart Example", page); 109 | if (form.ShowDialog() == System.Windows.Forms.DialogResult.OK) 110 | { 111 | MessageBox.Show("user pressed ok"); 112 | } 113 | } 114 | } 115 | } 116 | -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/Demos/DemoLauncherForm.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/Demos/GenericHTMLForm.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace ChromeTest.Demos 2 | { 3 | partial class GenericHTMLForm 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | this.SuspendLayout(); 32 | // 33 | // GenericHTMLForm 34 | // 35 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 36 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 37 | this.ClientSize = new System.Drawing.Size(599, 312); 38 | this.Name = "GenericHTMLForm"; 39 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; 40 | this.Text = "GenericHTMLForm"; 41 | this.Load += new System.EventHandler(this.GenericHTMLForm_Load); 42 | this.ResumeLayout(false); 43 | 44 | } 45 | 46 | #endregion 47 | } 48 | } -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/Demos/GenericHTMLForm.cs: -------------------------------------------------------------------------------- 1 | using CefSharp; 2 | using CefSharp.WinForms; 3 | using System; 4 | using System.Collections.Generic; 5 | using System.ComponentModel; 6 | using System.Data; 7 | using System.Drawing; 8 | using System.Linq; 9 | using System.Text; 10 | using System.Threading.Tasks; 11 | using System.Windows.Forms; 12 | 13 | namespace ChromeTest.Demos 14 | { 15 | public partial class GenericHTMLForm : Form 16 | { 17 | ChromiumWebBrowser m_chromeBrowser = null; 18 | 19 | string m_htmlToDisplay = ""; 20 | 21 | public GenericHTMLForm(string formTitle, string htmlToDisplay) 22 | { 23 | InitializeComponent(); 24 | 25 | this.Text = formTitle; 26 | 27 | m_htmlToDisplay = htmlToDisplay; 28 | } 29 | 30 | public static string GetAppLocation() 31 | { 32 | return AppDomain.CurrentDomain.BaseDirectory; 33 | } 34 | 35 | private void GenericHTMLForm_Load(object sender, EventArgs e) 36 | { 37 | m_chromeBrowser = new ChromiumWebBrowser(m_htmlToDisplay); 38 | 39 | Controls.Add(m_chromeBrowser); 40 | 41 | ChromeDevToolsSystemMenu.CreateSysMenu(this); 42 | } 43 | 44 | protected override void WndProc(ref Message m) 45 | { 46 | base.WndProc(ref m); 47 | 48 | // Test if the About item was selected from the system menu 49 | if ((m.Msg == ChromeDevToolsSystemMenu.WM_SYSCOMMAND) && ((int)m.WParam == ChromeDevToolsSystemMenu.SYSMENU_CHROME_DEV_TOOLS)) 50 | { 51 | m_chromeBrowser.ShowDevTools(); 52 | } 53 | } 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/Demos/GenericHTMLForm.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/FormTestJsCommunication.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace ChromeTest 2 | { 3 | partial class FormTestJsCommunication 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | this.panel1 = new System.Windows.Forms.Panel(); 32 | this.SuspendLayout(); 33 | // 34 | // panel1 35 | // 36 | this.panel1.Location = new System.Drawing.Point(12, 12); 37 | this.panel1.Name = "panel1"; 38 | this.panel1.Size = new System.Drawing.Size(433, 328); 39 | this.panel1.TabIndex = 0; 40 | // 41 | // FormTestJsCommunication 42 | // 43 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 44 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 45 | this.ClientSize = new System.Drawing.Size(527, 352); 46 | this.Controls.Add(this.panel1); 47 | this.Name = "FormTestJsCommunication"; 48 | this.Text = "FormTestJsCommunication"; 49 | this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FormTestJsCommunication_FormClosing); 50 | this.Load += new System.EventHandler(this.FormTestJsCommunication_Load); 51 | this.ResumeLayout(false); 52 | 53 | } 54 | 55 | #endregion 56 | 57 | private System.Windows.Forms.Panel panel1; 58 | } 59 | } -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/FormTestJsCommunication.cs: -------------------------------------------------------------------------------- 1 | using CefSharp; 2 | using CefSharp.WinForms; 3 | using System; 4 | using System.Collections.Generic; 5 | using System.ComponentModel; 6 | using System.Data; 7 | using System.Drawing; 8 | using System.Linq; 9 | using System.Text; 10 | using System.Threading.Tasks; 11 | using System.Windows.Forms; 12 | 13 | namespace ChromeTest 14 | { 15 | public partial class FormTestJsCommunication : Form 16 | { 17 | ChromiumWebBrowser m_chromeBrowser = null; 18 | 19 | public FormTestJsCommunication() 20 | { 21 | InitializeComponent(); 22 | } 23 | 24 | private void FormTestJsCommunication_Load(object sender, EventArgs e) 25 | { 26 | Cef.Initialize(); 27 | m_chromeBrowser = new ChromiumWebBrowser("http://www.maps.google.com"); 28 | 29 | panel1.Controls.Add(m_chromeBrowser); 30 | 31 | } 32 | 33 | private void FormTestJsCommunication_FormClosing(object sender, FormClosingEventArgs e) 34 | { 35 | Cef.Shutdown(); 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/FormTestJsCommunication.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/HTMLResources/html/BasicPage.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Title of the document 6 | 7 | 8 | 9 | Hey Hey there and Howdy! 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/HTMLResources/html/BootstrapExample.html: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | Starter Template for Bootstrap 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 45 | 46 |
47 | 48 |
49 |

Bootstrap starter template

50 |

Use this document as a way to quickly start any new project.
All you get is this text and a mostly barebones HTML document.

51 |
52 | 53 |
54 | 55 | 56 | 58 | 59 | 60 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/HTMLResources/html/BootstrapFormExample.html: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Example of Bootstrap 3 Horizontal Form Layout 6 | 7 | 8 | 9 | 10 | 19 | 20 | 21 |
22 |
23 |
24 | 25 |
26 | 27 |
28 |
29 |
30 | 31 |
32 | 33 |
34 |
35 |
36 |
37 |
38 | 39 |
40 |
41 |
42 |
43 | 44 |
45 | 46 | 47 |
48 | 49 |
50 |
51 |
52 | 53 | 54 | 69 | 70 | -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/HTMLResources/html/BootstrapFormExample2.html: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Example of Bootstrap 3 Horizontal Form Layout 6 | 7 | 8 | 9 | 10 | 19 | 20 | 21 |
26 |
27 | 28 |
29 | 30 |
31 |
32 | 33 |
34 |
35 | 36 |
37 | 38 |
39 | 40 |
41 |
42 | 43 |
44 | 45 |
46 | 47 |
48 |
49 | 50 |
51 | 52 |
53 | 54 |
55 |
56 | 57 |
58 | 59 |
60 |
61 | 64 |
65 |
66 | 69 |
70 |
71 | 74 |
75 |
76 |
77 | 78 |
79 | 80 |
81 | 82 |
83 |
84 | 85 |
86 |
87 |
88 | 91 |
92 |
93 |
94 | 95 |
96 |
97 | 98 |
99 |
100 |
101 | 102 | 200 | 201 | 202 | 217 | 218 | -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/HTMLResources/html/WinformInteractionExample.html: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 |

6 | 7 |

8 | 9 |

10 | 11 |

12 | 13 |

14 | 15 |

Results

16 | 17 | 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/HTMLResources/html/amChartExample.html: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 107 | 108 | 109 | 110 | -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/HTMLResources/html/canvas-bubbles-with-bootstrap.html: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 |
28 | 29 |
hehehe
30 | 31 | 32 | 33 | 34 | 35 | 51 | 52 | -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/HTMLResources/html/canvas-bubbles.html: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 |
18 | 19 | 20 | 36 | 37 | -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/HTMLResources/html/canvas-particle.html: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 16 | 17 | 18 | 19 | 20 | 21 | 123 | 124 | -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/HTMLResources/html/starter-template.css: -------------------------------------------------------------------------------- 1 | body { 2 | padding-top: 50px; 3 | } 4 | .starter-template { 5 | padding: 40px 15px; 6 | text-align: center; 7 | } -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/HTMLResources/js/bubbles/bubbles.js: -------------------------------------------------------------------------------- 1 | //linear//radial 2 | function bubblesMain(obj){ 3 | bubbleResize(); 4 | bubbles = new bubbleObject(obj); 5 | bubbles.createBubbles(); 6 | setInterval(start,1000/60); 7 | }; 8 | 9 | //WHEN WINDOW HEIGHT IS CHANGED, REMAKE THE CANVAS ELEMENT 10 | window.onresize = function(event) { 11 | bubbleResize(); 12 | } 13 | 14 | 15 | function bubbleResize(){ 16 | var height = parseInt(document.getElementById("canvasBubbles").clientHeight); 17 | var width = parseInt(document.getElementById("canvasBubbles").clientWidth); 18 | document.getElementById("canvasBubbles").innerHTML = ''; 19 | } 20 | 21 | function start(){ 22 | 23 | var canvas = document.getElementById("canvas"); 24 | canvas.width = canvas.width; 25 | bubbles.move(); 26 | bubbles.draw(); 27 | }; 28 | 29 | function bubbleObject(options){ 30 | (options.type) ? this.type = options.type : this.type = "linear"; 31 | if(this.type == "radial"){ 32 | (options.revolve) ? this.revolve = options.revolve : this.revolve = ""; 33 | } 34 | (options.opacity) ? this.opacity = options.opacity : this.opacity = .1; 35 | (options.colors) ? this.colors = options.colors : this.colors = new Array("#DDDDDD"); 36 | 37 | (options.minSize) ? this.minSize = options.minSize : this.minSize = 20; 38 | (options.maxSize) ? this.maxSize = options.maxSize : this.maxSize = 100; 39 | 40 | //THIS WAS SUPPOSED TO BE FOR CHANGING COLORS 41 | /*if(options.changeColors){ 42 | for(var i = 0;i 360){ 182 | this.bubbles[i].degree = this.bubbles[i].degree - 360; 183 | }else if(this.bubbles[i].degree < 0){ 184 | this.bubbles[i].degree = 360 - this.bubbles[i].degree; 185 | } 186 | 187 | 188 | 189 | //COLOR CHANGING 190 | /*if(this.changeColors != 0){ 191 | var num = (Math.floor(Math.random()*(3-1+1)+1)); 192 | 193 | 194 | var goToColor = this.changeColors[this.bubbles[i].colorType]; 195 | 196 | 197 | 198 | 199 | var fastChanging = 1; 200 | 201 | switch(num){ 202 | case 1 : 203 | if(goToColor.r > this.bubbles[i].color.r){ 204 | this.bubbles[i].color.r+=fastChanging; 205 | }else if(goToColor.r < this.bubbles[i].color.r){ 206 | this.bubbles[i].color.r-=fastChanging; 207 | } 208 | break; 209 | case 2 : 210 | if(goToColor.g > this.bubbles[i].color.g){ 211 | this.bubbles[i].color.g+=fastChanging; 212 | }else if(goToColor.g < this.bubbles[i].color.g){ 213 | this.bubbles[i].color.g-=fastChanging; 214 | } 215 | break; 216 | case 3 : 217 | if(goToColor.b > this.bubbles[i].color.b){ 218 | this.bubbles[i].color.b+=fastChanging; 219 | }else if(goToColor.b < this.bubbles[i].color.b){ 220 | this.bubbles[i].color.b-=fastChanging; 221 | } 222 | break; 223 | } 224 | 225 | 226 | 227 | }*/ 228 | 229 | /*if(this.revolve != "center"){ 230 | //RESET 231 | 232 | if(this.bubbles[i].degree >= maxDeg && this.bubbles[i].speed > 0){ 233 | this.bubbles[i].degree = minDeg; 234 | } 235 | 236 | //RESET 237 | if(this.bubbles[i].degreen <= minDeg && this.bubbles[i].speed < 0){ 238 | this.bubbles[i].degree = maxDeg; 239 | } 240 | }*/ 241 | } 242 | 243 | }else if(this.type =="linear"){ 244 | for(var i = 0;i this.bubbles[i].color.r){ 263 | this.bubbles[i].color.r+=fastChanging; 264 | }else if(goToColor.r < this.bubbles[i].color.r){ 265 | this.bubbles[i].color.r-=fastChanging; 266 | } 267 | break; 268 | case 2 : 269 | if(goToColor.g > this.bubbles[i].color.g){ 270 | this.bubbles[i].color.g+=fastChanging; 271 | }else if(goToColor.g < this.bubbles[i].color.g){ 272 | this.bubbles[i].color.g-=fastChanging; 273 | } 274 | break; 275 | case 3 : 276 | if(goToColor.b > this.bubbles[i].color.b){ 277 | this.bubbles[i].color.b+=fastChanging; 278 | }else if(goToColor.b < this.bubbles[i].color.b){ 279 | this.bubbles[i].color.b-=fastChanging; 280 | } 281 | break; 282 | } 283 | 284 | 285 | } 286 | */ 287 | var width = window.innerWidth; 288 | var height = window.innerHeight; 289 | 290 | //RESET 291 | if(this.bubbles[i].y < (0 - this.bubbles[i].size) && this.bubbles[i].yVel < 0){ 292 | //RESET Y-; 293 | this.bubbles[i].y = height; 294 | }else if(this.bubbles[i].y > (height + this.bubbles[i].size) && this.bubbles[i].yVel > 0){ 295 | //RESET Y+ 296 | this.bubbles[i].y = 0 - this.bubbles[i].size; 297 | }else if(this.bubbles[i].x < (0 - this.bubbles[i].size) && this.bubbles[i].xVel < 0){ 298 | //RESET X+ 299 | this.bubbles[i].x = width; 300 | }else if(this.bubbles[i].x > (width + this.bubbles[i].size) && this.bubbles[i].xVel > 0){ 301 | //RESET X-; 302 | this.bubbles[i].x = 0 - this.bubbles[i].size; 303 | } 304 | 305 | 306 | } 307 | } 308 | } 309 | 310 | this.draw = function(){ 311 | var canvas = document.getElementById("canvas"); 312 | var ctx = canvas.getContext("2d"); 313 | var len = this.bubbles.length; 314 | if(this.type == "radial"){ 315 | for(var i = 0;i 2 | 3 | 27 | 28 | 29 |
30 |
31 |
32 | 36 | 43 | 44 | 45 | 46 | 47 | 48 | 49 |
50 |
51 | 52 | 83 | 84 | -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/HTMLResources/libs/amcharts/style.css: -------------------------------------------------------------------------------- 1 | .amChartsDataSetSelector 2 | { 3 | font-size:12px; 4 | font-family:verdana,helvetica,arial,sans-serif; 5 | } 6 | 7 | .amChartsPeriodSelector 8 | { 9 | font-size:12px; 10 | font-family:verdana,helvetica,arial,sans-serif; 11 | } 12 | 13 | .amChartsButtonSelected 14 | { 15 | background-color:#CC0000; 16 | border-style:solid; 17 | border-color:#CC0000; 18 | border-width:1px; 19 | color:#FFFFFF; 20 | -moz-border-radius: 5px; 21 | border-radius: 5px; 22 | margin: 1px; 23 | outline: none; 24 | box-sizing: border-box; 25 | } 26 | 27 | .amChartsButton 28 | { 29 | color: #000000; 30 | background: transparent; 31 | opacity: 0.7; 32 | border: 1px solid rgba(0, 0, 0, .3); 33 | -moz-border-radius: 5px; 34 | border-radius: 5px; 35 | margin: 1px; 36 | outline: none; 37 | box-sizing: border-box; 38 | } 39 | 40 | .amChartsCompareList 41 | { 42 | border-style:solid; 43 | border-color:#CCCCCC; 44 | border-width:1px; 45 | } 46 | 47 | .amChartsCompareList div 48 | { 49 | -webkit-box-sizing: initial; 50 | box-sizing: initial; 51 | } 52 | 53 | .amChartsInputField 54 | { 55 | 56 | } 57 | 58 | .amChartsLegend 59 | { 60 | 61 | } 62 | 63 | .amChartsPanel 64 | { 65 | 66 | } -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/HTMLResources/libs/amcharts/themes/black.js: -------------------------------------------------------------------------------- 1 | AmCharts.themes.black = { 2 | 3 | themeName: "black", 4 | 5 | AmChart: { 6 | color: "#e7e7e7", backgroundColor: "#222222" 7 | }, 8 | 9 | AmCoordinateChart: { 10 | colors: ["#de4c4f", "#d8854f", "#eea638", "#a7a737", "#86a965", "#8aabb0", "#69c8ff", "#cfd27e", "#9d9888", "#916b8a", "#724887", "#7256bc"] 11 | }, 12 | 13 | AmStockChart: { 14 | colors: ["#de4c4f", "#d8854f", "#eea638", "#a7a737", "#86a965", "#8aabb0", "#69c8ff", "#cfd27e", "#9d9888", "#916b8a", "#724887", "#7256bc"] 15 | }, 16 | 17 | AmSlicedChart: { 18 | outlineAlpha: 1, 19 | outlineThickness: 2, 20 | labelTickColor: "#FFFFFF", 21 | labelTickAlpha: 0.3, 22 | colors: ["#de4c4f", "#d8854f", "#eea638", "#a7a737", "#86a965", "#8aabb0", "#69c8ff", "#cfd27e", "#9d9888", "#916b8a", "#724887", "#7256bc"] 23 | }, 24 | 25 | AmRectangularChart: { 26 | zoomOutButtonColor: '#FFFFFF', 27 | zoomOutButtonRollOverAlpha: 0.15, 28 | zoomOutButtonImage: "lensWhite.png" 29 | }, 30 | 31 | AxisBase: { 32 | axisColor: "#FFFFFF", 33 | axisAlpha: 0.3, 34 | gridAlpha: 0.1, 35 | gridColor: "#FFFFFF", 36 | dashLength: 3 37 | }, 38 | 39 | ChartScrollbar: { 40 | backgroundColor: "#000000", 41 | backgroundAlpha: 0.2, 42 | graphFillAlpha: 0.2, 43 | graphLineAlpha: 0, 44 | graphFillColor: "#FFFFFF", 45 | selectedGraphFillColor: "#FFFFFF", 46 | selectedGraphFillAlpha: 0.4, 47 | selectedGraphLineColor: "#FFFFFF", 48 | selectedBackgroundColor: "#FFFFFF", 49 | selectedBackgroundAlpha: 0.09, 50 | gridAlpha: 0.15 51 | }, 52 | 53 | ChartCursor: { 54 | cursorColor: "#FFFFFF", 55 | color: "#000000", 56 | cursorAlpha: 0.5 57 | }, 58 | 59 | AmLegend: { 60 | color: "#e7e7e7" 61 | }, 62 | 63 | AmGraph: { 64 | lineAlpha: 0.9 65 | }, 66 | 67 | 68 | GaugeArrow: { 69 | color: "#FFFFFF", 70 | alpha: 0.8, 71 | nailAlpha: 0, 72 | innerRadius: "40%", 73 | nailRadius: 15, 74 | startWidth: 15, 75 | borderAlpha: 0.8, 76 | nailBorderAlpha: 0 77 | }, 78 | 79 | GaugeAxis: { 80 | tickColor: "#FFFFFF", 81 | tickAlpha: 1, 82 | tickLength: 15, 83 | minorTickLength: 8, 84 | axisThickness: 3, 85 | axisColor: '#FFFFFF', 86 | axisAlpha: 1, 87 | bandAlpha: 0.8 88 | }, 89 | 90 | TrendLine: { 91 | lineColor: "#c03246", 92 | lineAlpha: 0.8 93 | }, 94 | 95 | // ammap 96 | AreasSettings: { 97 | alpha: 0.8, 98 | color: "#FFFFFF", 99 | colorSolid: "#000000", 100 | unlistedAreasAlpha: 0.4, 101 | unlistedAreasColor: "#FFFFFF", 102 | outlineColor: "#000000", 103 | outlineAlpha: 0.5, 104 | outlineThickness: 0.5, 105 | rollOverColor: "#3c5bdc", 106 | rollOverOutlineColor: "#000000", 107 | selectedOutlineColor: "#000000", 108 | selectedColor: "#f15135", 109 | unlistedAreasOutlineColor: "#000000", 110 | unlistedAreasOutlineAlpha: 0.5 111 | }, 112 | 113 | LinesSettings: { 114 | color: "#FFFFFF", 115 | alpha: 0.8 116 | }, 117 | 118 | ImagesSettings: { 119 | alpha: 0.8, 120 | labelColor: "#FFFFFF", 121 | color: "#FFFFFF", 122 | labelRollOverColor: "#3c5bdc" 123 | }, 124 | 125 | ZoomControl: { 126 | buttonRollOverColor: "#3c5bdc", 127 | buttonFillColor: "#738f58", 128 | buttonBorderColor: "#738f58", 129 | buttonFillAlpha: 0.8, 130 | gridBackgroundColor: "#FFFFFF", 131 | buttonBorderAlpha:0, 132 | buttonCornerRadius:2, 133 | gridAlpha:0.5, 134 | gridBackgroundColor:"#FFFFFF", 135 | homeIconFile:"homeIconWhite.gif", 136 | buttonIconAlpha:0.6, 137 | gridAlpha: 0.2, 138 | buttonSize:20 139 | }, 140 | 141 | SmallMap: { 142 | mapColor: "#FFFFFF", 143 | rectangleColor: "#FFFFFF", 144 | backgroundColor: "#000000", 145 | backgroundAlpha: 0.7, 146 | borderThickness: 1, 147 | borderAlpha: 0.8 148 | }, 149 | 150 | // the defaults below are set using CSS syntax, you can use any existing css property 151 | // if you don't use Stock chart, you can delete lines below 152 | PeriodSelector: { 153 | color: "#e7e7e7" 154 | }, 155 | 156 | PeriodButton: { 157 | color: "#e7e7e7", 158 | background: "transparent", 159 | opacity: 0.7, 160 | border: "1px solid rgba(255, 255, 255, .15)", 161 | MozBorderRadius: "5px", 162 | borderRadius: "5px", 163 | margin: "1px", 164 | outline: "none", 165 | boxSizing: "border-box" 166 | }, 167 | 168 | PeriodButtonSelected: { 169 | color: "#e7e7e7", 170 | backgroundColor: "rgba(255, 255, 255, 0.1)", 171 | border: "1px solid rgba(255, 255, 255, .3)", 172 | MozBorderRadius: "5px", 173 | borderRadius: "5px", 174 | margin: "1px", 175 | outline: "none", 176 | opacity: 1, 177 | boxSizing: "border-box" 178 | }, 179 | 180 | PeriodInputField: { 181 | color: "#e7e7e7", 182 | background: "transparent", 183 | border: "1px solid rgba(255, 255, 255, .15)", 184 | outline: "none" 185 | }, 186 | 187 | DataSetSelector: { 188 | color: "#e7e7e7", 189 | selectedBackgroundColor: "rgba(255, 255, 255, .25)", 190 | rollOverBackgroundColor: "rgba(255, 255, 255, .15)" 191 | }, 192 | 193 | DataSetCompareList: { 194 | color: "#e7e7e7", 195 | lineHeight: "100%", 196 | boxSizing: "initial", 197 | webkitBoxSizing: "initial", 198 | border: "1px solid rgba(255, 255, 255, .15)" 199 | }, 200 | 201 | DataSetSelect: { 202 | border: "1px solid rgba(255, 255, 255, .15)", 203 | outline: "none" 204 | } 205 | 206 | }; -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/HTMLResources/libs/amcharts/themes/chalk.js: -------------------------------------------------------------------------------- 1 | AmCharts.themes.chalk = { 2 | 3 | themeName: "chalk", 4 | 5 | AmChart: { 6 | color: "#e7e7e7", 7 | fontFamily: "Covered By Your Grace", 8 | fontSize: 18, 9 | handDrawn: true, 10 | backgroundColor: "#282828" 11 | }, 12 | 13 | AmCoordinateChart: { 14 | colors: ["#FFFFFF", "#e384a6", "#f4d499", "#4d90d6", "#c7e38c", "#9986c8", "#edf28c", "#ffd1d4", "#5ee1dc", "#b0eead", "#fef85a", "#8badd2"] 15 | }, 16 | 17 | AmSlicedChart: { 18 | outlineAlpha: 1, 19 | labelTickColor: "#FFFFFF", 20 | labelTickAlpha: 0.3, 21 | colors: ["#FFFFFF", "#e384a6", "#f4d499", "#4d90d6", "#c7e38c", "#9986c8", "#edf28c", "#ffd1d4", "#5ee1dc", "#b0eead", "#fef85a", "#8badd2"] 22 | }, 23 | 24 | AmStockChart: { 25 | colors: ["#FFFFFF", "#e384a6", "#f4d499", "#4d90d6", "#c7e38c", "#9986c8", "#edf28c", "#ffd1d4", "#5ee1dc", "#b0eead", "#fef85a", "#8badd2"] 26 | }, 27 | 28 | AmRectangularChart: { 29 | 30 | zoomOutButtonColor: '#FFFFFF', 31 | zoomOutButtonRollOverAlpha: 0.15, 32 | zoomOutButtonImage: "lensWhite.png" 33 | }, 34 | 35 | AxisBase: { 36 | axisColor: "#FFFFFF", 37 | gridColor: "#FFFFFF" 38 | }, 39 | 40 | ChartScrollbar: { 41 | backgroundColor: "#FFFFFF", 42 | backgroundAlpha: 0.2, 43 | graphFillAlpha: 0.5, 44 | graphLineAlpha: 0, 45 | selectedBackgroundColor: "#000000", 46 | selectedBackgroundAlpha: 0.25, 47 | fontSize: 15, 48 | gridAlpha: 0.15 49 | }, 50 | 51 | ChartCursor: { 52 | cursorColor: "#FFFFFF", 53 | color: "#000000" 54 | }, 55 | 56 | AmLegend: { 57 | color: "#e7e7e7", 58 | markerSize: 20 59 | }, 60 | 61 | AmGraph: { 62 | lineAlpha: 0.8 63 | }, 64 | 65 | 66 | GaugeArrow: { 67 | color: "#FFFFFF", 68 | alpha: 0.1, 69 | nailAlpha: 0, 70 | innerRadius: "40%", 71 | nailRadius: 15, 72 | startWidth: 15, 73 | borderAlpha: 0.8, 74 | nailBorderAlpha: 0 75 | }, 76 | 77 | GaugeAxis: { 78 | tickColor: "#FFFFFF", 79 | tickAlpha: 0.8, 80 | tickLength: 15, 81 | minorTickLength: 8, 82 | axisThickness: 3, 83 | axisColor: '#FFFFFF', 84 | axisAlpha: 0.8, 85 | bandAlpha: 0.4 86 | }, 87 | 88 | TrendLine: { 89 | lineColor: "#c03246", 90 | lineAlpha: 0.8 91 | }, 92 | 93 | // ammap 94 | AmMap: { 95 | handDrawn: false 96 | }, 97 | 98 | AreasSettings: { 99 | alpha: 0.8, 100 | color: "#FFFFFF", 101 | colorSolid: "#000000", 102 | unlistedAreasAlpha: 0.4, 103 | unlistedAreasColor: "#FFFFFF", 104 | outlineColor: "#000000", 105 | outlineAlpha: 0.5, 106 | outlineThickness: 0.5, 107 | rollOverColor: "#4d90d6", 108 | rollOverOutlineColor: "#000000", 109 | selectedOutlineColor: "#000000", 110 | selectedColor: "#e384a6", 111 | unlistedAreasOutlineColor: "#000000", 112 | unlistedAreasOutlineAlpha: 0.5 113 | }, 114 | 115 | LinesSettings: { 116 | color: "#FFFFFF", 117 | alpha: 0.8 118 | }, 119 | 120 | ImagesSettings: { 121 | alpha: 0.8, 122 | labelFontSize: 16, 123 | labelColor: "#FFFFFF", 124 | color: "#FFFFFF", 125 | labelRollOverColor: "#4d90d6" 126 | }, 127 | 128 | ZoomControl: { 129 | buttonRollOverColor: "#4d90d6", 130 | buttonFillColor: "#e384a6", 131 | buttonFillAlpha: 0.8, 132 | buttonBorderColor: "#FFFFFF", 133 | gridBackgroundColor: "#FFFFFF", 134 | gridAlpha: 0.8 135 | }, 136 | 137 | SmallMap: { 138 | mapColor: "#FFFFFF", 139 | rectangleColor: "#FFFFFF", 140 | backgroundColor: "#000000", 141 | backgroundAlpha: 0.7, 142 | borderThickness: 1, 143 | borderAlpha: 0.8 144 | }, 145 | 146 | 147 | // the defaults below are set using CSS syntax, you can use any existing css property 148 | // if you don't use Stock chart, you can delete lines below 149 | PeriodSelector: { 150 | fontFamily: "Covered By Your Grace", 151 | fontSize:"16px", 152 | color: "#e7e7e7" 153 | }, 154 | 155 | PeriodButton: { 156 | fontFamily: "Covered By Your Grace", 157 | fontSize:"16px", 158 | color: "#e7e7e7", 159 | background: "transparent", 160 | opacity: 0.7, 161 | border: "1px solid rgba(255, 255, 255, .15)", 162 | MozBorderRadius: "5px", 163 | borderRadius: "5px", 164 | margin: "1px", 165 | outline: "none", 166 | boxSizing: "border-box" 167 | }, 168 | 169 | PeriodButtonSelected: { 170 | fontFamily: "Covered By Your Grace", 171 | fontSize:"16px", 172 | color: "#e7e7e7", 173 | backgroundColor: "rgba(255, 255, 255, 0.1)", 174 | border: "1px solid rgba(255, 255, 255, .3)", 175 | MozBorderRadius: "5px", 176 | borderRadius: "5px", 177 | margin: "1px", 178 | outline: "none", 179 | opacity: 1, 180 | boxSizing: "border-box" 181 | }, 182 | 183 | PeriodInputField: { 184 | fontFamily: "Covered By Your Grace", 185 | fontSize:"16px", 186 | color: "#e7e7e7", 187 | background: "transparent", 188 | border: "1px solid rgba(255, 255, 255, .15)", 189 | outline: "none" 190 | }, 191 | 192 | DataSetSelector: { 193 | fontFamily: "Covered By Your Grace", 194 | fontSize:"16px", 195 | color: "#e7e7e7", 196 | selectedBackgroundColor: "rgba(255, 255, 255, .25)", 197 | rollOverBackgroundColor: "rgba(255, 255, 255, .15)" 198 | }, 199 | 200 | DataSetCompareList: { 201 | fontFamily: "Covered By Your Grace", 202 | fontSize:"16px", 203 | color: "#e7e7e7", 204 | lineHeight: "100%", 205 | boxSizing: "initial", 206 | webkitBoxSizing: "initial", 207 | border: "1px solid rgba(255, 255, 255, .15)" 208 | }, 209 | 210 | DataSetSelect: { 211 | fontFamily: "Covered By Your Grace", 212 | fontSize:"16px", 213 | border: "1px solid rgba(255, 255, 255, .15)", 214 | outline: "none" 215 | } 216 | 217 | }; -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/HTMLResources/libs/amcharts/themes/dark.js: -------------------------------------------------------------------------------- 1 | AmCharts.themes.dark = { 2 | 3 | themeName: "dark", 4 | 5 | AmChart: { 6 | color: "#e7e7e7", backgroundColor: "#282828" 7 | }, 8 | 9 | AmCoordinateChart: { 10 | colors: ["#ae85c9", "#aab9f7", "#b6d2ff", "#c9e6f2", "#c9f0e1", "#e8d685", "#e0ad63", "#d48652", "#d27362", "#495fba", "#7a629b", "#8881cc"] 11 | }, 12 | 13 | AmStockChart: { 14 | colors: ["#639dbd", "#e8d685", "#ae85c9", "#c9f0e1", "#d48652", "#629b6d", "#719dc3", "#719dc3"] 15 | }, 16 | 17 | AmSlicedChart: { 18 | outlineAlpha: 1, 19 | outlineThickness: 2, 20 | labelTickColor: "#FFFFFF", 21 | labelTickAlpha: 0.3, 22 | colors: ["#495fba", "#e8d685", "#ae85c9", "#c9f0e1", "#d48652", "#629b6d", "#719dc3", "#719dc3"] 23 | }, 24 | 25 | AmRectangularChart: { 26 | zoomOutButtonColor: '#FFFFFF', 27 | zoomOutButtonRollOverAlpha: 0.15, 28 | zoomOutButtonImage: "lensWhite.png" 29 | }, 30 | 31 | AxisBase: { 32 | axisColor: "#FFFFFF", 33 | axisAlpha: 0.3, 34 | gridAlpha: 0.1, 35 | gridColor: "#FFFFFF", 36 | dashLength: 3 37 | }, 38 | 39 | ChartScrollbar: { 40 | backgroundColor: "#000000", 41 | backgroundAlpha: 0.2, 42 | graphFillAlpha: 0.2, 43 | graphLineAlpha: 0, 44 | graphFillColor: "#FFFFFF", 45 | selectedGraphFillColor: "#FFFFFF", 46 | selectedGraphFillAlpha: 0.4, 47 | selectedGraphLineColor: "#FFFFFF", 48 | selectedBackgroundColor: "#FFFFFF", 49 | selectedBackgroundAlpha: 0.09, 50 | gridAlpha: 0.15 51 | }, 52 | 53 | ChartCursor: { 54 | cursorColor: "#FFFFFF", 55 | color: "#000000", 56 | cursorAlpha: 0.5 57 | }, 58 | 59 | AmLegend: { 60 | color: "#e7e7e7" 61 | }, 62 | 63 | AmGraph: { 64 | lineAlpha: 0.9 65 | }, 66 | 67 | 68 | GaugeArrow: { 69 | color: "#FFFFFF", 70 | alpha: 0.8, 71 | nailAlpha: 0, 72 | innerRadius: "40%", 73 | nailRadius: 15, 74 | startWidth: 15, 75 | borderAlpha: 0.8, 76 | nailBorderAlpha: 0 77 | }, 78 | 79 | GaugeAxis: { 80 | tickColor: "#FFFFFF", 81 | tickAlpha: 1, 82 | tickLength: 15, 83 | minorTickLength: 8, 84 | axisThickness: 3, 85 | axisColor: '#FFFFFF', 86 | axisAlpha: 1, 87 | bandAlpha: 0.8 88 | }, 89 | 90 | TrendLine: { 91 | lineColor: "#c03246", 92 | lineAlpha: 0.8 93 | }, 94 | 95 | // ammap 96 | AreasSettings: { 97 | alpha: 0.8, 98 | color: "#FFFFFF", 99 | colorSolid: "#000000", 100 | unlistedAreasAlpha: 0.4, 101 | unlistedAreasColor: "#FFFFFF", 102 | outlineColor: "#000000", 103 | outlineAlpha: 0.5, 104 | outlineThickness: 0.5, 105 | rollOverColor: "#3c5bdc", 106 | rollOverOutlineColor: "#000000", 107 | selectedOutlineColor: "#000000", 108 | selectedColor: "#f15135", 109 | unlistedAreasOutlineColor: "#000000", 110 | unlistedAreasOutlineAlpha: 0.5 111 | }, 112 | 113 | LinesSettings: { 114 | color: "#FFFFFF", 115 | alpha: 0.8 116 | }, 117 | 118 | ImagesSettings: { 119 | alpha: 0.8, 120 | labelColor: "#FFFFFF", 121 | color: "#FFFFFF", 122 | labelRollOverColor: "#3c5bdc" 123 | }, 124 | 125 | ZoomControl: { 126 | buttonRollOverColor: "#3c5bdc", 127 | buttonFillColor: "#f15135", 128 | buttonFillAlpha: 0.8, 129 | gridBackgroundColor: "#FFFFFF", 130 | buttonBorderAlpha:0, 131 | buttonCornerRadius:2, 132 | gridAlpha:0.5, 133 | gridBackgroundColor:"#FFFFFF", 134 | homeIconFile:"homeIconWhite.gif", 135 | buttonIconAlpha:0.6, 136 | gridAlpha: 0.2, 137 | buttonSize:20 138 | }, 139 | 140 | SmallMap: { 141 | mapColor: "#FFFFFF", 142 | rectangleColor: "#FFFFFF", 143 | backgroundColor: "#000000", 144 | backgroundAlpha: 0.7, 145 | borderThickness: 1, 146 | borderAlpha: 0.8 147 | }, 148 | 149 | // the defaults below are set using CSS syntax, you can use any existing css property 150 | // if you don't use Stock chart, you can delete lines below 151 | PeriodSelector: { 152 | color: "#e7e7e7" 153 | }, 154 | 155 | PeriodButton: { 156 | color: "#e7e7e7", 157 | background: "transparent", 158 | opacity: 0.7, 159 | border: "1px solid rgba(255, 255, 255, .15)", 160 | MozBorderRadius: "5px", 161 | borderRadius: "5px", 162 | margin: "1px", 163 | outline: "none", 164 | boxSizing: "border-box" 165 | }, 166 | 167 | PeriodButtonSelected: { 168 | color: "#e7e7e7", 169 | backgroundColor: "rgba(255, 255, 255, 0.1)", 170 | border: "1px solid rgba(255, 255, 255, .3)", 171 | MozBorderRadius: "5px", 172 | borderRadius: "5px", 173 | margin: "1px", 174 | outline: "none", 175 | opacity: 1, 176 | boxSizing: "border-box" 177 | }, 178 | 179 | PeriodInputField: { 180 | color: "#e7e7e7", 181 | background: "transparent", 182 | border: "1px solid rgba(255, 255, 255, .15)", 183 | outline: "none" 184 | }, 185 | 186 | DataSetSelector: { 187 | color: "#e7e7e7", 188 | selectedBackgroundColor: "rgba(255, 255, 255, .25)", 189 | rollOverBackgroundColor: "rgba(255, 255, 255, .15)" 190 | }, 191 | 192 | DataSetCompareList: { 193 | color: "#e7e7e7", 194 | lineHeight: "100%", 195 | boxSizing: "initial", 196 | webkitBoxSizing: "initial", 197 | border: "1px solid rgba(255, 255, 255, .15)" 198 | }, 199 | 200 | DataSetSelect: { 201 | border: "1px solid rgba(255, 255, 255, .15)", 202 | outline: "none" 203 | } 204 | 205 | }; -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/HTMLResources/libs/amcharts/themes/light.js: -------------------------------------------------------------------------------- 1 | AmCharts.themes.light = { 2 | 3 | themeName:"light", 4 | 5 | AmChart: { 6 | color: "#000000", backgroundColor: "#FFFFFF" 7 | }, 8 | 9 | AmCoordinateChart: { 10 | colors: ["#67b7dc", "#fdd400", "#84b761", "#cc4748", "#cd82ad", "#2f4074", "#448e4d", "#b7b83f", "#b9783f", "#b93e3d", "#913167"] 11 | }, 12 | 13 | AmStockChart: { 14 | colors: ["#67b7dc", "#fdd400", "#84b761", "#cc4748", "#cd82ad", "#2f4074", "#448e4d", "#b7b83f", "#b9783f", "#b93e3d", "#913167"] 15 | }, 16 | 17 | AmSlicedChart: { 18 | colors: ["#67b7dc", "#fdd400", "#84b761", "#cc4748", "#cd82ad", "#2f4074", "#448e4d", "#b7b83f", "#b9783f", "#b93e3d", "#913167"], 19 | outlineAlpha: 1, 20 | outlineThickness: 2, 21 | labelTickColor: "#000000", 22 | labelTickAlpha: 0.3 23 | }, 24 | 25 | AmRectangularChart: { 26 | zoomOutButtonColor: '#000000', 27 | zoomOutButtonRollOverAlpha: 0.15, 28 | zoomOutButtonImage: "lens.png" 29 | }, 30 | 31 | AxisBase: { 32 | axisColor: "#000000", 33 | axisAlpha: 0.3, 34 | gridAlpha: 0.1, 35 | gridColor: "#000000" 36 | }, 37 | 38 | ChartScrollbar: { 39 | backgroundColor: "#000000", 40 | backgroundAlpha: 0.12, 41 | graphFillAlpha: 0.5, 42 | graphLineAlpha: 0, 43 | selectedBackgroundColor: "#FFFFFF", 44 | selectedBackgroundAlpha: 0.4, 45 | gridAlpha: 0.15 46 | }, 47 | 48 | ChartCursor: { 49 | cursorColor: "#000000", 50 | color: "#FFFFFF", 51 | cursorAlpha: 0.5 52 | }, 53 | 54 | AmLegend: { 55 | color: "#000000" 56 | }, 57 | 58 | AmGraph: { 59 | lineAlpha: 0.9 60 | }, 61 | GaugeArrow: { 62 | color: "#000000", 63 | alpha: 0.8, 64 | nailAlpha: 0, 65 | innerRadius: "40%", 66 | nailRadius: 15, 67 | startWidth: 15, 68 | borderAlpha: 0.8, 69 | nailBorderAlpha: 0 70 | }, 71 | 72 | GaugeAxis: { 73 | tickColor: "#000000", 74 | tickAlpha: 1, 75 | tickLength: 15, 76 | minorTickLength: 8, 77 | axisThickness: 3, 78 | axisColor: '#000000', 79 | axisAlpha: 1, 80 | bandAlpha: 0.8 81 | }, 82 | 83 | TrendLine: { 84 | lineColor: "#c03246", 85 | lineAlpha: 0.8 86 | }, 87 | 88 | // ammap 89 | AreasSettings: { 90 | alpha: 0.8, 91 | color: "#67b7dc", 92 | colorSolid: "#003767", 93 | unlistedAreasAlpha: 0.4, 94 | unlistedAreasColor: "#000000", 95 | outlineColor: "#FFFFFF", 96 | outlineAlpha: 0.5, 97 | outlineThickness: 0.5, 98 | rollOverColor: "#3c5bdc", 99 | rollOverOutlineColor: "#FFFFFF", 100 | selectedOutlineColor: "#FFFFFF", 101 | selectedColor: "#f15135", 102 | unlistedAreasOutlineColor: "#FFFFFF", 103 | unlistedAreasOutlineAlpha: 0.5 104 | }, 105 | 106 | LinesSettings: { 107 | color: "#000000", 108 | alpha: 0.8 109 | }, 110 | 111 | ImagesSettings: { 112 | alpha: 0.8, 113 | labelColor: "#000000", 114 | color: "#000000", 115 | labelRollOverColor: "#3c5bdc" 116 | }, 117 | 118 | ZoomControl: { 119 | buttonRollOverColor: "#3c5bdc", 120 | buttonFillColor: "#3994e2", 121 | buttonBorderColor: "#3994e2", 122 | buttonFillAlpha: 0.8, 123 | gridBackgroundColor: "#FFFFFF", 124 | buttonBorderAlpha:0, 125 | buttonCornerRadius:2, 126 | gridColor:"#FFFFFF", 127 | gridBackgroundColor:"#000000", 128 | buttonIconAlpha:0.6, 129 | gridAlpha: 0.6, 130 | buttonSize:20 131 | }, 132 | 133 | SmallMap: { 134 | mapColor: "#000000", 135 | rectangleColor: "#f15135", 136 | backgroundColor: "#FFFFFF", 137 | backgroundAlpha: 0.7, 138 | borderThickness: 1, 139 | borderAlpha: 0.8 140 | }, 141 | 142 | // the defaults below are set using CSS syntax, you can use any existing css property 143 | // if you don't use Stock chart, you can delete lines below 144 | PeriodSelector: { 145 | color: "#000000" 146 | }, 147 | 148 | PeriodButton: { 149 | color: "#000000", 150 | background: "transparent", 151 | opacity: 0.7, 152 | border: "1px solid rgba(0, 0, 0, .3)", 153 | MozBorderRadius: "5px", 154 | borderRadius: "5px", 155 | margin: "1px", 156 | outline: "none", 157 | boxSizing: "border-box" 158 | }, 159 | 160 | PeriodButtonSelected: { 161 | color: "#000000", 162 | backgroundColor: "#b9cdf5", 163 | border: "1px solid rgba(0, 0, 0, .3)", 164 | MozBorderRadius: "5px", 165 | borderRadius: "5px", 166 | margin: "1px", 167 | outline: "none", 168 | opacity: 1, 169 | boxSizing: "border-box" 170 | }, 171 | 172 | PeriodInputField: { 173 | color: "#000000", 174 | background: "transparent", 175 | border: "1px solid rgba(0, 0, 0, .3)", 176 | outline: "none" 177 | }, 178 | 179 | DataSetSelector: { 180 | 181 | color: "#000000", 182 | selectedBackgroundColor: "#b9cdf5", 183 | rollOverBackgroundColor: "#a8b0e4" 184 | }, 185 | 186 | DataSetCompareList: { 187 | color: "#000000", 188 | lineHeight: "100%", 189 | boxSizing: "initial", 190 | webkitBoxSizing: "initial", 191 | border: "1px solid rgba(0, 0, 0, .3)" 192 | }, 193 | 194 | DataSetSelect: { 195 | border: "1px solid rgba(0, 0, 0, .3)", 196 | outline: "none" 197 | } 198 | 199 | }; -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/HTMLResources/libs/amcharts/themes/patterns.js: -------------------------------------------------------------------------------- 1 | AmCharts.themes.patterns = { 2 | 3 | themeName:"patterns", 4 | 5 | AmChart: { 6 | color: "#000000", backgroundColor: "#FFFFFF" 7 | }, 8 | 9 | AmCoordinateChart: { 10 | colors:["#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000"], 11 | patterns:[ 12 | {"url":"../amcharts/patterns/black/pattern1.png", "width":4, "height":4}, 13 | {"url":"../amcharts/patterns/black/pattern2.png", "width":4, "height":4}, 14 | {"url":"../amcharts/patterns/black/pattern3.png", "width":4, "height":4}, 15 | {"url":"../amcharts/patterns/black/pattern4.png", "width":4, "height":4}, 16 | {"url":"../amcharts/patterns/black/pattern5.png", "width":4, "height":4}, 17 | {"url":"../amcharts/patterns/black/pattern6.png", "width":4, "height":4}, 18 | {"url":"../amcharts/patterns/black/pattern7.png", "width":4, "height":4}, 19 | {"url":"../amcharts/patterns/black/pattern8.png", "width":4, "height":4}, 20 | {"url":"../amcharts/patterns/black/pattern9.png", "width":4, "height":4}, 21 | {"url":"../amcharts/patterns/black/pattern10.png", "width":4, "height":4}, 22 | {"url":"../amcharts/patterns/black/pattern11.png", "width":4, "height":4}, 23 | {"url":"../amcharts/patterns/black/pattern12.png", "width":4, "height":4}, 24 | {"url":"../amcharts/patterns/black/pattern13.png", "width":4, "height":4}, 25 | {"url":"../amcharts/patterns/black/pattern14.png", "width":4, "height":4}, 26 | {"url":"../amcharts/patterns/black/pattern15.png", "width":4, "height":4}, 27 | {"url":"../amcharts/patterns/black/pattern16.png", "width":4, "height":4}, 28 | {"url":"../amcharts/patterns/black/pattern17.png", "width":4, "height":4}, 29 | {"url":"../amcharts/patterns/black/pattern18.png", "width":4, "height":4}, 30 | {"url":"../amcharts/patterns/black/pattern19.png", "width":4, "height":4}, 31 | {"url":"../amcharts/patterns/black/pattern20.png", "width":4, "height":4}, 32 | {"url":"../amcharts/patterns/black/pattern21.png", "width":4, "height":4}] 33 | }, 34 | 35 | 36 | AmStockChart: { 37 | colors:["#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000"] 38 | }, 39 | 40 | AmPieChart: { 41 | depth3D:0, 42 | angle:0, 43 | labelRadius:10 44 | }, 45 | 46 | AmSlicedChart: { 47 | outlineAlpha: 0.3, 48 | colors:["#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000","#000000"], 49 | outlineThickness: 1, 50 | outlineColor:"#000000", 51 | labelTickColor: "#000000", 52 | labelTickAlpha: 0.3, 53 | patterns:[ 54 | {"url":"../amcharts/patterns/black/pattern1.png", "width":4, "height":4}, 55 | {"url":"../amcharts/patterns/black/pattern2.png", "width":4, "height":4}, 56 | {"url":"../amcharts/patterns/black/pattern3.png", "width":4, "height":4}, 57 | {"url":"../amcharts/patterns/black/pattern4.png", "width":4, "height":4}, 58 | {"url":"../amcharts/patterns/black/pattern5.png", "width":4, "height":4}, 59 | {"url":"../amcharts/patterns/black/pattern6.png", "width":4, "height":4}, 60 | {"url":"../amcharts/patterns/black/pattern7.png", "width":4, "height":4}, 61 | {"url":"../amcharts/patterns/black/pattern8.png", "width":4, "height":4}, 62 | {"url":"../amcharts/patterns/black/pattern9.png", "width":4, "height":4}, 63 | {"url":"../amcharts/patterns/black/pattern10.png", "width":4, "height":4}, 64 | {"url":"../amcharts/patterns/black/pattern11.png", "width":4, "height":4}, 65 | {"url":"../amcharts/patterns/black/pattern12.png", "width":4, "height":4}, 66 | {"url":"../amcharts/patterns/black/pattern13.png", "width":4, "height":4}, 67 | {"url":"../amcharts/patterns/black/pattern14.png", "width":4, "height":4}, 68 | {"url":"../amcharts/patterns/black/pattern15.png", "width":4, "height":4}, 69 | {"url":"../amcharts/patterns/black/pattern16.png", "width":4, "height":4}, 70 | {"url":"../amcharts/patterns/black/pattern17.png", "width":4, "height":4}, 71 | {"url":"../amcharts/patterns/black/pattern18.png", "width":4, "height":4}, 72 | {"url":"../amcharts/patterns/black/pattern19.png", "width":4, "height":4}, 73 | {"url":"../amcharts/patterns/black/pattern20.png", "width":4, "height":4}, 74 | {"url":"../amcharts/patterns/black/pattern21.png", "width":4, "height":4}] 75 | }, 76 | 77 | AmRectangularChart: { 78 | zoomOutButtonColor: '#000000', 79 | zoomOutButtonRollOverAlpha: 0.15, 80 | zoomOutButtonImage: "lens.png" 81 | }, 82 | 83 | 84 | 85 | AxisBase: { 86 | axisColor: "#000000", 87 | axisAlpha: 0.3, 88 | gridAlpha: 0.05, 89 | gridColor: "#000000" 90 | }, 91 | 92 | ChartScrollbar: { 93 | backgroundColor: "#000000", 94 | backgroundAlpha: 0.13, 95 | graphFillAlpha: 0.4, 96 | selectedGraphFillAlpha: 0.7, 97 | graphLineAlpha: 0, 98 | selectedBackgroundColor: "#FFFFFF", 99 | selectedBackgroundAlpha: 0.9, 100 | gridAlpha: 0.15 101 | }, 102 | 103 | ChartCursor: { 104 | cursorColor: "#000000", 105 | color: "#FFFFFF", 106 | cursorAlpha: 0.5 107 | }, 108 | 109 | AmLegend: { 110 | color: "#000000", 111 | markerBorderAlpha:0.1, 112 | markerSize:20, 113 | switchColor:"#000000" 114 | }, 115 | 116 | AmGraph: { 117 | lineAlpha: 0.4, 118 | fillAlphas:0.5 119 | }, 120 | 121 | AmAngularGauge:{ 122 | faceAlpha:0.5, 123 | facePattern:{"url":"../amcharts/patterns/black/pattern1.png", "width":4, "height":4} 124 | }, 125 | 126 | 127 | GaugeArrow: { 128 | color: "#000000", 129 | alpha: 1, 130 | nailAlpha: 1, 131 | innerRadius: "0%", 132 | nailRadius: 15, 133 | startWidth: 15, 134 | borderAlpha: 1, 135 | radius:"70%", 136 | nailBorderAlpha: 1 137 | }, 138 | 139 | GaugeAxis: { 140 | tickColor: "#000000", 141 | tickAlpha: 1, 142 | tickLength: 15, 143 | minorTickLength: 8, 144 | axisThickness: 1, 145 | axisColor: '#000000', 146 | axisAlpha: 1, 147 | bandAlpha: 1 148 | }, 149 | 150 | TrendLine: { 151 | lineColor: "#c03246", 152 | lineAlpha: 0.8 153 | }, 154 | 155 | // ammap 156 | AreasSettings: { 157 | alpha: 0.8, 158 | color: "#000000", 159 | colorSolid: "#000000", 160 | unlistedAreasAlpha: 0.4, 161 | unlistedAreasColor: "#000000", 162 | outlineColor: "#FFFFFF", 163 | outlineAlpha: 0.5, 164 | outlineThickness: 0.5, 165 | rollOverColor: "#3c5bdc", 166 | rollOverOutlineColor: "#FFFFFF", 167 | selectedOutlineColor: "#FFFFFF", 168 | selectedColor: "#f15135", 169 | unlistedAreasOutlineColor: "#FFFFFF", 170 | unlistedAreasOutlineAlpha: 0.5 171 | }, 172 | 173 | LinesSettings: { 174 | color: "#000000", 175 | alpha: 0.8 176 | }, 177 | 178 | ImagesSettings: { 179 | alpha: 0.8, 180 | labelColor: "#000000", 181 | color: "#000000", 182 | labelRollOverColor: "#3c5bdc" 183 | }, 184 | 185 | ZoomControl: { 186 | buttonRollOverColor: "#3c5bdc", 187 | buttonFillColor: "#f15135", 188 | buttonFillAlpha: 0.8, 189 | buttonBorderColor: "#000000", 190 | gridBackgroundColor: "#000000", 191 | gridAlpha: 0.8 192 | }, 193 | 194 | SmallMap: { 195 | mapColor: "#000000", 196 | rectangleColor: "#FFFFFF", 197 | backgroundColor: "#FFFFFF", 198 | backgroundAlpha: 0.7, 199 | borderThickness: 1, 200 | borderAlpha: 0.8 201 | }, 202 | 203 | // the defaults below are set using CSS syntax, you can use any existing css property 204 | // if you don't use Stock chart, you can delete lines below 205 | PeriodSelector: { 206 | color: "#000000" 207 | }, 208 | 209 | PeriodButton: { 210 | color: "#000000", 211 | background: "transparent", 212 | opacity: 0.7, 213 | border: "1px solid rgba(0, 0, 0, .3)", 214 | MozBorderRadius: "5px", 215 | borderRadius: "5px", 216 | margin: "1px", 217 | outline: "none", 218 | boxSizing: "border-box" 219 | }, 220 | 221 | PeriodButtonSelected: { 222 | color: "#000000", 223 | backgroundColor: "rgba(0, 0, 0, 0.1)", 224 | border: "1px solid rgba(0, 0, 0, .3)", 225 | MozBorderRadius: "5px", 226 | borderRadius: "5px", 227 | margin: "1px", 228 | outline: "none", 229 | opacity: 1, 230 | boxSizing: "border-box" 231 | }, 232 | 233 | PeriodInputField: { 234 | color: "#000000", 235 | background: "transparent", 236 | border: "1px solid rgba(0, 0, 0, .3)", 237 | outline: "none" 238 | }, 239 | 240 | DataSetSelector: { 241 | color: "#000000", 242 | selectedBackgroundColor: "rgba(0, 0, 0, .25)", 243 | rollOverBackgroundColor: "rgba(0, 0, 0, .15)" 244 | }, 245 | 246 | DataSetCompareList: { 247 | color: "#000000", 248 | lineHeight: "100%", 249 | boxSizing: "initial", 250 | webkitBoxSizing: "initial", 251 | border: "1px solid rgba(0, 0, 0, .3)" 252 | }, 253 | 254 | DataSetSelect: { 255 | border: "1px solid rgba(0, 0, 0, .3)", 256 | outline: "none" 257 | } 258 | 259 | }; -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/HTMLResources/libs/bootstrap/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OceanAirdrop/WinFormsHTMLChromium/b25a8cb0145097bf426c7fe9caa6771d3d5e5eb4/ChromeTest/ChromeTest/HTMLResources/libs/bootstrap/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/HTMLResources/libs/bootstrap/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OceanAirdrop/WinFormsHTMLChromium/b25a8cb0145097bf426c7fe9caa6771d3d5e5eb4/ChromeTest/ChromeTest/HTMLResources/libs/bootstrap/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/HTMLResources/libs/bootstrap/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OceanAirdrop/WinFormsHTMLChromium/b25a8cb0145097bf426c7fe9caa6771d3d5e5eb4/ChromeTest/ChromeTest/HTMLResources/libs/bootstrap/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/HTMLResources/libs/bootstrap/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OceanAirdrop/WinFormsHTMLChromium/b25a8cb0145097bf426c7fe9caa6771d3d5e5eb4/ChromeTest/ChromeTest/HTMLResources/libs/bootstrap/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/HTMLResources/libs/bootstrap/js/npm.js: -------------------------------------------------------------------------------- 1 | // This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment. 2 | require('../../js/transition.js') 3 | require('../../js/alert.js') 4 | require('../../js/button.js') 5 | require('../../js/carousel.js') 6 | require('../../js/collapse.js') 7 | require('../../js/dropdown.js') 8 | require('../../js/modal.js') 9 | require('../../js/tooltip.js') 10 | require('../../js/popover.js') 11 | require('../../js/scrollspy.js') 12 | require('../../js/tab.js') 13 | require('../../js/affix.js') -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/JavaScriptInteractionObj.cs: -------------------------------------------------------------------------------- 1 | using CefSharp; 2 | using CefSharp.WinForms; 3 | using Newtonsoft.Json; 4 | using System; 5 | using System.Collections.Generic; 6 | using System.Linq; 7 | using System.Text; 8 | using System.Threading.Tasks; 9 | 10 | namespace ChromeTest 11 | { 12 | public class Person 13 | { 14 | public Person(string firstName, string lastName, DateTime birthDate) 15 | { 16 | FirstName = firstName; 17 | LastName = lastName; 18 | DateOfBirth = birthDate; 19 | } 20 | 21 | public string FirstName { get; set; } 22 | public string LastName { get; set; } 23 | public DateTime DateOfBirth { get; set; } 24 | public int SkillLevel { get; set; } 25 | } 26 | 27 | public class JavaScriptInteractionObj 28 | { 29 | public Person m_theMan = null; 30 | 31 | [JavascriptIgnore] 32 | public ChromiumWebBrowser m_chromeBrowser { get; set; } 33 | 34 | public JavaScriptInteractionObj() 35 | { 36 | m_theMan = new Person("Bat", "Man", DateTime.Now); 37 | } 38 | 39 | [JavascriptIgnore] 40 | public void SetChromeBrowser(ChromiumWebBrowser b) 41 | { 42 | m_chromeBrowser = b; 43 | } 44 | 45 | public string SomeFunction() 46 | { 47 | return "yippieee"; 48 | } 49 | 50 | public string GetPerson() 51 | { 52 | var p1 = new Person( "Bruce", "Banner", DateTime.Now ); 53 | 54 | string json = JsonConvert.SerializeObject(p1); 55 | 56 | return json; 57 | } 58 | 59 | public string ErrorFunction() 60 | { 61 | return null; 62 | } 63 | 64 | public string GetListOfPeople() 65 | { 66 | List peopleList = new List(); 67 | 68 | peopleList.Add(new Person("Scooby", "Doo", DateTime.Now)); 69 | peopleList.Add(new Person("Buggs", "Bunny", DateTime.Now)); 70 | peopleList.Add(new Person("Daffy", "Duck", DateTime.Now)); 71 | peopleList.Add(new Person("Fred", "Flinstone", DateTime.Now)); 72 | peopleList.Add(new Person( "Iron", "Man", DateTime.Now)); 73 | 74 | string json = JsonConvert.SerializeObject(peopleList); 75 | 76 | return json; 77 | } 78 | 79 | public void ExecJSFromWinForms() 80 | { 81 | var script = "document.body.style.backgroundColor = 'red';"; 82 | 83 | m_chromeBrowser.ExecuteScriptAsync(script); 84 | } 85 | 86 | public void TestJSCallback(IJavascriptCallback javascriptCallback) 87 | { 88 | using (javascriptCallback) 89 | { 90 | javascriptCallback.ExecuteAsync("Hello from winforms and C# land!"); 91 | } 92 | } 93 | } 94 | } -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/MainForm.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace ChromeTest 2 | { 3 | partial class MainForm 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | this.panel1 = new System.Windows.Forms.Panel(); 32 | this.buttonShowDevTools = new System.Windows.Forms.Button(); 33 | this.buttonChangeAddress = new System.Windows.Forms.Button(); 34 | this.buttonCustomHTML = new System.Windows.Forms.Button(); 35 | this.buttonLoadLocalHTML = new System.Windows.Forms.Button(); 36 | this.buttonRegisterCSharpObject = new System.Windows.Forms.Button(); 37 | this.buttonExecJavaScriptFromWinforms = new System.Windows.Forms.Button(); 38 | this.buttonHTMLDemos = new System.Windows.Forms.Button(); 39 | this.buttonExecCsharpFromJS = new System.Windows.Forms.Button(); 40 | this.buttonReturnDataFromJavaScript = new System.Windows.Forms.Button(); 41 | this.buttonReturnDataFromJavaScript2 = new System.Windows.Forms.Button(); 42 | this.SuspendLayout(); 43 | // 44 | // panel1 45 | // 46 | this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 47 | | System.Windows.Forms.AnchorStyles.Left) 48 | | System.Windows.Forms.AnchorStyles.Right))); 49 | this.panel1.Location = new System.Drawing.Point(12, 12); 50 | this.panel1.Name = "panel1"; 51 | this.panel1.Size = new System.Drawing.Size(684, 421); 52 | this.panel1.TabIndex = 0; 53 | // 54 | // buttonShowDevTools 55 | // 56 | this.buttonShowDevTools.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); 57 | this.buttonShowDevTools.Location = new System.Drawing.Point(702, 12); 58 | this.buttonShowDevTools.Name = "buttonShowDevTools"; 59 | this.buttonShowDevTools.Size = new System.Drawing.Size(135, 32); 60 | this.buttonShowDevTools.TabIndex = 1; 61 | this.buttonShowDevTools.Text = "Display Dev Tools"; 62 | this.buttonShowDevTools.UseVisualStyleBackColor = true; 63 | this.buttonShowDevTools.Click += new System.EventHandler(this.buttonShowDevTools_Click); 64 | // 65 | // buttonChangeAddress 66 | // 67 | this.buttonChangeAddress.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); 68 | this.buttonChangeAddress.Location = new System.Drawing.Point(702, 50); 69 | this.buttonChangeAddress.Name = "buttonChangeAddress"; 70 | this.buttonChangeAddress.Size = new System.Drawing.Size(135, 35); 71 | this.buttonChangeAddress.TabIndex = 2; 72 | this.buttonChangeAddress.Text = "Change Address"; 73 | this.buttonChangeAddress.UseVisualStyleBackColor = true; 74 | this.buttonChangeAddress.Click += new System.EventHandler(this.buttonChangeAddress_Click); 75 | // 76 | // buttonCustomHTML 77 | // 78 | this.buttonCustomHTML.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); 79 | this.buttonCustomHTML.Location = new System.Drawing.Point(702, 91); 80 | this.buttonCustomHTML.Name = "buttonCustomHTML"; 81 | this.buttonCustomHTML.Size = new System.Drawing.Size(135, 35); 82 | this.buttonCustomHTML.TabIndex = 3; 83 | this.buttonCustomHTML.Text = "Custom HTML"; 84 | this.buttonCustomHTML.UseVisualStyleBackColor = true; 85 | this.buttonCustomHTML.Click += new System.EventHandler(this.buttonCustomHTML_Click); 86 | // 87 | // buttonLoadLocalHTML 88 | // 89 | this.buttonLoadLocalHTML.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); 90 | this.buttonLoadLocalHTML.Location = new System.Drawing.Point(702, 132); 91 | this.buttonLoadLocalHTML.Name = "buttonLoadLocalHTML"; 92 | this.buttonLoadLocalHTML.Size = new System.Drawing.Size(135, 35); 93 | this.buttonLoadLocalHTML.TabIndex = 4; 94 | this.buttonLoadLocalHTML.Text = "Load HTML from File"; 95 | this.buttonLoadLocalHTML.UseVisualStyleBackColor = true; 96 | this.buttonLoadLocalHTML.Click += new System.EventHandler(this.buttonLoadLocalHTML_Click); 97 | // 98 | // buttonRegisterCSharpObject 99 | // 100 | this.buttonRegisterCSharpObject.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); 101 | this.buttonRegisterCSharpObject.Location = new System.Drawing.Point(702, 173); 102 | this.buttonRegisterCSharpObject.Name = "buttonRegisterCSharpObject"; 103 | this.buttonRegisterCSharpObject.Size = new System.Drawing.Size(135, 40); 104 | this.buttonRegisterCSharpObject.TabIndex = 6; 105 | this.buttonRegisterCSharpObject.Text = "Register Javascript C# Object"; 106 | this.buttonRegisterCSharpObject.UseVisualStyleBackColor = true; 107 | this.buttonRegisterCSharpObject.Click += new System.EventHandler(this.buttonRegisterCSharpObject_Click); 108 | // 109 | // buttonExecJavaScriptFromWinforms 110 | // 111 | this.buttonExecJavaScriptFromWinforms.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); 112 | this.buttonExecJavaScriptFromWinforms.Location = new System.Drawing.Point(702, 260); 113 | this.buttonExecJavaScriptFromWinforms.Name = "buttonExecJavaScriptFromWinforms"; 114 | this.buttonExecJavaScriptFromWinforms.Size = new System.Drawing.Size(135, 35); 115 | this.buttonExecJavaScriptFromWinforms.TabIndex = 7; 116 | this.buttonExecJavaScriptFromWinforms.Text = "Exec JavaScript from C#"; 117 | this.buttonExecJavaScriptFromWinforms.UseVisualStyleBackColor = true; 118 | this.buttonExecJavaScriptFromWinforms.Click += new System.EventHandler(this.buttonExecJavaScriptFromWinforms_Click); 119 | // 120 | // buttonHTMLDemos 121 | // 122 | this.buttonHTMLDemos.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); 123 | this.buttonHTMLDemos.Location = new System.Drawing.Point(702, 383); 124 | this.buttonHTMLDemos.Name = "buttonHTMLDemos"; 125 | this.buttonHTMLDemos.Size = new System.Drawing.Size(135, 35); 126 | this.buttonHTMLDemos.TabIndex = 10; 127 | this.buttonHTMLDemos.Text = "HTML Demos"; 128 | this.buttonHTMLDemos.UseVisualStyleBackColor = true; 129 | this.buttonHTMLDemos.Click += new System.EventHandler(this.buttonHTMLDemos_Click); 130 | // 131 | // buttonExecCsharpFromJS 132 | // 133 | this.buttonExecCsharpFromJS.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); 134 | this.buttonExecCsharpFromJS.Location = new System.Drawing.Point(702, 219); 135 | this.buttonExecCsharpFromJS.Name = "buttonExecCsharpFromJS"; 136 | this.buttonExecCsharpFromJS.Size = new System.Drawing.Size(135, 35); 137 | this.buttonExecCsharpFromJS.TabIndex = 11; 138 | this.buttonExecCsharpFromJS.Text = "Exec C# from JavaScript"; 139 | this.buttonExecCsharpFromJS.UseVisualStyleBackColor = true; 140 | this.buttonExecCsharpFromJS.Click += new System.EventHandler(this.buttonExecCsharpFromJS_Click); 141 | // 142 | // buttonReturnDataFromJavaScript 143 | // 144 | this.buttonReturnDataFromJavaScript.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); 145 | this.buttonReturnDataFromJavaScript.Location = new System.Drawing.Point(702, 301); 146 | this.buttonReturnDataFromJavaScript.Name = "buttonReturnDataFromJavaScript"; 147 | this.buttonReturnDataFromJavaScript.Size = new System.Drawing.Size(135, 35); 148 | this.buttonReturnDataFromJavaScript.TabIndex = 12; 149 | this.buttonReturnDataFromJavaScript.Text = "In C#, Return Data From JavaScript 1"; 150 | this.buttonReturnDataFromJavaScript.UseVisualStyleBackColor = true; 151 | this.buttonReturnDataFromJavaScript.Click += new System.EventHandler(this.buttonReturnDataFromJavaScript_Click); 152 | // 153 | // buttonReturnDataFromJavaScript2 154 | // 155 | this.buttonReturnDataFromJavaScript2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); 156 | this.buttonReturnDataFromJavaScript2.Location = new System.Drawing.Point(702, 342); 157 | this.buttonReturnDataFromJavaScript2.Name = "buttonReturnDataFromJavaScript2"; 158 | this.buttonReturnDataFromJavaScript2.Size = new System.Drawing.Size(135, 35); 159 | this.buttonReturnDataFromJavaScript2.TabIndex = 13; 160 | this.buttonReturnDataFromJavaScript2.Text = "In C#, Return Data From JavaScript 2"; 161 | this.buttonReturnDataFromJavaScript2.UseVisualStyleBackColor = true; 162 | this.buttonReturnDataFromJavaScript2.Click += new System.EventHandler(this.buttonReturnDataFromJavaScript2_Click); 163 | // 164 | // MainForm 165 | // 166 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 167 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 168 | this.ClientSize = new System.Drawing.Size(849, 451); 169 | this.Controls.Add(this.buttonReturnDataFromJavaScript2); 170 | this.Controls.Add(this.buttonReturnDataFromJavaScript); 171 | this.Controls.Add(this.buttonExecCsharpFromJS); 172 | this.Controls.Add(this.buttonHTMLDemos); 173 | this.Controls.Add(this.buttonExecJavaScriptFromWinforms); 174 | this.Controls.Add(this.buttonRegisterCSharpObject); 175 | this.Controls.Add(this.buttonLoadLocalHTML); 176 | this.Controls.Add(this.buttonCustomHTML); 177 | this.Controls.Add(this.buttonChangeAddress); 178 | this.Controls.Add(this.buttonShowDevTools); 179 | this.Controls.Add(this.panel1); 180 | this.Name = "MainForm"; 181 | this.Text = "Using HTML as a UI - By Ocean Airdrop"; 182 | this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing); 183 | this.Load += new System.EventHandler(this.Form1_Load); 184 | this.ResumeLayout(false); 185 | 186 | } 187 | 188 | #endregion 189 | 190 | private System.Windows.Forms.Panel panel1; 191 | private System.Windows.Forms.Button buttonShowDevTools; 192 | private System.Windows.Forms.Button buttonChangeAddress; 193 | private System.Windows.Forms.Button buttonCustomHTML; 194 | private System.Windows.Forms.Button buttonLoadLocalHTML; 195 | private System.Windows.Forms.Button buttonRegisterCSharpObject; 196 | private System.Windows.Forms.Button buttonExecJavaScriptFromWinforms; 197 | private System.Windows.Forms.Button buttonHTMLDemos; 198 | private System.Windows.Forms.Button buttonExecCsharpFromJS; 199 | private System.Windows.Forms.Button buttonReturnDataFromJavaScript; 200 | private System.Windows.Forms.Button buttonReturnDataFromJavaScript2; 201 | } 202 | } 203 | 204 | -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/MainForm.cs: -------------------------------------------------------------------------------- 1 | using CefSharp; 2 | using CefSharp.WinForms; 3 | using ChromeTest.Demos; 4 | using System; 5 | using System.Collections.Generic; 6 | using System.ComponentModel; 7 | using System.Data; 8 | using System.Drawing; 9 | using System.IO; 10 | using System.Linq; 11 | using System.Reflection; 12 | using System.Text; 13 | using System.Threading.Tasks; 14 | using System.Windows.Forms; 15 | 16 | namespace ChromeTest 17 | { 18 | public partial class MainForm : Form 19 | { 20 | ChromiumWebBrowser m_chromeBrowser = null; 21 | 22 | 23 | public static string GetAppLocation() 24 | { 25 | return AppDomain.CurrentDomain.BaseDirectory; 26 | } 27 | 28 | public MainForm() 29 | { 30 | InitializeComponent(); 31 | } 32 | 33 | private void Form1_Load(object sender, EventArgs e) 34 | { 35 | m_chromeBrowser = new ChromiumWebBrowser("http://www.maps.google.com"); 36 | 37 | panel1.Controls.Add(m_chromeBrowser); 38 | 39 | ChromeDevToolsSystemMenu.CreateSysMenu(this); 40 | } 41 | 42 | 43 | protected override void WndProc(ref Message m) 44 | { 45 | base.WndProc(ref m); 46 | 47 | // Test if the About item was selected from the system menu 48 | if ((m.Msg == ChromeDevToolsSystemMenu.WM_SYSCOMMAND) && ((int)m.WParam == ChromeDevToolsSystemMenu.SYSMENU_CHROME_DEV_TOOLS)) 49 | { 50 | m_chromeBrowser.ShowDevTools(); 51 | } 52 | } 53 | 54 | private void Form1_FormClosing(object sender, FormClosingEventArgs e) 55 | { 56 | //Comment out Cef.Shutdown() call - it will be automatically called when exiting the application. 57 | //Due to a timing issue and the way the WCF service closes it's self in newer versions, it can be best to leave CefSharp to clean it's self up. 58 | //Alternative solution is to set the WCF timeout to Zero (or a smaller number) using CefSharp.CefSharpSettings.WcfTimeout = TimeSpan.Zero; 59 | // This must be done before creating any ChromiumWebBrowser instance 60 | //Cef.Shutdown(); 61 | } 62 | 63 | private void buttonShowDevTools_Click(object sender, EventArgs e) 64 | { 65 | m_chromeBrowser.ShowDevTools(); 66 | } 67 | 68 | private void buttonChangeAddress_Click(object sender, EventArgs e) 69 | { 70 | ChangeAddressForm form = new ChangeAddressForm(); 71 | if ( form.ShowDialog() == System.Windows.Forms.DialogResult.OK ) 72 | { 73 | m_chromeBrowser.Load(form.textBoxAddress.Text); 74 | } 75 | } 76 | 77 | private void buttonCustomHTML_Click(object sender, EventArgs e) 78 | { 79 | m_chromeBrowser.LoadHtml("Hello world", "http://customrendering/"); 80 | } 81 | 82 | private void buttonLoadLocalHTML_Click(object sender, EventArgs e) 83 | { 84 | //string page = string.Format("{0}HTMLResources/html/BasicPage.html", GetAppLocation()); 85 | //string page = string.Format("{0}HTMLResources/html/BootstrapExample.html", GetAppLocation()); 86 | 87 | var page = new Uri(string.Format("file:///{0}HTMLResources/html/BootstrapExample.html", GetAppLocation())); 88 | 89 | m_chromeBrowser.Load(page.ToString()); 90 | } 91 | 92 | 93 | 94 | private void buttonLoadEmbeddedHTML_Click(object sender, EventArgs e) 95 | { 96 | //string resource = ""; 97 | //if (EmbeddedResourceUtils.GetResource("BootstrapExample.html", out resource) == true) 98 | //{ 99 | // m_chromeBrowser.LoadHtml(resource, "http://customrendering/"); 100 | //} 101 | } 102 | 103 | JavaScriptInteractionObj m_jsInteractionObj = null; 104 | 105 | private void buttonRegisterCSharpObject_Click(object sender, EventArgs e) 106 | { 107 | //To register a JS object, it must occur immediate after the browser has been created 108 | //So in this instance we'll create a new browser; 109 | panel1.Controls.Remove(m_chromeBrowser); 110 | 111 | var page = new Uri(string.Format("file:///{0}HTMLResources/html/WinformInteractionExample.html", GetAppLocation())); 112 | 113 | m_chromeBrowser = new ChromiumWebBrowser(page.ToString()); 114 | 115 | panel1.Controls.Add(m_chromeBrowser); 116 | 117 | m_jsInteractionObj = new JavaScriptInteractionObj(); 118 | m_jsInteractionObj.SetChromeBrowser(m_chromeBrowser); 119 | 120 | // Register the JavaScriptInteractionObj class with JS 121 | m_chromeBrowser.RegisterJsObject("winformObj", m_jsInteractionObj); 122 | } 123 | 124 | private void buttonExecJavaScriptFromWinforms_Click(object sender, EventArgs e) 125 | { 126 | m_chromeBrowser.LoadHtml("Hello world", "http://customrendering/"); 127 | 128 | var script = "document.body.style.backgroundColor = 'red';"; 129 | 130 | m_chromeBrowser.ExecuteScriptAsync(script); 131 | } 132 | 133 | private void buttonAmCharts_Click(object sender, EventArgs e) 134 | { 135 | // m_chromeBrowser.Load("http://www.amcharts.com/demos/date-based-data/"); 136 | 137 | string page = string.Format("{0}HTMLResources/html/amChartExample.html", GetAppLocation()); 138 | m_chromeBrowser.Load(page); 139 | } 140 | 141 | private void buttonBootStrapFormDemo_Click(object sender, EventArgs e) 142 | { 143 | BootStrapForm form = new BootStrapForm(); 144 | if (form.ShowDialog() == System.Windows.Forms.DialogResult.OK) 145 | { 146 | MessageBox.Show("user pressed ok"); 147 | } 148 | } 149 | 150 | private void buttonHTMLDemos_Click(object sender, EventArgs e) 151 | { 152 | DemoLauncherForm form = new DemoLauncherForm(); 153 | if (form.ShowDialog() == System.Windows.Forms.DialogResult.OK) 154 | { 155 | MessageBox.Show("user pressed ok"); 156 | } 157 | } 158 | 159 | private void buttonExecCsharpFromJS_Click(object sender, EventArgs e) 160 | { 161 | 162 | } 163 | 164 | private void buttonReturnDataFromJavaScript_Click(object sender, EventArgs e) 165 | { 166 | m_chromeBrowser.LoadHtml("Hello world", "http://customrendering/"); 167 | 168 | StringBuilder sb = new StringBuilder(); 169 | sb.AppendLine("function tempFunction() {"); 170 | sb.AppendLine(" var w = window.innerWidth;"); 171 | sb.AppendLine(" var h = window.innerHeight;"); 172 | sb.AppendLine(""); 173 | sb.AppendLine(" return w*h;"); 174 | sb.AppendLine("}"); 175 | sb.AppendLine("tempFunction();"); 176 | 177 | var task = m_chromeBrowser.EvaluateScriptAsync(sb.ToString()); 178 | 179 | task.ContinueWith(t => 180 | { 181 | if (!t.IsFaulted) 182 | { 183 | var response = t.Result; 184 | 185 | if ( response.Success == true ) 186 | { 187 | MessageBox.Show( response.Result.ToString() ); 188 | } 189 | } 190 | }, TaskScheduler.FromCurrentSynchronizationContext()); 191 | } 192 | 193 | private void buttonReturnDataFromJavaScript2_Click(object sender, EventArgs e) 194 | { 195 | // Step 01: create a simple html page (include jquery so we have access to json object 196 | StringBuilder htmlPage = new StringBuilder(); 197 | htmlPage.AppendLine(""); 198 | htmlPage.AppendLine(""); 199 | htmlPage.AppendLine(""); 200 | htmlPage.AppendLine(""); 201 | htmlPage.AppendLine("Hello world 2"); 202 | htmlPage.AppendLine(""); 203 | 204 | // Step 02: Load the Page 205 | m_chromeBrowser.LoadHtml(htmlPage.ToString(), "http://customrendering/"); 206 | 207 | // Step 03: Execute some ad-hoc JS that returns an object back to C# 208 | StringBuilder sb = new StringBuilder(); 209 | sb.AppendLine("function tempFunction() {"); 210 | sb.AppendLine(" // create a JS object"); 211 | sb.AppendLine(" var person = {firstName:'John', lastName:'Maclaine', age:23, eyeColor:'blue'};"); 212 | sb.AppendLine(""); 213 | sb.AppendLine(" // Important: convert object to string before returning to C#"); 214 | sb.AppendLine(" return JSON.stringify(person);"); 215 | sb.AppendLine("}"); 216 | sb.AppendLine("tempFunction();"); 217 | 218 | var task = m_chromeBrowser.EvaluateScriptAsync(sb.ToString()); 219 | 220 | task.ContinueWith(t => 221 | { 222 | if (!t.IsFaulted) 223 | { 224 | // Step 04: Recieve value from JS 225 | var response = t.Result; 226 | 227 | if (response.Success == true) 228 | { 229 | // Use JSON.net to convert to object; 230 | MessageBox.Show(response.Result.ToString()); 231 | } 232 | } 233 | }, TaskScheduler.FromCurrentSynchronizationContext()); 234 | } 235 | } 236 | } 237 | -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/MainForm.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using System.Windows.Forms; 6 | 7 | namespace ChromeTest 8 | { 9 | static class Program 10 | { 11 | /// 12 | /// The main entry point for the application. 13 | /// 14 | [STAThread] 15 | static void Main() 16 | { 17 | Application.EnableVisualStyles(); 18 | Application.SetCompatibleTextRenderingDefault(false); 19 | Application.Run(new MainForm()); 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("ChromeTest")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("Canal & River Trust")] 12 | [assembly: AssemblyProduct("ChromeTest")] 13 | [assembly: AssemblyCopyright("Copyright © Canal & River Trust 2015")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("cdae5490-c740-4190-ac6a-7905102c4bb2")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.34209 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace ChromeTest.Properties 12 | { 13 | 14 | 15 | /// 16 | /// A strongly-typed resource class, for looking up localized strings, etc. 17 | /// 18 | // This class was auto-generated by the StronglyTypedResourceBuilder 19 | // class via a tool like ResGen or Visual Studio. 20 | // To add or remove a member, edit your .ResX file then rerun ResGen 21 | // with the /str option, or rebuild your VS project. 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Resources 26 | { 27 | 28 | private static global::System.Resources.ResourceManager resourceMan; 29 | 30 | private static global::System.Globalization.CultureInfo resourceCulture; 31 | 32 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 33 | internal Resources() 34 | { 35 | } 36 | 37 | /// 38 | /// Returns the cached ResourceManager instance used by this class. 39 | /// 40 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 41 | internal static global::System.Resources.ResourceManager ResourceManager 42 | { 43 | get 44 | { 45 | if ((resourceMan == null)) 46 | { 47 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ChromeTest.Properties.Resources", typeof(Resources).Assembly); 48 | resourceMan = temp; 49 | } 50 | return resourceMan; 51 | } 52 | } 53 | 54 | /// 55 | /// Overrides the current thread's CurrentUICulture property for all 56 | /// resource lookups using this strongly typed resource class. 57 | /// 58 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 59 | internal static global::System.Globalization.CultureInfo Culture 60 | { 61 | get 62 | { 63 | return resourceCulture; 64 | } 65 | set 66 | { 67 | resourceCulture = value; 68 | } 69 | } 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/Properties/Resources.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | text/microsoft-resx 107 | 108 | 109 | 2.0 110 | 111 | 112 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 113 | 114 | 115 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.34209 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace ChromeTest.Properties 12 | { 13 | 14 | 15 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 16 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] 17 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase 18 | { 19 | 20 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 21 | 22 | public static Settings Default 23 | { 24 | get 25 | { 26 | return defaultInstance; 27 | } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ChromeTest/ChromeTest/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # WinFormsHTMLChromium 2 | Using HTML as a UI Elements in a WinForms Application with Chrome / Chromium Embedded Framework (CEF) 3 | 4 | This project is a simple proof of concept C# WinForms application that can leverage HTML as a User Interface. 5 | The project uses Chrome rendering engine and the Chromium Embedded Framework (CEF) in a C# Winforms application. 6 | 7 | ![alt tag](https://raw.githubusercontent.com/OceanAirdrop/WinFormsHTMLChromium/master/Screenshots/image001.gif) 8 | 9 | This project demonstrates: 10 | 11 | * Demonstrates displaying HTML in the Chrome control on a WinForms Application. 12 | * Demonstrates calling a JavaScript function from C#. 13 | * Demonstrates calling a C# function from JavaScript. 14 | * Demonstrates calling passing data between C# and JavaScript in either direction. 15 | * Demonstrates calling debuuging HTML/JavaScript using Chrome Dev Tools. 16 | 17 | 18 | Please see: http://www.codeproject.com/Articles/990346/Using-HTML-as-UI-Elements-in-a-WinForms-Applicatio 19 | -------------------------------------------------------------------------------- /Screenshots/image001.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OceanAirdrop/WinFormsHTMLChromium/b25a8cb0145097bf426c7fe9caa6771d3d5e5eb4/Screenshots/image001.gif -------------------------------------------------------------------------------- /Screenshots/image002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OceanAirdrop/WinFormsHTMLChromium/b25a8cb0145097bf426c7fe9caa6771d3d5e5eb4/Screenshots/image002.png --------------------------------------------------------------------------------