Sfoglia il codice sorgente

Improved scrolling in large text files

Ivan Safrin 12 anni fa
parent
commit
6a4f0a1e17

+ 1 - 0
Modules/Contents/UI/Include/PolyUITextInput.h

@@ -39,6 +39,7 @@
 using namespace std;
 
 #define MAX_TEXTINPUT_UNDO_STATES 30
+#define UI_TEXT_INPUT_SCROLL_SPEED 70.0
 
 namespace Polycode {
 

+ 2 - 0
Modules/Contents/UI/Include/PolyUIVScrollBar.h

@@ -43,6 +43,7 @@ namespace Polycode {
 		void scrollTo(Number scrollValue);
 		void Scroll(Number amount);
 		
+		void setTickSize(Number newTickSize);
 		
 		void onMouseWheelDown(Number x, Number y);
 		void onMouseWheelUp(Number x, Number y);
@@ -57,6 +58,7 @@ namespace Polycode {
 		
 	private:		
 		
+		Number tickSize;
 		
 		Number padding;
 		Number scrollValue;

+ 5 - 1
Modules/Contents/UI/Source/PolyUITextInput.cpp

@@ -643,7 +643,7 @@ void UITextInput::changedText(int lineStart, int lineEnd, bool sendChangeEvent)
 
 	applySyntaxFormatting(lineStart, lineEnd);	
 	updateWordWrap(lineStart, lineEnd);
-	
+		
 	if(sendChangeEvent) {
 		dispatchEvent(new UIEvent(), UIEvent::CHANGE_EVENT);	
 	}
@@ -2347,6 +2347,10 @@ void UITextInput::updateWordWrap(int lineStart, int lineEnd) {
 
 void UITextInput::readjustBuffer(int lineStart, int lineEnd) {
 
+	if(scrollContainer) {
+		scrollContainer->getVScrollBar()->setTickSize((UI_TEXT_INPUT_SCROLL_SPEED * lineHeight) /scrollContainer->getContentSize().y);
+	}
+	
 	if(lineEnd == -1) {
 		lineEnd = wordWrapLines.size()-1;
 	}

+ 8 - 12
Modules/Contents/UI/Source/PolyUIVScrollBar.cpp

@@ -88,6 +88,8 @@ UIVScrollBar::UIVScrollBar(Number width, Number height, Number initialRatio) : U
 	this->height = height;
 	this->width = width;	
 	
+	tickSize = 0.01;
+	
 	setHitbox(width, height);
 }
 
@@ -154,22 +156,16 @@ void UIVScrollBar::onMouseWheelDown(Number x, Number y) {
 	scrollDownOneTick();
 }
 
+void UIVScrollBar::setTickSize(Number newTickSize) {
+	tickSize = newTickSize;
+}
+
 void UIVScrollBar::scrollUpOneTick() {
-	Number newPos = handleBox->getPosition().y - 5;
-	
-	if(newPos < padding)
-		newPos = padding;
-	
-	handleBox->setPositionY(newPos);	
+	Scroll(-tickSize);
 }
 
 void UIVScrollBar::scrollDownOneTick() {
-	Number newPos = handleBox->getPosition().y + 5;	
-	
-	if(newPos > dragRectHeight)
-		newPos = dragRectHeight;
-	
-	handleBox->setPositionY(newPos);	
+	Scroll(tickSize);
 }