Commit: ff50cd97407e646093cdbedefc4fc87a83c42fb0
Author: Antony Riakiotakis
Date:   Fri Nov 21 17:07:26 2014 +0100
Branches: wiggly-widgets
https://developer.blender.org/rBff50cd97407e646093cdbedefc4fc87a83c42fb0

2D widgets Cleanup:

* Get rid of invalid flag (we avoid drawing widgets by dereferencing RNA
now so it should be OK)

* Add intersect function for 2D widgets (still needs correct mapping to
be any useful though)

===================================================================

M       source/blender/windowmanager/intern/wm_event_system.c
M       source/blender/windowmanager/intern/wm_generic_widgets.c
M       source/blender/windowmanager/intern/wm_widgets.c
M       source/blender/windowmanager/wm_event_system.h

===================================================================

diff --git a/source/blender/windowmanager/intern/wm_event_system.c 
b/source/blender/windowmanager/intern/wm_event_system.c
index 077df67..2cc66ff 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -2016,10 +2016,11 @@ static int wm_handlers_do_intern(bContext *C, wmEvent 
*event, ListBase *handlers
                                                        action |= 
WM_HANDLER_BREAK;
                                                }
                                                else if 
(wm_widgetmap_is_3d(wmap)) {
-                                                       widget = 
wm_widget_find_highlighted_3D (wmap, C, event);
+                                                       widget = 
wm_widget_find_highlighted_3D(wmap, C, event);
                                                        
wm_widgetmap_set_highlighted_widget(wmap, C, widget);
                                                }
                                                else {
+                                                       widget = 
wm_widget_find_highlighted(wmap, C, event);
                                                        
wm_widgetmap_set_highlighted_widget(wmap, C, NULL);
                                                }
                                                break;
diff --git a/source/blender/windowmanager/intern/wm_generic_widgets.c 
b/source/blender/windowmanager/intern/wm_generic_widgets.c
index 5ab0b3b..2552457 100644
--- a/source/blender/windowmanager/intern/wm_generic_widgets.c
+++ b/source/blender/windowmanager/intern/wm_generic_widgets.c
@@ -664,9 +664,11 @@ static void widget_cage_draw(struct wmWidget *widget, 
const struct bContext *UNU
        
        glColor4f(1.0f, 0.6f, 0.0f, 0.1f);
 
-//     glEnable(GL_BLEND);
-//     glRectf(cage->bound.xmin, cage->bound.ymin, cage->bound.xmax, 
cage->bound.ymax);
-//     glDisable(GL_BLEND);
+       if (widget->flag & WM_WIDGET_HIGHLIGHT) {
+               glEnable(GL_BLEND);
+               glRectf(cage->bound.xmin, cage->bound.ymin, cage->bound.xmax, 
cage->bound.ymax);
+               glDisable(GL_BLEND);
+       }
        
        if (w > h)
                aspx = h / w;
diff --git a/source/blender/windowmanager/intern/wm_widgets.c 
b/source/blender/windowmanager/intern/wm_widgets.c
index b0fb8c5..f602f1e 100644
--- a/source/blender/windowmanager/intern/wm_widgets.c
+++ b/source/blender/windowmanager/intern/wm_widgets.c
@@ -125,9 +125,6 @@ typedef struct wmWidgetMapType {
 } wmWidgetMapType;
 
 
-#define WGROUP_FLAG_INVALID 1
-
-
 /* store all widgetboxmaps here. Anyone who wants to register a widget for a 
certain
  * area type can query the widgetbox to do so */
 static ListBase widgetmaptypes = {NULL, NULL};
@@ -286,7 +283,6 @@ void WM_widgets_draw(const bContext *C, struct ARegion *ar)
 
                                if (wgroup->type->update) {
                                        wgroup->type->update(wgroup, C);
-                                       wgroup->flag &= ~WGROUP_FLAG_INVALID;
                                }
 
                                for (widget_iter = wgroup->widgets.first; 
widget_iter; widget_iter = widget_iter->next) {
@@ -524,19 +520,13 @@ static int wm_widget_find_highlighted_3D_intern (ListBase 
*visible_widgets, bCon
        return -1;
 }
 
-static void wm_prepare_visible_widgets(struct wmWidgetMap *wmap, ListBase 
*visible_widgets, bContext *C)
+static void wm_prepare_visible_widgets_3D(struct wmWidgetMap *wmap, ListBase 
*visible_widgets, bContext *C)
 {
        wmWidget *widget;
        wmWidgetGroup *wgroup;
 
        for (wgroup = wmap->widgetgroups.first; wgroup; wgroup = wgroup->next) {
                if (!wgroup->type->poll || wgroup->type->poll(wgroup, C)) {
-                       /* update if needed, data may become invalid after 
undoing */
-                       if (wgroup->type->update && (wgroup->flag & 
WGROUP_FLAG_INVALID)) {
-                               wgroup->type->update(wgroup, C);
-                               wgroup->flag &= ~WGROUP_FLAG_INVALID;
-                       }
-
                        for (widget = wgroup->widgets.first; widget; widget = 
widget->next) {
                                if (!(widget->flag & WM_WIDGET_SKIP_DRAW) && 
widget->render_3d_intersection) {
                                        BLI_addhead(visible_widgets, 
BLI_genericNodeN(widget));
@@ -548,12 +538,12 @@ static void wm_prepare_visible_widgets(struct wmWidgetMap 
*wmap, ListBase *visib
 
 wmWidget *wm_widget_find_highlighted_3D(struct wmWidgetMap *wmap, bContext *C, 
const struct wmEvent *event)
 {
-       int ret, retsec;
+       int ret;
        wmWidget *result = NULL;
        
        ListBase visible_widgets = {0};
 
-       wm_prepare_visible_widgets(wmap, &visible_widgets, C);
+       wm_prepare_visible_widgets_3D(wmap, &visible_widgets, C);
 
        /* set up view matrices */      
        view3d_operator_needs_opengl(C);
@@ -562,7 +552,7 @@ wmWidget *wm_widget_find_highlighted_3D(struct wmWidgetMap 
*wmap, bContext *C, c
        
        if (ret != -1) {
                LinkData *link;
-               int retfinal;
+               int retfinal, retsec;
                retsec = wm_widget_find_highlighted_3D_intern(&visible_widgets, 
C, event, 0.2f * (float)U.tw_hotspot);
                
                if (retsec == -1)
@@ -579,6 +569,26 @@ wmWidget *wm_widget_find_highlighted_3D(struct wmWidgetMap 
*wmap, bContext *C, c
        return result;
 }
 
+wmWidget *wm_widget_find_highlighted(struct wmWidgetMap *wmap, bContext *C, 
const struct wmEvent *event)
+{
+       wmWidget *widget;
+       wmWidgetGroup *wgroup;
+
+       for (wgroup = wmap->widgetgroups.first; wgroup; wgroup = wgroup->next) {
+               if (!wgroup->type->poll || wgroup->type->poll(wgroup, C)) {
+                       for (widget = wgroup->widgets.first; widget; widget = 
widget->next) {
+                               if (!(widget->flag & WM_WIDGET_SKIP_DRAW) && 
widget->intersect) {
+                                       if (widget->intersect(C, event, widget))
+                                               return widget;
+                               }
+                       }
+               }
+       }
+       
+       return NULL;
+}
+
+
 void wm_widgetmap_set_highlighted_widget(struct wmWidgetMap *wmap, struct 
bContext *C, struct wmWidget *widget)
 {
        if (widget != wmap->highlighted_widget) {
diff --git a/source/blender/windowmanager/wm_event_system.h 
b/source/blender/windowmanager/wm_event_system.h
index d049ec2..3256cc8 100644
--- a/source/blender/windowmanager/wm_event_system.h
+++ b/source/blender/windowmanager/wm_event_system.h
@@ -112,6 +112,7 @@ void        wm_drags_draw(bContext *C, wmWindow *win, rcti 
*rect);
 
 /* wm_widgets.c */
 struct wmWidget *wm_widget_find_highlighted_3D(struct wmWidgetMap *wmap, 
struct bContext *C, const struct wmEvent *event);
+wmWidget *wm_widget_find_highlighted(struct wmWidgetMap *wmap, bContext *C, 
const struct wmEvent *event);
 void wm_widgetmap_set_highlighted_widget(struct wmWidgetMap *wmap, struct 
bContext *C, struct wmWidget *widget);
 struct wmWidget *wm_widgetmap_get_highlighted_widget(struct wmWidgetMap *wmap);

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

Reply via email to