impl Display for VisiblePieceId {
fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
- write!(f, "{}-{}", self.0 >> 32, self.0 & 0xffffffff)
+ write!(f, "{}.{}", self.0 >> 32, self.0 & 0xffffffff)
}
}
impl Debug for VisiblePieceId {
}
impl PieceRenderInstructions {
- pub fn id_piece(&self) -> String { format!("piece{:}", self.id) }
- pub fn id_select(&self) -> String { format!("select{:}", self.id) }
- pub fn id_other(&self, w : &str) -> String { format!("d{}-{}", self.id, w) }
+ pub fn id_piece(&self) -> String { format!("piece{}", self.id) }
+ pub fn id_select(&self) -> String { format!("select{}", self.id) }
+ pub fn id_x(&self, w : &str) -> String { format!("def.{}.{}", self.id, w) }
}
pub trait Piece : Send + Debug {
- fn svg_other_ids(&self) -> VisiblePieceIdSvgIds;
- fn svg_defs(&self, pri : &PieceRenderInstructions) -> String;
+ fn svg_piece(&self, pri : &PieceRenderInstructions) -> String;
+ fn svg_select(&self, pri : &PieceRenderInstructions) -> String;
+ fn svg_x_ids(&self) -> VisiblePieceIdSvgIds;
+ fn svg_x_defs(&self, pri : &PieceRenderInstructions) -> String;
}
#[derive(Debug)]
colours : IndexVec<FaceId,Colour>,
}
+const SELECT_SCALE : f64 = 1.1;
+
impl Piece for SimpleShape {
- fn svg_other_ids(&self) -> VisiblePieceIdSvgIds { &["base"] }
- fn svg_defs(&self, pri : &PieceRenderInstructions) -> String {
- format!(r#"<g id={}>{}</g>"#, pri.id_other("base"), self.shape)
+ fn svg_piece(&self, pri : &PieceRenderInstructions) -> String {
+ format!(r##"
+ <g fill="{}">
+ <use href="#{}"/>
+ </g>
+ "##,
+ self.colours[pri.face],
+ pri.id_x("base"))
+ }
+ fn svg_select(&self, pri : &PieceRenderInstructions) -> String {
+ format!(r##"
+ <g transform="scale({})">
+ <use href="#{}"/>
+ </g>
+ "##,
+ SELECT_SCALE,
+ pri.id_x("base"))
+ }
+ fn svg_x_ids(&self) -> VisiblePieceIdSvgIds { &["base"] }
+ fn svg_x_defs(&self, pri : &PieceRenderInstructions) -> String {
+ format!(r#"<g id={}>{}</g>"#, pri.id_x("base"), self.shape)
}
}