summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--editeng/source/editeng/impedit2.cxx4
-rw-r--r--include/vcl/event.hxx3
-rw-r--r--vcl/source/window/keyevent.cxx10
3 files changed, 15 insertions, 2 deletions
diff --git a/editeng/source/editeng/impedit2.cxx b/editeng/source/editeng/impedit2.cxx
index b38db62f411a..c2126570be2b 100644
--- a/editeng/source/editeng/impedit2.cxx
+++ b/editeng/source/editeng/impedit2.cxx
@@ -739,8 +739,10 @@ EditSelection ImpEditEngine::MoveCursor( const KeyEvent& rKeyEvent, EditView* pE
EditPaM aOldPaM( aPaM );
TextDirectionality eTextDirection = TextDirectionality::LeftToRight_TopToBottom;
- if ( IsVertical() )
+ if (IsVertical() && IsTopToBottom())
eTextDirection = TextDirectionality::TopToBottom_RightToLeft;
+ else if (IsVertical() && !IsTopToBottom())
+ eTextDirection = TextDirectionality::BottomToTop_LeftToRight;
else if ( IsRightToLeft( GetEditDoc().GetPos( aPaM.GetNode() ) ) )
eTextDirection = TextDirectionality::RightToLeft_TopToBottom;
diff --git a/include/vcl/event.hxx b/include/vcl/event.hxx
index 9737bac576ec..d2a19435959e 100644
--- a/include/vcl/event.hxx
+++ b/include/vcl/event.hxx
@@ -41,7 +41,8 @@ namespace com { namespace sun { namespace star { namespace awt {
enum class TextDirectionality {
LeftToRight_TopToBottom,
RightToLeft_TopToBottom,
- TopToBottom_RightToLeft
+ TopToBottom_RightToLeft,
+ BottomToTop_LeftToRight
};
class VCL_DLLPUBLIC KeyEvent
diff --git a/vcl/source/window/keyevent.cxx b/vcl/source/window/keyevent.cxx
index d644bc3d19c9..f5a7c5b1abe8 100644
--- a/vcl/source/window/keyevent.cxx
+++ b/vcl/source/window/keyevent.cxx
@@ -55,6 +55,16 @@ KeyEvent KeyEvent::LogicalTextDirectionality (TextDirectionality eMode) const
}
break;
+ case TextDirectionality::BottomToTop_LeftToRight:
+ switch (nCode)
+ {
+ case KEY_DOWN: aClone.maKeyCode = vcl::KeyCode(KEY_LEFT, nMod); break;
+ case KEY_UP: aClone.maKeyCode = vcl::KeyCode(KEY_RIGHT, nMod); break;
+ case KEY_LEFT: aClone.maKeyCode = vcl::KeyCode(KEY_UP, nMod); break;
+ case KEY_RIGHT: aClone.maKeyCode = vcl::KeyCode(KEY_DOWN, nMod); break;
+ }
+ break;
+
case TextDirectionality::LeftToRight_TopToBottom:
/* do nothing */
break;