• R/O
  • SSH
  • HTTPS

Commit

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

OmegaT の背景に画像を表示します。


Commit MetaInfo

Revision40 (tree)
Time2014-05-21 02:05:09
Authoryu-tang

Log Message

エディター部の透過制御を Moenizer クラスから MoeUI クラスに移動

Change Summary

Incremental Difference

--- trunk/src/jp/sourceforge/users/yutang/omegat/plugin/moenizer/Moenizer.java (revision 39)
+++ trunk/src/jp/sourceforge/users/yutang/omegat/plugin/moenizer/Moenizer.java (revision 40)
@@ -21,11 +21,9 @@
2121 import javax.swing.SwingUtilities;
2222 import javax.swing.SwingWorker;
2323 import jp.sourceforge.users.yutang.omegat.plugin.moenizer.imageloader.IImageLoader;
24-import jp.sourceforge.users.yutang.omegat.plugin.moenizer.imageloader.ImageLoader;
2524 import org.omegat.core.Core;
2625 import org.omegat.core.CoreEvents;
2726 import org.omegat.core.events.IApplicationEventListener;
28-import org.omegat.core.events.IProjectEventListener;
2927 import org.omegat.util.Log;
3028
3129 /**
@@ -33,7 +31,7 @@
3331 *
3432 * @author Yu-Tang
3533 */
36-public class Moenizer implements IApplicationEventListener, IProjectEventListener {
34+public class Moenizer implements IApplicationEventListener {
3735
3836 private static boolean instantiated = false;
3937
@@ -65,12 +63,7 @@
6563 @Override
6664 public void onApplicationStartup() {
6765 try {
68- CoreEvents.registerProjectChangeListener(this);
69-
7066 config = new MoeConfig(MoeUtil.getMoeConfigFile());
71- // この時点ではまだウィンドウがインスタンス化されていないので、
72- // ウィンドウに対する処理は少し待つ。
73-
7467 ui = MoeUI.getInstance();
7568 themeChanger = new ThemeChanger(ui);
7669 themeChanger.setTheme(config.getCurrentConfig());
@@ -96,29 +89,7 @@
9689 // not used.
9790 }
9891
99- @Override
100- public void onProjectChanged(PROJECT_CHANGE_TYPE eventType) {
101- switch (eventType) {
102- case CREATE:
103- case LOAD:
104- // ここですぐ透過処理をしてもうまく適用されないので、後まわしにする。
105- SwingUtilities.invokeLater(new Runnable() {
106- @Override
107- public void run() {
108- CoreEvents.unregisterProjectChangeListener(Moenizer.this);
109- ui.transparentEditor(); //@@TODO これは effect の方から指定をもらわないと
110- }
111- });
112-
113- // 一回 Editor の透過処理をしたら、透過状態が維持されるので、二回目
114- // 以降は、透過処理は不要。
115- //CoreEvents.unregisterProjectChangeListener(this); // ここで発行すると、スレッドエラーになるので注意
116- break;
117- case CLOSE:
118- break;
119- }
120- }
121-
92+ //@@TODO effect の具象クラスに移動
12293 private class SlideShow extends SwingWorker<Object, Void> {
12394 private long interval = -1;
12495
--- trunk/src/jp/sourceforge/users/yutang/omegat/plugin/moenizer/MoeUI.java (revision 39)
+++ trunk/src/jp/sourceforge/users/yutang/omegat/plugin/moenizer/MoeUI.java (revision 40)
@@ -37,7 +37,10 @@
3737 import javax.swing.JMenuBar;
3838 import javax.swing.JPanel;
3939 import javax.swing.JScrollPane;
40+import javax.swing.SwingUtilities;
4041 import org.omegat.core.Core;
42+import org.omegat.core.CoreEvents;
43+import org.omegat.core.events.IProjectEventListener;
4144 import org.omegat.util.gui.UIThreadsUtil;
4245
4346 /**
@@ -44,7 +47,7 @@
4447 *
4548 * @author Yu-Tang
4649 */
47-public class MoeUI {
50+public class MoeUI implements IProjectEventListener {
4851
4952 private static MoeUI moeUI;
5053
@@ -60,6 +63,7 @@
6063 private boolean makeTransparentButtonPanel = true;
6164 private boolean makeTransparentStatusbar = true;
6265 private boolean makeTransparentPaneTitlebar = true;
66+ private boolean isEditorTransparent = false;
6367
6468 public enum Parts {
6569 MenuBar, StatusBar, ButtonPanel, PaneTitleBar
@@ -110,9 +114,41 @@
110114 transparentRecursive(contentPane);
111115 transparentInstantStart(desktop);
112116
117+ // try to make transparent editor pane
118+ if (!isEditorTransparent) {
119+ isEditorTransparent = transparentEditor();
120+ if (!isEditorTransparent) {
121+ CoreEvents.registerProjectChangeListener(this);
122+ }
123+ }
124+
113125 frame.repaint();
114126 }
115127
128+ @Override
129+ public void onProjectChanged(PROJECT_CHANGE_TYPE eventType) {
130+ switch (eventType) {
131+ case CREATE:
132+ case LOAD:
133+ // ここですぐエディターの透過処理をしてもうまく適用されないので、
134+ // 遅延処理する。
135+ SwingUtilities.invokeLater(new Runnable() {
136+ @Override
137+ public void run() {
138+ CoreEvents.unregisterProjectChangeListener(MoeUI.this);
139+ isEditorTransparent = transparentEditor();
140+ }
141+ });
142+
143+ // 一回 Editor の透過処理をしたら、透過状態が維持されるので、二回目
144+ // 以降は、透過処理は不要。
145+ //CoreEvents.unregisterProjectChangeListener(this); // ここで発行すると、スレッドエラーになるので注意
146+ break;
147+ case CLOSE:
148+ break;
149+ }
150+ }
151+
116152 private int getDockViewTitleBarHeight(DockingDesktop desktop) {
117153 Dockable dockable = null;
118154 for (DockableState d: desktop.getDockables()) {
@@ -131,7 +167,7 @@
131167 return titleBar.getHeight();
132168 }
133169
134- public void transparentEditor() {
170+ private boolean transparentEditor() {
135171 // Editor に表示されるドキュメントは、以下のケースでまったく異なる。
136172 //
137173 // 1. インスタントスタートガイドが表示されている場合(初期状態)
@@ -145,8 +181,8 @@
145181 UIThreadsUtil.mustBeSwingThread();
146182
147183 JEditorPane editor = getJEditorPaneFromEditor(desktop);
148- if (editor == null) {
149- return;
184+ if (editor == null || editor instanceof javax.swing.JTextPane) {
185+ return false;
150186 }
151187
152188 /* ここで JEditorPane に半透明の背景色を設定すると、テキストの選択(反転)
@@ -160,8 +196,9 @@
160196 * */
161197 editor.setOpaque(false);
162198 frame.repaint();
199+ return true;
163200 }
164-
201+
165202 public void setBackground(final BufferedImage image) {
166203 UIThreadsUtil.executeInSwingThread(new Runnable() {
167204 @Override