aboutsummaryrefslogtreecommitdiffstatsci
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/GraphicObjects/GraphicObject.cs4
-rw-r--r--src/GraphicObjects/TextBox.cs73
-rw-r--r--src/Input/KeyPressEventArgs.cs58
-rw-r--r--src/Interface.cs8
4 files changed, 87 insertions, 56 deletions
diff --git a/src/GraphicObjects/GraphicObject.cs b/src/GraphicObjects/GraphicObject.cs
index b61ecb32..c526e909 100644
--- a/src/GraphicObjects/GraphicObject.cs
+++ b/src/GraphicObjects/GraphicObject.cs
@@ -156,6 +156,7 @@ namespace Crow
public event EventHandler<MouseMoveEventArgs> MouseLeave;
public event EventHandler<KeyboardKeyEventArgs> KeyDown;
public event EventHandler<KeyboardKeyEventArgs> KeyUp;
+ public event EventHandler<KeyPressEventArgs> KeyPress;
public event EventHandler Focused;
public event EventHandler Unfocused;
public event EventHandler<LayoutingEventArgs> LayoutChanged;
@@ -939,6 +940,9 @@ namespace Crow
public virtual void onKeyDown(object sender, KeyboardKeyEventArgs e){
KeyDown.Raise (sender, e);
}
+ public virtual void onKeyPress(object sender, KeyPressEventArgs e){
+ KeyPress.Raise (sender, e);
+ }
#endregion
#region Mouse handling
diff --git a/src/GraphicObjects/TextBox.cs b/src/GraphicObjects/TextBox.cs
index 14cc1830..d3b8319c 100644
--- a/src/GraphicObjects/TextBox.cs
+++ b/src/GraphicObjects/TextBox.cs
@@ -72,7 +72,6 @@ namespace Crow
public override void onKeyDown (object sender, KeyboardKeyEventArgs e)
{
base.onKeyDown (sender, e);
-
Key key = e.Key;
switch (key)
@@ -80,9 +79,9 @@ namespace Crow
case Key.Back:
if (!selectionIsEmpty)
{
-// Text = Text.Remove(selectionStart, selectionEnd - selectionStart);
-// selReleasePos = -1;
-// currentCol = selBeginPos;
+ // Text = Text.Remove(selectionStart, selectionEnd - selectionStart);
+ // selReleasePos = -1;
+ // currentCol = selBeginPos;
}
else
this.DeleteChar();
@@ -141,62 +140,24 @@ namespace Crow
break;
case Key.RWin:
break;
- case Key.Tab:
- this.Insert("\t");
- break;
- case Key.KeypadDecimal:
- this.Insert (".");
- break;
- case Key.Space:
- this.Insert(" ");
- break;
- case Key.KeypadDivide:
- case Key.Slash:
- this.Insert("/");
- break;
- case Key.KeypadMultiply:
- this.Insert("*");
- break;
- case Key.KeypadMinus:
- case Key.Minus:
- this.Insert("-");
- break;
- case Key.KeypadPlus:
- case Key.Plus:
- this.Insert("+");
- break;
- case Key.ShiftLeft:
- case Key.ShiftRight:
- case Key.AltLeft:
- case Key.AltRight:
- break;
- case Key.Semicolon:
- this.Insert(";");
- break;
default:
- if (!selectionIsEmpty)
- {
-// Text = Text.Remove(selectionStart, selectionEnd - selectionStart);
-// currentCol = selBeginPos;
- }
-
- string k = "?";
- if ((char)key >= 67 && (char)key <= 76)
- k = ((int)key - 67).ToString();
- else if ((char)key >= 109 && (char)key <= 118)
- k = ((int)key - 109).ToString();
- else if (e.Shift)
- k = key.ToString();
- else
- k = key.ToString().ToLower();
+ break;
+ }
+ if (Width < 0)
+ RegisterForLayouting (LayoutingType.Width);
+ if (Height < 0)
+ RegisterForLayouting (LayoutingType.Height);
+ RegisterForGraphicUpdate();
+ }
+ public override void onKeyPress (object sender, KeyPressEventArgs e)
+ {
+ base.onKeyPress (sender, e);
- this.Insert (k);
+ this.Insert (e.KeyChar.ToString());
- SelRelease = -1;
- SelBegin = new Point(CurrentColumn, SelBegin.Y);
+ SelRelease = -1;
+ SelBegin = new Point(CurrentColumn, SelBegin.Y);
- break;
- }
if (Width < 0)
RegisterForLayouting (LayoutingType.Width);
if (Height < 0)
diff --git a/src/Input/KeyPressEventArgs.cs b/src/Input/KeyPressEventArgs.cs
new file mode 100644
index 00000000..73990613
--- /dev/null
+++ b/src/Input/KeyPressEventArgs.cs
@@ -0,0 +1,58 @@
+// #region License
+// //
+// // The Open Toolkit Library License
+// //
+// // Copyright (c) 2006 - 2009 the Open Toolkit library.
+// //
+// // Permission is hereby granted, free of charge, to any person obtaining a copy
+// // of this software and associated documentation files (the "Software"), to deal
+// // in the Software without restriction, including without limitation the rights to
+// // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+// // the Software, and to permit persons to whom the Software is furnished to do
+// // so, subject to the following conditions:
+// //
+// // The above copyright notice and this permission notice shall be included in all
+// // copies or substantial portions of the Software.
+// //
+// // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+// // OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+// // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+// // WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+// // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+// // OTHER DEALINGS IN THE SOFTWARE.
+// //
+// #endregion
+
+using System;
+
+namespace Crow
+{
+ /// <summary>
+ /// Defines the event arguments for KeyPress events. Instances of this class are cached:
+ /// KeyPressEventArgs should only be used inside the relevant event, unless manually cloned.
+ /// </summary>
+ public class KeyPressEventArgs : EventArgs
+ {
+ char key_char;
+
+ /// <summary>
+ /// Constructs a new instance.
+ /// </summary>
+ /// <param name="keyChar">The ASCII character that was typed.</param>
+ public KeyPressEventArgs(char keyChar)
+ {
+ KeyChar = keyChar;
+ }
+
+ /// <summary>
+ /// Gets a <see cref="System.Char"/> that defines the ASCII character that was typed.
+ /// </summary>
+ public char KeyChar
+ {
+ get { return key_char; }
+ internal set { key_char = value; }
+ }
+ }
+}
diff --git a/src/Interface.cs b/src/Interface.cs
index 75310918..86f30088 100644
--- a/src/Interface.cs
+++ b/src/Interface.cs
@@ -663,6 +663,14 @@ namespace Crow
return true;
}
+ public bool ProcessKeyPress(char Key){
+ if (_focusedWidget == null)
+ return false;
+ KeyPressEventArgs e = new KeyPressEventArgs(Key);
+ _focusedWidget.onKeyPress (this, e);
+ return true;
+ }
+
volatile bool mouseRepeatOn;
volatile int mouseRepeatCount;
Thread mouseRepeatThread;