aboutsummaryrefslogtreecommitdiffhomepage
path: root/cocoa/ScintillaCocoa.mm
diff options
context:
space:
mode:
Diffstat (limited to 'cocoa/ScintillaCocoa.mm')
-rw-r--r--cocoa/ScintillaCocoa.mm62
1 files changed, 43 insertions, 19 deletions
diff --git a/cocoa/ScintillaCocoa.mm b/cocoa/ScintillaCocoa.mm
index f91183aa2..6d3296a51 100644
--- a/cocoa/ScintillaCocoa.mm
+++ b/cocoa/ScintillaCocoa.mm
@@ -255,6 +255,31 @@ void ScintillaCocoa::Finalise()
//--------------------------------------------------------------------------------------------------
/**
+ * Case-fold the given string depending on the specified case mapping type.
+ * Note: ScintillaCocoa exclusively works with Unicode. We don't even think about adding support for
+ * obsolete code page stuff.
+ */
+std::string ScintillaCocoa::CaseMapString(const std::string &s, int caseMapping)
+{
+ NSString* textToConvert = [NSString stringWithUTF8String: s.c_str()];
+ std::string result;
+ switch (caseMapping)
+ {
+ case cmUpper:
+ result = [[textToConvert uppercaseString] UTF8String];
+ break;
+ case cmLower:
+ result = [[textToConvert lowercaseString] UTF8String];
+ break;
+ default:
+ result = s;
+ }
+ return result;
+}
+
+//--------------------------------------------------------------------------------------------------
+
+/**
* Helper function to get the outer container which represents the Scintilla editor on application side.
*/
ScintillaView* ScintillaCocoa::TopContainer()
@@ -501,14 +526,15 @@ void ScintillaCocoa::Paste(bool forceRectangular)
pdoc->BeginUndoAction();
ClearSelection();
+ int length = selectedText.len - 1; // One less to avoid inserting the terminating 0 character.
if (selectedText.rectangular)
{
SelectionPosition selStart = sel.RangeMain().Start();
- PasteRectangular(selStart, selectedText.s, selectedText.len);
+ PasteRectangular(selStart, selectedText.s, length);
}
else
- if (pdoc->InsertString(sel.RangeMain().caret.Position(), selectedText.s, selectedText.len))
- SetEmptySelection(sel.RangeMain().caret.Position() + selectedText.len);
+ if (pdoc->InsertString(sel.RangeMain().caret.Position(), selectedText.s, length))
+ SetEmptySelection(sel.RangeMain().caret.Position() + length);
pdoc->EndUndoAction();
@@ -1373,34 +1399,32 @@ void ScintillaCocoa::MouseUp(NSEvent* event)
void ScintillaCocoa::MouseWheel(NSEvent* event)
{
bool command = ([event modifierFlags] & NSCommandKeyMask) != 0;
- bool shift = ([event modifierFlags] & NSShiftKeyMask) != 0;
- int delta;
- if (shift)
- delta = 10 * [event deltaX]; // Arbitrary scale factor.
- else
- {
+ int dX = 0;
+ int dY = 0;
+
+ dX = 10 * [event deltaX]; // Arbitrary scale factor.
+
// In order to make scrolling with larger offset smoother we scroll less lines the larger the
// delta value is.
if ([event deltaY] < 0)
- delta = -(int) sqrt(-10.0 * [event deltaY]);
+ dY = -(int) sqrt(-10.0 * [event deltaY]);
else
- delta = (int) sqrt(10.0 * [event deltaY]);
- }
+ dY = (int) sqrt(10.0 * [event deltaY]);
if (command)
{
// Zoom! We play with the font sizes in the styles.
// Number of steps/line is ignored, we just care if sizing up or down.
- if (delta > 0)
+ if (dY > 0.5)
KeyCommand(SCI_ZOOMIN);
- else
+ else if (dY < -0.5)
KeyCommand(SCI_ZOOMOUT);
}
else
- if (shift)
- HorizontalScrollTo(xOffset - delta);
- else
- ScrollTo(topLine - delta, true);
+ {
+ HorizontalScrollTo(xOffset - dX);
+ ScrollTo(topLine - dY, true);
+ }
}
//--------------------------------------------------------------------------------------------------
@@ -1429,7 +1453,7 @@ void ScintillaCocoa::Undo()
void ScintillaCocoa::Redo()
{
- Editor::Undo();
+ Editor::Redo();
}
//--------------------------------------------------------------------------------------------------