44
55package org .cef .browser ;
66
7+ import org .cef .CefClient ;
8+ import org .cef .OS ;
9+ import org .cef .handler .CefWindowHandler ;
10+ import org .cef .handler .CefWindowHandlerAdapter ;
11+
712import java .awt .BorderLayout ;
813import java .awt .Canvas ;
914import java .awt .Component ;
1015import java .awt .Container ;
1116import java .awt .Dimension ;
1217import java .awt .Graphics ;
18+ import java .awt .Graphics2D ;
1319import java .awt .MouseInfo ;
1420import java .awt .Point ;
1521import java .awt .Rectangle ;
3339import javax .swing .Timer ;
3440import javax .swing .ToolTipManager ;
3541
36- import org .cef .CefClient ;
37- import org .cef .OS ;
38- import org .cef .handler .CefWindowHandler ;
39- import org .cef .handler .CefWindowHandlerAdapter ;
40-
4142/**
4243 * This class represents a windowed rendered browser.
4344 * The visibility of this class is "package". To create a new
@@ -49,14 +50,14 @@ class CefBrowserWr extends CefBrowser_N {
4950 private Rectangle content_rect_ = new Rectangle (0 , 0 , 0 , 0 );
5051 private long window_handle_ = 0 ;
5152 private boolean justCreated_ = false ;
53+ private double scaleFactor_ = 1.0 ;
5254 private Timer delayedUpdate_ = new Timer (100 , new ActionListener () {
5355 @ Override
5456 public void actionPerformed (ActionEvent e ) {
5557 SwingUtilities .invokeLater (new Runnable () {
5658 @ Override
5759 public void run () {
58- if (isClosed ())
59- return ;
60+ if (isClosed ()) return ;
6061
6162 boolean hasCreatedUI = createBrowserIfRequired (true );
6263
@@ -149,7 +150,7 @@ public int getClickCount(int event, int button) {
149150 if (currTime > nextClick [idx ]) {
150151 nextClick [idx ] = currTime
151152 + (Integer ) Toolkit .getDefaultToolkit ().getDesktopProperty (
152- "awt.multiClickInterval" );
153+ "awt.multiClickInterval" );
153154 clickCnt [idx ] = 1 ;
154155 } else {
155156 clickCnt [idx ]++;
@@ -186,7 +187,7 @@ private CefBrowserWr(CefClient client, String url, CefRequestContext context,
186187 @ Override
187188 public void setBounds (int x , int y , int width , int height ) {
188189 super .setBounds (x , y , width , height );
189- wasResized (width , height );
190+ wasResized (( int ) ( width * scaleFactor_ ), ( int ) ( height * scaleFactor_ ) );
190191 }
191192
192193 @ Override
@@ -197,7 +198,7 @@ public void setBounds(Rectangle r) {
197198 @ Override
198199 public void setSize (int width , int height ) {
199200 super .setSize (width , height );
200- wasResized (width , height );
201+ wasResized (( int ) ( width * scaleFactor_ ), ( int ) ( height * scaleFactor_ ) );
201202 }
202203
203204 @ Override
@@ -215,6 +216,9 @@ public void paint(Graphics g) {
215216 // we're setting up a delayedUpdate timer which is reset each time
216217 // paint is called. This prevents the us of sending the UI update too
217218 // often.
219+ if (g instanceof Graphics2D ) {
220+ scaleFactor_ = ((Graphics2D ) g ).getTransform ().getScaleX ();
221+ }
218222 doUpdate ();
219223 delayedUpdate_ .restart ();
220224 }
@@ -344,7 +348,10 @@ private static long getWindowHandle(Component component) {
344348 private void doUpdate () {
345349 if (isClosed ()) return ;
346350
347- Rectangle clipping = ((JPanel ) component_ ).getVisibleRect ();
351+ Rectangle vr = ((JPanel ) component_ ).getVisibleRect ();
352+ Rectangle clipping = new Rectangle ((int ) (vr .getX () * scaleFactor_ ),
353+ (int ) (vr .getY () * scaleFactor_ ), (int ) (vr .getWidth () * scaleFactor_ ),
354+ (int ) (vr .getHeight () * scaleFactor_ ));
348355
349356 if (OS .isMacintosh ()) {
350357 Container parent = component_ .getParent ();
@@ -369,7 +376,11 @@ private void doUpdate() {
369376 }
370377 } else {
371378 synchronized (content_rect_ ) {
372- content_rect_ = component_ .getBounds ();
379+ Rectangle bounds = component_ .getBounds ();
380+ content_rect_ = new Rectangle ((int ) (bounds .getX () * scaleFactor_ ),
381+ (int ) (bounds .getY () * scaleFactor_ ),
382+ (int ) (bounds .getWidth () * scaleFactor_ ),
383+ (int ) (bounds .getHeight () * scaleFactor_ ));
373384 updateUI (clipping , content_rect_ );
374385 }
375386 }
0 commit comments