[Libreoffice-commits] .: 4 commits - starmath/inc starmath/source

Ivan Timofeev ivantimofeev at kemper.freedesktop.org
Sun Dec 4 07:26:36 PST 2011


 starmath/inc/view.hxx      |    1 
 starmath/source/cursor.cxx |   23 +++++++++++-----------
 starmath/source/view.cxx   |   47 ++++++++++++++++++++++++++-------------------
 3 files changed, 41 insertions(+), 30 deletions(-)

New commits:
commit 68c1f757962a8f2789821ff636bc397d1edd0051
Author: Ivan Timofeev <timofeev.i.s at gmail.com>
Date:   Sun Dec 4 15:11:23 2011 +0400

    visual formula editor: implement selection by mouse

diff --git a/starmath/inc/view.hxx b/starmath/inc/view.hxx
index d716e72..5781e26 100644
--- a/starmath/inc/view.hxx
+++ b/starmath/inc/view.hxx
@@ -103,6 +103,7 @@ public:
 
     // Window
     virtual void    MouseButtonDown(const MouseEvent &rMEvt);
+    virtual void    MouseMove(const MouseEvent &rMEvt);
     virtual void    GetFocus();
     virtual void    LoseFocus();
 
diff --git a/starmath/source/view.cxx b/starmath/source/view.cxx
index c9a0ffd..4dbc8a8 100644
--- a/starmath/source/view.cxx
+++ b/starmath/source/view.cxx
@@ -182,9 +182,7 @@ void SmGraphicWindow::MouseButtonDown(const MouseEvent& rMEvt)
             return;
 
         if (IsInlineEditEnabled()) {
-            // if it was clicked inside the formula then get the appropriate node
-            if (pTree->OrientedDist(aPos) <= 0)
-                pViewShell->GetDoc()->GetCursor().MoveTo(this, aPos, !rMEvt.IsShift());
+            pViewShell->GetDoc()->GetCursor().MoveTo(this, aPos, !rMEvt.IsShift());
             return;
         }
         const SmNode *pNode = 0;
@@ -214,6 +212,22 @@ void SmGraphicWindow::MouseButtonDown(const MouseEvent& rMEvt)
     }
 }
 
+void SmGraphicWindow::MouseMove(const MouseEvent &rMEvt)
+{
+    ScrollableWindow::MouseMove(rMEvt);
+
+    if (rMEvt.IsLeft() && IsInlineEditEnabled())
+    {
+        Point aPos(PixelToLogic(rMEvt.GetPosPixel()) - GetFormulaDrawPos());
+        pViewShell->GetDoc()->GetCursor().MoveTo(this, aPos, false);
+
+        CaretBlinkStop();
+        SetIsCursorVisible(true);
+        CaretBlinkStart();
+        RepaintViewShellDoc();
+    }
+}
+
 bool SmGraphicWindow::IsInlineEditEnabled() const
 {
     return pViewShell->IsInlineEditEnabled();
commit 558b5ea32a99654dcb63526f107726f7aec4747f
Author: Ivan Timofeev <timofeev.i.s at gmail.com>
Date:   Sun Dec 4 15:05:46 2011 +0400

    visual formula editor: copy/cut/paste for any keyboard layout

diff --git a/starmath/source/view.cxx b/starmath/source/view.cxx
index 66626a0..c9a0ffd 100644
--- a/starmath/source/view.cxx
+++ b/starmath/source/view.cxx
@@ -421,8 +421,17 @@ void SmGraphicWindow::KeyInput(const KeyEvent& rKEvt)
             ScrollableWindow::KeyInput(rKEvt);
         return;
     }
-    sal_uInt16 nCode = rKEvt.GetKeyCode().GetCode();
+
     SmCursor& rCursor = pViewShell->GetDoc()->GetCursor();
+    KeyFuncType eFunc = rKEvt.GetKeyCode().GetFunction();
+    if (eFunc == KEYFUNC_COPY)
+        rCursor.Copy();
+    else if (eFunc == KEYFUNC_CUT)
+        rCursor.Cut();
+    else if (eFunc == KEYFUNC_PASTE)
+        rCursor.Paste();
+    else {
+    sal_uInt16 nCode = rKEvt.GetKeyCode().GetCode();
     switch(nCode)
     {
         case KEY_LEFT:
@@ -491,15 +500,6 @@ void SmGraphicWindow::KeyInput(const KeyEvent& rKEvt)
         case KEY_EQUAL:
             rCursor.InsertElement(EqualElement);
             break;
-        case KEY_COPY:
-            rCursor.Copy();
-            break;
-        case KEY_CUT:
-            rCursor.Cut();
-            break;
-        case KEY_PASTE:
-            rCursor.Paste();
-            break;
         default:
         {
             sal_Unicode code = rKEvt.GetCharCode();
@@ -507,12 +507,6 @@ void SmGraphicWindow::KeyInput(const KeyEvent& rKEvt)
 
             if(code == ' ') {
                 rCursor.InsertElement(BlankElement);
-            }else if(code == 'c' && rKEvt.GetKeyCode().IsMod1()) {
-                rCursor.Copy();
-            }else if(code == 'x' && rKEvt.GetKeyCode().IsMod1()) {
-                rCursor.Cut();
-            }else if(code == 'v' && rKEvt.GetKeyCode().IsMod1()) {
-                rCursor.Paste();
             }else if(code == '^') {
                 rCursor.InsertSubSup(RSUP);
             }else if(code == '(') {
@@ -539,6 +533,7 @@ void SmGraphicWindow::KeyInput(const KeyEvent& rKEvt)
             }
         }
     }
+    }
     CaretBlinkStop();
     CaretBlinkStart();
     SetIsCursorVisible(true);
commit 5a227745095d3a700ca01e062264aa5afd080c8a
Author: Ivan Timofeev <timofeev.i.s at gmail.com>
Date:   Fri Dec 2 22:07:34 2011 +0400

    visual formula editor: place cursor on numerator when creating empty fraction

diff --git a/starmath/source/cursor.cxx b/starmath/source/cursor.cxx
index b7f518f..c2d7f4f 100644
--- a/starmath/source/cursor.cxx
+++ b/starmath/source/cursor.cxx
@@ -977,7 +977,8 @@ void SmCursor::InsertFraction() {
     PatchLineList(pLineList, it);
 
     //Finish editing
-    FinishEdit(pLineList, pLineParent, nParentIndex, SmCaretPos(pDenom, 1));
+    SmNode *pSelectedNode = bEmptyFraction ? pNum : pDenom;
+    FinishEdit(pLineList, pLineParent, nParentIndex, SmCaretPos(pSelectedNode, 1));
 }
 
 void SmCursor::InsertText(XubString aString){
commit 8fb78b12219fb0b9c949f8c5bda558f0bd20cc9d
Author: Ivan Timofeev <timofeev.i.s at gmail.com>
Date:   Fri Dec 2 22:03:36 2011 +0400

    visual formula editor: optimize some buildings a bit

diff --git a/starmath/source/cursor.cxx b/starmath/source/cursor.cxx
index 2f50532..b7f518f 100644
--- a/starmath/source/cursor.cxx
+++ b/starmath/source/cursor.cxx
@@ -700,15 +700,14 @@ void SmCursor::InsertBrackets(SmBracketType eBracketType) {
         it = FindPositionInLineList(pLineList, position->CaretPos);
 
     //If there's no selected nodes, create a place node
+    SmNode *pBodyNode;
     SmCaretPos PosAfterInsert;
     if(pSelectedNodesList->size() == 0) {
-        SmNode* pPlace = new SmPlaceNode();
-        PosAfterInsert = SmCaretPos(pPlace, 1);
-        pSelectedNodesList->push_front(pPlace);
-    }
+        pBodyNode = new SmPlaceNode();
+        PosAfterInsert = SmCaretPos(pBodyNode, 1);
+    } else
+        pBodyNode = SmNodeListParser().Parse(pSelectedNodesList);
 
-    //Parse body nodes
-    SmNode *pBodyNode = SmNodeListParser().Parse(pSelectedNodesList);
     delete pSelectedNodesList;
 
     //Create SmBraceNode
@@ -959,10 +958,11 @@ void SmCursor::InsertFraction() {
         it = FindPositionInLineList(pLineList, position->CaretPos);
 
     //Create pNum, and pDenom
-    if(pSelectedNodesList->size() == 0)
-        pSelectedNodesList->push_front(new SmPlaceNode());
-    SmNode *pNum   = SmNodeListParser().Parse(pSelectedNodesList),
-           *pDenom = new SmPlaceNode();
+    bool bEmptyFraction = pSelectedNodesList->empty();
+    SmNode *pNum = bEmptyFraction
+        ? new SmPlaceNode()
+        : SmNodeListParser().Parse(pSelectedNodesList);
+    SmNode *pDenom = new SmPlaceNode();
     delete pSelectedNodesList;
     pSelectedNodesList = NULL;
 


More information about the Libreoffice-commits mailing list