X-Git-Url: http://git.nikiroo.be/?a=blobdiff_plain;f=src%2Fjexer%2FTButton.java;h=534c12a441b9db40ce07f760e947b7c5e6cf796c;hb=3af53a35f41caa36050a69d39a8ec40be92e7aca;hp=8aa62705ea5b641dc5f76c003608dd7e221bdafd;hpb=051e29138b18fb4b731a72f8727475b10e4c74e4;p=fanfix.git diff --git a/src/jexer/TButton.java b/src/jexer/TButton.java index 8aa6270..534c12a 100644 --- a/src/jexer/TButton.java +++ b/src/jexer/TButton.java @@ -3,7 +3,7 @@ * * The MIT License (MIT) * - * Copyright (C) 2017 Kevin Lamonte + * Copyright (C) 2019 Kevin Lamonte * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -32,9 +32,11 @@ import jexer.bits.CellAttributes; import jexer.bits.Color; import jexer.bits.GraphicsChars; import jexer.bits.MnemonicString; +import jexer.bits.StringUtils; import jexer.event.TKeypressEvent; import jexer.event.TMouseEvent; -import static jexer.TKeypress.*; +import static jexer.TKeypress.kbEnter; +import static jexer.TKeypress.kbSpace; /** * TButton implements a simple button. To make the button do something, pass @@ -68,6 +70,12 @@ public class TButton extends TWidget { */ private TAction action; + /** + * The background color used for the button "shadow", or null for "no + * shadow". + */ + private CellAttributes shadowColor; + // ------------------------------------------------------------------------ // Constructors ----------------------------------------------------------- // ------------------------------------------------------------------------ @@ -91,7 +99,12 @@ public class TButton extends TWidget { setX(x); setY(y); setHeight(2); - setWidth(mnemonic.getRawLabel().length() + 3); + setWidth(StringUtils.width(mnemonic.getRawLabel()) + 3); + + shadowColor = new CellAttributes(); + shadowColor.setTo(getWindow().getBackground()); + shadowColor.setForeColor(Color.BLACK); + shadowColor.setBold(false); } /** @@ -209,10 +222,6 @@ public class TButton extends TWidget { public void draw() { CellAttributes buttonColor; CellAttributes menuMnemonicColor; - CellAttributes shadowColor = new CellAttributes(); - shadowColor.setTo(getWindow().getBackground()); - shadowColor.setForeColor(Color.BLACK); - shadowColor.setBold(false); if (!isEnabled()) { buttonColor = getTheme().getColor("tbutton.disabled"); @@ -226,28 +235,29 @@ public class TButton extends TWidget { } if (inButtonPress) { - getScreen().putCharXY(1, 0, ' ', buttonColor); - getScreen().putStringXY(2, 0, mnemonic.getRawLabel(), buttonColor); - getScreen().putCharXY(getWidth() - 1, 0, ' ', buttonColor); + putCharXY(1, 0, ' ', buttonColor); + putStringXY(2, 0, mnemonic.getRawLabel(), buttonColor); + putCharXY(getWidth() - 1, 0, ' ', buttonColor); } else { - getScreen().putCharXY(0, 0, ' ', buttonColor); - getScreen().putStringXY(1, 0, mnemonic.getRawLabel(), buttonColor); - getScreen().putCharXY(getWidth() - 2, 0, ' ', buttonColor); - - getScreen().putCharXY(getWidth() - 1, 0, - GraphicsChars.CP437[0xDC], shadowColor); - getScreen().hLineXY(1, 1, getWidth() - 1, - GraphicsChars.CP437[0xDF], shadowColor); + putCharXY(0, 0, ' ', buttonColor); + putStringXY(1, 0, mnemonic.getRawLabel(), buttonColor); + putCharXY(getWidth() - 2, 0, ' ', buttonColor); + + if (shadowColor != null) { + putCharXY(getWidth() - 1, 0, + GraphicsChars.CP437[0xDC], shadowColor); + hLineXY(1, 1, getWidth() - 1, + GraphicsChars.CP437[0xDF], shadowColor); + } } if (mnemonic.getShortcutIdx() >= 0) { if (inButtonPress) { - getScreen().putCharXY(2 + mnemonic.getShortcutIdx(), 0, + putCharXY(2 + mnemonic.getShortcutIdx(), 0, mnemonic.getShortcut(), menuMnemonicColor); } else { - getScreen().putCharXY(1 + mnemonic.getShortcutIdx(), 0, + putCharXY(1 + mnemonic.getShortcutIdx(), 0, mnemonic.getShortcut(), menuMnemonicColor); } - } } @@ -275,4 +285,21 @@ public class TButton extends TWidget { } } + /** + * Set the background color used for the button "shadow". If null, no + * shadow will be drawn. + * + * @param color the new background color, or null for no shadow + */ + public void setShadowColor(final CellAttributes color) { + if (color != null) { + shadowColor = new CellAttributes(); + shadowColor.setTo(color); + shadowColor.setForeColor(Color.BLACK); + shadowColor.setBold(false); + } else { + shadowColor = null; + } + } + }