Keyboard styles
This commit is contained in:
@@ -71,7 +71,7 @@ public class FloatingCalculatorKeyboard extends BaseFloatingKeyboard {
|
||||
final int parametersCount = parameterNames.size();
|
||||
|
||||
LinearLayout row = makeRow();
|
||||
addImageButton(row, R.id.cpp_kb_button_keyboard, R.drawable.ic_keyboard_white_24dp);
|
||||
addImageButton(row, R.id.cpp_kb_button_keyboard, R.drawable.ic_keyboard_grey300_24dp);
|
||||
addButton(row, 0, parametersCount > 0 ? parameterNames.get(0) : "x");
|
||||
addButton(row, 0, "7");
|
||||
addButton(row, 0, "8");
|
||||
@@ -88,7 +88,7 @@ public class FloatingCalculatorKeyboard extends BaseFloatingKeyboard {
|
||||
addButton(row, 0, "6");
|
||||
addOperationButton(row, R.id.cpp_kb_button_divide, "/").setText("%", up).setText("sqrt", down);
|
||||
addOperationButton(row, R.id.cpp_kb_button_minus, "−");
|
||||
final View backspace = addImageButton(row, R.id.cpp_kb_button_backspace, R.drawable.ic_backspace_white_24dp);
|
||||
final View backspace = addImageButton(row, R.id.cpp_kb_button_backspace, R.drawable.ic_backspace_grey300_24dp);
|
||||
EditTextLongClickEraser.attachTo(backspace, user.getEditor());
|
||||
|
||||
row = makeRow();
|
||||
@@ -98,8 +98,8 @@ public class FloatingCalculatorKeyboard extends BaseFloatingKeyboard {
|
||||
addButton(row, 0, "2");
|
||||
addButton(row, 0, "3");
|
||||
addButton(row, 0, "0").setText("00", up).setText("000", down);
|
||||
addImageButton(row, R.id.cpp_kb_button_space, R.drawable.ic_space_bar_white_24dp);
|
||||
addImageButton(row, R.id.cpp_kb_button_close, R.drawable.ic_done_white_24dp);
|
||||
addImageButton(row, R.id.cpp_kb_button_space, R.drawable.ic_space_bar_grey300_24dp);
|
||||
addImageButton(row, R.id.cpp_kb_button_close, R.drawable.ic_done_grey300_24dp);
|
||||
}
|
||||
|
||||
private void makeViewPort() {
|
||||
@@ -115,7 +115,7 @@ public class FloatingCalculatorKeyboard extends BaseFloatingKeyboard {
|
||||
addButton(row, 0, "5");
|
||||
addButton(row, 0, "6");
|
||||
addOperationButton(row, R.id.cpp_kb_button_divide, "/").setText("%", up).setText("sqrt", down);
|
||||
final View backspace = addImageButton(row, R.id.cpp_kb_button_backspace, R.drawable.ic_backspace_white_24dp);
|
||||
final View backspace = addImageButton(row, R.id.cpp_kb_button_backspace, R.drawable.ic_backspace_grey300_24dp);
|
||||
EditTextLongClickEraser.attachTo(backspace, user.getEditor());
|
||||
|
||||
row = makeRow();
|
||||
@@ -123,14 +123,14 @@ public class FloatingCalculatorKeyboard extends BaseFloatingKeyboard {
|
||||
addButton(row, 0, "2");
|
||||
addButton(row, 0, "3");
|
||||
addOperationButton(row, R.id.cpp_kb_button_plus, "+");
|
||||
addImageButton(row, R.id.cpp_kb_button_space, R.drawable.ic_space_bar_white_24dp);
|
||||
addImageButton(row, R.id.cpp_kb_button_space, R.drawable.ic_space_bar_grey300_24dp);
|
||||
|
||||
row = makeRow();
|
||||
addButton(row, R.id.cpp_kb_button_brackets, "( )").setText("(", up).setText(")", down);
|
||||
addButton(row, 0, "0").setText("00", up).setText("000", down);
|
||||
addButton(row, 0, ".").setText(",", up);
|
||||
addOperationButton(row, R.id.cpp_kb_button_minus, "−");
|
||||
addImageButton(row, R.id.cpp_kb_button_keyboard, R.drawable.ic_keyboard_white_24dp);
|
||||
addImageButton(row, R.id.cpp_kb_button_keyboard, R.drawable.ic_keyboard_grey300_24dp);
|
||||
|
||||
row = makeRow();
|
||||
final int parametersCount = parameterNames.size();
|
||||
@@ -138,7 +138,7 @@ public class FloatingCalculatorKeyboard extends BaseFloatingKeyboard {
|
||||
addButton(row, 0, parametersCount > 1 ? parameterNames.get(1) : "y");
|
||||
addButton(row, R.id.cpp_kb_button_functions, "f");
|
||||
addButton(row, R.id.cpp_kb_button_constants, "π");
|
||||
addImageButton(row, R.id.cpp_kb_button_close, R.drawable.ic_done_white_24dp);
|
||||
addImageButton(row, R.id.cpp_kb_button_close, R.drawable.ic_done_grey300_24dp);
|
||||
}
|
||||
|
||||
public int getRowsCount(boolean landscape) {
|
||||
|
@@ -10,10 +10,12 @@ import android.support.annotation.Nullable;
|
||||
import android.util.TypedValue;
|
||||
import android.view.HapticFeedbackConstants;
|
||||
import android.view.View;
|
||||
import android.widget.ImageView;
|
||||
import org.solovyev.android.Views;
|
||||
import org.solovyev.android.calculator.*;
|
||||
import org.solovyev.android.calculator.buttons.CppSpecialButton;
|
||||
import org.solovyev.android.calculator.view.ScreenMetrics;
|
||||
import org.solovyev.android.views.Adjuster;
|
||||
import org.solovyev.android.views.dragbutton.DirectionDragButton;
|
||||
import org.solovyev.android.views.dragbutton.DragDirection;
|
||||
import org.solovyev.android.views.dragbutton.SimpleDragListener;
|
||||
@@ -28,6 +30,9 @@ import static org.solovyev.android.calculator.Preferences.Gui.Layout.simple_mobi
|
||||
|
||||
public abstract class BaseKeyboardUi implements SharedPreferences.OnSharedPreferenceChangeListener, SimpleDragListener.DragProcessor, View.OnClickListener {
|
||||
|
||||
protected static final float TEXT_SCALE = 0.6f;
|
||||
protected static final float IMAGE_SCALE = 0.6f;
|
||||
|
||||
@NonNull
|
||||
protected final SimpleDragListener listener;
|
||||
@Inject
|
||||
@@ -59,6 +64,18 @@ public abstract class BaseKeyboardUi implements SharedPreferences.OnSharedPrefer
|
||||
textSize = layout.optimized ? 0 : calculateTextSize();
|
||||
}
|
||||
|
||||
protected final void prepareButton(@Nullable ImageView button) {
|
||||
prepareButton(button, IMAGE_SCALE);
|
||||
}
|
||||
|
||||
protected final void prepareButton(@Nullable ImageView button, float scale) {
|
||||
if (button == null) {
|
||||
return;
|
||||
}
|
||||
prepareButton((View) button);
|
||||
Adjuster.adjustImage(button, scale);
|
||||
}
|
||||
|
||||
protected final void prepareButton(@Nullable View button) {
|
||||
if (button == null) {
|
||||
return;
|
||||
@@ -76,6 +93,7 @@ public abstract class BaseKeyboardUi implements SharedPreferences.OnSharedPrefer
|
||||
if (textSize > 0) {
|
||||
button.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);
|
||||
}
|
||||
Adjuster.adjustText(button, TEXT_SCALE);
|
||||
}
|
||||
|
||||
protected final void hideText(@Nullable DirectionDragButton button, @Nonnull DragDirection... directions) {
|
||||
|
@@ -16,6 +16,7 @@ import android.widget.ImageButton;
|
||||
import butterknife.Bind;
|
||||
import butterknife.ButterKnife;
|
||||
import jscl.NumeralBase;
|
||||
import org.solovyev.android.Check;
|
||||
import org.solovyev.android.calculator.*;
|
||||
import org.solovyev.android.calculator.buttons.CppSpecialButton;
|
||||
import org.solovyev.android.calculator.view.EditorLongClickEraser;
|
||||
@@ -62,8 +63,10 @@ public class PartialKeyboardUi extends BaseKeyboardUi {
|
||||
prepareButton(leftButton);
|
||||
prepareButton(equalsButton);
|
||||
prepareButton(clearButton);
|
||||
prepareButton(eraseButton);
|
||||
if (eraseButton != null) {
|
||||
Check.isTrue(IMAGE_SCALE == 0.6f);
|
||||
// backspace button is too big, scale it more
|
||||
prepareButton(eraseButton, 0.5f);
|
||||
EditorLongClickEraser.attachTo(eraseButton);
|
||||
}
|
||||
if (isSimpleLayout()) {
|
||||
|
@@ -56,17 +56,17 @@ public class GreekFloatingKeyboard extends BaseFloatingKeyboard implements View.
|
||||
private void makeLastColumnLand(@NonNull LinearLayout rowView, int row) {
|
||||
switch (row) {
|
||||
case 0:
|
||||
final View backspace = addImageButton(rowView, R.id.cpp_kb_button_backspace, R.drawable.ic_backspace_white_24dp);
|
||||
final View backspace = addImageButton(rowView, R.id.cpp_kb_button_backspace, R.drawable.ic_backspace_grey300_24dp);
|
||||
EditTextLongClickEraser.attachTo(backspace, user.getEditor());
|
||||
break;
|
||||
case 1:
|
||||
addButton(rowView, R.id.cpp_kb_button_change_case, "↑");
|
||||
break;
|
||||
case 2:
|
||||
addImageButton(rowView, R.id.cpp_kb_button_keyboard, R.drawable.ic_keyboard_white_24dp);
|
||||
addImageButton(rowView, R.id.cpp_kb_button_keyboard, R.drawable.ic_keyboard_grey300_24dp);
|
||||
break;
|
||||
case 3:
|
||||
addImageButton(rowView, R.id.cpp_kb_button_close, R.drawable.ic_done_white_24dp);
|
||||
addImageButton(rowView, R.id.cpp_kb_button_close, R.drawable.ic_done_grey300_24dp);
|
||||
break;
|
||||
default:
|
||||
addButton(rowView, View.NO_ID, "");
|
||||
@@ -80,17 +80,17 @@ public class GreekFloatingKeyboard extends BaseFloatingKeyboard implements View.
|
||||
addButton(rowView, R.id.cpp_kb_button_clear, "C");
|
||||
break;
|
||||
case 1:
|
||||
final View backspace = addImageButton(rowView, R.id.cpp_kb_button_backspace, R.drawable.ic_backspace_white_24dp);
|
||||
final View backspace = addImageButton(rowView, R.id.cpp_kb_button_backspace, R.drawable.ic_backspace_grey300_24dp);
|
||||
EditTextLongClickEraser.attachTo(backspace, user.getEditor());
|
||||
break;
|
||||
case 2:
|
||||
addButton(rowView, R.id.cpp_kb_button_change_case, "↑");
|
||||
break;
|
||||
case 3:
|
||||
addImageButton(rowView, R.id.cpp_kb_button_keyboard, R.drawable.ic_keyboard_white_24dp);
|
||||
addImageButton(rowView, R.id.cpp_kb_button_keyboard, R.drawable.ic_keyboard_grey300_24dp);
|
||||
break;
|
||||
case 4:
|
||||
addImageButton(rowView, R.id.cpp_kb_button_close, R.drawable.ic_done_white_24dp);
|
||||
addImageButton(rowView, R.id.cpp_kb_button_close, R.drawable.ic_done_grey300_24dp);
|
||||
break;
|
||||
default:
|
||||
addButton(rowView, View.NO_ID, "");
|
||||
|
109
app/src/main/java/org/solovyev/android/views/Adjuster.java
Normal file
109
app/src/main/java/org/solovyev/android/views/Adjuster.java
Normal file
@@ -0,0 +1,109 @@
|
||||
package org.solovyev.android.views;
|
||||
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.util.TypedValue;
|
||||
import android.view.View;
|
||||
import android.view.ViewTreeObserver;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import static android.graphics.Matrix.MSCALE_Y;
|
||||
|
||||
public class Adjuster {
|
||||
|
||||
private static final float[] MATRIX = new float[9];
|
||||
|
||||
public static void adjustText(@NonNull final TextView view, final float percentage) {
|
||||
ViewTreeObserver treeObserver = getTreeObserver(view);
|
||||
if (treeObserver == null) {
|
||||
return;
|
||||
}
|
||||
treeObserver.addOnPreDrawListener(new TextViewAdjuster(view, percentage));
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static ViewTreeObserver getTreeObserver(@NonNull View view) {
|
||||
final ViewTreeObserver treeObserver = view.getViewTreeObserver();
|
||||
if (treeObserver == null) {
|
||||
return null;
|
||||
}
|
||||
if (!treeObserver.isAlive()) {
|
||||
return null;
|
||||
}
|
||||
return treeObserver;
|
||||
}
|
||||
|
||||
public static void adjustImage(@NonNull final ImageView view, final float percentage) {
|
||||
ViewTreeObserver treeObserver = getTreeObserver(view);
|
||||
if (treeObserver == null) {
|
||||
return;
|
||||
}
|
||||
treeObserver.addOnPreDrawListener(new ImageViewAdjuster(view, percentage));
|
||||
}
|
||||
|
||||
private static class TextViewAdjuster implements ViewTreeObserver.OnPreDrawListener {
|
||||
@NonNull
|
||||
private final TextView view;
|
||||
private final float percentage;
|
||||
|
||||
public TextViewAdjuster(@NonNull TextView view, float percentage) {
|
||||
this.view = view;
|
||||
this.percentage = percentage;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPreDraw() {
|
||||
// assume that the view properties are constant
|
||||
final ViewTreeObserver treeObserver = getTreeObserver(view);
|
||||
if (treeObserver != null) {
|
||||
treeObserver.removeOnPreDrawListener(this);
|
||||
}
|
||||
final int height = view.getHeight();
|
||||
final float oldTextSize = Math.round(view.getTextSize());
|
||||
final float newTextSize = Math.round(height * percentage);
|
||||
if (oldTextSize == newTextSize) {
|
||||
return true;
|
||||
}
|
||||
view.setTextSize(TypedValue.COMPLEX_UNIT_PX, newTextSize);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private static class ImageViewAdjuster implements ViewTreeObserver.OnPreDrawListener {
|
||||
@NonNull
|
||||
private final ImageView view;
|
||||
private final float percentage;
|
||||
|
||||
public ImageViewAdjuster(@NonNull ImageView view, float percentage) {
|
||||
this.view = view;
|
||||
this.percentage = percentage;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPreDraw() {
|
||||
// assume that the view properties are constant
|
||||
final ViewTreeObserver treeObserver = getTreeObserver(view);
|
||||
if (treeObserver != null) {
|
||||
treeObserver.removeOnPreDrawListener(this);
|
||||
}
|
||||
|
||||
final Drawable d = view.getDrawable();
|
||||
if (d == null) {
|
||||
return true;
|
||||
}
|
||||
final int height = view.getHeight();
|
||||
view.getImageMatrix().getValues(MATRIX);
|
||||
final int oldImageHeight = Math.round(d.getIntrinsicHeight() * MATRIX[MSCALE_Y]);
|
||||
final int newImageHeight = Math.round(height * percentage);
|
||||
if (oldImageHeight == newImageHeight) {
|
||||
return true;
|
||||
}
|
||||
final int newPaddings = Math.max(0, height - newImageHeight) / 2;
|
||||
view.setPadding(0, newPaddings, 0, newPaddings);
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user