///|
// Explicit scale changes install fresh named ticker objects in source order.
// The caller restores the four default flags only after all setters succeed.
fn Axis::install_scale_defaults(self : Axis) -> Unit raise @core.DataError {
let geometry = self.scale()
match geometry {
@scale.Scale::Linear => {
self.set_locator(@ticker.AutoLocator::new().as_locator())
self.set_named_formatter(
@ticker.ScalarFormatter::new().as_base_formatter(),
)
self.set_minor_named_formatter(
@ticker.NullFormatter::new().as_base_formatter(),
)
if @config.minor_ticks_visible(horizontal=self.tick_horizontal) {
self.set_minor_locator(
@ticker.AutoMinorLocator::new().as_minor_locator(),
)
} else {
self.set_minor_locator(@ticker.NullLocator::new().as_minor_locator())
}
}
@scale.Scale::Log => {
self.set_locator(@ticker.LogLocator::new(base=10.0).as_locator())
self.set_named_formatter(
@ticker.LogFormatterSciNotation::new().as_base_formatter(),
)
self.set_minor_locator(
@ticker.LogLocator::new(base=10.0, subs=None).as_minor_locator(),
)
self.set_minor_named_formatter(
@ticker.LogFormatterSciNotation::new().as_base_formatter(),
)
}
@scale.Scale::SymLog(base~, ..) => {
self.set_locator(
@ticker.SymmetricalLogLocator::new(transform=geometry).as_locator(),
)
self.set_named_formatter(
@ticker.LogFormatterSciNotation::new(
base=@ticker.LogValue::Numeric(@ticker.ScalarNumber::Number(base)),
).as_base_formatter(),
)
self.set_minor_locator(
@ticker.SymmetricalLogLocator::new(transform=geometry).as_minor_locator(),
)
self.set_minor_named_formatter(
@ticker.NullFormatter::new().as_base_formatter(),
)
}
@scale.Scale::Asinh(linear_width~) => {
// Original axis.set evaluates all three RHS constructors first.
let major = @ticker.AsinhLocator::new(linear_width, base=10.0)
let minor = @ticker.AsinhLocator::new(
linear_width,
base=10.0,
subs=Some(@ticker.AsinhSubs::Tuple(@ticker.asinh_default_minor_subs())),
)
let minor_formatter = @ticker.NullFormatter::new()
self.set_locator(major.as_locator())
self.set_minor_locator(minor.as_minor_locator())
self.set_minor_named_formatter(minor_formatter.as_base_formatter())
self.set_named_formatter(
@ticker.LogFormatterSciNotation::new().as_base_formatter(),
)
}
@scale.Scale::Logit(..) => {
self.set_locator(@ticker.LogitLocator::new().as_locator())
self.set_named_formatter(
@ticker.LogitFormatter::new().as_base_formatter(),
)
self.set_minor_locator(
@ticker.LogitLocator::new(minor=true).as_minor_locator(),
)
self.set_minor_named_formatter(
@ticker.LogitFormatter::new(
minor=@ticker.LogValue::Numeric(@ticker.ScalarNumber::Boolean(true)),
).as_base_formatter(),
)
}
}
}