From 6d039b026c64da78d867ffa92c0a6321b17a2b8b Mon Sep 17 00:00:00 2001 From: GiWoong Kim Date: Mon, 3 Feb 2014 17:24:04 +0900 Subject: [PATCH] skin: keep window region while host OS theme changing Change-Id: I56e0309075cee9f4b3e1558bdf5c068090ae6188 Signed-off-by: GiWoong Kim --- .../org/tizen/emulator/skin/EmulatorSkin.java | 18 ++++++++++ .../layout/GeneralPurposeSkinComposer.java | 6 ++-- .../layout/ProfileSpecificSkinComposer.java | 2 +- .../emulator/skin/menu/GeneralKeyWindow.java | 33 ++++++++++++++----- .../emulator/skin/menu/SpecialKeyWindow.java | 22 ++++++++++--- .../tizen/emulator/skin/util/SkinUtil.java | 2 +- 6 files changed, 65 insertions(+), 18 deletions(-) diff --git a/tizen/src/skin/client/src/org/tizen/emulator/skin/EmulatorSkin.java b/tizen/src/skin/client/src/org/tizen/emulator/skin/EmulatorSkin.java index 9ad8b4d086..39cd19aa51 100755 --- a/tizen/src/skin/client/src/org/tizen/emulator/skin/EmulatorSkin.java +++ b/tizen/src/skin/client/src/org/tizen/emulator/skin/EmulatorSkin.java @@ -62,6 +62,8 @@ import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.widgets.Canvas; import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Event; +import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Shell; @@ -587,6 +589,16 @@ public class EmulatorSkin { }; shell.addMenuDetectListener(shellMenuDetectListener); + + /* keep window region while OS theme changing */ + shell.getDisplay().addListener(SWT.Settings, new Listener() { + @Override + public void handleEvent(Event e) { + logger.info("operating system property has been changed"); + + rearrangeSkin(); + } + }); } private void removeShellListeners() { @@ -1216,6 +1228,12 @@ public class EmulatorSkin { } } + protected void rearrangeSkin() { + skinComposer.arrangeSkin( + currentState.getCurrentScale(), + currentState.getCurrentRotationId()); + } + public void updateSkin() { skinComposer.updateSkin(); } diff --git a/tizen/src/skin/client/src/org/tizen/emulator/skin/layout/GeneralPurposeSkinComposer.java b/tizen/src/skin/client/src/org/tizen/emulator/skin/layout/GeneralPurposeSkinComposer.java index a9921d83c1..0443ccf299 100644 --- a/tizen/src/skin/client/src/org/tizen/emulator/skin/layout/GeneralPurposeSkinComposer.java +++ b/tizen/src/skin/client/src/org/tizen/emulator/skin/layout/GeneralPurposeSkinComposer.java @@ -245,8 +245,8 @@ public class GeneralPurposeSkinComposer implements ISkinComposer { /* make window region */ Region region = (SwtUtil.isLinuxPlatform() == false) ? - getTrimmingRegion(shell.getDisplay(), generalSkin) : /* color key */ - SkinUtil.getTrimmingRegion(generalSkin); + getTrimmedRegion(shell.getDisplay(), generalSkin) : /* color key */ + SkinUtil.getTrimmedRegion(generalSkin); /* update the skin state information */ currentState.setCurrentScale(scale); @@ -338,7 +338,7 @@ public class GeneralPurposeSkinComposer implements ISkinComposer { return displayBounds; } - private static Region getTrimmingRegion(Display display, Image image) { + private static Region getTrimmedRegion(Display display, Image image) { if (null == image) { return null; } diff --git a/tizen/src/skin/client/src/org/tizen/emulator/skin/layout/ProfileSpecificSkinComposer.java b/tizen/src/skin/client/src/org/tizen/emulator/skin/layout/ProfileSpecificSkinComposer.java index 34e5b246e1..3d387bfaea 100644 --- a/tizen/src/skin/client/src/org/tizen/emulator/skin/layout/ProfileSpecificSkinComposer.java +++ b/tizen/src/skin/client/src/org/tizen/emulator/skin/layout/ProfileSpecificSkinComposer.java @@ -212,7 +212,7 @@ public class ProfileSpecificSkinComposer implements ISkinComposer { shell.getDisplay(), originSkinKeyPressed, rotationId, scale); /* make window region */ - Region region = SkinUtil.getTrimmingRegion(profileSkin); + Region region = SkinUtil.getTrimmedRegion(profileSkin); /* update the skin state information */ currentState.setCurrentScale(scale); diff --git a/tizen/src/skin/client/src/org/tizen/emulator/skin/menu/GeneralKeyWindow.java b/tizen/src/skin/client/src/org/tizen/emulator/skin/menu/GeneralKeyWindow.java index c8b517425c..2680b4a851 100644 --- a/tizen/src/skin/client/src/org/tizen/emulator/skin/menu/GeneralKeyWindow.java +++ b/tizen/src/skin/client/src/org/tizen/emulator/skin/menu/GeneralKeyWindow.java @@ -50,6 +50,8 @@ import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Event; +import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Shell; import org.tizen.emulator.skin.EmulatorSkin; import org.tizen.emulator.skin.comm.ICommunicator.KeyEventType; @@ -165,14 +167,7 @@ public class GeneralKeyWindow extends SkinWindow { createContents(); - /* make window region */ - Region region = (SwtUtil.isLinuxPlatform() == false) ? - getTrimmingRegion(shell.getDisplay(), imageFrame) : /* color key */ - SkinUtil.getTrimmingRegion(imageFrame); - /* custom window shape */ - if (region != null) { - shell.setRegion(region); - } + trimWindow(); addKeyWindowListener(); @@ -306,7 +301,7 @@ public class GeneralKeyWindow extends SkinWindow { } } - private static Region getTrimmingRegion(Display display, Image image) { + private static Region getTrimmedRegion(Display display, Image image) { if (null == image) { return null; } @@ -342,6 +337,18 @@ public class GeneralKeyWindow extends SkinWindow { return region; } + protected void trimWindow() { + /* make window region */ + Region region = (SwtUtil.isLinuxPlatform() == false) ? + getTrimmedRegion(shell.getDisplay(), imageFrame) : /* color key */ + SkinUtil.getTrimmedRegion(imageFrame); + + /* custom window shape */ + if (region != null) { + shell.setRegion(region); + } + } + private void addKeyWindowListener() { shellPaintListener = new PaintListener() { @Override @@ -511,6 +518,14 @@ public class GeneralKeyWindow extends SkinWindow { }; shell.addMouseListener(shellMouseListener); + + /* keep window region while OS theme changing */ + shell.getDisplay().addListener(SWT.Settings, new Listener() { + @Override + public void handleEvent(Event e) { + trimWindow(); + } + }); } private void dispose() { diff --git a/tizen/src/skin/client/src/org/tizen/emulator/skin/menu/SpecialKeyWindow.java b/tizen/src/skin/client/src/org/tizen/emulator/skin/menu/SpecialKeyWindow.java index d53430c860..57fded00c0 100644 --- a/tizen/src/skin/client/src/org/tizen/emulator/skin/menu/SpecialKeyWindow.java +++ b/tizen/src/skin/client/src/org/tizen/emulator/skin/menu/SpecialKeyWindow.java @@ -49,6 +49,8 @@ import org.eclipse.swt.graphics.ImageData; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.graphics.Region; +import org.eclipse.swt.widgets.Event; +import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Shell; import org.tizen.emulator.skin.EmulatorSkin; import org.tizen.emulator.skin.comm.ICommunicator.KeyEventType; @@ -138,10 +140,7 @@ public class SpecialKeyWindow extends SkinWindow { } /* custom window shape */ - Region region = SkinUtil.getTrimmingRegion(keyWindowImage); - if (region != null) { - shell.setRegion(region); - } + trimWindow(); addKeyWindowListener(); } @@ -203,6 +202,13 @@ public class SpecialKeyWindow extends SkinWindow { return null; } + protected void trimWindow() { + Region region = SkinUtil.getTrimmedRegion(keyWindowImage); + if (region != null) { + shell.setRegion(region); + } + } + private void addKeyWindowListener() { shellPaintListener = new PaintListener() { @Override @@ -484,6 +490,14 @@ public class SpecialKeyWindow extends SkinWindow { }; shell.addMouseListener(shellMouseListener); + + /* keep window region while OS theme changing */ + shell.getDisplay().addListener(SWT.Settings, new Listener() { + @Override + public void handleEvent(Event e) { + trimWindow(); + } + }); } private void dispose() { diff --git a/tizen/src/skin/client/src/org/tizen/emulator/skin/util/SkinUtil.java b/tizen/src/skin/client/src/org/tizen/emulator/skin/util/SkinUtil.java index 40bcffba09..5c7a0c4606 100644 --- a/tizen/src/skin/client/src/org/tizen/emulator/skin/util/SkinUtil.java +++ b/tizen/src/skin/client/src/org/tizen/emulator/skin/util/SkinUtil.java @@ -197,7 +197,7 @@ public class SkinUtil { return false; } - public static Region getTrimmingRegion(Image image) { + public static Region getTrimmedRegion(Image image) { if (null == image) { return null; } -- 2.34.1