mirror of
https://github.com/JFormDesigner/FlatLaf.git
synced 2026-02-11 06:27:13 -06:00
Popup: fixed scrolling popup painting issue on Windows 10 when a glass pane is visible and frame is maximized (issue #1071)
This commit is contained in:
@@ -1,6 +1,12 @@
|
|||||||
FlatLaf Change Log
|
FlatLaf Change Log
|
||||||
==================
|
==================
|
||||||
|
|
||||||
|
## 3.7.1-SNAPSHOT
|
||||||
|
|
||||||
|
- Popup: Fixed scrolling popup painting issue on Windows 10 when a glass pane is
|
||||||
|
visible and frame is maximized. (issue #1071)
|
||||||
|
|
||||||
|
|
||||||
## 3.7
|
## 3.7
|
||||||
|
|
||||||
#### New features and improvements
|
#### New features and improvements
|
||||||
|
|||||||
@@ -108,10 +108,8 @@ public class FlatPopupFactory
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean forceHeavyWeight = isOptionEnabled( owner, contents, FlatClientProperties.POPUP_FORCE_HEAVY_WEIGHT, "Popup.forceHeavyWeight" );
|
|
||||||
|
|
||||||
if( !isOptionEnabled( owner, contents, FlatClientProperties.POPUP_DROP_SHADOW_PAINTED, "Popup.dropShadowPainted" ) || SystemInfo.isProjector || SystemInfo.isWebswing )
|
if( !isOptionEnabled( owner, contents, FlatClientProperties.POPUP_DROP_SHADOW_PAINTED, "Popup.dropShadowPainted" ) || SystemInfo.isProjector || SystemInfo.isWebswing )
|
||||||
return new NonFlashingPopup( getPopupForScreenOfOwner( owner, contents, x, y, forceHeavyWeight ), owner, contents );
|
return new NonFlashingPopup( getPopupForScreenOfOwner( owner, contents, x, y, isForceHeavyWeight( owner, contents, x, y ) ), owner, contents );
|
||||||
|
|
||||||
// macOS and Linux adds drop shadow to heavy weight popups
|
// macOS and Linux adds drop shadow to heavy weight popups
|
||||||
if( SystemInfo.isMacOS || SystemInfo.isLinux ) {
|
if( SystemInfo.isMacOS || SystemInfo.isLinux ) {
|
||||||
@@ -131,12 +129,8 @@ public class FlatPopupFactory
|
|||||||
return popup;
|
return popup;
|
||||||
}
|
}
|
||||||
|
|
||||||
// check whether popup overlaps a heavy weight component
|
|
||||||
if( !forceHeavyWeight && overlapsHeavyWeightComponent( owner, contents, x, y ) )
|
|
||||||
forceHeavyWeight = true;
|
|
||||||
|
|
||||||
// create drop shadow popup
|
// create drop shadow popup
|
||||||
Popup popupForScreenOfOwner = getPopupForScreenOfOwner( owner, contents, x, y, forceHeavyWeight );
|
Popup popupForScreenOfOwner = getPopupForScreenOfOwner( owner, contents, x, y, isForceHeavyWeight( owner, contents, x, y ) );
|
||||||
GraphicsConfiguration gc = (owner != null) ? owner.getGraphicsConfiguration() : null;
|
GraphicsConfiguration gc = (owner != null) ? owner.getGraphicsConfiguration() : null;
|
||||||
return (gc != null && gc.isTranslucencyCapable())
|
return (gc != null && gc.isTranslucencyCapable())
|
||||||
? new DropShadowPopup( popupForScreenOfOwner, owner, contents )
|
? new DropShadowPopup( popupForScreenOfOwner, owner, contents )
|
||||||
@@ -226,6 +220,11 @@ public class FlatPopupFactory
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static boolean isForceHeavyWeight( Component owner, Component contents, int x, int y ) {
|
||||||
|
boolean forceHeavyWeight = isOptionEnabled( owner, contents, FlatClientProperties.POPUP_FORCE_HEAVY_WEIGHT, "Popup.forceHeavyWeight" );
|
||||||
|
return forceHeavyWeight || hasVisibleGlassPane( owner ) || overlapsHeavyWeightComponent( owner, contents, x, y );
|
||||||
|
}
|
||||||
|
|
||||||
private static boolean isOptionEnabled( Component owner, Component contents, String clientKey, String uiKey ) {
|
private static boolean isOptionEnabled( Component owner, Component contents, String clientKey, String uiKey ) {
|
||||||
Object value = getOption( owner, contents, clientKey, uiKey );
|
Object value = getOption( owner, contents, clientKey, uiKey );
|
||||||
return (value instanceof Boolean) ? (Boolean) value : false;
|
return (value instanceof Boolean) ? (Boolean) value : false;
|
||||||
@@ -469,6 +468,18 @@ public class FlatPopupFactory
|
|||||||
|
|
||||||
//---- fixes --------------------------------------------------------------
|
//---- fixes --------------------------------------------------------------
|
||||||
|
|
||||||
|
private static boolean hasVisibleGlassPane( Component owner ) {
|
||||||
|
if( owner == null )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
Window window = SwingUtilities.windowForComponent( owner );
|
||||||
|
if( !(window instanceof RootPaneContainer) )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
Component glassPane = ((RootPaneContainer)window).getGlassPane();
|
||||||
|
return (glassPane != null && glassPane.isVisible());
|
||||||
|
}
|
||||||
|
|
||||||
private static boolean overlapsHeavyWeightComponent( Component owner, Component contents, int x, int y ) {
|
private static boolean overlapsHeavyWeightComponent( Component owner, Component contents, int x, int y ) {
|
||||||
if( owner == null )
|
if( owner == null )
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
flatlaf.releaseVersion = 3.7
|
flatlaf.releaseVersion = 3.7
|
||||||
flatlaf.developmentVersion = 3.8-SNAPSHOT
|
flatlaf.developmentVersion = 3.7.1-SNAPSHOT
|
||||||
|
|
||||||
org.gradle.configuration-cache = true
|
org.gradle.configuration-cache = true
|
||||||
# org.gradle.warning.mode = all
|
# org.gradle.warning.mode = all
|
||||||
|
|||||||
Reference in New Issue
Block a user