mirror of
https://github.com/gnosygnu/xowa.git
synced 2026-03-02 03:49:30 +00:00
Gui: Add initial support for night-mode
This commit is contained in:
@@ -48,8 +48,10 @@ class Mem_html extends GxwTextMemo_lang implements Gxw_html { public void Html_
|
||||
this.ctor_MsTextBoxMultiline_();
|
||||
}
|
||||
}
|
||||
class Mem_tab_mgr extends GxwElem_mock_base implements Gxw_tab_mgr { public ColorAdp Btns_selected_color() {return btns_selected_color;} public void Btns_selected_color_(ColorAdp v) {btns_selected_color = v;} private ColorAdp btns_selected_color;
|
||||
public ColorAdp Btns_unselected_color() {return btns_unselected_color;} public void Btns_unselected_color_(ColorAdp v) {btns_unselected_color = v;} private ColorAdp btns_unselected_color;
|
||||
class Mem_tab_mgr extends GxwElem_mock_base implements Gxw_tab_mgr { public ColorAdp Btns_selected_background() {return btns_selected_background;} public void Btns_selected_background_(ColorAdp v) {btns_selected_background = v;} private ColorAdp btns_selected_background;
|
||||
public ColorAdp Btns_selected_foreground() {return btns_selected_foreground;} public void Btns_selected_foreground_(ColorAdp v) {btns_selected_foreground = v;} private ColorAdp btns_selected_foreground;
|
||||
public ColorAdp Btns_unselected_background() {return btns_unselected_background;} public void Btns_unselected_background_(ColorAdp v) {btns_unselected_background = v;} private ColorAdp btns_unselected_background;
|
||||
public ColorAdp Btns_unselected_foreground() {return btns_unselected_foreground;} public void Btns_unselected_foreground_(ColorAdp v) {btns_unselected_foreground = v;} private ColorAdp btns_unselected_foreground;
|
||||
public Gxw_tab_itm Tabs_add(Gfui_tab_itm_data tab_data) {return new Mem_tab_itm();}
|
||||
public void Tabs_select_by_idx(int i) {}
|
||||
public void Tabs_close_by_idx(int i) {}
|
||||
|
||||
@@ -196,7 +196,7 @@ public class Swt_kit implements Gfui_kit {
|
||||
for (int i = 0; i < args_len; i++)
|
||||
ctor_args.Add(args[i]);
|
||||
boolean border_on = Bool_.Cast(ctor_args.Get_val_or(GfuiTextBox.CFG_border_on_, true));
|
||||
GxwTextFld under = new Swt_text_w_border(Swt_control_.cast_or_fail(owner), New_color(border_on ? ColorAdp_.LightGray : ColorAdp_.White), ctor_args);
|
||||
GxwTextFld under = new Swt_text_w_border(this, Swt_control_.cast_or_fail(owner), New_color(border_on ? ColorAdp_.LightGray : ColorAdp_.White), ctor_args);
|
||||
GfuiTextBox rv = GfuiTextBox_.kit_(this, key, under, ctor_args);
|
||||
rv.Owner_(owner);
|
||||
ctor_args.Clear();
|
||||
@@ -211,7 +211,7 @@ public class Swt_kit implements Gfui_kit {
|
||||
return rv;
|
||||
}
|
||||
public GfuiComboBox New_combo(String key, GfuiElem owner, Keyval... args) {
|
||||
Swt_combo_ctrl rv_swt = new Swt_combo_ctrl(Swt_control_.cast_or_fail(owner), this.New_color(ColorAdp_.LightGray), ctor_args);
|
||||
Swt_combo_ctrl rv_swt = new Swt_combo_ctrl(this, Swt_control_.cast_or_fail(owner), this.New_color(ColorAdp_.LightGray), ctor_args);
|
||||
GfuiComboBox rv = GfuiComboBox.kit_(this, key, rv_swt, ctor_args);
|
||||
rv.Owner_(owner);
|
||||
rv_swt.Evt_mgr_(rv.Evt_mgr());
|
||||
|
||||
@@ -27,6 +27,7 @@ import gplx.gfui.imgs.ImageAdp;
|
||||
import org.eclipse.swt.SWT;
|
||||
import org.eclipse.swt.graphics.Cursor;
|
||||
import org.eclipse.swt.graphics.Image;
|
||||
import org.eclipse.swt.graphics.ImageData;
|
||||
import org.eclipse.swt.graphics.Rectangle;
|
||||
import org.eclipse.swt.widgets.Composite;
|
||||
import org.eclipse.swt.widgets.Control;
|
||||
@@ -61,15 +62,24 @@ public class Swt_btn_no_border implements GxwElem, Swt_control {
|
||||
private void Btn_img_(ImageAdp v) {
|
||||
if (box_btn == null || v == null) return;
|
||||
SizeAdp size = core.Size();
|
||||
box_btn.setImage((Image)v.Resize(size.Width(), size.Height()).Under());
|
||||
v = v.Resize(size.Width(), size.Height());
|
||||
box_btn.setImage(Copy_w_transparency((Image)v.Under()));
|
||||
}
|
||||
private Image Copy_w_transparency(Image src) {
|
||||
// set transparency
|
||||
ImageData imageData = src.getImageData();
|
||||
imageData.transparentPixel = imageData.getPixel(0, 0);
|
||||
|
||||
// create new image with transparency set
|
||||
Image trg = new Image(box_grp.getDisplay(), imageData);
|
||||
src.dispose();
|
||||
return trg;
|
||||
}
|
||||
private void Make_btn_no_border(Display display, Shell shell, Composite owner) {
|
||||
box_grp = new Composite(owner, SWT.FLAT);
|
||||
box_btn = new Label(box_grp, SWT.FLAT);
|
||||
box_grp.setSize(16, 16);
|
||||
box_btn.setSize(16, 16);
|
||||
box_grp.setBackground(display.getSystemColor(SWT.COLOR_WHITE));
|
||||
box_btn.setBackground(display.getSystemColor(SWT.COLOR_WHITE));
|
||||
box_btn.addFocusListener(new Swt_clabel_lnr_focus(box_grp));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,6 +29,7 @@ import gplx.gfui.controls.gxws.GxwComboBox;
|
||||
import gplx.gfui.controls.gxws.GxwCore_base;
|
||||
import gplx.gfui.controls.gxws.GxwElem;
|
||||
import gplx.gfui.controls.standards.GfuiComboBox;
|
||||
import gplx.gfui.draws.ColorAdp;
|
||||
|
||||
import org.eclipse.swt.SWT;
|
||||
import org.eclipse.swt.events.SelectionEvent;
|
||||
@@ -47,6 +48,7 @@ class Swt_combo implements GxwElem, GxwComboBox, Swt_control, Gfo_evt_mgr_owner
|
||||
combo.addMouseListener(new Swt_lnr_mouse(this));
|
||||
combo.addSelectionListener(new Swt_combo__selection_listener(this));
|
||||
}
|
||||
public ColorAdp Border_color() {return border_color;} public void Border_color_(ColorAdp v) {border_color = v;} private ColorAdp border_color;
|
||||
@Override public Gfo_evt_mgr Evt_mgr() {return ev_mgr;} private Gfo_evt_mgr ev_mgr; public void Evt_mgr_(Gfo_evt_mgr v) {ev_mgr = v;}
|
||||
@Override public Control Under_control() {return combo;}
|
||||
@Override public Control Under_menu_control() {return combo;}
|
||||
|
||||
@@ -21,6 +21,7 @@ import gplx.core.threads.Thread_adp_;
|
||||
import gplx.gfui.controls.gxws.GxwComboBox;
|
||||
import gplx.gfui.controls.gxws.GxwElem;
|
||||
import gplx.gfui.controls.standards.GfuiComboBox;
|
||||
import gplx.gfui.kits.core.Swt_kit;
|
||||
|
||||
import org.eclipse.swt.SWT;
|
||||
import org.eclipse.swt.events.SelectionEvent;
|
||||
@@ -43,8 +44,8 @@ import org.eclipse.swt.widgets.Text;
|
||||
public class Swt_combo_ctrl extends Swt_text_w_border implements GxwElem, GxwComboBox, Swt_control, Gfo_evt_mgr_owner { // REF: https://www.eclipse.org/forums/index.php/t/351029/; http://git.eclipse.org/c/platform/eclipse.platform.swt.git/tree/examples/org.eclipse.swt.snippets/src/org/eclipse/swt/snippets/Snippet320.java
|
||||
private final Text swt_text;
|
||||
private final Swt_combo_list list;
|
||||
public Swt_combo_ctrl(Swt_control owner, Color color, Keyval_hash ctorArgs) {
|
||||
super(owner, color, new Keyval_hash());
|
||||
public Swt_combo_ctrl(Swt_kit kit, Swt_control owner, Color color, Keyval_hash ctorArgs) {
|
||||
super(kit, owner, color, new Keyval_hash());
|
||||
Display display = owner.Under_control().getDisplay();
|
||||
Shell shell = owner.Under_control().getShell();
|
||||
this.swt_text = super.Under_text();
|
||||
|
||||
@@ -102,7 +102,7 @@ abstract class Swt_core__base extends GxwCore_base {
|
||||
@Override public void Zorder_front() {} // TODO.FUTURE: Canvas c; c.moveAbove(arg0);
|
||||
@Override public void Zorder_back() {} // TODO.FUTURE: Canvas c; c.moveBelow(arg0);
|
||||
|
||||
private static ColorAdp To_color_gfui(Color v) {return ColorAdp_.new_(0, v.getRed(), v.getGreen(), v.getBlue());}
|
||||
protected static ColorAdp To_color_gfui(Color v) {return ColorAdp_.new_(0, v.getRed(), v.getGreen(), v.getBlue());}
|
||||
protected static Color To_color_swt(Control control, ColorAdp v) {return new Color(control.getDisplay(), v.Red(), v.Green(), v.Blue());}
|
||||
private static FontAdp Control_font_get(Font font, GxwCore_base owner) {
|
||||
FontData fontData = font.getFontData()[0];
|
||||
|
||||
@@ -15,7 +15,9 @@ Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt
|
||||
*/
|
||||
package gplx.gfui.kits.swts; import gplx.*; import gplx.gfui.*; import gplx.gfui.kits.*;
|
||||
import org.eclipse.swt.widgets.*;
|
||||
import org.eclipse.swt.graphics.Color;
|
||||
import gplx.gfui.controls.gxws.*;
|
||||
import gplx.gfui.draws.ColorAdp;
|
||||
|
||||
class Swt_core__dual extends Swt_core__base {
|
||||
private final Control outer, inner;
|
||||
@@ -29,6 +31,18 @@ class Swt_core__dual extends Swt_core__base {
|
||||
@Override public void Height_set(int v) {super.Height_set(v); Swt_control_.H_set(outer, v + inner_adj_h);}
|
||||
@Override public void Size_set(SizeAdp v) {super.Size_set(v); Swt_control_.Size_set(inner, v.Width() + inner_adj_w, v.Height() + inner_adj_h);}
|
||||
@Override public void Rect_set(RectAdp v) {super.Rect_set(v); Swt_control_.Size_set(inner, v.Width() + inner_adj_w, v.Height() + inner_adj_h);}
|
||||
@Override public ColorAdp BackColor() {return To_color_gfui(inner.getBackground());}
|
||||
@Override public void BackColor_set(ColorAdp v) {
|
||||
Color color = To_color_swt(inner, v);
|
||||
inner.setBackground(color);
|
||||
outer.setBackground(color);
|
||||
}
|
||||
@Override public ColorAdp ForeColor() {return To_color_gfui(inner.getForeground());}
|
||||
@Override public void ForeColor_set(ColorAdp v) {
|
||||
Color color = To_color_swt(inner, v);
|
||||
inner.setForeground(color);
|
||||
outer.setForeground(color);
|
||||
}
|
||||
|
||||
@Override public void Invalidate() {outer.update(); inner.update();}
|
||||
@Override public void Dispose() {outer.dispose(); inner.dispose();}
|
||||
|
||||
@@ -53,11 +53,17 @@ class Swt_core__frames extends Swt_core__base {
|
||||
@Override public void Width_set(int v) {super.Width_set(v); Frames_w_set(v);}
|
||||
@Override public void Height_set(int v) {super.Height_set(v); Frames_h_set(v);}
|
||||
@Override public void Size_set(SizeAdp v) {super.Size_set(v); Frames_size_set(v);}
|
||||
@Override public void Rect_set(RectAdp v) {super.Rect_set(v); Frames_size_set(v.Size());}
|
||||
@Override public void Rect_set(RectAdp v) {super.Rect_set(v); Frames_size_set(v.Size());}
|
||||
@Override public void BackColor_set(ColorAdp v) {
|
||||
Color color = Swt_core__base.To_color_swt(outer, v);
|
||||
for (int i = 0; i < frames_len; i++)
|
||||
for (int i = 0; i < frames_len; i++) {
|
||||
frames[i].Item().setBackground(color);
|
||||
}
|
||||
}
|
||||
@Override public void ForeColor_set(ColorAdp v) {
|
||||
Color color = Swt_core__base.To_color_swt(outer, v);
|
||||
for (int i = 0; i < frames_len; i++)
|
||||
frames[i].Item().setForeground(color);
|
||||
}
|
||||
@Override public void Controls_add(GxwElem sub) {throw Err_.new_unimplemented();}
|
||||
@Override public void Controls_del(GxwElem sub) {}
|
||||
|
||||
@@ -60,30 +60,32 @@ public class Swt_tab_mgr implements Gxw_tab_mgr, Swt_control, FocusListener, Gfo
|
||||
@Override public Control Under_menu_control() {return tab_folder;}
|
||||
public Gfo_evt_mgr Evt_mgr() {return ev_mgr;} private Gfo_evt_mgr ev_mgr;
|
||||
public void Evt_mgr_(Gfo_evt_mgr v) {ev_mgr = v;}
|
||||
public ColorAdp Btns_selected_color() {return btns_selected_color;} private ColorAdp btns_selected_color;
|
||||
public void Btns_selected_color_(ColorAdp v) {
|
||||
btns_selected_color = v;
|
||||
tab_folder.setSelectionBackground(kit.New_color(v));
|
||||
}
|
||||
public ColorAdp Btns_unselected_color() {return btns_unselected_color;}
|
||||
public void Btns_unselected_color_(ColorAdp v) {
|
||||
btns_unselected_color = v;
|
||||
tab_folder.setBackground(kit.New_color(v));
|
||||
} private ColorAdp btns_unselected_color;
|
||||
@Override public boolean Btns_curved() {return tab_folder.getSimple();} @Override public void Btns_curved_(boolean v) {tab_folder.setSimple(!v);}
|
||||
@Override public boolean Btns_place_on_top() {return tab_folder.getTabPosition() == SWT.TOP;}
|
||||
@Override public void Btns_place_on_top_(boolean v) {tab_folder.setTabPosition(v ? SWT.TOP : SWT.BOTTOM); tab_folder.layout();}
|
||||
@Override public int Btns_height() {return tab_folder.getTabHeight();} @Override public void Btns_height_(int v) {tab_folder.setTabHeight(v); tab_folder.layout();}
|
||||
@Override public boolean Btns_close_visible() {return btns_close_visible;} private boolean btns_close_visible = true;
|
||||
@Override public void Btns_close_visible_(boolean v) {
|
||||
|
||||
public ColorAdp Btns_selected_foreground() {return btns_selected_foreground;} private ColorAdp btns_selected_foreground;
|
||||
public void Btns_selected_foreground_(ColorAdp v) {btns_selected_foreground = v; tab_folder.setSelectionForeground(kit.New_color(v));}
|
||||
public ColorAdp Btns_selected_background() {return btns_selected_background;} private ColorAdp btns_selected_background;
|
||||
public void Btns_selected_background_(ColorAdp v) {btns_selected_background = v; tab_folder.setSelectionBackground(kit.New_color(v));}
|
||||
public ColorAdp Btns_unselected_foreground() {return btns_unselected_foreground;} private ColorAdp btns_unselected_foreground;
|
||||
public void Btns_unselected_foreground_(ColorAdp v) {btns_unselected_foreground = v; tab_folder.setForeground(kit.New_color(v));}
|
||||
public ColorAdp Btns_unselected_background() {return btns_unselected_background;} private ColorAdp btns_unselected_background;
|
||||
public void Btns_unselected_background_(ColorAdp v) {btns_unselected_background = v; tab_folder.setBackground(kit.New_color(v));}
|
||||
public boolean Btns_curved() {return tab_folder.getSimple();}
|
||||
public void Btns_curved_(boolean v) {tab_folder.setSimple(!v);}
|
||||
public boolean Btns_place_on_top() {return tab_folder.getTabPosition() == SWT.TOP;}
|
||||
public void Btns_place_on_top_(boolean v) {tab_folder.setTabPosition(v ? SWT.TOP : SWT.BOTTOM); tab_folder.layout();}
|
||||
public int Btns_height() {return tab_folder.getTabHeight();}
|
||||
public void Btns_height_(int v) {tab_folder.setTabHeight(v); tab_folder.layout();}
|
||||
public boolean Btns_close_visible() {return btns_close_visible;} private boolean btns_close_visible = true;
|
||||
public void Btns_close_visible_(boolean v) {
|
||||
this.btns_close_visible = v;
|
||||
CTabItem[] itms = tab_folder.getItems();
|
||||
int len = itms.length;
|
||||
for (int i = 0; i < len; i++)
|
||||
itms[i].setShowClose(v);
|
||||
}
|
||||
@Override public boolean Btns_unselected_close_visible() {return tab_folder.getUnselectedCloseVisible();} @Override public void Btns_unselected_close_visible_(boolean v) {
|
||||
tab_folder.setUnselectedCloseVisible(v);}
|
||||
public boolean Btns_unselected_close_visible() {return tab_folder.getUnselectedCloseVisible();}
|
||||
public void Btns_unselected_close_visible_(boolean v) {tab_folder.setUnselectedCloseVisible(v);}
|
||||
|
||||
@Override public Gxw_tab_itm Tabs_add(Gfui_tab_itm_data tab_data) {
|
||||
Swt_tab_itm rv = new Swt_tab_itm(this, kit, tab_folder, tab_data);
|
||||
rv.Under_CTabItem().setData(tab_data);
|
||||
|
||||
@@ -18,6 +18,7 @@ import gplx.gfui.controls.gxws.GxwCbkHost;
|
||||
import gplx.gfui.controls.gxws.GxwCore_base;
|
||||
import gplx.gfui.controls.gxws.GxwTextFld;
|
||||
import gplx.gfui.controls.standards.GfuiTextBox_;
|
||||
import gplx.gfui.draws.ColorAdp;
|
||||
|
||||
import org.eclipse.swt.SWT;
|
||||
import org.eclipse.swt.events.KeyEvent;
|
||||
@@ -58,6 +59,7 @@ public class Swt_text implements GxwTextFld, Swt_control {
|
||||
@Override public Object Invk(GfsCtx ctx, int ikey, String k, GfoMsg m) {return null;}
|
||||
public void Margins_set(int left, int top, int right, int bot) {}
|
||||
@Override public boolean Border_on() {return false;} @Override public void Border_on_(boolean v) {} // SWT_TODO:borderWidth doesn't seem mutable
|
||||
public ColorAdp Border_color() {return border_color;} public void Border_color_(ColorAdp v) {border_color = v;} private ColorAdp border_color;
|
||||
@Override public void CreateControlIfNeeded() {}
|
||||
@Override public boolean OverrideTabKey() {return false;} @Override public void OverrideTabKey_(boolean v) {}
|
||||
}
|
||||
|
||||
@@ -14,10 +14,12 @@ GPLv3 License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-GPLv3.txt
|
||||
Apache License: https://github.com/gnosygnu/xowa/blob/master/LICENSE-APACHE2.txt
|
||||
*/
|
||||
package gplx.gfui.kits.swts; import gplx.*; import gplx.gfui.*; import gplx.gfui.kits.*;
|
||||
import gplx.gfui.kits.core.Swt_kit;
|
||||
import gplx.gfui.controls.gxws.GxwCbkHost;
|
||||
import gplx.gfui.controls.gxws.GxwCore_base;
|
||||
import gplx.gfui.controls.gxws.GxwTextFld;
|
||||
import gplx.gfui.controls.standards.GfuiTextBox_;
|
||||
import gplx.gfui.draws.ColorAdp;
|
||||
|
||||
import org.eclipse.swt.SWT;
|
||||
import org.eclipse.swt.events.TraverseEvent;
|
||||
@@ -34,10 +36,12 @@ import org.eclipse.swt.widgets.Shell;
|
||||
import org.eclipse.swt.widgets.Text;
|
||||
|
||||
public class Swt_text_w_border implements GxwTextFld, Swt_control {
|
||||
private final Swt_kit kit;
|
||||
private Composite text_host;
|
||||
private Composite text_margin;
|
||||
private Text text_elem;
|
||||
public Swt_text_w_border(Swt_control owner_control, Color color, Keyval_hash ctorArgs) {
|
||||
public Swt_text_w_border(Swt_kit kit, Swt_control owner_control, Color color, Keyval_hash ctorArgs) {
|
||||
this.kit = kit;
|
||||
Composite owner = owner_control.Under_composite();
|
||||
int text_elem_style = ctorArgs.Has(GfuiTextBox_.Ctor_Memo) ? SWT.MULTI | SWT.WRAP | SWT.V_SCROLL : SWT.FLAT;
|
||||
New_box_text_w_border(owner.getDisplay(), owner, text_elem_style, color);
|
||||
@@ -69,17 +73,20 @@ public class Swt_text_w_border implements GxwTextFld, Swt_control {
|
||||
public void Margins_set(int left, int top, int right, int bot) {
|
||||
this.margins_l = left; this.margins_t = top; this.margins_r = right; this.margins_b = bot;
|
||||
}
|
||||
@Override public boolean Border_on() {return false;} @Override public void Border_on_(boolean v) {} // SWT_TODO:borderWidth doesn't seem mutable
|
||||
@Override public boolean Border_on() {return false;}
|
||||
@Override public void Border_on_(boolean v) {} // SWT_TODO:borderWidth doesn't seem mutable
|
||||
public ColorAdp Border_color() {return border_color;} private ColorAdp border_color;
|
||||
public void Border_color_(ColorAdp v) {
|
||||
this.border_color = v; text_host.setBackground(kit.New_color(v));
|
||||
}
|
||||
@Override public void CreateControlIfNeeded() {}
|
||||
@Override public boolean OverrideTabKey() {return false;} @Override public void OverrideTabKey_(boolean v) {}
|
||||
private void New_box_text_w_border(Display display, Composite owner, int style, Color color) {
|
||||
private void New_box_text_w_border(Display display, Composite owner, int style, Color border_color) {
|
||||
text_host = new Composite(owner, SWT.FLAT);
|
||||
text_margin = new Composite(text_host, SWT.FLAT);
|
||||
text_elem = new Text(text_margin, style);
|
||||
text_elem .addTraverseListener(Swt_lnr_traverse_ignore_ctrl.Instance); // do not allow ctrl+tab to change focus when pressed in text box; allows ctrl+tab to be used by other bindings; DATE:2014-04-30
|
||||
text_host.setSize(20, 20);
|
||||
text_host.setBackground(color);
|
||||
text_margin.setBackground(display.getSystemColor(SWT.COLOR_WHITE));
|
||||
text_margin.setSize(25, 25);
|
||||
}
|
||||
public static final int Margin_v_dflt = 4;
|
||||
|
||||
Reference in New Issue
Block a user