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.core.TagSet;
|
||||||
import org.oscim.theme.rule.Element;
|
import org.oscim.theme.rule.Element;
|
||||||
import org.oscim.theme.rule.Rule;
|
import org.oscim.theme.rule.Rule;
|
||||||
|
import org.oscim.theme.rule.Rule.RuleVisitor;
|
||||||
import org.oscim.theme.styles.RenderStyle;
|
import org.oscim.theme.styles.RenderStyle;
|
||||||
import org.oscim.utils.LRUCache;
|
import org.oscim.utils.LRUCache;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
@ -93,7 +94,7 @@ public class RenderTheme implements IRenderTheme {
|
|||||||
mStyleCache[i].cache.clear();
|
mStyleCache[i].cache.clear();
|
||||||
|
|
||||||
for (Rule rule : mRules)
|
for (Rule rule : mRules)
|
||||||
rule.onDestroy();
|
rule.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -259,4 +260,10 @@ public class RenderTheme implements IRenderTheme {
|
|||||||
for (Rule rule : mRules)
|
for (Rule rule : mRules)
|
||||||
rule.updateStyles();
|
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;
|
import org.oscim.theme.styles.RenderStyle;
|
||||||
|
|
||||||
public abstract class Rule {
|
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 Rule[] subRules;
|
||||||
private final RenderStyle[] styles;
|
public final RenderStyle[] styles;
|
||||||
|
|
||||||
private final int zoom;
|
private final int zoom;
|
||||||
private final int element;
|
private final int element;
|
||||||
@ -34,8 +36,9 @@ public abstract class Rule {
|
|||||||
Rule(int element, int zoom, int selector, Rule[] subRules, RenderStyle[] styles) {
|
Rule(int element, int zoom, int selector, Rule[] subRules, RenderStyle[] styles) {
|
||||||
this.element = element;
|
this.element = element;
|
||||||
this.zoom = zoom;
|
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;
|
selectFirstMatch = (selector & Selector.FIRST) != 0;
|
||||||
selectWhenMatched = (selector & Selector.WHEN_MATCHED) != 0;
|
selectWhenMatched = (selector & Selector.WHEN_MATCHED) != 0;
|
||||||
@ -48,7 +51,7 @@ public abstract class Rule {
|
|||||||
if (((element & type) != 0) && ((zoom & zoomLevel) != 0) && (matchesTags(tags))) {
|
if (((element & type) != 0) && ((zoom & zoomLevel) != 0) && (matchesTags(tags))) {
|
||||||
boolean matched = false;
|
boolean matched = false;
|
||||||
|
|
||||||
if (subRules != null) {
|
if (subRules != EMPTY_RULES) {
|
||||||
if (selectFirstMatch) {
|
if (selectFirstMatch) {
|
||||||
/* only add first matching rule and when-matched rules iff a
|
/* only add first matching rule and when-matched rules iff a
|
||||||
* previous rule matched */
|
* previous rule matched */
|
||||||
@ -73,7 +76,7 @@ public abstract class Rule {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (styles == null)
|
if (styles == EMPTY_STYLE)
|
||||||
/* matched if styles where added */
|
/* matched if styles where added */
|
||||||
return matched;
|
return matched;
|
||||||
|
|
||||||
@ -89,59 +92,62 @@ public abstract class Rule {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onDestroy() {
|
public void dispose() {
|
||||||
if (styles != null)
|
for (RenderStyle ri : styles)
|
||||||
for (RenderStyle ri : styles)
|
ri.dispose();
|
||||||
ri.destroy();
|
|
||||||
|
|
||||||
if (subRules != null)
|
for (Rule subRule : subRules)
|
||||||
for (Rule subRule : subRules)
|
subRule.dispose();
|
||||||
subRule.onDestroy();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void scaleTextSize(float scaleFactor) {
|
public void scaleTextSize(float scaleFactor) {
|
||||||
if (styles != null)
|
for (RenderStyle ri : styles)
|
||||||
for (RenderStyle ri : styles)
|
ri.scaleTextSize(scaleFactor);
|
||||||
ri.scaleTextSize(scaleFactor);
|
|
||||||
|
|
||||||
if (subRules != null)
|
for (Rule subRule : subRules)
|
||||||
for (Rule subRule : subRules)
|
subRule.scaleTextSize(scaleFactor);
|
||||||
subRule.scaleTextSize(scaleFactor);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateStyles() {
|
public void updateStyles() {
|
||||||
if (styles != null)
|
for (RenderStyle ri : styles)
|
||||||
for (RenderStyle ri : styles)
|
ri.update();
|
||||||
ri.update();
|
|
||||||
|
|
||||||
if (subRules != null)
|
for (Rule subRule : subRules)
|
||||||
for (Rule subRule : subRules)
|
subRule.updateStyles();
|
||||||
subRule.updateStyles();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class RuleVisitor {
|
public static class RuleVisitor {
|
||||||
boolean apply(Rule r) {
|
public void apply(Rule r) {
|
||||||
if (r.subRules != null)
|
for (Rule subRule : r.subRules)
|
||||||
for (Rule subRule : r.subRules)
|
this.apply(subRule);
|
||||||
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 {
|
public static class UpdateVisitor extends RuleVisitor {
|
||||||
@Override
|
@Override
|
||||||
boolean apply(Rule r) {
|
public void apply(Rule r) {
|
||||||
if (r.styles != null)
|
for (RenderStyle ri : r.styles)
|
||||||
for (RenderStyle ri : r.styles)
|
ri.update();
|
||||||
ri.update();
|
super.apply(r);
|
||||||
|
|
||||||
return super.apply(r);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean apply(RuleVisitor v) {
|
public void apply(RuleVisitor v) {
|
||||||
|
v.apply(this);
|
||||||
return v.apply(this);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -41,7 +41,7 @@ public abstract class RenderStyle {
|
|||||||
/**
|
/**
|
||||||
* Destroys this RenderInstruction and cleans up all its internal resources.
|
* 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
|
@Override
|
||||||
public void destroy() {
|
public void dispose() {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Loading…
x
Reference in New Issue
Block a user