]> pintos-os.org Git - pspp/commitdiff
bug fixes
authorBen Pfaff <blp@cs.stanford.edu>
Wed, 24 Jun 2026 15:04:08 +0000 (08:04 -0700)
committerBen Pfaff <blp@cs.stanford.edu>
Wed, 24 Jun 2026 15:06:07 +0000 (08:06 -0700)
rust/pspp/src/spv/read/graph.rs
rust/pspp/src/spv/testdata/graph5.xml

index a384616edea86aaf6048919ddfd515ee3b6178bf..19ad65407927bc85133b1242a86785ed0f17e765 100644 (file)
@@ -778,7 +778,7 @@ impl Visualization {
             .set("c:description", "X axis facets above graph")
             .set(
                 "transform",
-                format!("translate({} {})", rect.0[Axis2::X].0, rect.0[Axis2::Y].0),
+                format!("translate({} {})", inner.0[Axis2::X].0, rect.0[Axis2::Y].0),
             );
         let bottom = x_headings
             .render(Side::Bottom)
@@ -5094,15 +5094,17 @@ impl<'a> FacetHeadings<'a> {
     fn render(&self, side: Side) -> Group {
         let span = Span(0.0, self.width).subdivide(self.n_facets, 5.0);
         let mut group = Group::new();
+
         /*
         group.append(
-                    Rect(enum_map! {
-                        Axis2::X => Span(0.0, self.width),
-                        Axis2::Y => Span(0.0, self.height(side))
-                    })
-                    .as_svg()
-                    .set("fill", "blue"),
-                );*/
+            Rect(enum_map! {
+                Axis2::X => Span(0.0, self.width),
+                Axis2::Y => Span(0.0, self.height(side))
+            })
+            .as_svg()
+            .set("fill", "none")
+            .set("stroke", "red"),
+        );*/
         let mut y = 0.0;
         for axis in self.axes.iter().filter(|axis| axis.side == side) {
             if dbg!(axis.axis.combine_axis_labels) {
@@ -5126,16 +5128,48 @@ impl<'a> FacetHeadings<'a> {
             };
             y += axis.height;
         }
-        for height in self.facets.iter().filter(|height| height.side == side) {
+        let heights = self
+            .facets
+            .iter()
+            .rev()
+            .filter(|height| height.side == side);
+        let parents = std::iter::once(None).chain(heights.clone().map(Some));
+        for (height, parent) in zip(heights, parents) {
             if let Some(axis_label) = height.row.axis_label() {
-                dbg!(&axis_label);
-                group.append(
-                    svg::node::element::Text::new(axis_label)
-                        .set("x", self.width / 2.0)
-                        .set("y", y)
-                        .set("dominant-baseline", "hanging")
-                        .set("text-anchor", "middle"),
-                );
+                let parent = if let Some(facet_level) = height.row.facet_level
+                    && !facet_level.axis.combine_axis_labels
+                {
+                    parent
+                } else {
+                    None
+                };
+
+                match parent {
+                    Some(parent) => {
+                        // XXX the corresponding code for measurement in
+                        // FacetHeading::new doesn't use the right width for
+                        // this case.
+                        for column in &parent.row.columns {
+                            let span = span.range(&column.columns);
+                            group.append(
+                                svg::node::element::Text::new(&axis_label)
+                                    .set("x", span.midpoint())
+                                    .set("y", y)
+                                    .set("dominant-baseline", "hanging")
+                                    .set("text-anchor", "middle"),
+                            );
+                        }
+                    }
+                    None => {
+                        group.append(
+                            svg::node::element::Text::new(axis_label)
+                                .set("x", self.width / 2.0)
+                                .set("y", y)
+                                .set("dominant-baseline", "hanging")
+                                .set("text-anchor", "middle"),
+                        );
+                    }
+                }
             }
             y += height.axis_label_height;
 
index 4f06ca6e33dafb770fd5b0ba0b37ca44fc374d7a..ef25f454d01647198806d0c4a295530aa0c29ba1 100644 (file)
       </dimension>
     </coordinates>
     <faceting id="faceting_1332" method="cross">
-      <cross id="cross_1333">
+      <nest id="cross_1333">
         <variableReference ref="variable11" />
         <variableReference ref="variable12" />
-      </cross>
+      </nest>
     </faceting>
     <facetLayout id="facetLayout_1336" topDown="true">
       <facetLevel gap="2%" id="facetLabel_panel_1" level="1">
-        <axis id="axis_panel_1" opposite="true" repeat="never" style="axis_panel_1s">
+             <axis id="axis_panel_1" combineAxisLabels="false" opposite="true" repeat="never" style="axis_panel_1s">
           <label id="label_panel_1" style="style_1343" textFrameStyle="style_1341">
             <text id="text_1340">Variable 11</text>
           </label>