Merge with -r 22620:23107.
[blender.git] / source / blender / editors / space_graph / space_graph.c
index b17861dc67991f656dcb3f8583c6c7f99bad392e..8887d464f3003c4a54ebe247015ea6e9b03e5d89 100644 (file)
@@ -68,23 +68,25 @@ ARegion *graph_has_buttons_region(ScrArea *sa)
 {
        ARegion *ar, *arnew;
        
-       for(ar= sa->regionbase.first; ar; ar= ar->next)
-               if(ar->regiontype==RGN_TYPE_UI)
+       for (ar= sa->regionbase.first; ar; ar= ar->next) {
+               if (ar->regiontype==RGN_TYPE_UI)
                        return ar;
+       }
        
-       /* add subdiv level; after channel */
-       for(ar= sa->regionbase.first; ar; ar= ar->next)
-               if(ar->regiontype==RGN_TYPE_CHANNELS)
+       /* add subdiv level; after main */
+       for (ar= sa->regionbase.first; ar; ar= ar->next) {
+               if (ar->regiontype==RGN_TYPE_WINDOW)
                        break;
+       }
        
        /* is error! */
-       if(ar==NULL) return NULL;
+       if (ar==NULL) return NULL;
        
-       arnew= MEM_callocN(sizeof(ARegion), "buttons for view3d");
+       arnew= MEM_callocN(sizeof(ARegion), "buttons for graph");
        
        BLI_insertlinkafter(&sa->regionbase, ar, arnew);
        arnew->regiontype= RGN_TYPE_UI;
-       arnew->alignment= RGN_ALIGN_BOTTOM|RGN_SPLIT_PREV;
+       arnew->alignment= RGN_ALIGN_RIGHT;
        
        arnew->flag = RGN_FLAG_HIDDEN;
        
@@ -117,7 +119,7 @@ static SpaceLink *graph_new(const bContext *C)
        ar->alignment= RGN_ALIGN_BOTTOM;
        
        /* channels */
-       ar= MEM_callocN(sizeof(ARegion), "main area for graphedit");
+       ar= MEM_callocN(sizeof(ARegion), "channels area for graphedit");
        
        BLI_addtail(&sipo->regionbase, ar);
        ar->regiontype= RGN_TYPE_CHANNELS;
@@ -126,11 +128,11 @@ static SpaceLink *graph_new(const bContext *C)
        ar->v2d.scroll = (V2D_SCROLL_RIGHT|V2D_SCROLL_BOTTOM);
        
        /* ui buttons */
-       ar= MEM_callocN(sizeof(ARegion), "main area for graphedit");
+       ar= MEM_callocN(sizeof(ARegion), "buttons area for graphedit");
        
        BLI_addtail(&sipo->regionbase, ar);
        ar->regiontype= RGN_TYPE_UI;
-       ar->alignment= RGN_ALIGN_TOP|RGN_SPLIT_PREV;
+       ar->alignment= RGN_ALIGN_RIGHT;
        ar->flag = RGN_FLAG_HIDDEN;
        
        /* main area */
@@ -215,7 +217,7 @@ static void graph_main_area_init(wmWindowManager *wm, ARegion *ar)
 static void graph_main_area_draw(const bContext *C, ARegion *ar)
 {
        /* draw entirely, view changes should be handled here */
-       SpaceIpo *sipo= (SpaceIpo*)CTX_wm_space_data(C);
+       SpaceIpo *sipo= CTX_wm_space_graph(C);
        bAnimContext ac;
        View2D *v2d= &ar->v2d;
        View2DGrid *grid;
@@ -246,7 +248,9 @@ static void graph_main_area_draw(const bContext *C, ARegion *ar)
                
                /* XXX the slow way to set tot rect... but for nice sliders needed (ton) */
                get_graph_keyframe_extents(&ac, &v2d->tot.xmin, &v2d->tot.xmax, &v2d->tot.ymin, &v2d->tot.ymax);
-
+               /* extra offset so that these items are visible */
+               v2d->tot.xmin -= 10.0f;
+               v2d->tot.xmax += 10.0f;
        }
        
        /* only free grid after drawing data, as we need to use it to determine sampling rate */
@@ -290,7 +294,7 @@ static void graph_channel_area_init(wmWindowManager *wm, ARegion *ar)
 
 static void graph_channel_area_draw(const bContext *C, ARegion *ar)
 {
-       SpaceIpo *sipo= (SpaceIpo *)CTX_wm_space_data(C);
+       SpaceIpo *sipo= CTX_wm_space_graph(C);
        bAnimContext ac;
        View2D *v2d= &ar->v2d;
        View2DScrollers *scrollers;
@@ -305,7 +309,7 @@ static void graph_channel_area_draw(const bContext *C, ARegion *ar)
        
        /* draw channels */
        if (ANIM_animdata_get_context(C, &ac)) {
-               graph_draw_channel_names(&ac, sipo, ar);
+               graph_draw_channel_names((bContext*)C, &ac, sipo, ar);
        }
        
        /* reset view matrix */
@@ -358,13 +362,16 @@ static void graph_buttons_area_init(wmWindowManager *wm, ARegion *ar)
 
 static void graph_buttons_area_draw(const bContext *C, ARegion *ar)
 {
-       ED_region_panels(C, ar, 1, NULL);
+       ED_region_panels(C, ar, 1, NULL, -1);
 }
 
 static void graph_region_listener(ARegion *ar, wmNotifier *wmn)
 {
        /* context changes */
        switch(wmn->category) {
+               case NC_ANIMATION:
+                       ED_region_tag_redraw(ar);
+                       break;
                case NC_SCENE:
                        switch(wmn->data) {
                                case ND_OB_ACTIVE:
@@ -395,6 +402,9 @@ static void graph_listener(ScrArea *sa, wmNotifier *wmn)
 {
        /* context changes */
        switch (wmn->category) {
+               case NC_ANIMATION:
+                       ED_area_tag_refresh(sa);
+                       break;
                case NC_SCENE:
                        /*switch (wmn->data) {
                                case ND_OB_ACTIVE:
@@ -413,6 +423,10 @@ static void graph_listener(ScrArea *sa, wmNotifier *wmn)
                        }*/
                        ED_area_tag_refresh(sa);
                        break;
+               case NC_SPACE:
+                       if(wmn->data == ND_SPACE_GRAPH)
+                               ED_area_tag_redraw(sa);
+                       break;
                default:
                        if(wmn->data==ND_KEYS)
                                ED_area_tag_refresh(sa);
@@ -566,7 +580,7 @@ void ED_spacetype_ipo(void)
        /* regions: UI buttons */
        art= MEM_callocN(sizeof(ARegionType), "spacetype graphedit region");
        art->regionid = RGN_TYPE_UI;
-       art->minsizey= 200;
+       art->minsizex= 200;
        art->keymapflag= ED_KEYMAP_UI;
        art->listener= graph_region_listener;
        art->init= graph_buttons_area_init;