Browse Source

tags/2021-05-28
jules 17 years ago
parent
commit
5ec41226c6
3 changed files with 55 additions and 46 deletions
  1. +31
    -10
      build/win32/platform_specific_code/juce_win32_Windowing.cpp
  2. +23
    -36
      src/juce_appframework/gui/components/controls/juce_TextEditor.cpp
  3. +1
    -0
      src/juce_appframework/gui/graphics/fonts/juce_Font.cpp

+ 31
- 10
build/win32/platform_specific_code/juce_win32_Windowing.cpp View File

@@ -1676,16 +1676,23 @@ private:
default: default:
used = handleKeyUpOrDown(); used = handleKeyUpOrDown();
if ((currentModifiers & (ModifierKeys::ctrlModifier | ModifierKeys::altModifier)) != 0)
{ {
MSG msg;
if (! PeekMessage (&msg, hwnd, WM_CHAR, WM_DEADCHAR, PM_NOREMOVE))
{
// if there isn't a WM_CHAR or WM_DEADCHAR message pending, we need to
// manually generate the key-press event that matches this key-down.
#if JUCE_ENABLE_WIN98_COMPATIBILITY #if JUCE_ENABLE_WIN98_COMPATIBILITY
const UINT keyChar = wMapVirtualKeyW != 0 ? wMapVirtualKeyW (key, 2)
: MapVirtualKey (key, 2);
const UINT keyChar = wMapVirtualKeyW != 0 ? wMapVirtualKeyW (key, 2)
: MapVirtualKey (key, 2);
#else #else
const UINT keyChar = MapVirtualKeyW (key, 2);
const UINT keyChar = MapVirtualKeyW (key, 2);
#endif #endif
used = handleKeyPress ((int) LOWORD (keyChar), 0) || used;
used = handleKeyPress ((int) LOWORD (keyChar), 0) || used;
}
} }
break; break;
@@ -1699,6 +1706,7 @@ private:
updateKeyModifiers(); updateKeyModifiers();
juce_wchar textChar = (juce_wchar) key; juce_wchar textChar = (juce_wchar) key;
const int virtualScanCode = (flags >> 16) & 0xff; const int virtualScanCode = (flags >> 16) & 0xff;
if (key >= '0' && key <= '9') if (key >= '0' && key <= '9')
@@ -1723,9 +1731,6 @@ private:
} }
else else
{ {
if ((currentModifiers & (ModifierKeys::ctrlModifier | ModifierKeys::altModifier)) != 0)
return false;
// convert the scan code to an unmodified character code.. // convert the scan code to an unmodified character code..
#if JUCE_ENABLE_WIN98_COMPATIBILITY #if JUCE_ENABLE_WIN98_COMPATIBILITY
const UINT virtualKey = wMapVirtualKeyW != 0 ? wMapVirtualKeyW (virtualScanCode, 1) const UINT virtualKey = wMapVirtualKeyW != 0 ? wMapVirtualKeyW (virtualScanCode, 1)
@@ -1742,7 +1747,13 @@ private:
const DWORD converted = wToUnicode (virtualKey, virtualScanCode, keyState, const DWORD converted = wToUnicode (virtualKey, virtualScanCode, keyState,
unicodeChar, 32, 0); unicodeChar, 32, 0);
if (converted > 0) if (converted > 0)
textChar = unicodeChar[0];
{
// ahem.. can't actually remember why this section of code was originall here,
// so if you see this assertion, please let me know what you were doing at
// the time!
jassert (textChar == unicodeChar[0]);
// textChar = unicodeChar[0];
}
} }
#else #else
const UINT virtualKey = MapVirtualKeyW (virtualScanCode, 1); const UINT virtualKey = MapVirtualKeyW (virtualScanCode, 1);
@@ -1755,7 +1766,13 @@ private:
const DWORD converted = ToUnicode (virtualKey, virtualScanCode, keyState, const DWORD converted = ToUnicode (virtualKey, virtualScanCode, keyState,
unicodeChar, 32, 0); unicodeChar, 32, 0);
if (converted > 0) if (converted > 0)
textChar = unicodeChar[0];
{
// ahem.. can't actually remember why this section of code was originall here,
// so if you see this assertion, please let me know what you were doing at
// the time!
jassert (textChar == unicodeChar[0]);
// textChar = unicodeChar[0];
}
} }
#endif #endif
@@ -1763,6 +1780,10 @@ private:
if (keyChar != 0) if (keyChar != 0)
key = (int) keyChar; key = (int) keyChar;
// avoid sending junk text characters for some control-key combinations
if (textChar < ' ' && (currentModifiers & (ModifierKeys::ctrlModifier | ModifierKeys::altModifier)) != 0)
textChar = 0;
} }
return handleKeyPress (key, textChar); return handleKeyPress (key, textChar);


+ 23
- 36
src/juce_appframework/gui/components/controls/juce_TextEditor.cpp View File

@@ -1825,40 +1825,32 @@ bool TextEditor::keyPressed (const KeyPress& key)
{ {
newTransaction(); newTransaction();
int newPos;
if (isMultiLine() && key.isKeyCode (KeyPress::upKey)) if (isMultiLine() && key.isKeyCode (KeyPress::upKey))
{
moveCursorTo (indexAtPosition (cursorX, cursorY - 1),
key.getModifiers().isShiftDown());
}
newPos = indexAtPosition (cursorX, cursorY - 1);
else if (moveInWholeWordSteps) else if (moveInWholeWordSteps)
{
moveCursorTo (findWordBreakBefore (getCaretPosition()),
key.getModifiers().isShiftDown());
}
newPos = findWordBreakBefore (getCaretPosition());
else else
{
moveCursorTo (getCaretPosition() - 1, key.getModifiers().isShiftDown());
}
newPos = getCaretPosition() - 1;
moveCursorTo (newPos, key.getModifiers().isShiftDown());
} }
else if (key.isKeyCode (KeyPress::rightKey) else if (key.isKeyCode (KeyPress::rightKey)
|| key.isKeyCode (KeyPress::downKey)) || key.isKeyCode (KeyPress::downKey))
{ {
newTransaction(); newTransaction();
if (key.isKeyCode (KeyPress::downKey) && isMultiLine())
{
moveCursorTo (indexAtPosition (cursorX, cursorY + cursorHeight + 1),
key.getModifiers().isShiftDown());
}
int newPos;
if (isMultiLine() && key.isKeyCode (KeyPress::downKey))
newPos = indexAtPosition (cursorX, cursorY + cursorHeight + 1);
else if (moveInWholeWordSteps) else if (moveInWholeWordSteps)
{
moveCursorTo (findWordBreakAfter (getCaretPosition()),
key.getModifiers().isShiftDown());
}
newPos = findWordBreakAfter (getCaretPosition());
else else
{
moveCursorTo (getCaretPosition() + 1, key.getModifiers().isShiftDown());
}
newPos = getCaretPosition() + 1;
moveCursorTo (newPos, key.getModifiers().isShiftDown());
} }
else if (key.isKeyCode (KeyPress::pageDownKey) && isMultiLine()) else if (key.isKeyCode (KeyPress::pageDownKey) && isMultiLine())
{ {
@@ -1957,15 +1949,12 @@ bool TextEditor::keyPressed (const KeyPress& key)
} }
else if (key == KeyPress::returnKey) else if (key == KeyPress::returnKey)
{ {
if (! isReadOnly())
{
newTransaction();
newTransaction();
if (returnKeyStartsNewLine)
insertTextAtCursor (T("\n"));
else
returnPressed();
}
if (returnKeyStartsNewLine)
insertTextAtCursor (T("\n"));
else
returnPressed();
} }
else if (key.isKeyCode (KeyPress::escapeKey)) else if (key.isKeyCode (KeyPress::escapeKey))
{ {
@@ -1973,12 +1962,10 @@ bool TextEditor::keyPressed (const KeyPress& key)
moveCursorTo (getCaretPosition(), false); moveCursorTo (getCaretPosition(), false);
escapePressed(); escapePressed();
} }
else if (key.getTextCharacter() != 0
&& (! isReadOnly())
&& (tabKeyUsed || ! key.isKeyCode (KeyPress::tabKey)))
else if (key.getTextCharacter() >= ' '
|| (tabKeyUsed && (key.getTextCharacter() == '\t')))
{ {
if (! isReadOnly())
insertTextAtCursor (String::charToString (key.getTextCharacter()));
insertTextAtCursor (String::charToString (key.getTextCharacter()));
lastTransactionTime = Time::getApproximateMillisecondCounter(); lastTransactionTime = Time::getApproximateMillisecondCounter();
} }


+ 1
- 0
src/juce_appframework/gui/graphics/fonts/juce_Font.cpp View File

@@ -152,6 +152,7 @@ bool Font::operator!= (const Font& other) const throw()
void Font::setTypefaceName (const String& faceName) throw() void Font::setTypefaceName (const String& faceName) throw()
{ {
typefaceName = faceName; typefaceName = faceName;
typeface = 0;
ascent = 0; ascent = 0;
} }


Loading…
Cancel
Save