44
55using System ;
66using System . ComponentModel ;
7+ using System . Diagnostics ;
78using System . IO ;
9+ using System . Reflection . Metadata ;
810using System . Runtime . InteropServices ;
911using System . Windows . Forms ;
1012
@@ -236,23 +238,25 @@ private void DeleteMenuItemClick(object sender, EventArgs e)
236238 }
237239 }
238240
239- private void SelectAllMenuItemClick ( object sender , EventArgs e )
241+ private async void SelectAllMenuItemClick ( object sender , EventArgs e )
240242 {
241243 var control = GetCurrentTabControl ( ) ;
242244 if ( control != null )
243245 {
244- throw new NotImplementedException ( ) ;
245- //control.Browser.SelectAll();
246+ var devtoolsContext = control . Browser . DevToolsContext ;
247+
248+ _ = await devtoolsContext . EvaluateExpressionAsync ( "document.execCommand('selectAll');" ) ;
246249 }
247250 }
248251
249- private void PrintToolStripMenuItemClick ( object sender , EventArgs e )
252+ private async void PrintToolStripMenuItemClick ( object sender , EventArgs e )
250253 {
251254 var control = GetCurrentTabControl ( ) ;
252255 if ( control != null )
253256 {
254- throw new NotImplementedException ( ) ;
255- //control.Browser.Print();
257+ var devtoolsContext = control . Browser . DevToolsContext ;
258+
259+ _ = await devtoolsContext . EvaluateExpressionAsync ( "window.print()" ) ;
256260 }
257261 }
258262
@@ -287,71 +291,42 @@ private async void CloseDevToolsMenuItemClick(object sender, EventArgs e)
287291 }
288292 }
289293
290- private void ZoomInToolStripMenuItemClick ( object sender , EventArgs e )
294+ private async void ZoomInToolStripMenuItemClick ( object sender , EventArgs e )
291295 {
292296 var control = GetCurrentTabControl ( ) ;
293297 if ( control != null )
294298 {
295- throw new NotImplementedException ( ) ;
299+ var devtoolsContext = control . Browser . DevToolsContext ;
296300
297- // var task = control.Browser.GetZoomLevelAsync( );
301+ var currentZoomLevel = await devtoolsContext . EvaluateExpressionAsync < double > ( "window.devicePixelRatio" ) ;
298302
299- //task.ContinueWith(previous =>
300- //{
301- // if (previous.Status == TaskStatus.RanToCompletion)
302- // {
303- // var currentLevel = previous.Result;
304- // control.Browser.SetZoomLevel(currentLevel + ZoomIncrement);
305- // }
306- // else
307- // {
308- // throw new InvalidOperationException("Unexpected failure of calling CEF->GetZoomLevelAsync", previous.Exception);
309- // }
310- //}, TaskContinuationOptions.ExecuteSynchronously);
303+ await devtoolsContext . SetPageScaleFactorAsync ( currentZoomLevel + 0.25 ) ;
311304 }
312305 }
313306
314- private void ZoomOutToolStripMenuItemClick ( object sender , EventArgs e )
307+ private async void ZoomOutToolStripMenuItemClick ( object sender , EventArgs e )
315308 {
316309 var control = GetCurrentTabControl ( ) ;
317310 if ( control != null )
318311 {
319- throw new NotImplementedException ( ) ;
320- //var task = control.Browser.GetZoomLevelAsync();
321- //task.ContinueWith(previous =>
322- //{
323- // if (previous.Status == TaskStatus.RanToCompletion)
324- // {
325- // var currentLevel = previous.Result;
326- // control.Browser.SetZoomLevel(currentLevel - ZoomIncrement);
327- // }
328- // else
329- // {
330- // throw new InvalidOperationException("Unexpected failure of calling CEF->GetZoomLevelAsync", previous.Exception);
331- // }
332- //}, TaskContinuationOptions.ExecuteSynchronously);
312+ var devtoolsContext = control . Browser . DevToolsContext ;
313+
314+ var currentZoomLevel = await devtoolsContext . EvaluateExpressionAsync < double > ( "window.devicePixelRatio" ) ;
315+
316+ await devtoolsContext . SetPageScaleFactorAsync ( currentZoomLevel - 0.25 ) ;
333317 }
334318 }
335319
336- private void CurrentZoomLevelToolStripMenuItemClick ( object sender , EventArgs e )
320+ private async void CurrentZoomLevelToolStripMenuItemClick ( object sender , EventArgs e )
337321 {
338322 var control = GetCurrentTabControl ( ) ;
339323 if ( control != null )
340324 {
341- throw new NotImplementedException ( ) ;
342- //var task = control.Browser.GetZoomLevelAsync();
343- //task.ContinueWith(previous =>
344- //{
345- // if (previous.Status == TaskStatus.RanToCompletion)
346- // {
347- // var currentLevel = previous.Result;
348- // MessageBox.Show("Current ZoomLevel: " + currentLevel.ToString());
349- // }
350- // else
351- // {
352- // MessageBox.Show("Unexpected failure of calling CEF->GetZoomLevelAsync: " + previous.Exception.ToString());
353- // }
354- //}, TaskContinuationOptions.HideScheduler);
325+ var devtoolsContext = control . Browser . DevToolsContext ;
326+
327+ var currentZoomLevel = await devtoolsContext . EvaluateExpressionAsync < double > ( "window.devicePixelRatio" ) ;
328+
329+ MessageBox . Show ( "Current ZoomLevel: " + currentZoomLevel . ToString ( ) ) ;
355330 }
356331 }
357332
@@ -368,16 +343,18 @@ private async void PrintToPdfToolStripMenuItemClick(object sender, EventArgs e)
368343
369344 if ( dialog . ShowDialog ( ) == DialogResult . OK )
370345 {
371- throw new NotImplementedException ( ) ;
346+ var devtoolsContext = control . Browser . DevToolsContext ;
372347
373- //if (success)
374- //{
375- // MessageBox.Show("Pdf was saved to " + dialog.FileName);
376- //}
377- //else
378- //{
379- // MessageBox.Show("Unable to save Pdf, check you have write permissions to " + dialog.FileName);
380- //}
348+ await devtoolsContext . PdfAsync ( dialog . FileName ) ;
349+
350+ if ( File . Exists ( dialog . FileName ) )
351+ {
352+ MessageBox . Show ( "Pdf was saved to " + dialog . FileName ) ;
353+ }
354+ else
355+ {
356+ MessageBox . Show ( "Unable to save Pdf, check you have write permissions to " + dialog . FileName ) ;
357+ }
381358
382359 }
383360
@@ -412,30 +389,21 @@ private async void TakeScreenShotMenuItemClick(object sender, EventArgs e)
412389 return ;
413390 }
414391
415- //var chromiumWebBrowser = (ChromiumWebBrowser)control.Browser;
416-
417- //var contentSize = await chromiumWebBrowser.GetContentSizeAsync();
392+ var devtoolsContext = control . Browser . DevToolsContext ;
418393
419- ////Capture current scrollable area
420- //var viewPort = new DevTools.Page.Viewport
421- //{
422- // Width = contentSize.Width,
423- // Height = contentSize.Height,
424- //};
394+ var screenshotPath = Path . Combine ( Environment . GetFolderPath ( Environment . SpecialFolder . Desktop ) , "CefSharp screenshot" + DateTime . Now . Ticks + ".png" ) ;
425395
426- //var data = await chromiumWebBrowser.CaptureScreenshotAsync(viewPort: viewPort, captureBeyondViewport: true );
396+ await devtoolsContext . ScreenshotAsync ( screenshotPath ) ;
427397
428- //// Make a file to save it to (e.g. C:\Users\[user]\Desktop\CefSharp screenshot.png)
429- //var screenshotPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "CefSharp screenshot" + DateTime.Now.Ticks + ".png");
430-
431- //File.WriteAllBytes(screenshotPath, data);
432-
433- //// Tell Windows to launch the saved image.
434- //Process.Start(new ProcessStartInfo(screenshotPath)
435- //{
436- // // UseShellExecute is false by default on .NET Core.
437- // UseShellExecute = true
438- //});
398+ if ( File . Exists ( screenshotPath ) )
399+ {
400+ // Tell Windows to launch the saved image.
401+ Process . Start ( new ProcessStartInfo ( screenshotPath )
402+ {
403+ // UseShellExecute is false by default on .NET Core.
404+ UseShellExecute = true
405+ } ) ;
406+ }
439407 }
440408 }
441409}
0 commit comments