ソースを参照

UITextInput now scrolls with arrow keys and page up/page down

Ivan Safrin 13 年 前
コミット
46304672fb

+ 1 - 1
IDE/Contents/Source/PolycodeProjectEditor.cpp

@@ -60,7 +60,7 @@ PolycodeProjectEditor::PolycodeProjectEditor() : PolycodeEditor(true){
 		}
 		}
 	}
 	}
 
 
-	mainSettingsWindow = new UIWindow("Project Settings", 300, 500);
+	mainSettingsWindow = new UIWindow("Project Settings", 300, 420);
 	mainSettingsWindow->setPosition(10,10);
 	mainSettingsWindow->setPosition(10,10);
 	addChild(mainSettingsWindow);
 	addChild(mainSettingsWindow);
 	
 	

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

@@ -36,6 +36,7 @@ namespace Polycode {
 		void handleEvent(Event *event);
 		void handleEvent(Event *event);
 		
 		
 		void scrollTo(Number scrollValue);
 		void scrollTo(Number scrollValue);
+		void Scroll(Number amount);
 		
 		
 		Number minHandleSize;
 		Number minHandleSize;
 		
 		

+ 5 - 1
Modules/Contents/UI/Include/PolyUIScrollContainer.h

@@ -38,9 +38,13 @@ namespace Polycode {
 		void Resize(Number width, Number height);
 		void Resize(Number width, Number height);
 		
 		
 		void setScrollValue(Number xScroll, Number yScroll);
 		void setScrollValue(Number xScroll, Number yScroll);
-		
+		void scrollVertical(Number amount);
+		void scrollHorizontal(Number amount);
+				
 		void Update();
 		void Update();
 		
 		
+		Vector2 getContentSize();
+		
 		void onMouseWheelDown(Number x, Number y);
 		void onMouseWheelDown(Number x, Number y);
 		void onMouseWheelUp(Number x, Number y);		
 		void onMouseWheelUp(Number x, Number y);		
 		
 		

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

@@ -38,6 +38,7 @@ namespace Polycode {
 		void Resize(int newHeight);
 		void Resize(int newHeight);
 		
 		
 		void scrollTo(Number scrollValue);
 		void scrollTo(Number scrollValue);
+		void Scroll(Number amount);
 		
 		
 		void onMouseWheelDown(Number x, Number y);
 		void onMouseWheelDown(Number x, Number y);
 		void onMouseWheelUp(Number x, Number y);
 		void onMouseWheelUp(Number x, Number y);

+ 16 - 2
Modules/Contents/UI/Source/PolyUIHScrollBar.cpp

@@ -90,8 +90,17 @@ void UIHScrollBar::Update() {
 	if(lastPositionX != handleBox->getPosition().x) {
 	if(lastPositionX != handleBox->getPosition().x) {
 		lastPositionX = handleBox->getPosition().x;
 		lastPositionX = handleBox->getPosition().x;
 		scrollValue = (lastPositionX-padding)/dragRectWidth;
 		scrollValue = (lastPositionX-padding)/dragRectWidth;
-		if(scrollValue < 0) scrollValue = 0;
-		if(scrollValue > 1) scrollValue = 1;		
+
+		if(scrollValue < 0){
+			scrollValue = 0;
+			handleBox->setPositionX((scrollValue * dragRectWidth) + padding);	
+		}
+		
+		if(scrollValue > 1) {
+			scrollValue = 1;
+			handleBox->setPositionX((scrollValue * dragRectWidth) + padding);	
+		}
+		
 		dispatchEvent(new Event(), Event::CHANGE_EVENT);
 		dispatchEvent(new Event(), Event::CHANGE_EVENT);
 	}
 	}
 }
 }
@@ -116,6 +125,11 @@ void UIHScrollBar::scrollTo(Number scrollValue) {
 	handleBox->setPositionX((scrollValue * dragRectWidth) + padding);	
 	handleBox->setPositionX((scrollValue * dragRectWidth) + padding);	
 }
 }
 
 
+void UIHScrollBar::Scroll(Number amount) {
+	handleBox->setPositionX(((scrollValue+amount) * dragRectWidth) + padding);	
+}
+
+
 void UIHScrollBar::handleEvent(Event *event) {
 void UIHScrollBar::handleEvent(Event *event) {
 	if(event->getDispatcher() == bgBox) {
 	if(event->getDispatcher() == bgBox) {
 		InputEvent *inputEvent = (InputEvent*)event;
 		InputEvent *inputEvent = (InputEvent*)event;

+ 12 - 0
Modules/Contents/UI/Source/PolyUIScrollContainer.cpp

@@ -98,6 +98,9 @@ void UIScrollContainer::onMouseWheelDown(Number x, Number y) {
 		vScrollBar->scrollDownOneTick();
 		vScrollBar->scrollDownOneTick();
 }
 }
 
 
+Vector2 UIScrollContainer::getContentSize() {
+	return Vector2(contentWidth, contentHeight);
+}
 
 
 void UIScrollContainer::setContentSize(Number newContentWidth, Number newContentHeight) {
 void UIScrollContainer::setContentSize(Number newContentWidth, Number newContentHeight) {
 	
 	
@@ -129,6 +132,15 @@ void UIScrollContainer::setScrollValue(Number xScroll, Number yScroll) {
 	vScrollBar->scrollTo(yScroll);	
 	vScrollBar->scrollTo(yScroll);	
 }
 }
 
 
+void UIScrollContainer::scrollVertical(Number amount) {
+	vScrollBar->Scroll(amount);		
+}
+
+void UIScrollContainer::scrollHorizontal(Number amount) {
+	hScrollBar->Scroll(amount);
+}
+
+
 void UIScrollContainer::Update() {
 void UIScrollContainer::Update() {
 	Vector2 pos = getScreenPosition();
 	Vector2 pos = getScreenPosition();
 	scrollChild->scissorBox.setRect(pos.x,pos.y, width, height);	
 	scrollChild->scissorBox.setRect(pos.x,pos.y, width, height);	

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

@@ -427,6 +427,17 @@ void UITextInput::updateCaretPosition() {
 		
 		
 	}
 	}
 	
 	
+	if(multiLine && currentLine) {	
+	
+	
+		if(linesContainer->getPosition().y + currentLine->getPosition2D().y < 0.0) {
+			scrollContainer->scrollVertical(-(lineHeight+lineSpacing+padding)/(scrollContainer->getContentSize().y));
+
+		} else if(linesContainer->getPosition().y + currentLine->getPosition2D().y > scrollContainer->getHeight()) {
+		scrollContainer->scrollVertical((lineHeight+lineSpacing+padding)/(scrollContainer->getContentSize().y));
+
+		}
+	}
 }
 }
 
 
 void UITextInput::selectLineFromOffset() {
 void UITextInput::selectLineFromOffset() {
@@ -692,7 +703,6 @@ void UITextInput::Paste() {
 }
 }
 
 
 void UITextInput::showLine(unsigned int lineNumber, bool top) {
 void UITextInput::showLine(unsigned int lineNumber, bool top) {
-	
 }
 }
 
 
 void UITextInput::onKeyDown(PolyKEY key, wchar_t charCode) {
 void UITextInput::onKeyDown(PolyKEY key, wchar_t charCode) {
@@ -826,6 +836,23 @@ void UITextInput::onKeyDown(PolyKEY key, wchar_t charCode) {
 		return;
 		return;
 	}
 	}
 	
 	
+	if(key == KEY_PAGEUP) {
+		if(multiLine) {
+			scrollContainer->scrollVertical(-(scrollContainer->getHeight())/(scrollContainer->getContentSize().y));
+		
+		}
+		return;
+	}
+
+	if(key == KEY_PAGEDOWN) {
+		if(multiLine) {
+			scrollContainer->scrollVertical((scrollContainer->getHeight())/(scrollContainer->getContentSize().y));
+		
+		}
+		return;
+	}
+
+	
 	if(key == KEY_UP) {		
 	if(key == KEY_UP) {		
 		if(multiLine) {
 		if(multiLine) {
 			if(input->getKeyState(KEY_LSHIFT) || input->getKeyState(KEY_RSHIFT)) {			
 			if(input->getKeyState(KEY_LSHIFT) || input->getKeyState(KEY_RSHIFT)) {			

+ 13 - 2
Modules/Contents/UI/Source/PolyUIVScrollBar.cpp

@@ -99,8 +99,15 @@ void UIVScrollBar::Update() {
 	if(lastPositionY != handleBox->getPosition().y) {
 	if(lastPositionY != handleBox->getPosition().y) {
 		lastPositionY = handleBox->getPosition().y;
 		lastPositionY = handleBox->getPosition().y;
 		scrollValue = (lastPositionY-padding)/dragRectHeight;
 		scrollValue = (lastPositionY-padding)/dragRectHeight;
-		if(scrollValue < 0) scrollValue = 0;
-		if(scrollValue > 1) scrollValue = 1;		
+		if(scrollValue < 0){
+			scrollValue = 0;
+			handleBox->setPositionY((scrollValue * dragRectHeight) + padding);							
+		}
+		
+		if(scrollValue > 1) {
+			scrollValue = 1;
+			handleBox->setPositionY((scrollValue * dragRectHeight) + padding);				
+		}
 		dispatchEvent(new Event(), Event::CHANGE_EVENT);
 		dispatchEvent(new Event(), Event::CHANGE_EVENT);
 	}
 	}
 }
 }
@@ -109,6 +116,10 @@ void UIVScrollBar::scrollTo(Number scrollValue) {
 	handleBox->setPositionY((scrollValue * dragRectHeight) + padding);	
 	handleBox->setPositionY((scrollValue * dragRectHeight) + padding);	
 }
 }
 
 
+void UIVScrollBar::Scroll(Number amount) {
+	handleBox->setPositionY(((scrollValue+amount) * dragRectHeight) + padding);	
+}
+
 void UIVScrollBar::setHandleRatio(Number newRatio) {
 void UIVScrollBar::setHandleRatio(Number newRatio) {
 	scrollHandleHeight = height*newRatio;	
 	scrollHandleHeight = height*newRatio;