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);

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to