diff options
author | Anton Tarasov <anton.tarasov@jetbrains.com> | 2021-01-20 17:51:05 +0300 |
---|---|---|
committer | Anton Tarasov <anton.tarasov@jetbrains.com> | 2021-01-20 17:51:05 +0300 |
commit | 02d12314fcd8fa81628d50de1e21744f2e6077d8 (patch) | |
tree | b1f155adabbbcbc3177f03e7e225fc486290a44a /java_tests/tests/detailed/ui/MenuBar.java | |
parent | c04edd546efcd86891ed472fa9857aaf1e4d8fc1 (diff) | |
parent | 304f3e3de03fb3aab5e8212c0f9c699503a55cb4 (diff) | |
download | jcef-02d12314fcd8fa81628d50de1e21744f2e6077d8.tar.gz |
Merge branch 'java-cef'
# Conflicts:
# java/org/cef/browser/CefBrowser.java
# java/org/cef/browser/CefBrowserOsr.java
# java/org/cef/browser/CefBrowser_N.java
# java/org/cef/browser/CefFrame.java
# java/org/cef/browser/CefFrame_N.java
# native/CefBrowser_N.cpp
# native/CefFrame_N.cpp
# native/CefFrame_N.h
# native/util_linux.cpp
# native/util_mac.mm
# third_party/jogamp/jar/gluegen-rt-natives-linux-amd64.jar
# third_party/jogamp/jar/gluegen-rt-natives-macosx-universal.jar
# third_party/jogamp/jar/gluegen-rt-natives-windows-amd64.jar
# third_party/jogamp/jar/gluegen-rt.jar
# third_party/jogamp/jar/jogl-all-natives-linux-amd64.jar
# third_party/jogamp/jar/jogl-all-natives-macosx-universal.jar
# third_party/jogamp/jar/jogl-all-natives-windows-amd64.jar
# third_party/jogamp/jar/jogl-all.jar
# tools/compile.sh
# tools/make_distrib.sh
# tools/make_docs.sh
# tools/run.sh
# tools/run_tests.sh
Diffstat (limited to 'java_tests/tests/detailed/ui/MenuBar.java')
-rw-r--r-- | java_tests/tests/detailed/ui/MenuBar.java | 82 |
1 files changed, 80 insertions, 2 deletions
diff --git a/java_tests/tests/detailed/ui/MenuBar.java b/java_tests/tests/detailed/ui/MenuBar.java index b9d39d9..f92741a 100644 --- a/java_tests/tests/detailed/ui/MenuBar.java +++ b/java_tests/tests/detailed/ui/MenuBar.java @@ -19,6 +19,8 @@ import org.cef.network.CefRequest; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Container; +import java.awt.Dimension; +import java.awt.FlowLayout; import java.awt.Frame; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -26,15 +28,21 @@ import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; +import java.awt.image.BufferedImage; import java.io.File; import java.io.FileNotFoundException; import java.io.PrintWriter; import java.io.UnsupportedEncodingException; import java.util.Vector; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFileChooser; import javax.swing.JFrame; +import javax.swing.JLabel; import javax.swing.JLayeredPane; import javax.swing.JMenu; import javax.swing.JMenuBar; @@ -71,7 +79,7 @@ public class MenuBar extends JMenuBar { } } - private final BrowserFrame owner_; + private final MainFrame owner_; private final CefBrowser browser_; private String last_selected_file_ = ""; private final JMenu bookmarkMenu_; @@ -80,7 +88,7 @@ public class MenuBar extends JMenuBar { private final CefCookieManager cookieManager_; private boolean reparentPending_ = false; - public MenuBar(BrowserFrame owner, CefBrowser browser, ControlPanel control_pane, + public MenuBar(MainFrame owner, CefBrowser browser, ControlPanel control_pane, DownloadDialog downloadDialog, CefCookieManager cookieManager) { owner_ = owner; browser_ = browser; @@ -457,6 +465,64 @@ public class MenuBar extends JMenuBar { }); testMenu.add(newwindow); + JMenuItem screenshotSync = new JMenuItem("Screenshot (on AWT thread, native res)"); + screenshotSync.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + long start = System.nanoTime(); + CompletableFuture<BufferedImage> shot = browser.createScreenshot(true); + System.out.println("Took screenshot from the AWT event thread in " + + TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - start) + " msecs"); + try { + displayScreenshot(shot.get()); + } catch (InterruptedException | ExecutionException exc) { + // cannot happen, future is already resolved in this case + } + } + }); + screenshotSync.setEnabled(owner.isOsrEnabled()); + testMenu.add(screenshotSync); + + JMenuItem screenshotSyncScaled = new JMenuItem("Screenshot (on AWT thread, scaled)"); + screenshotSyncScaled.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + long start = System.nanoTime(); + CompletableFuture<BufferedImage> shot = browser.createScreenshot(false); + System.out.println("Took screenshot from the AWT event thread in " + + TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - start) + " msecs"); + try { + displayScreenshot(shot.get()); + } catch (InterruptedException | ExecutionException exc) { + // cannot happen, future is already resolved in this case + } + } + }); + screenshotSyncScaled.setEnabled(owner.isOsrEnabled()); + testMenu.add(screenshotSyncScaled); + + JMenuItem screenshotAsync = new JMenuItem("Screenshot (from other thread, scaled)"); + screenshotAsync.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + long start = System.nanoTime(); + CompletableFuture<BufferedImage> shot = browser.createScreenshot(false); + shot.thenAccept((image) -> { + System.out.println("Took screenshot asynchronously in " + + TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - start) + + " msecs"); + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + displayScreenshot(image); + } + }); + }); + } + }); + screenshotAsync.setEnabled(owner.isOsrEnabled()); + testMenu.add(screenshotAsync); + add(fileMenu); add(bookmarkMenu_); add(testMenu); @@ -489,6 +555,18 @@ public class MenuBar extends JMenuBar { validate(); } + private void displayScreenshot(BufferedImage aScreenshot) { + JFrame frame = new JFrame("Screenshot"); + ImageIcon image = new ImageIcon(); + image.setImage(aScreenshot); + frame.setLayout(new FlowLayout()); + JLabel label = new JLabel(image); + label.setPreferredSize(new Dimension(aScreenshot.getWidth(), aScreenshot.getHeight())); + frame.add(label); + frame.setVisible(true); + frame.pack(); + } + public void addBookmarkSeparator() { bookmarkMenu_.addSeparator(); } |