[Bf-committers] Request for spacehandler patch

steven admin at byteshelter.org
Tue Apr 15 16:04:20 CEST 2008


Hello,
        
        i'm currently implementing an object orientated python gui api
        for
        script developers to make it easier to write gui elements.
        
        I had the problem that for spacehandler event scripts, there is
        only
        Blender.event, so it differes with the way a gui script handles
        events:
        
        handle(event, value)
        
        The only thing i changed is the BPY_do_spacehandler function to
        get also
        the value passed. I've created the patch with latest svn and
        tested it.
        I found no problems until now.
        
        I don't know how good/bad it was to do this, but it makes the
        gui api
        able to also catch events for spacehandlers the same way it does
        for the
        script window, and that makes the gui realy much faster. To rely
        on the
        window module to get those values is realllyyyy slow.
        
        
        Here an example spacehandler:
        
        # SPACEHANDLER.VIEW3D.EVENT
        
        from Blender.event import event as ev
        from Blender.eventValue import eventValue as val
        print "Event: [%i, %i]", ev, val
        
        and here the patch: 
        
        Index: source/blender/python/BPY_extern.h
        ===================================================================
        --- source/blender/python/BPY_extern.h  (Revision 14428)
        +++ source/blender/python/BPY_extern.h  (Arbeitskopie)
        @@ -111,6 +111,7 @@
                int BPY_has_spacehandler(struct Text *text, struct
        ScrArea *sa);
                void BPY_screen_free_spacehandlers(struct bScreen *sc);
                int BPY_do_spacehandlers(struct ScrArea *sa, unsigned
        short event,
        +               unsigned short eventValue,
                        unsigned short space_event);
         
                void BPY_pydriver_update(void);
        Index: source/blender/python/BPY_interface.c
        ===================================================================
        --- source/blender/python/BPY_interface.c       (Revision 14428)
        +++ source/blender/python/BPY_interface.c       (Arbeitskopie)
        @@ -2450,6 +2450,7 @@
         }
         
         int BPY_do_spacehandlers( ScrArea *sa, unsigned short event,
        +       unsigned short eventValue,
                unsigned short space_event )
         {
                ScriptLink *scriptlink;
        @@ -2492,6 +2493,8 @@
                        EXPP_dict_set_item_str(g_blenderdict, "link",
        PyInt_FromLong(space_event));
                        /* note: DRAW space_events set event to 0 */
                        EXPP_dict_set_item_str(g_blenderdict, "event",
        PyInt_FromLong(event));
        +               /* to make spacehandler event script similar to
        gui event handlers */
        +               EXPP_dict_set_item_str(g_blenderdict,
        "eventValue",
        PyInt_FromLong(eventValue));
                        /* now run all assigned space handlers for this
        space and space_event
        */
                        for( index = 0; index < scriptlink->totscript;
        index++ ) {
                                
        Index: source/blender/src/drawview.c
        ===================================================================
        --- source/blender/src/drawview.c       (Revision 14428)
        +++ source/blender/src/drawview.c       (Arbeitskopie)
        @@ -3254,7 +3254,7 @@
         
                /* run any view3d draw handler script links */
                if (sa->scriptlink.totscript)
        -               BPY_do_spacehandlers(sa, 0,
        SPACEHANDLER_VIEW3D_DRAW);
        +               BPY_do_spacehandlers(sa, 0, 0,
        SPACEHANDLER_VIEW3D_DRAW);
         
                /* run scene redraw script links */
                if((G.f & G_DOSCRIPTLINKS) &&
        G.scene->scriptlink.totscript &&
        Index: source/blender/src/space.c
        ===================================================================
        --- source/blender/src/space.c  (Revision 14428)
        +++ source/blender/src/space.c  (Arbeitskopie)
        @@ -1247,7 +1247,7 @@
         
                        /* run any view3d event handler script links */
                        if (event && sa->scriptlink.totscript)
        -                       if (BPY_do_spacehandlers(sa, event,
        SPACEHANDLER_VIEW3D_EVENT))
        +                       if (BPY_do_spacehandlers(sa, event, val,
        SPACEHANDLER_VIEW3D_EVENT))
                                        return; /* return if event was
        processed (swallowed) by handler(s)
        */
         
                        /* TEXTEDITING?? */
        
        
        
        best regards,
        Steven Truppe



More information about the Bf-committers mailing list