cleanups: theme/rule:
- rename destroy -> dispose - use EMPTY_RULES array to avoid null checks - squash: RuleVisitor
This commit is contained in:
parent
b879830045
commit
14e5e28998
@ -24,6 +24,7 @@ import org.oscim.core.GeometryBuffer.GeometryType;
|
||||
import org.oscim.core.TagSet;
|
||||
import org.oscim.theme.rule.Element;
|
||||
import org.oscim.theme.rule.Rule;
|
||||
import org.oscim.theme.rule.Rule.RuleVisitor;
|
||||
import org.oscim.theme.styles.RenderStyle;
|
||||
import org.oscim.utils.LRUCache;
|
||||
import org.slf4j.Logger;
|
||||
@ -93,7 +94,7 @@ public class RenderTheme implements IRenderTheme {
|
||||
mStyleCache[i].cache.clear();
|
||||
|
||||
for (Rule rule : mRules)
|
||||
rule.onDestroy();
|
||||
rule.dispose();
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -259,4 +260,10 @@ public class RenderTheme implements IRenderTheme {
|
||||
for (Rule rule : mRules)
|
||||
rule.updateStyles();
|
||||
}
|
||||
|
||||
public void traverseRules(RuleVisitor visitor) {
|
||||
for (Rule rule : mRules)
|
||||
rule.apply(visitor);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -22,9 +22,11 @@ import org.oscim.core.Tag;
|
||||
import org.oscim.theme.styles.RenderStyle;
|
||||
|
||||
public abstract class Rule {
|
||||
public final static RenderStyle[] EMPTY_STYLE = new RenderStyle[0];
|
||||
public final static Rule[] EMPTY_RULES = new Rule[0];
|
||||
|
||||
private final Rule[] subRules;
|
||||
private final RenderStyle[] styles;
|
||||
public final RenderStyle[] styles;
|
||||
|
||||
private final int zoom;
|
||||
private final int element;
|
||||
@ -34,8 +36,9 @@ public abstract class Rule {
|
||||
Rule(int element, int zoom, int selector, Rule[] subRules, RenderStyle[] styles) {
|
||||
this.element = element;
|
||||
this.zoom = zoom;
|
||||
this.subRules = subRules;
|
||||
this.styles = styles;
|
||||
|
||||
this.subRules = (subRules == null) ? EMPTY_RULES : subRules;
|
||||
this.styles = (styles == null) ? EMPTY_STYLE : styles;
|
||||
|
||||
selectFirstMatch = (selector & Selector.FIRST) != 0;
|
||||
selectWhenMatched = (selector & Selector.WHEN_MATCHED) != 0;
|
||||
@ -48,7 +51,7 @@ public abstract class Rule {
|
||||
if (((element & type) != 0) && ((zoom & zoomLevel) != 0) && (matchesTags(tags))) {
|
||||
boolean matched = false;
|
||||
|
||||
if (subRules != null) {
|
||||
if (subRules != EMPTY_RULES) {
|
||||
if (selectFirstMatch) {
|
||||
/* only add first matching rule and when-matched rules iff a
|
||||
* previous rule matched */
|
||||
@ -73,7 +76,7 @@ public abstract class Rule {
|
||||
}
|
||||
}
|
||||
|
||||
if (styles == null)
|
||||
if (styles == EMPTY_STYLE)
|
||||
/* matched if styles where added */
|
||||
return matched;
|
||||
|
||||
@ -89,59 +92,62 @@ public abstract class Rule {
|
||||
return false;
|
||||
}
|
||||
|
||||
public void onDestroy() {
|
||||
if (styles != null)
|
||||
for (RenderStyle ri : styles)
|
||||
ri.destroy();
|
||||
public void dispose() {
|
||||
for (RenderStyle ri : styles)
|
||||
ri.dispose();
|
||||
|
||||
if (subRules != null)
|
||||
for (Rule subRule : subRules)
|
||||
subRule.onDestroy();
|
||||
for (Rule subRule : subRules)
|
||||
subRule.dispose();
|
||||
}
|
||||
|
||||
public void scaleTextSize(float scaleFactor) {
|
||||
if (styles != null)
|
||||
for (RenderStyle ri : styles)
|
||||
ri.scaleTextSize(scaleFactor);
|
||||
for (RenderStyle ri : styles)
|
||||
ri.scaleTextSize(scaleFactor);
|
||||
|
||||
if (subRules != null)
|
||||
for (Rule subRule : subRules)
|
||||
subRule.scaleTextSize(scaleFactor);
|
||||
for (Rule subRule : subRules)
|
||||
subRule.scaleTextSize(scaleFactor);
|
||||
}
|
||||
|
||||
public void updateStyles() {
|
||||
if (styles != null)
|
||||
for (RenderStyle ri : styles)
|
||||
ri.update();
|
||||
for (RenderStyle ri : styles)
|
||||
ri.update();
|
||||
|
||||
if (subRules != null)
|
||||
for (Rule subRule : subRules)
|
||||
subRule.updateStyles();
|
||||
for (Rule subRule : subRules)
|
||||
subRule.updateStyles();
|
||||
}
|
||||
|
||||
public static class RuleVisitor {
|
||||
boolean apply(Rule r) {
|
||||
if (r.subRules != null)
|
||||
for (Rule subRule : r.subRules)
|
||||
this.apply(subRule);
|
||||
public void apply(Rule r) {
|
||||
for (Rule subRule : r.subRules)
|
||||
this.apply(subRule);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
public static class TextSizeVisitor extends RuleVisitor {
|
||||
float scaleFactor = 1;
|
||||
|
||||
public void setScaleFactor(float scaleFactor) {
|
||||
this.scaleFactor = scaleFactor;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void apply(Rule r) {
|
||||
for (RenderStyle ri : r.styles)
|
||||
ri.scaleTextSize(scaleFactor);
|
||||
super.apply(r);
|
||||
}
|
||||
}
|
||||
|
||||
public static class UpdateVisitor extends RuleVisitor {
|
||||
@Override
|
||||
boolean apply(Rule r) {
|
||||
if (r.styles != null)
|
||||
for (RenderStyle ri : r.styles)
|
||||
ri.update();
|
||||
|
||||
return super.apply(r);
|
||||
public void apply(Rule r) {
|
||||
for (RenderStyle ri : r.styles)
|
||||
ri.update();
|
||||
super.apply(r);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean apply(RuleVisitor v) {
|
||||
|
||||
return v.apply(this);
|
||||
public void apply(RuleVisitor v) {
|
||||
v.apply(this);
|
||||
}
|
||||
}
|
||||
|
@ -41,7 +41,7 @@ public abstract class RenderStyle {
|
||||
/**
|
||||
* Destroys this RenderInstruction and cleans up all its internal resources.
|
||||
*/
|
||||
public void destroy() {
|
||||
public void dispose() {
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -32,7 +32,7 @@ public final class Symbol extends RenderStyle {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void destroy() {
|
||||
public void dispose() {
|
||||
}
|
||||
|
||||
@Override
|
||||
|
Loading…
x
Reference in New Issue
Block a user