Skip to content

Commit

Permalink
Fixed|libdeng2|RuleRectangle: Rule invalidation issue
Browse files Browse the repository at this point in the history
Related outputs of a rule rectangle (e.g., top affects height & bottom)
need to be invalidated regardless of whether the output itself already
is invalid.

Fixes a problem where accessing only a certain output of a rule
rectangle wouldn't cause the relevant value updates to occur
(DocumentWidget inside a popup).
  • Loading branch information
skyjake committed Jul 31, 2013
1 parent 6ba1f8c commit 0f1656b
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 16 deletions.
8 changes: 4 additions & 4 deletions doomsday/libdeng2/src/widgets/delegaterule.cpp
Expand Up @@ -53,11 +53,11 @@ void DelegateRule::invalidate()
if(isValid())
{
Rule::invalidate();
}

if(_source)
{
_source->delegateInvalidation(_delegateId);
}
if(_source)
{
_source->delegateInvalidation(_delegateId);
}
}

Expand Down
36 changes: 24 additions & 12 deletions doomsday/libdeng2/src/widgets/rulerectangle.cpp
Expand Up @@ -305,33 +305,45 @@ public DelegateRule::ISource
switch(id)
{
case OutLeft:
outputRules[OutRight]->invalidate();
outputRules[OutWidth]->invalidate();
if(outputRules[OutRight]->isValid())
outputRules[OutRight]->invalidate();
if(outputRules[OutWidth]->isValid())
outputRules[OutWidth]->invalidate();
break;

case OutRight:
outputRules[OutLeft]->invalidate();
outputRules[OutWidth]->invalidate();
if(outputRules[OutLeft]->isValid())
outputRules[OutLeft]->invalidate();
if(outputRules[OutWidth]->isValid())
outputRules[OutWidth]->invalidate();
break;

case OutWidth:
outputRules[OutLeft]->invalidate();
outputRules[OutRight]->invalidate();
if(outputRules[OutLeft]->isValid())
outputRules[OutLeft]->invalidate();
if(outputRules[OutRight]->isValid())
outputRules[OutRight]->invalidate();
break;

case OutTop:
outputRules[OutBottom]->invalidate();
outputRules[OutHeight]->invalidate();
if(outputRules[OutBottom]->isValid())
outputRules[OutBottom]->invalidate();
if(outputRules[OutHeight]->isValid())
outputRules[OutHeight]->invalidate();
break;

case OutBottom:
outputRules[OutTop]->invalidate();
outputRules[OutHeight]->invalidate();
if(outputRules[OutTop]->isValid())
outputRules[OutTop]->invalidate();
if(outputRules[OutHeight]->isValid())
outputRules[OutHeight]->invalidate();
break;

case OutHeight:
outputRules[OutTop]->invalidate();
outputRules[OutBottom]->invalidate();
if(outputRules[OutTop]->isValid())
outputRules[OutTop]->invalidate();
if(outputRules[OutBottom]->isValid())
outputRules[OutBottom]->invalidate();
break;
}
}
Expand Down

0 comments on commit 0f1656b

Please sign in to comment.