[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [34480] trunk/blender/source/blender/ editors/space_text/text_ops.c: Todo item: text editor does not honour continuous grab(see

Sergey Sharybin g.ulairi at gmail.com
Mon Jan 24 19:21:56 CET 2011


Revision: 34480
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=34480
Author:   nazgul
Date:     2011-01-24 18:21:55 +0000 (Mon, 24 Jan 2011)
Log Message:
-----------
Todo item: text editor does not honour continuous grab(see

Added OPTYPE_GRAB_POINTER flag to scrolling operator, changed a bit logic of
delta calculation and removed unused members from TextScroll structure.

Got issue with very-fast mouse moving (when mouse pointer could go out of window,
but it's general issue for all grab operator).

Was unable to check MOUSEPAN event (two-finger scroll). Please poke me if
there are any issues with this event.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/space_text/text_ops.c

Modified: trunk/blender/source/blender/editors/space_text/text_ops.c
===================================================================
--- trunk/blender/source/blender/editors/space_text/text_ops.c	2011-01-24 15:25:03 UTC (rev 34479)
+++ trunk/blender/source/blender/editors/space_text/text_ops.c	2011-01-24 18:21:55 UTC (rev 34480)
@@ -2011,12 +2011,9 @@
 
 typedef struct TextScroll {
 	short old[2];
-	short hold[2];
 	short delta[2];
 
 	int first;
-	int characters;
-	int lines;
 	int scrollbar;
 
 	int zone;
@@ -2044,40 +2041,42 @@
 	SpaceText *st= CTX_wm_space_text(C);
 	ARegion *ar= CTX_wm_region(C);
 	TextScroll *tsc= op->customdata;
-	short *mval= event->mval;
+	short mval[2]= {event->x, event->y};
+	short txtdelta[2] = {0, 0};
 
 	text_update_character_width(st);
 
 	if(tsc->first) {
 		tsc->old[0]= mval[0];
 		tsc->old[1]= mval[1];
-		tsc->hold[0]= mval[0];
-		tsc->hold[1]= mval[1];
 		tsc->first= 0;
 	}
 
+	tsc->delta[0]+= mval[0] - tsc->old[0];
+	tsc->delta[1]+= mval[1] - tsc->old[1];
+
 	if(!tsc->scrollbar) {
-		tsc->delta[0]= (tsc->hold[0]-mval[0])/st->cwidth;
-		tsc->delta[1]= (mval[1]-tsc->hold[1])/st->lheight;
+		txtdelta[0]= tsc->delta[0]/st->cwidth;
+		txtdelta[1]= tsc->delta[1]/st->lheight;
+
+		tsc->delta[0]%= st->cwidth;
+		tsc->delta[1]%= st->lheight;
 	}
-	else
-		tsc->delta[1]= (tsc->hold[1]-mval[1])*st->pix_per_line;
-	
-	if(tsc->delta[0] || tsc->delta[1]) {
-		screen_skip(st, ar, tsc->delta[1]);
+	else {
+		txtdelta[1]= -tsc->delta[1]*st->pix_per_line;
+		tsc->delta[1]+= txtdelta[1]/st->pix_per_line;
+	}
 
-		tsc->lines += tsc->delta[1];
+	if(txtdelta[0] || txtdelta[1]) {
+		screen_skip(st, ar, txtdelta[1]);
 
 		if(st->wordwrap) {
 			st->left= 0;
 		}
 		else {
-			st->left+= tsc->delta[0];
+			st->left+= txtdelta[0];
 			if(st->left<0) st->left= 0;
 		}
-		
-		tsc->hold[0]= mval[0];
-		tsc->hold[1]= mval[1];
 
 		ED_area_tag_redraw(CTX_wm_area(C));
 	}
@@ -2152,11 +2151,11 @@
 	if (event->type == MOUSEPAN) {
 		text_update_character_width(st);
 		
-		tsc->hold[0] = event->prevx;
-		tsc->hold[1] = event->prevy;
+		tsc->old[0] = event->x;
+		tsc->old[1] = event->x;
 		/* Sensitivity of scroll set to 4pix per line/char */
-		event->mval[0] = event->prevx + (event->x - event->prevx)*st->cwidth/4;
-		event->mval[1] = event->prevy + (event->y - event->prevy)*st->lheight/4;
+		tsc->delta[0] = (event->x - event->prevx)*st->cwidth/4;
+		tsc->delta[1] = (event->y - event->prevy)*st->lheight/4;
 		tsc->first = 0;
 		tsc->scrollbar = 0;
 		scroll_apply(C, op, event);
@@ -2187,7 +2186,7 @@
 	ot->poll= text_space_edit_poll;
 
 	/* flags */
-	ot->flag= OPTYPE_BLOCKING;
+	ot->flag= OPTYPE_BLOCKING|OPTYPE_GRAB_POINTER;
 
 	/* properties */
 	RNA_def_int(ot->srna, "lines", 1, INT_MIN, INT_MAX, "Lines", "Number of lines to scroll.", -100, 100);




More information about the Bf-blender-cvs mailing list