diff options
23 files changed, 923 insertions, 531 deletions
diff --git a/chart2/qa/extras/xshape/data/reference/tdf90839-1.xml b/chart2/qa/extras/xshape/data/reference/tdf90839-1.xml index 2af62c344940..3586969602c1 100644 --- a/chart2/qa/extras/xshape/data/reference/tdf90839-1.xml +++ b/chart2/qa/extras/xshape/data/reference/tdf90839-1.xml @@ -175,15 +175,15 @@ <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> - <XShape positionX="8394" positionY="4386" sizeX="9180" sizeY="8065" type="com.sun.star.drawing.GroupShape"> + <XShape positionX="8395" positionY="4386" sizeX="9178" sizeY="8066" type="com.sun.star.drawing.GroupShape"> <XShapes> - <XShape positionX="8394" positionY="4386" sizeX="9180" sizeY="8065" type="com.sun.star.drawing.GroupShape"> + <XShape positionX="8395" positionY="4386" sizeX="9178" sizeY="8066" type="com.sun.star.drawing.GroupShape"> <XShapes> - <XShape positionX="8394" positionY="4386" sizeX="9180" sizeY="8065" type="com.sun.star.drawing.GroupShape" name="CID/D=0:CS=0:CT=0:Series=0:DataLabels="> + <XShape positionX="8395" positionY="4386" sizeX="9178" sizeY="8066" type="com.sun.star.drawing.GroupShape" name="CID/D=0:CS=0:CT=0:Series=0:DataLabels="> <XShapes> - <XShape positionX="16434" positionY="9300" sizeX="1140" sizeY="849" type="com.sun.star.drawing.GroupShape" name="CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=0"> + <XShape positionX="16433" positionY="9300" sizeX="1140" sizeY="850" type="com.sun.star.drawing.GroupShape" name="CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=0"> <XShapes> - <XShape positionX="16434" positionY="9300" sizeX="1140" sizeY="849" type="com.sun.star.drawing.TextShape" text="Yellow 33%" fontHeight="12.000000" fontColor="595959" textAutoGrowHeight="true" textAutoGrowWidth="true" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="CENTER" textVerticalAdjust="CENTER" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="3889" textMinimumFrameHeight="1" textMinimumFrameWidth="1" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="ffffff" fillTransparence="0" fillTransparenceGradientName=""> + <XShape positionX="16433" positionY="9300" sizeX="1140" sizeY="850" type="com.sun.star.drawing.TextShape" text="Yellow 33%" fontHeight="12.000000" fontColor="595959" textAutoGrowHeight="true" textAutoGrowWidth="true" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="CENTER" textVerticalAdjust="CENTER" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="3889" textMinimumFrameHeight="1" textMinimumFrameWidth="1" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="ffffff" fillTransparence="0" fillTransparenceGradientName=""> <FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillGradient style="LINEAR" startColor="000000" endColor="ffffff" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/> @@ -192,21 +192,21 @@ <LineStart/> <LineEnd/> <Transformation> - <Line1 column1="1141.000000" column2="0.000000" column3="16434.000000"/> - <Line2 column1="0.000000" column2="850.000000" column3="9300.000000"/> + <Line1 column1="1141.000000" column2="0.000000" column3="16433.000000"/> + <Line2 column1="0.000000" column2="851.000000" column3="9300.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> </XShapes> <Transformation> - <Line1 column1="1141.000000" column2="0.000000" column3="16434.000000"/> - <Line2 column1="0.000000" column2="850.000000" column3="9300.000000"/> + <Line1 column1="1141.000000" column2="0.000000" column3="16433.000000"/> + <Line2 column1="0.000000" column2="851.000000" column3="9300.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> - <XShape positionX="10197" positionY="11602" sizeX="928" sizeY="849" type="com.sun.star.drawing.GroupShape" name="CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=1"> + <XShape positionX="10198" positionY="11602" sizeX="928" sizeY="850" type="com.sun.star.drawing.GroupShape" name="CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=1"> <XShapes> - <XShape positionX="10197" positionY="11602" sizeX="928" sizeY="849" type="com.sun.star.drawing.TextShape" text="Black 28%" fontHeight="12.000000" fontColor="595959" textAutoGrowHeight="true" textAutoGrowWidth="true" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="CENTER" textVerticalAdjust="CENTER" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="3889" textMinimumFrameHeight="1" textMinimumFrameWidth="1" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="ffffff" fillTransparence="0" fillTransparenceGradientName=""> + <XShape positionX="10198" positionY="11602" sizeX="928" sizeY="850" type="com.sun.star.drawing.TextShape" text="Black 28%" fontHeight="12.000000" fontColor="595959" textAutoGrowHeight="true" textAutoGrowWidth="true" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="CENTER" textVerticalAdjust="CENTER" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="3889" textMinimumFrameHeight="1" textMinimumFrameWidth="1" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="ffffff" fillTransparence="0" fillTransparenceGradientName=""> <FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillGradient style="LINEAR" startColor="000000" endColor="ffffff" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/> @@ -215,21 +215,21 @@ <LineStart/> <LineEnd/> <Transformation> - <Line1 column1="929.000000" column2="0.000000" column3="10197.000000"/> - <Line2 column1="0.000000" column2="850.000000" column3="11602.000000"/> + <Line1 column1="929.000000" column2="0.000000" column3="10198.000000"/> + <Line2 column1="0.000000" column2="851.000000" column3="11602.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> </XShapes> <Transformation> - <Line1 column1="929.000000" column2="0.000000" column3="10197.000000"/> - <Line2 column1="0.000000" column2="850.000000" column3="11602.000000"/> + <Line1 column1="929.000000" column2="0.000000" column3="10198.000000"/> + <Line2 column1="0.000000" column2="851.000000" column3="11602.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> - <XShape positionX="8394" positionY="7893" sizeX="1060" sizeY="849" type="com.sun.star.drawing.GroupShape" name="CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=2"> + <XShape positionX="8395" positionY="7893" sizeX="1060" sizeY="850" type="com.sun.star.drawing.GroupShape" name="CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=2"> <XShapes> - <XShape positionX="8394" positionY="7893" sizeX="1060" sizeY="849" type="com.sun.star.drawing.TextShape" text="Green 6%" fontHeight="12.000000" fontColor="595959" textAutoGrowHeight="true" textAutoGrowWidth="true" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="CENTER" textVerticalAdjust="CENTER" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="3889" textMinimumFrameHeight="1" textMinimumFrameWidth="1" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="ffffff" fillTransparence="0" fillTransparenceGradientName=""> + <XShape positionX="8395" positionY="7893" sizeX="1060" sizeY="850" type="com.sun.star.drawing.TextShape" text="Green 6%" fontHeight="12.000000" fontColor="595959" textAutoGrowHeight="true" textAutoGrowWidth="true" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="CENTER" textVerticalAdjust="CENTER" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="3889" textMinimumFrameHeight="1" textMinimumFrameWidth="1" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="ffffff" fillTransparence="0" fillTransparenceGradientName=""> <FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillGradient style="LINEAR" startColor="000000" endColor="ffffff" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/> @@ -238,21 +238,21 @@ <LineStart/> <LineEnd/> <Transformation> - <Line1 column1="1061.000000" column2="0.000000" column3="8394.000000"/> - <Line2 column1="0.000000" column2="850.000000" column3="7893.000000"/> + <Line1 column1="1061.000000" column2="0.000000" column3="8395.000000"/> + <Line2 column1="0.000000" column2="851.000000" column3="7893.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> </XShapes> <Transformation> - <Line1 column1="1061.000000" column2="0.000000" column3="8394.000000"/> - <Line2 column1="0.000000" column2="850.000000" column3="7893.000000"/> + <Line1 column1="1061.000000" column2="0.000000" column3="8395.000000"/> + <Line2 column1="0.000000" column2="851.000000" column3="7893.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> - <XShape positionX="10043" positionY="5033" sizeX="716" sizeY="849" type="com.sun.star.drawing.GroupShape" name="CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=3"> + <XShape positionX="10043" positionY="5033" sizeX="716" sizeY="850" type="com.sun.star.drawing.GroupShape" name="CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=3"> <XShapes> - <XShape positionX="10043" positionY="5033" sizeX="716" sizeY="849" type="com.sun.star.drawing.TextShape" text="Red 19%" fontHeight="12.000000" fontColor="595959" textAutoGrowHeight="true" textAutoGrowWidth="true" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="CENTER" textVerticalAdjust="CENTER" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="3889" textMinimumFrameHeight="1" textMinimumFrameWidth="1" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="ffffff" fillTransparence="0" fillTransparenceGradientName=""> + <XShape positionX="10043" positionY="5033" sizeX="716" sizeY="850" type="com.sun.star.drawing.TextShape" text="Red 19%" fontHeight="12.000000" fontColor="595959" textAutoGrowHeight="true" textAutoGrowWidth="true" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="CENTER" textVerticalAdjust="CENTER" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="3889" textMinimumFrameHeight="1" textMinimumFrameWidth="1" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="ffffff" fillTransparence="0" fillTransparenceGradientName=""> <FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillGradient style="LINEAR" startColor="000000" endColor="ffffff" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/> @@ -262,20 +262,20 @@ <LineEnd/> <Transformation> <Line1 column1="717.000000" column2="0.000000" column3="10043.000000"/> - <Line2 column1="0.000000" column2="850.000000" column3="5033.000000"/> + <Line2 column1="0.000000" column2="851.000000" column3="5033.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> </XShapes> <Transformation> <Line1 column1="717.000000" column2="0.000000" column3="10043.000000"/> - <Line2 column1="0.000000" column2="850.000000" column3="5033.000000"/> + <Line2 column1="0.000000" column2="851.000000" column3="5033.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> - <XShape positionX="14035" positionY="4386" sizeX="1034" sizeY="849" type="com.sun.star.drawing.GroupShape" name="CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=4"> + <XShape positionX="14034" positionY="4386" sizeX="1034" sizeY="850" type="com.sun.star.drawing.GroupShape" name="CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=4"> <XShapes> - <XShape positionX="14035" positionY="4386" sizeX="1034" sizeY="849" type="com.sun.star.drawing.TextShape" text="White 14%" fontHeight="12.000000" fontColor="595959" textAutoGrowHeight="true" textAutoGrowWidth="true" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="CENTER" textVerticalAdjust="CENTER" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="3889" textMinimumFrameHeight="1" textMinimumFrameWidth="1" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="ffffff" fillTransparence="0" fillTransparenceGradientName=""> + <XShape positionX="14034" positionY="4386" sizeX="1034" sizeY="850" type="com.sun.star.drawing.TextShape" text="White 14%" fontHeight="12.000000" fontColor="595959" textAutoGrowHeight="true" textAutoGrowWidth="true" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="CENTER" textVerticalAdjust="CENTER" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="3889" textMinimumFrameHeight="1" textMinimumFrameWidth="1" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="ffffff" fillTransparence="0" fillTransparenceGradientName=""> <FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillGradient style="LINEAR" startColor="000000" endColor="ffffff" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/> @@ -284,36 +284,36 @@ <LineStart/> <LineEnd/> <Transformation> - <Line1 column1="1035.000000" column2="0.000000" column3="14035.000000"/> - <Line2 column1="0.000000" column2="850.000000" column3="4386.000000"/> + <Line1 column1="1035.000000" column2="0.000000" column3="14034.000000"/> + <Line2 column1="0.000000" column2="851.000000" column3="4386.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> </XShapes> <Transformation> - <Line1 column1="1035.000000" column2="0.000000" column3="14035.000000"/> - <Line2 column1="0.000000" column2="850.000000" column3="4386.000000"/> + <Line1 column1="1035.000000" column2="0.000000" column3="14034.000000"/> + <Line2 column1="0.000000" column2="851.000000" column3="4386.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> </XShapes> <Transformation> - <Line1 column1="9181.000000" column2="0.000000" column3="8394.000000"/> - <Line2 column1="0.000000" column2="8066.000000" column3="4386.000000"/> + <Line1 column1="9179.000000" column2="0.000000" column3="8395.000000"/> + <Line2 column1="0.000000" column2="8067.000000" column3="4386.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> </XShapes> <Transformation> - <Line1 column1="9181.000000" column2="0.000000" column3="8394.000000"/> - <Line2 column1="0.000000" column2="8066.000000" column3="4386.000000"/> + <Line1 column1="9179.000000" column2="0.000000" column3="8395.000000"/> + <Line2 column1="0.000000" column2="8067.000000" column3="4386.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> </XShapes> <Transformation> - <Line1 column1="9181.000000" column2="0.000000" column3="8394.000000"/> - <Line2 column1="0.000000" column2="8066.000000" column3="4386.000000"/> + <Line1 column1="9179.000000" column2="0.000000" column3="8395.000000"/> + <Line2 column1="0.000000" column2="8067.000000" column3="4386.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> diff --git a/chart2/qa/extras/xshape/data/reference/tdf90839-2.xml b/chart2/qa/extras/xshape/data/reference/tdf90839-2.xml index d7e5c4a364f9..a2719aaf69f5 100644 --- a/chart2/qa/extras/xshape/data/reference/tdf90839-2.xml +++ b/chart2/qa/extras/xshape/data/reference/tdf90839-2.xml @@ -14,7 +14,7 @@ <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> - <XShape positionX="1910" positionY="3124" sizeX="22111" sizeY="10509" type="com.sun.star.drawing.GroupShape" name="CID/D=0"> + <XShape positionX="1910" positionY="3123" sizeX="22111" sizeY="10511" type="com.sun.star.drawing.GroupShape" name="CID/D=0"> <XShapes> <XShape positionX="8207" positionY="3821" sizeX="9721" sizeY="9721" type="com.sun.star.drawing.RectangleShape" name="MarkHandles" fontHeight="12.000000" fontColor="ffffffff" textAutoGrowHeight="true" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="CENTER" textVerticalAdjust="CENTER" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName=""> <FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> @@ -30,7 +30,7 @@ <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> - <XShape positionX="1910" positionY="3124" sizeX="22111" sizeY="10509" type="com.sun.star.drawing.RectangleShape" name="PlotAreaIncludingAxes" fontHeight="12.000000" fontColor="ffffffff" textAutoGrowHeight="true" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="CENTER" textVerticalAdjust="CENTER" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName=""> + <XShape positionX="1910" positionY="3123" sizeX="22111" sizeY="10511" type="com.sun.star.drawing.RectangleShape" name="PlotAreaIncludingAxes" fontHeight="12.000000" fontColor="ffffffff" textAutoGrowHeight="true" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="CENTER" textVerticalAdjust="CENTER" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName=""> <FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillGradient style="LINEAR" startColor="000000" endColor="ffffff" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/> @@ -40,11 +40,11 @@ <LineEnd/> <Transformation> <Line1 column1="22112.000000" column2="0.000000" column3="1910.000000"/> - <Line2 column1="0.000000" column2="10510.000000" column3="3124.000000"/> + <Line2 column1="0.000000" column2="10512.000000" column3="3123.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> - <XShape positionX="1910" positionY="3124" sizeX="22111" sizeY="10509" type="com.sun.star.drawing.GroupShape"> + <XShape positionX="1910" positionY="3123" sizeX="22111" sizeY="10511" type="com.sun.star.drawing.GroupShape"> <XShapes> <XShape positionX="8207" positionY="3819" sizeX="9721" sizeY="9723" type="com.sun.star.drawing.GroupShape"> <XShapes> @@ -175,15 +175,15 @@ <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> - <XShape positionX="1910" positionY="3124" sizeX="22111" sizeY="10509" type="com.sun.star.drawing.GroupShape"> + <XShape positionX="1910" positionY="3123" sizeX="22111" sizeY="10511" type="com.sun.star.drawing.GroupShape"> <XShapes> - <XShape positionX="1910" positionY="3124" sizeX="22111" sizeY="10509" type="com.sun.star.drawing.GroupShape"> + <XShape positionX="1910" positionY="3123" sizeX="22111" sizeY="10511" type="com.sun.star.drawing.GroupShape"> <XShapes> - <XShape positionX="1910" positionY="3124" sizeX="22111" sizeY="10509" type="com.sun.star.drawing.GroupShape" name="CID/D=0:CS=0:CT=0:Series=0:DataLabels="> + <XShape positionX="1910" positionY="3123" sizeX="22111" sizeY="10511" type="com.sun.star.drawing.GroupShape" name="CID/D=0:CS=0:CT=0:Series=0:DataLabels="> <XShapes> - <XShape positionX="17907" positionY="9977" sizeX="6114" sizeY="849" type="com.sun.star.drawing.GroupShape" name="CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=0"> + <XShape positionX="17907" positionY="9977" sizeX="6114" sizeY="850" type="com.sun.star.drawing.GroupShape" name="CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=0"> <XShapes> - <XShape positionX="17907" positionY="9977" sizeX="6114" sizeY="849" type="com.sun.star.drawing.TextShape" text="Yellow - The color of sun and honey 33%" fontHeight="12.000000" fontColor="595959" textAutoGrowHeight="true" textAutoGrowWidth="true" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="LEFT" textVerticalAdjust="TOP" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="1" textMinimumFrameWidth="1" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="ffffff" fillTransparence="0" fillTransparenceGradientName=""> + <XShape positionX="17907" positionY="9977" sizeX="6114" sizeY="850" type="com.sun.star.drawing.TextShape" text="Yellow - The color of sun and honey 33%" fontHeight="12.000000" fontColor="595959" textAutoGrowHeight="true" textAutoGrowWidth="true" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="LEFT" textVerticalAdjust="TOP" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="1" textMinimumFrameWidth="1" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="ffffff" fillTransparence="0" fillTransparenceGradientName=""> <FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillGradient style="LINEAR" startColor="000000" endColor="ffffff" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/> @@ -193,20 +193,20 @@ <LineEnd/> <Transformation> <Line1 column1="6115.000000" column2="0.000000" column3="17907.000000"/> - <Line2 column1="0.000000" column2="850.000000" column3="9977.000000"/> + <Line2 column1="0.000000" column2="851.000000" column3="9977.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> </XShapes> <Transformation> <Line1 column1="6115.000000" column2="0.000000" column3="17907.000000"/> - <Line2 column1="0.000000" column2="850.000000" column3="9977.000000"/> + <Line2 column1="0.000000" column2="851.000000" column3="9977.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> - <XShape positionX="3974" positionY="12784" sizeX="6220" sizeY="849" type="com.sun.star.drawing.GroupShape" name="CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=1"> + <XShape positionX="3974" positionY="12784" sizeX="6220" sizeY="850" type="com.sun.star.drawing.GroupShape" name="CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=1"> <XShapes> - <XShape positionX="3974" positionY="12784" sizeX="6220" sizeY="849" type="com.sun.star.drawing.TextShape" text="Black - The color of night and coffee 28%" fontHeight="12.000000" fontColor="595959" textAutoGrowHeight="true" textAutoGrowWidth="true" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="RIGHT" textVerticalAdjust="TOP" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="7129" textMinimumFrameHeight="1" textMinimumFrameWidth="1" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="ffffff" fillTransparence="0" fillTransparenceGradientName=""> + <XShape positionX="3974" positionY="12784" sizeX="6220" sizeY="850" type="com.sun.star.drawing.TextShape" text="Black - The color of night and coffee 28%" fontHeight="12.000000" fontColor="595959" textAutoGrowHeight="true" textAutoGrowWidth="true" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="RIGHT" textVerticalAdjust="TOP" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="7129" textMinimumFrameHeight="1" textMinimumFrameWidth="1" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="ffffff" fillTransparence="0" fillTransparenceGradientName=""> <FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillGradient style="LINEAR" startColor="000000" endColor="ffffff" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/> @@ -216,20 +216,20 @@ <LineEnd/> <Transformation> <Line1 column1="6221.000000" column2="0.000000" column3="3974.000000"/> - <Line2 column1="0.000000" column2="850.000000" column3="12784.000000"/> + <Line2 column1="0.000000" column2="851.000000" column3="12784.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> </XShapes> <Transformation> <Line1 column1="6221.000000" column2="0.000000" column3="3974.000000"/> - <Line2 column1="0.000000" column2="850.000000" column3="12784.000000"/> + <Line2 column1="0.000000" column2="851.000000" column3="12784.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> - <XShape positionX="1910" positionY="7819" sizeX="6167" sizeY="849" type="com.sun.star.drawing.GroupShape" name="CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=2"> + <XShape positionX="1910" positionY="7819" sizeX="6167" sizeY="850" type="com.sun.star.drawing.GroupShape" name="CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=2"> <XShapes> - <XShape positionX="1910" positionY="7819" sizeX="6167" sizeY="849" type="com.sun.star.drawing.TextShape" text="Green - The color of grass and hope 6%" fontHeight="12.000000" fontColor="595959" textAutoGrowHeight="true" textAutoGrowWidth="true" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="RIGHT" textVerticalAdjust="CENTER" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="7129" textMinimumFrameHeight="1" textMinimumFrameWidth="1" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="ffffff" fillTransparence="0" fillTransparenceGradientName=""> + <XShape positionX="1910" positionY="7819" sizeX="6167" sizeY="850" type="com.sun.star.drawing.TextShape" text="Green - The color of grass and hope 6%" fontHeight="12.000000" fontColor="595959" textAutoGrowHeight="true" textAutoGrowWidth="true" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="RIGHT" textVerticalAdjust="CENTER" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="7129" textMinimumFrameHeight="1" textMinimumFrameWidth="1" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="ffffff" fillTransparence="0" fillTransparenceGradientName=""> <FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillGradient style="LINEAR" startColor="000000" endColor="ffffff" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/> @@ -239,20 +239,20 @@ <LineEnd/> <Transformation> <Line1 column1="6168.000000" column2="0.000000" column3="1910.000000"/> - <Line2 column1="0.000000" column2="850.000000" column3="7819.000000"/> + <Line2 column1="0.000000" column2="851.000000" column3="7819.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> </XShapes> <Transformation> <Line1 column1="6168.000000" column2="0.000000" column3="1910.000000"/> - <Line2 column1="0.000000" column2="850.000000" column3="7819.000000"/> + <Line2 column1="0.000000" column2="851.000000" column3="7819.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> - <XShape positionX="3813" positionY="3994" sizeX="6035" sizeY="849" type="com.sun.star.drawing.GroupShape" name="CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=3"> + <XShape positionX="3813" positionY="3993" sizeX="6035" sizeY="850" type="com.sun.star.drawing.GroupShape" name="CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=3"> <XShapes> - <XShape positionX="3813" positionY="3994" sizeX="6035" sizeY="849" type="com.sun.star.drawing.TextShape" text="Red - The color of rose and passion 19%" fontHeight="12.000000" fontColor="595959" textAutoGrowHeight="true" textAutoGrowWidth="true" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="RIGHT" textVerticalAdjust="BOTTOM" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="7129" textMinimumFrameHeight="1" textMinimumFrameWidth="1" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="ffffff" fillTransparence="0" fillTransparenceGradientName=""> + <XShape positionX="3813" positionY="3993" sizeX="6035" sizeY="850" type="com.sun.star.drawing.TextShape" text="Red - The color of rose and passion 19%" fontHeight="12.000000" fontColor="595959" textAutoGrowHeight="true" textAutoGrowWidth="true" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="RIGHT" textVerticalAdjust="BOTTOM" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="7129" textMinimumFrameHeight="1" textMinimumFrameWidth="1" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="ffffff" fillTransparence="0" fillTransparenceGradientName=""> <FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillGradient style="LINEAR" startColor="000000" endColor="ffffff" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/> @@ -262,20 +262,20 @@ <LineEnd/> <Transformation> <Line1 column1="6036.000000" column2="0.000000" column3="3813.000000"/> - <Line2 column1="0.000000" column2="850.000000" column3="3994.000000"/> + <Line2 column1="0.000000" column2="851.000000" column3="3993.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> </XShapes> <Transformation> <Line1 column1="6036.000000" column2="0.000000" column3="3813.000000"/> - <Line2 column1="0.000000" column2="850.000000" column3="3994.000000"/> + <Line2 column1="0.000000" column2="851.000000" column3="3993.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> - <XShape positionX="14780" positionY="3124" sizeX="6140" sizeY="849" type="com.sun.star.drawing.GroupShape" name="CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=4"> + <XShape positionX="14780" positionY="3123" sizeX="6140" sizeY="850" type="com.sun.star.drawing.GroupShape" name="CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=4"> <XShapes> - <XShape positionX="14780" positionY="3124" sizeX="6140" sizeY="849" type="com.sun.star.drawing.TextShape" text="White - The color of milk and purity 14%" fontHeight="12.000000" fontColor="595959" textAutoGrowHeight="true" textAutoGrowWidth="true" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="LEFT" textVerticalAdjust="BOTTOM" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="8832" textMinimumFrameHeight="1" textMinimumFrameWidth="1" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="ffffff" fillTransparence="0" fillTransparenceGradientName=""> + <XShape positionX="14780" positionY="3123" sizeX="6140" sizeY="850" type="com.sun.star.drawing.TextShape" text="White - The color of milk and purity 14%" fontHeight="12.000000" fontColor="595959" textAutoGrowHeight="true" textAutoGrowWidth="true" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="LEFT" textVerticalAdjust="BOTTOM" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="8832" textMinimumFrameHeight="1" textMinimumFrameWidth="1" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="ffffff" fillTransparence="0" fillTransparenceGradientName=""> <FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillGradient style="LINEAR" startColor="000000" endColor="ffffff" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/> @@ -285,50 +285,50 @@ <LineEnd/> <Transformation> <Line1 column1="6141.000000" column2="0.000000" column3="14780.000000"/> - <Line2 column1="0.000000" column2="850.000000" column3="3124.000000"/> + <Line2 column1="0.000000" column2="851.000000" column3="3123.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> </XShapes> <Transformation> <Line1 column1="6141.000000" column2="0.000000" column3="14780.000000"/> - <Line2 column1="0.000000" column2="850.000000" column3="3124.000000"/> + <Line2 column1="0.000000" column2="851.000000" column3="3123.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> </XShapes> <Transformation> <Line1 column1="22112.000000" column2="0.000000" column3="1910.000000"/> - <Line2 column1="0.000000" column2="10510.000000" column3="3124.000000"/> + <Line2 column1="0.000000" column2="10512.000000" column3="3123.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> </XShapes> <Transformation> <Line1 column1="22112.000000" column2="0.000000" column3="1910.000000"/> - <Line2 column1="0.000000" column2="10510.000000" column3="3124.000000"/> + <Line2 column1="0.000000" column2="10512.000000" column3="3123.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> </XShapes> <Transformation> <Line1 column1="22112.000000" column2="0.000000" column3="1910.000000"/> - <Line2 column1="0.000000" column2="10510.000000" column3="3124.000000"/> + <Line2 column1="0.000000" column2="10512.000000" column3="3123.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> </XShapes> <Transformation> <Line1 column1="22112.000000" column2="0.000000" column3="1910.000000"/> - <Line2 column1="0.000000" column2="10510.000000" column3="3124.000000"/> + <Line2 column1="0.000000" column2="10512.000000" column3="3123.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> </XShapes> <Transformation> <Line1 column1="22112.000000" column2="0.000000" column3="1910.000000"/> - <Line2 column1="0.000000" column2="10510.000000" column3="3124.000000"/> + <Line2 column1="0.000000" column2="10512.000000" column3="3123.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> -</XShapes>
\ No newline at end of file +</XShapes> diff --git a/chart2/qa/extras/xshape/data/reference/tdf90839-3.xml b/chart2/qa/extras/xshape/data/reference/tdf90839-3.xml index 77a1ac06f80a..3c4cc8a5b51d 100644 --- a/chart2/qa/extras/xshape/data/reference/tdf90839-3.xml +++ b/chart2/qa/extras/xshape/data/reference/tdf90839-3.xml @@ -14,7 +14,7 @@ <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> - <XShape positionX="1910" positionY="3124" sizeX="22111" sizeY="10509" type="com.sun.star.drawing.GroupShape" name="CID/D=0"> + <XShape positionX="1910" positionY="3123" sizeX="22111" sizeY="10511" type="com.sun.star.drawing.GroupShape" name="CID/D=0"> <XShapes> <XShape positionX="8207" positionY="3821" sizeX="9721" sizeY="9721" type="com.sun.star.drawing.RectangleShape" name="MarkHandles" fontHeight="12.000000" fontColor="ffffffff" textAutoGrowHeight="true" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="CENTER" textVerticalAdjust="CENTER" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName=""> <FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> @@ -30,7 +30,7 @@ <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> - <XShape positionX="1910" positionY="3124" sizeX="22111" sizeY="10509" type="com.sun.star.drawing.RectangleShape" name="PlotAreaIncludingAxes" fontHeight="12.000000" fontColor="ffffffff" textAutoGrowHeight="true" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="CENTER" textVerticalAdjust="CENTER" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName=""> + <XShape positionX="1910" positionY="3123" sizeX="22111" sizeY="10511" type="com.sun.star.drawing.RectangleShape" name="PlotAreaIncludingAxes" fontHeight="12.000000" fontColor="ffffffff" textAutoGrowHeight="true" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="CENTER" textVerticalAdjust="CENTER" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName=""> <FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillGradient style="LINEAR" startColor="000000" endColor="ffffff" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/> @@ -40,11 +40,11 @@ <LineEnd/> <Transformation> <Line1 column1="22112.000000" column2="0.000000" column3="1910.000000"/> - <Line2 column1="0.000000" column2="10510.000000" column3="3124.000000"/> + <Line2 column1="0.000000" column2="10512.000000" column3="3123.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> - <XShape positionX="1910" positionY="3124" sizeX="22111" sizeY="10509" type="com.sun.star.drawing.GroupShape"> + <XShape positionX="1910" positionY="3123" sizeX="22111" sizeY="10511" type="com.sun.star.drawing.GroupShape"> <XShapes> <XShape positionX="8207" positionY="3819" sizeX="9721" sizeY="9723" type="com.sun.star.drawing.GroupShape"> <XShapes> @@ -175,15 +175,15 @@ <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> - <XShape positionX="1910" positionY="3124" sizeX="22111" sizeY="10509" type="com.sun.star.drawing.GroupShape"> + <XShape positionX="1910" positionY="3123" sizeX="22111" sizeY="10511" type="com.sun.star.drawing.GroupShape"> <XShapes> - <XShape positionX="1910" positionY="3124" sizeX="22111" sizeY="10509" type="com.sun.star.drawing.GroupShape"> + <XShape positionX="1910" positionY="3123" sizeX="22111" sizeY="10511" type="com.sun.star.drawing.GroupShape"> <XShapes> - <XShape positionX="1910" positionY="3124" sizeX="22111" sizeY="10509" type="com.sun.star.drawing.GroupShape" name="CID/D=0:CS=0:CT=0:Series=0:DataLabels="> + <XShape positionX="1910" positionY="3123" sizeX="22111" sizeY="10511" type="com.sun.star.drawing.GroupShape" name="CID/D=0:CS=0:CT=0:Series=0:DataLabels="> <XShapes> - <XShape positionX="17907" positionY="9977" sizeX="6114" sizeY="849" type="com.sun.star.drawing.GroupShape" name="CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=0"> + <XShape positionX="17907" positionY="9977" sizeX="6114" sizeY="850" type="com.sun.star.drawing.GroupShape" name="CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=0"> <XShapes> - <XShape positionX="17907" positionY="9977" sizeX="6114" sizeY="849" type="com.sun.star.drawing.TextShape" text="Yellow - The color of sun and honey 33%" fontHeight="12.000000" fontColor="595959" textAutoGrowHeight="true" textAutoGrowWidth="true" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="LEFT" textVerticalAdjust="TOP" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="7129" textMinimumFrameHeight="1" textMinimumFrameWidth="1" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="ffffff" fillTransparence="0" fillTransparenceGradientName=""> + <XShape positionX="17907" positionY="9977" sizeX="6114" sizeY="850" type="com.sun.star.drawing.TextShape" text="Yellow - The color of sun and honey 33%" fontHeight="12.000000" fontColor="595959" textAutoGrowHeight="true" textAutoGrowWidth="true" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="LEFT" textVerticalAdjust="TOP" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="7129" textMinimumFrameHeight="1" textMinimumFrameWidth="1" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="ffffff" fillTransparence="0" fillTransparenceGradientName=""> <FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillGradient style="LINEAR" startColor="000000" endColor="ffffff" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/> @@ -193,20 +193,20 @@ <LineEnd/> <Transformation> <Line1 column1="6115.000000" column2="0.000000" column3="17907.000000"/> - <Line2 column1="0.000000" column2="850.000000" column3="9977.000000"/> + <Line2 column1="0.000000" column2="851.000000" column3="9977.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> </XShapes> <Transformation> <Line1 column1="6115.000000" column2="0.000000" column3="17907.000000"/> - <Line2 column1="0.000000" column2="850.000000" column3="9977.000000"/> + <Line2 column1="0.000000" column2="851.000000" column3="9977.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> - <XShape positionX="3974" positionY="12784" sizeX="6220" sizeY="849" type="com.sun.star.drawing.GroupShape" name="CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=1"> + <XShape positionX="3974" positionY="12784" sizeX="6220" sizeY="850" type="com.sun.star.drawing.GroupShape" name="CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=1"> <XShapes> - <XShape positionX="3974" positionY="12784" sizeX="6220" sizeY="849" type="com.sun.star.drawing.TextShape" text="Black - The color of night and coffee 28%" fontHeight="12.000000" fontColor="595959" textAutoGrowHeight="true" textAutoGrowWidth="true" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="RIGHT" textVerticalAdjust="TOP" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="1" textMinimumFrameWidth="1" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="ffffff" fillTransparence="0" fillTransparenceGradientName=""> + <XShape positionX="3974" positionY="12784" sizeX="6220" sizeY="850" type="com.sun.star.drawing.TextShape" text="Black - The color of night and coffee 28%" fontHeight="12.000000" fontColor="595959" textAutoGrowHeight="true" textAutoGrowWidth="true" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="RIGHT" textVerticalAdjust="TOP" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="1" textMinimumFrameWidth="1" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="ffffff" fillTransparence="0" fillTransparenceGradientName=""> <FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillGradient style="LINEAR" startColor="000000" endColor="ffffff" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/> @@ -216,20 +216,20 @@ <LineEnd/> <Transformation> <Line1 column1="6221.000000" column2="0.000000" column3="3974.000000"/> - <Line2 column1="0.000000" column2="850.000000" column3="12784.000000"/> + <Line2 column1="0.000000" column2="851.000000" column3="12784.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> </XShapes> <Transformation> <Line1 column1="6221.000000" column2="0.000000" column3="3974.000000"/> - <Line2 column1="0.000000" column2="850.000000" column3="12784.000000"/> + <Line2 column1="0.000000" column2="851.000000" column3="12784.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> - <XShape positionX="1910" positionY="7819" sizeX="6167" sizeY="849" type="com.sun.star.drawing.GroupShape" name="CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=2"> + <XShape positionX="1910" positionY="7819" sizeX="6167" sizeY="850" type="com.sun.star.drawing.GroupShape" name="CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=2"> <XShapes> - <XShape positionX="1910" positionY="7819" sizeX="6167" sizeY="849" type="com.sun.star.drawing.TextShape" text="Green - The color of grass and hope 6%" fontHeight="12.000000" fontColor="595959" textAutoGrowHeight="true" textAutoGrowWidth="true" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="RIGHT" textVerticalAdjust="CENTER" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="1" textMinimumFrameWidth="1" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="ffffff" fillTransparence="0" fillTransparenceGradientName=""> + <XShape positionX="1910" positionY="7819" sizeX="6167" sizeY="850" type="com.sun.star.drawing.TextShape" text="Green - The color of grass and hope 6%" fontHeight="12.000000" fontColor="595959" textAutoGrowHeight="true" textAutoGrowWidth="true" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="RIGHT" textVerticalAdjust="CENTER" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="1" textMinimumFrameWidth="1" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="ffffff" fillTransparence="0" fillTransparenceGradientName=""> <FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillGradient style="LINEAR" startColor="000000" endColor="ffffff" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/> @@ -239,20 +239,20 @@ <LineEnd/> <Transformation> <Line1 column1="6168.000000" column2="0.000000" column3="1910.000000"/> - <Line2 column1="0.000000" column2="850.000000" column3="7819.000000"/> + <Line2 column1="0.000000" column2="851.000000" column3="7819.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> </XShapes> <Transformation> <Line1 column1="6168.000000" column2="0.000000" column3="1910.000000"/> - <Line2 column1="0.000000" column2="850.000000" column3="7819.000000"/> + <Line2 column1="0.000000" column2="851.000000" column3="7819.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> - <XShape positionX="3813" positionY="3994" sizeX="6035" sizeY="849" type="com.sun.star.drawing.GroupShape" name="CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=3"> + <XShape positionX="3813" positionY="3993" sizeX="6035" sizeY="850" type="com.sun.star.drawing.GroupShape" name="CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=3"> <XShapes> - <XShape positionX="3813" positionY="3994" sizeX="6035" sizeY="849" type="com.sun.star.drawing.TextShape" text="Red - The color of rose and passion 19%" fontHeight="12.000000" fontColor="595959" textAutoGrowHeight="true" textAutoGrowWidth="true" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="RIGHT" textVerticalAdjust="BOTTOM" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="1" textMinimumFrameWidth="1" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="ffffff" fillTransparence="0" fillTransparenceGradientName=""> + <XShape positionX="3813" positionY="3993" sizeX="6035" sizeY="850" type="com.sun.star.drawing.TextShape" text="Red - The color of rose and passion 19%" fontHeight="12.000000" fontColor="595959" textAutoGrowHeight="true" textAutoGrowWidth="true" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="RIGHT" textVerticalAdjust="BOTTOM" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="1" textMinimumFrameWidth="1" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="ffffff" fillTransparence="0" fillTransparenceGradientName=""> <FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillGradient style="LINEAR" startColor="000000" endColor="ffffff" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/> @@ -262,20 +262,20 @@ <LineEnd/> <Transformation> <Line1 column1="6036.000000" column2="0.000000" column3="3813.000000"/> - <Line2 column1="0.000000" column2="850.000000" column3="3994.000000"/> + <Line2 column1="0.000000" column2="851.000000" column3="3993.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> </XShapes> <Transformation> <Line1 column1="6036.000000" column2="0.000000" column3="3813.000000"/> - <Line2 column1="0.000000" column2="850.000000" column3="3994.000000"/> + <Line2 column1="0.000000" column2="851.000000" column3="3993.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> - <XShape positionX="14780" positionY="3124" sizeX="6140" sizeY="849" type="com.sun.star.drawing.GroupShape" name="CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=4"> + <XShape positionX="14780" positionY="3123" sizeX="6140" sizeY="850" type="com.sun.star.drawing.GroupShape" name="CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=4"> <XShapes> - <XShape positionX="14780" positionY="3124" sizeX="6140" sizeY="849" type="com.sun.star.drawing.TextShape" text="White - The color of milk and purity 14%" fontHeight="12.000000" fontColor="595959" textAutoGrowHeight="true" textAutoGrowWidth="true" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="LEFT" textVerticalAdjust="BOTTOM" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="1" textMinimumFrameWidth="1" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="ffffff" fillTransparence="0" fillTransparenceGradientName=""> + <XShape positionX="14780" positionY="3123" sizeX="6140" sizeY="850" type="com.sun.star.drawing.TextShape" text="White - The color of milk and purity 14%" fontHeight="12.000000" fontColor="595959" textAutoGrowHeight="true" textAutoGrowWidth="true" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="LEFT" textVerticalAdjust="BOTTOM" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="1" textMinimumFrameWidth="1" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="ffffff" fillTransparence="0" fillTransparenceGradientName=""> <FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillGradient style="LINEAR" startColor="000000" endColor="ffffff" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/> @@ -285,50 +285,50 @@ <LineEnd/> <Transformation> <Line1 column1="6141.000000" column2="0.000000" column3="14780.000000"/> - <Line2 column1="0.000000" column2="850.000000" column3="3124.000000"/> + <Line2 column1="0.000000" column2="851.000000" column3="3123.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> </XShapes> <Transformation> <Line1 column1="6141.000000" column2="0.000000" column3="14780.000000"/> - <Line2 column1="0.000000" column2="850.000000" column3="3124.000000"/> + <Line2 column1="0.000000" column2="851.000000" column3="3123.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> </XShapes> <Transformation> <Line1 column1="22112.000000" column2="0.000000" column3="1910.000000"/> - <Line2 column1="0.000000" column2="10510.000000" column3="3124.000000"/> + <Line2 column1="0.000000" column2="10512.000000" column3="3123.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> </XShapes> <Transformation> <Line1 column1="22112.000000" column2="0.000000" column3="1910.000000"/> - <Line2 column1="0.000000" column2="10510.000000" column3="3124.000000"/> + <Line2 column1="0.000000" column2="10512.000000" column3="3123.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> </XShapes> <Transformation> <Line1 column1="22112.000000" column2="0.000000" column3="1910.000000"/> - <Line2 column1="0.000000" column2="10510.000000" column3="3124.000000"/> + <Line2 column1="0.000000" column2="10512.000000" column3="3123.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> </XShapes> <Transformation> <Line1 column1="22112.000000" column2="0.000000" column3="1910.000000"/> - <Line2 column1="0.000000" column2="10510.000000" column3="3124.000000"/> + <Line2 column1="0.000000" column2="10512.000000" column3="3123.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> </XShapes> <Transformation> <Line1 column1="22112.000000" column2="0.000000" column3="1910.000000"/> - <Line2 column1="0.000000" column2="10510.000000" column3="3124.000000"/> + <Line2 column1="0.000000" column2="10512.000000" column3="3123.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> -</XShapes>
\ No newline at end of file +</XShapes> diff --git a/chart2/qa/extras/xshape/data/reference/tdf90839-4.xml b/chart2/qa/extras/xshape/data/reference/tdf90839-4.xml index 6b182821f1c9..c8327f6e3e95 100644 --- a/chart2/qa/extras/xshape/data/reference/tdf90839-4.xml +++ b/chart2/qa/extras/xshape/data/reference/tdf90839-4.xml @@ -14,7 +14,7 @@ <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> - <XShape positionX="1737" positionY="2768" sizeX="21967" sizeY="11230" type="com.sun.star.drawing.GroupShape" name="CID/D=0"> + <XShape positionX="1737" positionY="2767" sizeX="21967" sizeY="11232" type="com.sun.star.drawing.GroupShape" name="CID/D=0"> <XShapes> <XShape positionX="8034" positionY="3894" sizeX="9575" sizeY="9575" type="com.sun.star.drawing.RectangleShape" name="MarkHandles" fontHeight="12.000000" fontColor="ffffffff" textAutoGrowHeight="true" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="CENTER" textVerticalAdjust="CENTER" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName=""> <FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> @@ -30,7 +30,7 @@ <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> - <XShape positionX="1737" positionY="2768" sizeX="21967" sizeY="11230" type="com.sun.star.drawing.RectangleShape" name="PlotAreaIncludingAxes" fontHeight="12.000000" fontColor="ffffffff" textAutoGrowHeight="true" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="CENTER" textVerticalAdjust="CENTER" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName=""> + <XShape positionX="1737" positionY="2767" sizeX="21967" sizeY="11232" type="com.sun.star.drawing.RectangleShape" name="PlotAreaIncludingAxes" fontHeight="12.000000" fontColor="ffffffff" textAutoGrowHeight="true" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="CENTER" textVerticalAdjust="CENTER" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="729fcf" fillTransparence="0" fillTransparenceGradientName=""> <FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillGradient style="LINEAR" startColor="000000" endColor="ffffff" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/> @@ -40,11 +40,11 @@ <LineEnd/> <Transformation> <Line1 column1="21968.000000" column2="0.000000" column3="1737.000000"/> - <Line2 column1="0.000000" column2="11231.000000" column3="2768.000000"/> + <Line2 column1="0.000000" column2="11233.000000" column3="2767.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> - <XShape positionX="1737" positionY="2768" sizeX="21967" sizeY="11230" type="com.sun.star.drawing.GroupShape"> + <XShape positionX="1737" positionY="2767" sizeX="21967" sizeY="11232" type="com.sun.star.drawing.GroupShape"> <XShapes> <XShape positionX="8034" positionY="3892" sizeX="9575" sizeY="9577" type="com.sun.star.drawing.GroupShape"> <XShapes> @@ -175,15 +175,15 @@ <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> - <XShape positionX="1737" positionY="2768" sizeX="21967" sizeY="11230" type="com.sun.star.drawing.GroupShape"> + <XShape positionX="1737" positionY="2767" sizeX="21967" sizeY="11232" type="com.sun.star.drawing.GroupShape"> <XShapes> - <XShape positionX="1737" positionY="2768" sizeX="21967" sizeY="11230" type="com.sun.star.drawing.GroupShape"> + <XShape positionX="1737" positionY="2767" sizeX="21967" sizeY="11232" type="com.sun.star.drawing.GroupShape"> <XShapes> - <XShape positionX="1737" positionY="2768" sizeX="21967" sizeY="11230" type="com.sun.star.drawing.GroupShape" name="CID/D=0:CS=0:CT=0:Series=0:DataLabels="> + <XShape positionX="1737" positionY="2767" sizeX="21967" sizeY="11232" type="com.sun.star.drawing.GroupShape" name="CID/D=0:CS=0:CT=0:Series=0:DataLabels="> <XShapes> - <XShape positionX="17590" positionY="9958" sizeX="6114" sizeY="1273" type="com.sun.star.drawing.GroupShape" name="CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=0"> + <XShape positionX="17590" positionY="9958" sizeX="6114" sizeY="1274" type="com.sun.star.drawing.GroupShape" name="CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=0"> <XShapes> - <XShape positionX="17590" positionY="9958" sizeX="6114" sizeY="1273" type="com.sun.star.drawing.TextShape" text="Yellow - The color of sun and honey 120 33%" fontHeight="12.000000" fontColor="595959" textAutoGrowHeight="true" textAutoGrowWidth="true" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="LEFT" textVerticalAdjust="TOP" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="6977" textMinimumFrameHeight="1" textMinimumFrameWidth="1" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="ffffff" fillTransparence="0" fillTransparenceGradientName=""> + <XShape positionX="17590" positionY="9958" sizeX="6114" sizeY="1274" type="com.sun.star.drawing.TextShape" text="Yellow - The color of sun and honey 120 33%" fontHeight="12.000000" fontColor="595959" textAutoGrowHeight="true" textAutoGrowWidth="true" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="LEFT" textVerticalAdjust="TOP" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="6977" textMinimumFrameHeight="1" textMinimumFrameWidth="1" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="ffffff" fillTransparence="0" fillTransparenceGradientName=""> <FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillGradient style="LINEAR" startColor="000000" endColor="ffffff" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/> @@ -193,20 +193,20 @@ <LineEnd/> <Transformation> <Line1 column1="6115.000000" column2="0.000000" column3="17590.000000"/> - <Line2 column1="0.000000" column2="1274.000000" column3="9958.000000"/> + <Line2 column1="0.000000" column2="1275.000000" column3="9958.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> </XShapes> <Transformation> <Line1 column1="6115.000000" column2="0.000000" column3="17590.000000"/> - <Line2 column1="0.000000" column2="1274.000000" column3="9958.000000"/> + <Line2 column1="0.000000" column2="1275.000000" column3="9958.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> - <XShape positionX="3770" positionY="12725" sizeX="6220" sizeY="1273" type="com.sun.star.drawing.GroupShape" name="CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=1"> + <XShape positionX="3770" positionY="12725" sizeX="6220" sizeY="1274" type="com.sun.star.drawing.GroupShape" name="CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=1"> <XShapes> - <XShape positionX="3770" positionY="12725" sizeX="6220" sizeY="1273" type="com.sun.star.drawing.TextShape" text="Black - The color of night and coffee 100 28%" fontHeight="12.000000" fontColor="595959" textAutoGrowHeight="true" textAutoGrowWidth="true" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="RIGHT" textVerticalAdjust="TOP" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="6977" textMinimumFrameHeight="1" textMinimumFrameWidth="1" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="ffffff" fillTransparence="0" fillTransparenceGradientName=""> + <XShape positionX="3770" positionY="12725" sizeX="6220" sizeY="1274" type="com.sun.star.drawing.TextShape" text="Black - The color of night and coffee 100 28%" fontHeight="12.000000" fontColor="595959" textAutoGrowHeight="true" textAutoGrowWidth="true" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="RIGHT" textVerticalAdjust="TOP" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="6977" textMinimumFrameHeight="1" textMinimumFrameWidth="1" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="ffffff" fillTransparence="0" fillTransparenceGradientName=""> <FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillGradient style="LINEAR" startColor="000000" endColor="ffffff" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/> @@ -216,20 +216,20 @@ <LineEnd/> <Transformation> <Line1 column1="6221.000000" column2="0.000000" column3="3770.000000"/> - <Line2 column1="0.000000" column2="1274.000000" column3="12725.000000"/> + <Line2 column1="0.000000" column2="1275.000000" column3="12725.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> </XShapes> <Transformation> <Line1 column1="6221.000000" column2="0.000000" column3="3770.000000"/> - <Line2 column1="0.000000" column2="1274.000000" column3="12725.000000"/> + <Line2 column1="0.000000" column2="1275.000000" column3="12725.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> - <XShape positionX="1737" positionY="7614" sizeX="6167" sizeY="1273" type="com.sun.star.drawing.GroupShape" name="CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=2"> + <XShape positionX="1737" positionY="7614" sizeX="6167" sizeY="1274" type="com.sun.star.drawing.GroupShape" name="CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=2"> <XShapes> - <XShape positionX="1737" positionY="7614" sizeX="6167" sizeY="1273" type="com.sun.star.drawing.TextShape" text="Green - The color of grass and hope 20 6%" fontHeight="12.000000" fontColor="595959" textAutoGrowHeight="true" textAutoGrowWidth="true" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="RIGHT" textVerticalAdjust="CENTER" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="6977" textMinimumFrameHeight="1" textMinimumFrameWidth="1" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="ffffff" fillTransparence="0" fillTransparenceGradientName=""> + <XShape positionX="1737" positionY="7614" sizeX="6167" sizeY="1274" type="com.sun.star.drawing.TextShape" text="Green - The color of grass and hope 20 6%" fontHeight="12.000000" fontColor="595959" textAutoGrowHeight="true" textAutoGrowWidth="true" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="RIGHT" textVerticalAdjust="CENTER" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="6977" textMinimumFrameHeight="1" textMinimumFrameWidth="1" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="ffffff" fillTransparence="0" fillTransparenceGradientName=""> <FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillGradient style="LINEAR" startColor="000000" endColor="ffffff" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/> @@ -239,20 +239,20 @@ <LineEnd/> <Transformation> <Line1 column1="6168.000000" column2="0.000000" column3="1737.000000"/> - <Line2 column1="0.000000" column2="1274.000000" column3="7614.000000"/> + <Line2 column1="0.000000" column2="1275.000000" column3="7614.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> </XShapes> <Transformation> <Line1 column1="6168.000000" column2="0.000000" column3="1737.000000"/> - <Line2 column1="0.000000" column2="1274.000000" column3="7614.000000"/> + <Line2 column1="0.000000" column2="1275.000000" column3="7614.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> - <XShape positionX="3614" positionY="3626" sizeX="6035" sizeY="1273" type="com.sun.star.drawing.GroupShape" name="CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=3"> + <XShape positionX="3614" positionY="3625" sizeX="6035" sizeY="1274" type="com.sun.star.drawing.GroupShape" name="CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=3"> <XShapes> - <XShape positionX="3614" positionY="3626" sizeX="6035" sizeY="1273" type="com.sun.star.drawing.TextShape" text="Red - The color of rose and passion 70 19%" fontHeight="12.000000" fontColor="595959" textAutoGrowHeight="true" textAutoGrowWidth="true" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="RIGHT" textVerticalAdjust="BOTTOM" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="6977" textMinimumFrameHeight="1" textMinimumFrameWidth="1" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="ffffff" fillTransparence="0" fillTransparenceGradientName=""> + <XShape positionX="3614" positionY="3625" sizeX="6035" sizeY="1274" type="com.sun.star.drawing.TextShape" text="Red - The color of rose and passion 70 19%" fontHeight="12.000000" fontColor="595959" textAutoGrowHeight="true" textAutoGrowWidth="true" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="RIGHT" textVerticalAdjust="BOTTOM" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="6977" textMinimumFrameHeight="1" textMinimumFrameWidth="1" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="ffffff" fillTransparence="0" fillTransparenceGradientName=""> <FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillGradient style="LINEAR" startColor="000000" endColor="ffffff" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/> @@ -262,20 +262,20 @@ <LineEnd/> <Transformation> <Line1 column1="6036.000000" column2="0.000000" column3="3614.000000"/> - <Line2 column1="0.000000" column2="1274.000000" column3="3626.000000"/> + <Line2 column1="0.000000" column2="1275.000000" column3="3625.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> </XShapes> <Transformation> <Line1 column1="6036.000000" column2="0.000000" column3="3614.000000"/> - <Line2 column1="0.000000" column2="1274.000000" column3="3626.000000"/> + <Line2 column1="0.000000" column2="1275.000000" column3="3625.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> - <XShape positionX="14509" positionY="2768" sizeX="6140" sizeY="1273" type="com.sun.star.drawing.GroupShape" name="CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=4"> + <XShape positionX="14509" positionY="2767" sizeX="6140" sizeY="1274" type="com.sun.star.drawing.GroupShape" name="CID/MultiClick/CID/D=0:CS=0:CT=0:Series=0:DataLabels=:DataLabel=4"> <XShapes> - <XShape positionX="14509" positionY="2768" sizeX="6140" sizeY="1273" type="com.sun.star.drawing.TextShape" text="White - The color of milk and purity 50 14%" fontHeight="12.000000" fontColor="595959" textAutoGrowHeight="true" textAutoGrowWidth="true" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="LEFT" textVerticalAdjust="BOTTOM" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="8664" textMinimumFrameHeight="1" textMinimumFrameWidth="1" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="ffffff" fillTransparence="0" fillTransparenceGradientName=""> + <XShape positionX="14509" positionY="2767" sizeX="6140" sizeY="1274" type="com.sun.star.drawing.TextShape" text="White - The color of milk and purity 50 14%" fontHeight="12.000000" fontColor="595959" textAutoGrowHeight="true" textAutoGrowWidth="true" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="LEFT" textVerticalAdjust="BOTTOM" textLeftDistance="0" textRightDistance="0" textUpperDistance="0" textLowerDistance="0" textMaximumFrameHeight="0" textMaximumFrameWidth="8664" textMinimumFrameHeight="1" textMinimumFrameWidth="1" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="ffffff" fillTransparence="0" fillTransparenceGradientName=""> <FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillGradient style="LINEAR" startColor="000000" endColor="ffffff" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/> @@ -285,49 +285,49 @@ <LineEnd/> <Transformation> <Line1 column1="6141.000000" column2="0.000000" column3="14509.000000"/> - <Line2 column1="0.000000" column2="1274.000000" column3="2768.000000"/> + <Line2 column1="0.000000" column2="1275.000000" column3="2767.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> </XShapes> <Transformation> <Line1 column1="6141.000000" column2="0.000000" column3="14509.000000"/> - <Line2 column1="0.000000" column2="1274.000000" column3="2768.000000"/> + <Line2 column1="0.000000" column2="1275.000000" column3="2767.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> </XShapes> <Transformation> <Line1 column1="21968.000000" column2="0.000000" column3="1737.000000"/> - <Line2 column1="0.000000" column2="11231.000000" column3="2768.000000"/> + <Line2 column1="0.000000" column2="11233.000000" column3="2767.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> </XShapes> <Transformation> <Line1 column1="21968.000000" column2="0.000000" column3="1737.000000"/> - <Line2 column1="0.000000" column2="11231.000000" column3="2768.000000"/> + <Line2 column1="0.000000" column2="11233.000000" column3="2767.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> </XShapes> <Transformation> <Line1 column1="21968.000000" column2="0.000000" column3="1737.000000"/> - <Line2 column1="0.000000" column2="11231.000000" column3="2768.000000"/> + <Line2 column1="0.000000" column2="11233.000000" column3="2767.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> </XShapes> <Transformation> <Line1 column1="21968.000000" column2="0.000000" column3="1737.000000"/> - <Line2 column1="0.000000" column2="11231.000000" column3="2768.000000"/> + <Line2 column1="0.000000" column2="11233.000000" column3="2767.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> </XShapes> <Transformation> <Line1 column1="21968.000000" column2="0.000000" column3="1737.000000"/> - <Line2 column1="0.000000" column2="11231.000000" column3="2768.000000"/> + <Line2 column1="0.000000" column2="11233.000000" column3="2767.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> diff --git a/editeng/source/editeng/editeng.cxx b/editeng/source/editeng/editeng.cxx index cb1244f2e30f..b90ad3127fee 100644 --- a/editeng/source/editeng/editeng.cxx +++ b/editeng/source/editeng/editeng.cxx @@ -564,6 +564,11 @@ void EditEngine::SetMaxAutoPaperSize( const Size& rSz ) pImpEditEngine->SetMaxAutoPaperSize( rSz ); } +void EditEngine::SetMinColumnWrapHeight(tools::Long nVal) +{ + pImpEditEngine->SetMinColumnWrapHeight(nVal); +} + OUString EditEngine::GetText( LineEnd eEnd ) const { return pImpEditEngine->GetEditDoc().GetText( eEnd ); @@ -2022,28 +2027,12 @@ bool EditEngine::IsTextPos( const Point& rPaperPos, sal_uInt16 nBorder ) if ( !pImpEditEngine->IsFormatted() ) pImpEditEngine->FormatDoc(); - bool bTextPos = false; // take unrotated positions for calculation here Point aDocPos = GetDocPos( rPaperPos ); if ( ( aDocPos.Y() > 0 ) && ( aDocPos.Y() < static_cast<tools::Long>(pImpEditEngine->GetTextHeight()) ) ) - { - EditPaM aPaM = pImpEditEngine->GetPaM( aDocPos, false ); - if ( aPaM.GetNode() ) - { - const ParaPortion& rParaPortion = pImpEditEngine->FindParaPortion( aPaM.GetNode() ); - - sal_Int32 nLine = rParaPortion.GetLineNumber( aPaM.GetIndex() ); - const EditLine& rLine = rParaPortion.GetLines()[nLine]; - Range aLineXPosStartEnd = pImpEditEngine->GetLineXPosStartEnd( &rParaPortion, &rLine ); - if ( ( aDocPos.X() >= aLineXPosStartEnd.Min() - nBorder ) && - ( aDocPos.X() <= aLineXPosStartEnd.Max() + nBorder ) ) - { - bTextPos = true; - } - } - } - return bTextPos; + return pImpEditEngine->IsTextPos(aDocPos, nBorder); + return false; } void EditEngine::SetEditTextObjectPool( SfxItemPool* pPool ) diff --git a/editeng/source/editeng/impedit.cxx b/editeng/source/editeng/impedit.cxx index 653072083f66..9fb5ce8d8897 100644 --- a/editeng/source/editeng/impedit.cxx +++ b/editeng/source/editeng/impedit.cxx @@ -521,107 +521,116 @@ void ImpEditView::DrawSelectionXOR( EditSelection aTmpSel, vcl::Region* pRegion, bool bStartHandleVisible = false; bool bEndHandleVisible = false; - for ( sal_Int32 nPara = nStartPara; nPara <= nEndPara; nPara++ ) - { - ParaPortion* pTmpPortion = pEditEngine->GetParaPortions().SafeGetObject( nPara ); - if (!pTmpPortion) + auto DrawHighlight = [&, nStartLine = sal_Int32(0), nEndLine = sal_Int32(0)]( + const ImpEditEngine::LineAreaInfo& rInfo) mutable { + if (!rInfo.pLine) // Begin of ParaPortion { - SAL_WARN( "editeng", "Portion in Selection not found!" ); - continue; - } - - DBG_ASSERT( !pTmpPortion->IsInvalid(), "Portion in Selection not formatted!" ); - - if ( !pTmpPortion->IsVisible() || pTmpPortion->IsInvalid() ) - continue; - - tools::Long nParaStart = pEditEngine->GetParaPortions().GetYOffset( pTmpPortion ); - if ( ( nParaStart + pTmpPortion->GetHeight() ) < GetVisDocTop() ) - continue; - if ( nParaStart > GetVisDocBottom() ) - break; - - sal_uInt16 nStartLine = 0; - sal_uInt16 nEndLine = pTmpPortion->GetLines().Count() -1; - if ( nPara == nStartPara ) - nStartLine = pTmpPortion->GetLines().FindLine( aTmpSel.Min().GetIndex(), false ); - if ( nPara == nEndPara ) - nEndLine = pTmpPortion->GetLines().FindLine( aTmpSel.Max().GetIndex(), true ); + if (rInfo.nPortion < nStartPara) + return ImpEditEngine::CallbackResult::SkipThisPortion; + if (rInfo.nPortion > nEndPara) + return ImpEditEngine::CallbackResult::Stop; + DBG_ASSERT(!rInfo.rPortion.IsInvalid(), "Portion in Selection not formatted!"); + if (rInfo.rPortion.IsInvalid()) + return ImpEditEngine::CallbackResult::SkipThisPortion; + + if (rInfo.nPortion == nStartPara) + nStartLine = rInfo.rPortion.GetLines().FindLine(aTmpSel.Min().GetIndex(), false); + else + nStartLine = 0; - for ( sal_uInt16 nLine = nStartLine; nLine <= nEndLine; nLine++ ) + if (rInfo.nPortion == nEndPara) + nEndLine = rInfo.rPortion.GetLines().FindLine(aTmpSel.Max().GetIndex(), true); + else + nEndLine = rInfo.rPortion.GetLines().Count() - 1; + } + else // This is a correct ParaPortion { - const EditLine& rLine = pTmpPortion->GetLines()[nLine]; + if (rInfo.nLine < nStartLine) + return ImpEditEngine::CallbackResult::Continue; + if (rInfo.nLine > nEndLine) + return ImpEditEngine::CallbackResult::SkipThisPortion; bool bPartOfLine = false; - sal_Int32 nStartIndex = rLine.GetStart(); - sal_Int32 nEndIndex = rLine.GetEnd(); - if ( ( nPara == nStartPara ) && ( nLine == nStartLine ) && ( nStartIndex != aTmpSel.Min().GetIndex() ) ) + sal_Int32 nStartIndex = rInfo.pLine->GetStart(); + sal_Int32 nEndIndex = rInfo.pLine->GetEnd(); + if ((rInfo.nPortion == nStartPara) && (rInfo.nLine == nStartLine) + && (nStartIndex != aTmpSel.Min().GetIndex())) { nStartIndex = aTmpSel.Min().GetIndex(); bPartOfLine = true; } - if ( ( nPara == nEndPara ) && ( nLine == nEndLine ) && ( nEndIndex != aTmpSel.Max().GetIndex() ) ) + if ((rInfo.nPortion == nEndPara) && (rInfo.nLine == nEndLine) + && (nEndIndex != aTmpSel.Max().GetIndex())) { nEndIndex = aTmpSel.Max().GetIndex(); bPartOfLine = true; } // Can happen if at the beginning of a wrapped line. - if ( nEndIndex < nStartIndex ) + if (nEndIndex < nStartIndex) nEndIndex = nStartIndex; - tools::Rectangle aTmpRect( pEditEngine->pImpEditEngine->GetEditCursor( pTmpPortion, nStartIndex ) ); - Point aTopLeft( aTmpRect.TopLeft() ); - Point aBottomRight( aTmpRect.BottomRight() ); - - aTopLeft.AdjustY(nParaStart ); - aBottomRight.AdjustY(nParaStart ); + tools::Rectangle aTmpRect(pEditEngine->pImpEditEngine->GetEditCursor( + &rInfo.rPortion, rInfo.pLine, nStartIndex, GetCursorFlags::NONE)); + aTmpRect.Move(0, pEditEngine->pImpEditEngine->getTopDirectionAware(rInfo.aArea)); // Only paint if in the visible range ... - if ( aTopLeft.Y() > GetVisDocBottom() ) - break; + if (aTmpRect.Top() > GetVisDocBottom()) + return ImpEditEngine::CallbackResult::Continue; - if ( aBottomRight.Y() < GetVisDocTop() ) - continue; + if (aTmpRect.Bottom() < GetVisDocTop()) + return ImpEditEngine::CallbackResult::Continue; - if ( ( nPara == nStartPara ) && ( nLine == nStartLine ) ) + if ((rInfo.nPortion == nStartPara) && (rInfo.nLine == nStartLine)) bStartHandleVisible = true; - if ( ( nPara == nEndPara ) && ( nLine == nEndLine ) ) + if ((rInfo.nPortion == nEndPara) && (rInfo.nLine == nEndLine)) bEndHandleVisible = true; // Now that we have Bidi, the first/last index doesn't have to be the 'most outside' position - if ( !bPartOfLine ) + if (!bPartOfLine) { - Range aLineXPosStartEnd = pEditEngine->GetLineXPosStartEnd(pTmpPortion, &rLine); - aTopLeft.setX( aLineXPosStartEnd.Min() ); - aBottomRight.setX( aLineXPosStartEnd.Max() ); - ImplDrawHighlightRect(rTarget, aTopLeft, aBottomRight, pPolyPoly.get()); + Range aLineXPosStartEnd + = pEditEngine->GetLineXPosStartEnd(&rInfo.rPortion, rInfo.pLine); + aTmpRect.SetLeft(aLineXPosStartEnd.Min()); + aTmpRect.SetRight(aLineXPosStartEnd.Max()); + aTmpRect.Move(pEditEngine->pImpEditEngine->getLeftDirectionAware(rInfo.aArea), 0); + ImplDrawHighlightRect(rTarget, aTmpRect.TopLeft(), aTmpRect.BottomRight(), + pPolyPoly.get()); } else { sal_Int32 nTmpStartIndex = nStartIndex; sal_Int32 nWritingDirStart, nTmpEndIndex; + const sal_Int32 nLeftOffset + = pEditEngine->pImpEditEngine->getLeftDirectionAware(rInfo.aArea); - while ( nTmpStartIndex < nEndIndex ) + while (nTmpStartIndex < nEndIndex) { - pEditEngine->pImpEditEngine->GetRightToLeft( nPara, nTmpStartIndex+1, &nWritingDirStart, &nTmpEndIndex ); - if ( nTmpEndIndex > nEndIndex ) + pEditEngine->pImpEditEngine->GetRightToLeft(rInfo.nPortion, nTmpStartIndex + 1, + &nWritingDirStart, &nTmpEndIndex); + if (nTmpEndIndex > nEndIndex) nTmpEndIndex = nEndIndex; - DBG_ASSERT( nTmpEndIndex > nTmpStartIndex, "DrawSelectionXOR, Start >= End?" ); + DBG_ASSERT(nTmpEndIndex > nTmpStartIndex, "DrawSelectionXOR, Start >= End?"); - tools::Long nX1 = pEditEngine->GetXPos(pTmpPortion, &rLine, nTmpStartIndex, true); - tools::Long nX2 = pEditEngine->GetXPos(pTmpPortion, &rLine, nTmpEndIndex); + tools::Long nX1 + = pEditEngine->GetXPos(&rInfo.rPortion, rInfo.pLine, nTmpStartIndex, true); + tools::Long nX2 + = pEditEngine->GetXPos(&rInfo.rPortion, rInfo.pLine, nTmpEndIndex); - Point aPt1( std::min( nX1, nX2 ), aTopLeft.Y() ); - Point aPt2( std::max( nX1, nX2 ), aBottomRight.Y() ); + aTmpRect.SetLeft(std::min(nX1, nX2)); + aTmpRect.SetRight(std::max(nX1, nX2)); + aTmpRect.Move(nLeftOffset, 0); - ImplDrawHighlightRect(rTarget, aPt1, aPt2, pPolyPoly.get()); + ImplDrawHighlightRect(rTarget, aTmpRect.TopLeft(), aTmpRect.BottomRight(), + pPolyPoly.get()); nTmpStartIndex = nTmpEndIndex; } } } - } + return ImpEditEngine::CallbackResult::Continue; + }; + pEditEngine->pImpEditEngine->IterateLineAreas(DrawHighlight, ImpEditEngine::IterFlag::none); if (comphelper::LibreOfficeKit::isActive() && mpViewShell && pOutWin) lokSelectionCallback(pPolyPoly, bStartHandleVisible, bEndHandleVisible); @@ -1808,6 +1817,8 @@ const SvxFieldItem* ImpEditView::GetField( const Point& rPos, sal_Int32* pPara, Point aDocPos( GetDocPos( rPos ) ); EditPaM aPaM = pEditEngine->GetPaM(aDocPos, false); + if (!aPaM) + return nullptr; if ( aPaM.GetIndex() == aPaM.GetNode()->Len() ) { @@ -1846,6 +1857,8 @@ bool ImpEditView::IsBulletArea( const Point& rPos, sal_Int32* pPara ) Point aDocPos( GetDocPos( rPos ) ); EditPaM aPaM = pEditEngine->GetPaM(aDocPos, false); + if (!aPaM) + return false; if ( aPaM.GetIndex() == 0 ) { diff --git a/editeng/source/editeng/impedit.hxx b/editeng/source/editeng/impedit.hxx index 394165930379..4a39269507ff 100644 --- a/editeng/source/editeng/impedit.hxx +++ b/editeng/source/editeng/impedit.hxx @@ -54,8 +54,10 @@ #include <o3tl/deleter.hxx> #include <o3tl/typed_flags_set.hxx> +#include <functional> #include <optional> #include <memory> +#include <tuple> #include <vector> class EditView; @@ -489,6 +491,7 @@ private: Size aPaperSize; // Layout Size aMinAutoPaperSize; // Layout ? Size aMaxAutoPaperSize; // Layout ? + tools::Long mnMinColumnWrapHeight = 0; // Corresponds to graphic object height EditDoc aEditDoc; // Document content // Engine Specific data ... @@ -548,8 +551,8 @@ private: // For Formatting / Update... std::vector<std::unique_ptr<DeletedNodeInfo> > aDeletedNodes; tools::Rectangle aInvalidRect; - sal_uInt32 nCurTextHeight; - sal_uInt32 nCurTextHeightNTP; // without trailing empty paragraphs + tools::Long nCurTextHeight; + tools::Long nCurTextHeightNTP; // without trailing empty paragraphs sal_uInt16 nOnePixelInRef; IdleFormattter aIdleFormatter; @@ -616,8 +619,9 @@ private: std::unique_ptr<EditTextObject> GetEmptyTextObject(); + std::tuple<const ParaPortion*, const EditLine*, tools::Long> GetPortionAndLine(Point aDocPos); EditPaM GetPaM( Point aDocPos, bool bSmart = true ); - EditPaM GetPaM( ParaPortion* pPortion, Point aPos, bool bSmart ); + bool IsTextPos(const Point& rDocPos, sal_uInt16 nBorder); tools::Long GetXPos(const ParaPortion* pParaPortion, const EditLine* pLine, sal_Int32 nIndex, bool bPreferPortionStart = false) const; tools::Long GetPortionXOffset(const ParaPortion* pParaPortion, const EditLine* pLine, sal_Int32 nTextPortion) const; sal_Int32 GetChar(const ParaPortion* pParaPortion, const EditLine* pLine, tools::Long nX, bool bSmart = true); @@ -764,22 +768,11 @@ private: void SetValidPaperSize( const Size& rSz ); - tools::Long getXDirectionAware(const Point& pt) const; - tools::Long getYDirectionAware(const Point& pt) const; - tools::Long getWidthDirectionAware(const Size& sz) const; - tools::Long getHeightDirectionAware(const Size& sz) const; - void adjustXDirectionAware(Point& pt, tools::Long x) const; - void adjustYDirectionAware(Point& pt, tools::Long y) const; - void setXDirectionAware(Point& pt, tools::Long x) const; - void setYDirectionAware(Point& pt, tools::Long y) const; - bool isYOverflowDirectionAware(const Point& pt, const tools::Rectangle& rectMax) const; - bool isXOverflowDirectionAware(const Point& pt, const tools::Rectangle& rectMax) const; - css::uno::Reference < css::i18n::XBreakIterator > const & ImplGetBreakIterator() const; css::uno::Reference < css::i18n::XExtendedInputSequenceChecker > const & ImplGetInputSequenceChecker() const; - void ImplUpdateOverflowingParaNum( sal_uInt32 ); - void ImplUpdateOverflowingLineNum( sal_uInt32, sal_uInt32, sal_uInt32 ); + void ImplUpdateOverflowingParaNum(tools::Long); + void ImplUpdateOverflowingLineNum(tools::Long, sal_uInt32, tools::Long); void CreateSpellInfo( bool bMultipleDocs ); /// Obtains a view shell ID from the active EditView. @@ -793,6 +786,8 @@ private: const ParaPortionList& GetParaPortions() const { return aParaPortionList; } ParaPortionList& GetParaPortions() { return aParaPortionList; } + tools::Long Calc1ColumnTextHeight(tools::Long* pHeightNTP); + protected: virtual void Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) override; @@ -845,6 +840,8 @@ public: const Size& GetMaxAutoPaperSize() const { return aMaxAutoPaperSize; } void SetMaxAutoPaperSize( const Size& rSz ) { aMaxAutoPaperSize = rSz; } + void SetMinColumnWrapHeight(tools::Long nVal) { mnMinColumnWrapHeight = nVal; } + void FormatDoc(); void FormatFullDoc(); void UpdateViews( EditView* pCurView = nullptr ); @@ -899,7 +896,7 @@ public: EditSelection MoveParagraphs( Range aParagraphs, sal_Int32 nNewPos, EditView* pCurView ); - sal_uInt32 CalcTextHeight( sal_uInt32* pHeightNTP ); + tools::Long CalcTextHeight( tools::Long* pHeightNTP ); sal_uInt32 GetTextHeight() const; sal_uInt32 GetTextHeightNTP() const; sal_uInt32 CalcTextWidth( bool bIgnoreExtraSpace); @@ -931,7 +928,8 @@ public: } tools::Rectangle PaMtoEditCursor( EditPaM aPaM, GetCursorFlags nFlags = GetCursorFlags::NONE ); - tools::Rectangle GetEditCursor( ParaPortion* pPortion, sal_Int32 nIndex, GetCursorFlags nFlags = GetCursorFlags::NONE ); + tools::Rectangle GetEditCursor(const ParaPortion* pPortion, const EditLine* pLine, + sal_Int32 nIndex, GetCursorFlags nFlags); bool IsModified() const { return aEditDoc.IsModified(); } void SetModifyFlag( bool b ) { aEditDoc.SetModified( b ); } @@ -1131,6 +1129,50 @@ public: void Dispose(); void SetLOKSpecialPaperSize(const Size& rSize) { aLOKSpecialPaperSize = rSize; } const Size& GetLOKSpecialPaperSize() const { return aLOKSpecialPaperSize; } + + enum class CallbackResult + { + Continue, + SkipThisPortion, // Do not call callback until next portion + Stop, // Stop iteration + }; + struct LineAreaInfo + { + sal_Int32 nColumn; // Column number; when overflowing, equal to total number of columns + ParaPortion& rPortion; // Current ParaPortion + sal_Int32 nPortion; + EditLine* pLine; // Current line, or nullptr for paragraph start + sal_Int32 nLine; + tools::Rectangle aArea; // The area for the line (or for rPortion's first line offset) + tools::Long nHeightNeededToNotWrap; + }; + using IterateLinesAreasFunc = std::function<CallbackResult(const LineAreaInfo&)>; + enum IterFlag // bitmask + { + none = 0, + inclILS = 1, // rArea includes interline space + }; + + void IterateLineAreas(const IterateLinesAreasFunc& f, IterFlag eOptions); + + tools::Long GetColumnWidth(const Size& rPaperSize) const; + Point MoveToNextLine(Point& rMovePos, tools::Long nLineHeight, sal_Int32& nColumn, + Point aOrigin, tools::Long* pnHeightNeededToNotWrap = nullptr) const; + + tools::Long getXDirectionAware(const Point& pt) const; + tools::Long getYDirectionAware(const Point& pt) const; + tools::Long getWidthDirectionAware(const Size& sz) const; + tools::Long getHeightDirectionAware(const Size& sz) const; + void adjustXDirectionAware(Point& pt, tools::Long x) const; + void adjustYDirectionAware(Point& pt, tools::Long y) const; + void setXDirectionAware(Point& pt, tools::Long x) const; + void setYDirectionAware(Point& pt, tools::Long y) const; + tools::Long getYOverflowDirectionAware(const Point& pt, const tools::Rectangle& rectMax) const; + bool isXOverflowDirectionAware(const Point& pt, const tools::Rectangle& rectMax) const; + tools::Long getLeftDirectionAware(const tools::Rectangle& rect) const; + tools::Long getRightDirectionAware(const tools::Rectangle& rect) const; + tools::Long getTopDirectionAware(const tools::Rectangle& rect) const; + tools::Long getBottomDirectionAware(const tools::Rectangle& rect) const; }; inline EPaM ImpEditEngine::CreateEPaM( const EditPaM& rPaM ) diff --git a/editeng/source/editeng/impedit2.cxx b/editeng/source/editeng/impedit2.cxx index dae90e5e435a..ec3ef06aa4bc 100644 --- a/editeng/source/editeng/impedit2.cxx +++ b/editeng/source/editeng/impedit2.cxx @@ -59,12 +59,14 @@ #include <svl/asiancfg.hxx> #include <i18nutil/unicode.hxx> #include <tools/diagnose_ex.h> +#include <comphelper/flagguard.hxx> #include <comphelper/lok.hxx> #include <comphelper/processfactory.hxx> #include <unotools/configmgr.hxx> #include <unicode/ubidi.h> #include <algorithm> +#include <limits> #include <memory> #include <string_view> #include <fstream> @@ -538,22 +540,47 @@ bool ImpEditEngine::Command( const CommandEvent& rCEvt, EditView* pView ) if ( !IsFormatted() ) FormatDoc(); - ParaPortion* pParaPortion = GetParaPortions().SafeGetObject( GetEditDoc().GetPos( aPaM.GetNode() ) ); + sal_Int32 nPortionPos = GetEditDoc().GetPos(aPaM.GetNode()); + ParaPortion* pParaPortion = GetParaPortions().SafeGetObject(nPortionPos); if (pParaPortion) { - sal_Int32 nLine = pParaPortion->GetLines().FindLine( aPaM.GetIndex(), true ); - const EditLine& rLine = pParaPortion->GetLines()[nLine]; - std::unique_ptr<tools::Rectangle[]> aRects(new tools::Rectangle[ mpIMEInfos->nLen ]); - for (sal_Int32 i = 0; i < mpIMEInfos->nLen; ++i) - { - sal_Int32 nInputPos = mpIMEInfos->aPos.GetIndex() + i; - if ( nInputPos > rLine.GetEnd() ) - nInputPos = rLine.GetEnd(); - tools::Rectangle aR2 = GetEditCursor( pParaPortion, nInputPos ); - aRects[ i ] = pView->GetImpEditView()->GetWindowPos( aR2 ); - } + const sal_Int32 nMinPos = mpIMEInfos->aPos.GetIndex(); + const sal_Int32 nMaxPos = nMinPos + mpIMEInfos->nLen - 1; + std::vector<tools::Rectangle> aRects(mpIMEInfos->nLen); + + auto CollectCharPositions = [&](const LineAreaInfo& rInfo) { + if (!rInfo.pLine) // Start of ParaPortion + { + if (rInfo.nPortion < nPortionPos) + return CallbackResult::SkipThisPortion; + if (rInfo.nPortion > nPortionPos) + return CallbackResult::Stop; + assert(&rInfo.rPortion == pParaPortion); + } + else // This is the needed ParaPortion + { + if (rInfo.pLine->GetStart() > nMaxPos) + return CallbackResult::Stop; + if (rInfo.pLine->GetEnd() < nMinPos) + return CallbackResult::Continue; + for (sal_Int32 n = nMinPos; n <= nMaxPos; ++n) + { + if (rInfo.pLine->IsIn(n)) + { + tools::Rectangle aR = GetEditCursor(pParaPortion, rInfo.pLine, n, + GetCursorFlags::NONE); + aR.Move(getLeftDirectionAware(rInfo.aArea), + getTopDirectionAware(rInfo.aArea)); + aRects[n - nMinPos] = pView->GetImpEditView()->GetWindowPos(aR); + } + } + } + return CallbackResult::Continue; + }; + IterateLineAreas(CollectCharPositions, IterFlag::none); + if (vcl::Window* pWindow = pView->GetWindow()) - pWindow->SetCompositionCharRect( aRects.get(), mpIMEInfos->nLen ); + pWindow->SetCompositionCharRect(aRects.data(), aRects.size()); } } } @@ -3001,71 +3028,242 @@ EditPaM ImpEditEngine::InsertLineBreak(const EditSelection& aCurSel) // Helper functions +tools::Rectangle ImpEditEngine::GetEditCursor(const ParaPortion* pPortion, const EditLine* pLine, + sal_Int32 nIndex, GetCursorFlags nFlags) +{ + assert(pPortion && pLine); + // nIndex might be not in the line + // Search within the line... + tools::Long nX; + + if ((nIndex == pLine->GetStart()) && (nFlags & GetCursorFlags::StartOfLine)) + { + Range aXRange = GetLineXPosStartEnd(pPortion, pLine); + nX = !IsRightToLeft(GetEditDoc().GetPos(pPortion->GetNode())) ? aXRange.Min() + : aXRange.Max(); + } + else if ((nIndex == pLine->GetEnd()) && (nFlags & GetCursorFlags::EndOfLine)) + { + Range aXRange = GetLineXPosStartEnd(pPortion, pLine); + nX = !IsRightToLeft(GetEditDoc().GetPos(pPortion->GetNode())) ? aXRange.Max() + : aXRange.Min(); + } + else + { + nX = GetXPos(pPortion, pLine, nIndex, bool(nFlags & GetCursorFlags::PreferPortionStart)); + } + + tools::Rectangle aEditCursor; + aEditCursor.SetLeft(nX); + aEditCursor.SetRight(nX); + + aEditCursor.SetBottom(pLine->GetHeight() - 1); + if (nFlags & GetCursorFlags::TextOnly) + aEditCursor.SetTop(aEditCursor.Bottom() - pLine->GetTxtHeight() + 1); + else + aEditCursor.SetTop(aEditCursor.Bottom() + - std::min(pLine->GetTxtHeight(), pLine->GetHeight()) + 1); + return aEditCursor; +} + tools::Rectangle ImpEditEngine::PaMtoEditCursor( EditPaM aPaM, GetCursorFlags nFlags ) { OSL_ENSURE( GetUpdateMode(), "Must not be reached when Update=FALSE: PaMtoEditCursor" ); tools::Rectangle aEditCursor; - tools::Long nY = 0; - for ( sal_Int32 nPortion = 0; nPortion < GetParaPortions().Count(); nPortion++ ) - { - ParaPortion& rPortion = GetParaPortions()[nPortion]; - ContentNode* pNode = rPortion.GetNode(); - OSL_ENSURE( pNode, "Invalid Node in Portion!" ); - if ( pNode != aPaM.GetNode() ) + const sal_Int32 nIndex = aPaM.GetIndex(); + const ParaPortion* pPortion = nullptr; + const EditLine* pLastLine = nullptr; + tools::Rectangle aLineArea; + + auto FindPortionLineAndArea + = [&, bEOL(bool(nFlags & GetCursorFlags::EndOfLine))](const LineAreaInfo& rInfo) { + if (!rInfo.pLine) // start of ParaPortion { - nY += rPortion.GetHeight(); + ContentNode* pNode = rInfo.rPortion.GetNode(); + OSL_ENSURE(pNode, "Invalid Node in Portion!"); + if (pNode != aPaM.GetNode()) + return CallbackResult::SkipThisPortion; + pPortion = &rInfo.rPortion; } - else + else // guaranteed that this is the correct ParaPortion { - aEditCursor = GetEditCursor( &rPortion, aPaM.GetIndex(), nFlags ); - aEditCursor.AdjustTop(nY ); - aEditCursor.AdjustBottom(nY ); - return aEditCursor; + pLastLine = rInfo.pLine; + aLineArea = rInfo.aArea; + if ((rInfo.pLine->GetStart() == nIndex) || (rInfo.pLine->IsIn(nIndex, bEOL))) + return CallbackResult::Stop; } + return CallbackResult::Continue; + }; + IterateLineAreas(FindPortionLineAndArea, IterFlag::none); + + if (pLastLine) + { + aEditCursor = GetEditCursor(pPortion, pLastLine, nIndex, nFlags); + aEditCursor.Move(getLeftDirectionAware(aLineArea), getTopDirectionAware(aLineArea)); } - OSL_FAIL( "Portion not found!" ); + else + OSL_FAIL("Line not found!"); + return aEditCursor; } +void ImpEditEngine::IterateLineAreas(const IterateLinesAreasFunc& f, IterFlag eOptions) +{ + const Point aOrigin(0, 0); + Point aLineStart(aOrigin); + const tools::Long nVertLineSpacing = CalcVertLineSpacing(aLineStart); + const tools::Long nColumnWidth = GetColumnWidth(aPaperSize); + sal_Int32 nColumn = 0; + for (sal_Int32 n = 0, nPortions = GetParaPortions().Count(); n < nPortions; ++n) + { + ParaPortion& rPortion = GetParaPortions()[n]; + bool bSkipThis = true; + if (rPortion.IsVisible()) + { + // when typing idle formatting, asynchronous Paint. Invisible Portions may be invalid. + if (rPortion.IsInvalid()) + return; + + LineAreaInfo aInfo{ + nColumn, // nColumn + rPortion, // rPortion + n, // nPortion + nullptr, // pLine + 0, // nLine + { aLineStart, Size{ nColumnWidth, rPortion.GetFirstLineOffset() } }, // aArea + 0 // nHeightNeededToNotWrap + }; + auto eResult = f(aInfo); + if (eResult == CallbackResult::Stop) + return; + bSkipThis = eResult == CallbackResult::SkipThisPortion; + + sal_uInt16 nSBL = 0; + if (!aStatus.IsOutliner()) + { + const SvxLineSpacingItem& rLSItem + = rPortion.GetNode()->GetContentAttribs().GetItem(EE_PARA_SBL); + nSBL = (rLSItem.GetInterLineSpaceRule() == SvxInterLineSpaceRule::Fix) + ? GetYValue(rLSItem.GetInterLineSpace()) + : 0; + } + + adjustYDirectionAware(aLineStart, rPortion.GetFirstLineOffset()); + for (sal_Int32 nLine = 0, nLines = rPortion.GetLines().Count(); nLine < nLines; nLine++) + { + EditLine& rLine = rPortion.GetLines()[nLine]; + tools::Long nLineHeight = rLine.GetHeight(); + if (nLine != nLines - 1) + nLineHeight += nVertLineSpacing; + MoveToNextLine(aLineStart, nLineHeight, nColumn, aOrigin, + &aInfo.nHeightNeededToNotWrap); + const bool bInclILS = eOptions & IterFlag::inclILS; + if (bInclILS && (nLine != nLines - 1) && !aStatus.IsOutliner()) + { + adjustYDirectionAware(aLineStart, nSBL); + nLineHeight += nSBL; + } + + if (!bSkipThis) + { + Point aOtherCorner(aLineStart); + adjustXDirectionAware(aOtherCorner, nColumnWidth); + adjustYDirectionAware(aOtherCorner, -nLineHeight); + + // Calls to f() for each line + aInfo.nColumn = nColumn; + aInfo.pLine = &rLine; + aInfo.nLine = nLine; + aInfo.aArea = tools::Rectangle::Justify(aLineStart, aOtherCorner); + eResult = f(aInfo); + if (eResult == CallbackResult::Stop) + return; + bSkipThis = eResult == CallbackResult::SkipThisPortion; + } + + if (!bInclILS && (nLine != nLines - 1) && !aStatus.IsOutliner()) + adjustYDirectionAware(aLineStart, nSBL); + } + if (!aStatus.IsOutliner()) + { + const SvxULSpaceItem& rULItem + = rPortion.GetNode()->GetContentAttribs().GetItem(EE_PARA_ULSPACE); + tools::Long nUL = GetYValue(rULItem.GetLower()); + adjustYDirectionAware(aLineStart, nUL); + } + } + // Invisible ParaPortion has no height (see ParaPortion::GetHeight), don't handle it + } +} + +std::tuple<const ParaPortion*, const EditLine*, tools::Long> +ImpEditEngine::GetPortionAndLine(Point aDocPos) +{ + // First find the column from the point + sal_Int32 nClickColumn = 0; + for (tools::Long nColumnStart = 0, nColumnWidth = GetColumnWidth(aPaperSize);; + nColumnStart += mnColumnSpacing + nColumnWidth, ++nClickColumn) + { + if (aDocPos.X() <= nColumnStart + nColumnWidth + mnColumnSpacing / 2) + break; + if (nClickColumn >= mnColumns - 1) + break; + } + + const ParaPortion* pLastPortion = nullptr; + const EditLine* pLastLine = nullptr; + tools::Long nLineStartX = 0; + + auto FindLastMatchingPortionAndLine = [&](const LineAreaInfo& rInfo) { + if (rInfo.pLine) // Only handle lines, not ParaPortion starts + { + if (rInfo.nColumn > nClickColumn) + return CallbackResult::Stop; + pLastPortion = &rInfo.rPortion; // Candidate paragraph + pLastLine = rInfo.pLine; // Last visible line not later than click position + nLineStartX = getLeftDirectionAware(rInfo.aArea); + if (rInfo.nColumn == nClickColumn && getBottomDirectionAware(rInfo.aArea) > aDocPos.Y()) + return CallbackResult::Stop; // Found it + } + return CallbackResult::Continue; + }; + IterateLineAreas(FindLastMatchingPortionAndLine, IterFlag::inclILS); + + return { pLastPortion, pLastLine, nLineStartX }; +} + EditPaM ImpEditEngine::GetPaM( Point aDocPos, bool bSmart ) { OSL_ENSURE( GetUpdateMode(), "Must not be reached when Update=FALSE: GetPaM" ); - tools::Long nY = 0; - EditPaM aPaM; - sal_Int32 nPortion; - for ( nPortion = 0; nPortion < GetParaPortions().Count(); nPortion++ ) + if (const auto& [pPortion, pLine, nLineStartX] = GetPortionAndLine(aDocPos); pPortion) { - ParaPortion* pPortion = &GetParaPortions()[nPortion]; - const tools::Long nTmpHeight = pPortion->GetHeight(); // should also be correct for !bVisible! - nY += nTmpHeight; - if ( nY > aDocPos.Y() ) - { - nY -= nTmpHeight; - aDocPos.AdjustY( -nY ); - // Skip invisible Portions: - while ( pPortion && !pPortion->IsVisible() ) - { - nPortion++; - pPortion = GetParaPortions().SafeGetObject( nPortion ); - } - SAL_WARN_IF(!pPortion, "editeng", "worrying lack of any visible paragraph"); - if (!pPortion) - return aPaM; - return GetPaM(pPortion, aDocPos, bSmart); + sal_Int32 nCurIndex + = GetChar(pPortion, pLine, aDocPos.X() - nLineStartX, bSmart); + EditPaM aPaM(pPortion->GetNode(), nCurIndex); + if (nCurIndex && (nCurIndex == pLine->GetEnd()) + && (pLine != &pPortion->GetLines()[pPortion->GetLines().Count() - 1])) + { + aPaM = CursorLeft(aPaM); } + + return aPaM; } - // Then search for the last visible: - nPortion = GetParaPortions().Count()-1; - while ( nPortion && !GetParaPortions()[nPortion].IsVisible() ) - nPortion--; + return {}; +} - OSL_ENSURE( GetParaPortions()[nPortion].IsVisible(), "No visible paragraph found: GetPaM" ); - aPaM.SetNode( GetParaPortions()[nPortion].GetNode() ); - aPaM.SetIndex( GetParaPortions()[nPortion].GetNode()->Len() ); - return aPaM; +bool ImpEditEngine::IsTextPos(const Point& rDocPos, sal_uInt16 nBorder) +{ + if (const auto& [pPortion, pLine, nLineStartX] = GetPortionAndLine(rDocPos); pPortion) + { + Range aLineXPosStartEnd = GetLineXPosStartEnd(pPortion, pLine); + if ((rDocPos.X() >= nLineStartX + aLineXPosStartEnd.Min() - nBorder) + && (rDocPos.X() <= nLineStartX + aLineXPosStartEnd.Max() + nBorder)) + return true; + } + return false; } sal_uInt32 ImpEditEngine::GetTextHeight() const @@ -3209,28 +3407,114 @@ sal_uInt32 ImpEditEngine::GetTextHeightNTP() const return nCurTextHeightNTP; } -sal_uInt32 ImpEditEngine::CalcTextHeight( sal_uInt32* pHeightNTP ) +tools::Long ImpEditEngine::Calc1ColumnTextHeight(tools::Long* pHeightNTP) { - OSL_ENSURE( GetUpdateMode(), "Should not be used when Update=FALSE: CalcTextHeight" ); - sal_uInt32 nY = 0; - sal_uInt32 nPH; - sal_uInt32 nEmptyHeight = 0; - for ( sal_Int32 nPortion = 0; nPortion < GetParaPortions().Count(); nPortion++ ) { - ParaPortion& rPortion = GetParaPortions()[nPortion]; - nPH = rPortion.GetHeight(); - nY += nPH; - if( pHeightNTP ) { - if ( rPortion.IsEmpty() ) - nEmptyHeight += nPH; - else - nEmptyHeight = 0; + tools::Long nHeight = 0; + // Pretend that we have ~infinite height to get total height + comphelper::ValueRestorationGuard aGuard(nCurTextHeight, + std::numeric_limits<tools::Long>::max()); + + auto FindLastLineBottom = [&](const LineAreaInfo& rInfo) { + if (rInfo.pLine) + { + nHeight = getBottomDirectionAware(rInfo.aArea) + 1; + if (pHeightNTP && !rInfo.rPortion.IsEmpty()) + *pHeightNTP = nHeight; } - } + return CallbackResult::Continue; + }; + IterateLineAreas(FindLastLineBottom, IterFlag::none); + return nHeight; +} - if ( pHeightNTP ) - *pHeightNTP = nY - nEmptyHeight; +tools::Long ImpEditEngine::CalcTextHeight(tools::Long* pHeightNTP) +{ + OSL_ENSURE( GetUpdateMode(), "Should not be used when Update=FALSE: CalcTextHeight" ); - return nY; + if (mnColumns <= 1) + return Calc1ColumnTextHeight(pHeightNTP); // All text fits into a single column - done! + + // The final column height can be smaller than total height divided by number of columns (taking + // into account first line offset and interline spacing, that aren't considered in positioning + // after the wrap). The wrap should only happen after the minimal height is exceeded. + tools::Long nTentativeColHeight = mnMinColumnWrapHeight; + tools::Long nWantedIncrease = 0; + tools::Long nCurrentTextHeight; + + // This does the necessary column balancing for the case when the text does not fit min height. + // When the height of column (taken from nCurTextHeight) is too small, the last column will + // overflow, so the resulting height of the text will exceed the set column height. Increasing + // the column height step by step by the minimal value that allows one of columns to accomodate + // one line more, we finally get to the point where all the text fits. At each iteration, the + // height is only increased, so it's impossible to have infinite layout loops. The found value + // is the global minimum. + // + // E.g., given the following four line heights: + // Line 1: 10; + // Line 2: 12; + // Line 3: 10; + // Line 4: 10; + // number of columns 3, and the minimal paper height of 5, the iterations would be: + // * Tentative column height is set to 5 + // <ITERATION 1> + // * Line 1 is attempted to go to column 0. Overflow is 5 => moved to column 1. + // * Line 2 is attempted to go to column 1 after Line 1; overflow is 17 => moved to column 2. + // * Line 3 is attempted to go to column 2 after Line 2; overflow is 17, stays in max column 2. + // * Line 4 goes to column 2 after Line 3. + // * Final iteration columns are: {empty}, {Line 1}, {Line 2, Line 3, Line 4} + // * Total text height is max({0, 10, 32}) == 32 > Tentative column height 5 => NEXT ITERATION + // * Minimal height increase that allows at least one column to accomodate one more line is + // min({5, 17, 17}) = 5. + // * Tentative column height is set to 5 + 5 = 10. + // <ITERATION 2> + // * Line 1 goes to column 0, no overflow. + // * Line 2 is attempted to go to column 0 after Line 1; overflow is 12 => moved to column 1. + // * Line 3 is attempted to go to column 1 after Line 2; overflow is 12 => moved to column 2. + // * Line 4 is attempted to go to column 2 after Line 3; overflow is 10, stays in max column 2. + // * Final iteration columns are: {Line 1}, {Line 2}, {Line 3, Line 4} + // * Total text height is max({10, 12, 20}) == 20 > Tentative column height 10 => NEXT ITERATION + // * Minimal height increase that allows at least one column to accomodate one more line is + // min({12, 12, 10}) = 10. + // * Tentative column height is set to 10 + 10 == 20. + // <ITERATION 3> + // * Line 1 goes to column 0, no overflow. + // * Line 2 is attempted to go to column 0 after Line 1; overflow is 2 => moved to column 1. + // * Line 3 is attempted to go to column 1 after Line 2; overflow is 2 => moved to column 2. + // * Line 4 is attempted to go to column 2 after Line 3; no overflow. + // * Final iteration columns are: {Line 1}, {Line 2}, {Line 3, Line 4} + // * Total text height is max({10, 12, 20}) == 20 == Tentative column height 20 => END. + do + { + nTentativeColHeight += nWantedIncrease; + nWantedIncrease = std::numeric_limits<tools::Long>::max(); + nCurrentTextHeight = 0; + auto GetHeightAndWantedIncrease = [&, minHeight = tools::Long(0), lastCol = sal_Int32(0)]( + const LineAreaInfo& rInfo) mutable { + if (rInfo.pLine) + { + if (lastCol != rInfo.nColumn) + { + minHeight = std::max(nCurrentTextHeight, + minHeight); // total height can't be less than previous columns + nWantedIncrease = std::min(rInfo.nHeightNeededToNotWrap, nWantedIncrease); + } + lastCol = rInfo.nColumn; + nCurrentTextHeight = std::max(getBottomDirectionAware(rInfo.aArea) + 1, minHeight); + if (pHeightNTP) + { + if (rInfo.rPortion.IsEmpty()) + + *pHeightNTP = std::max(*pHeightNTP, minHeight); + else + *pHeightNTP = nCurrentTextHeight; + } + } + return CallbackResult::Continue; + }; + comphelper::ValueRestorationGuard aGuard(nCurTextHeight, nTentativeColHeight); + IterateLineAreas(GetHeightAndWantedIncrease, IterFlag::none); + } while (nCurrentTextHeight > nTentativeColHeight && nWantedIncrease > 0); + return nCurrentTextHeight; } sal_Int32 ImpEditEngine::GetLineCount( sal_Int32 nParagraph ) const @@ -3654,62 +3938,6 @@ Range ImpEditEngine::GetInvalidYOffsets( ParaPortion* pPortion ) return aRange; } -EditPaM ImpEditEngine::GetPaM( ParaPortion* pPortion, Point aDocPos, bool bSmart ) -{ - OSL_ENSURE( pPortion->IsVisible(), "Why GetPaM() for an invisible paragraph?" ); - OSL_ENSURE( IsFormatted(), "GetPaM: Not formatted" ); - - sal_Int32 nCurIndex = 0; - EditPaM aPaM; - aPaM.SetNode( pPortion->GetNode() ); - - const SvxLineSpacingItem& rLSItem = pPortion->GetNode()->GetContentAttribs().GetItem( EE_PARA_SBL ); - sal_uInt16 nSBL = ( rLSItem.GetInterLineSpaceRule() == SvxInterLineSpaceRule::Fix ) - ? GetYValue( rLSItem.GetInterLineSpace() ) : 0; - - tools::Long nY = pPortion->GetFirstLineOffset(); - - OSL_ENSURE( pPortion->GetLines().Count(), "Empty ParaPortion in GetPaM!" ); - - const EditLine* pLine = nullptr; - for ( sal_Int32 nLine = 0; nLine < pPortion->GetLines().Count(); nLine++ ) - { - const EditLine& rTmpLine = pPortion->GetLines()[nLine]; - nY += rTmpLine.GetHeight(); - if ( !aStatus.IsOutliner() ) - nY += nSBL; - if ( nY > aDocPos.Y() ) - { - pLine = &rTmpLine; - break; // correct Y-position is not of interest - } - - nCurIndex = nCurIndex + rTmpLine.GetLen(); - } - - if ( !pLine ) // may happen only in the range of SA! - { -#if OSL_DEBUG_LEVEL > 0 - const SvxULSpaceItem& rULSpace = pPortion->GetNode()->GetContentAttribs().GetItem( EE_PARA_ULSPACE ); - OSL_ENSURE( nY+GetYValue( rULSpace.GetLower() ) >= aDocPos.Y() , "Index in no line, GetPaM ?" ); -#endif - aPaM.SetIndex( pPortion->GetNode()->Len() ); - return aPaM; - } - - // If no line found, only just X-Position => Index - nCurIndex = GetChar( pPortion, pLine, aDocPos.X(), bSmart ); - aPaM.SetIndex( nCurIndex ); - - if ( nCurIndex && ( nCurIndex == pLine->GetEnd() ) && - ( pLine != &pPortion->GetLines()[pPortion->GetLines().Count()-1] ) ) - { - aPaM = CursorLeft( aPaM ); - } - - return aPaM; -} - sal_Int32 ImpEditEngine::GetChar( const ParaPortion* pParaPortion, const EditLine* pLine, tools::Long nXPos, bool bSmart) { @@ -4173,91 +4401,6 @@ void ImpEditEngine::CalcHeight( ParaPortion* pPortion ) } } -tools::Rectangle ImpEditEngine::GetEditCursor( ParaPortion* pPortion, sal_Int32 nIndex, GetCursorFlags nFlags ) -{ - OSL_ENSURE( pPortion->IsVisible(), "Why GetEditCursor() for an invisible paragraph?" ); - OSL_ENSURE( IsFormatted() || GetTextRanger(), "GetEditCursor: Not formatted" ); - - /* - GetCursorFlags::EndOfLine: If after the last character of a wrapped line, remaining - at the end of the line, not the beginning of the next one. - Purpose: - END => really after the last character - - Selection... - */ - - tools::Long nY = pPortion->GetFirstLineOffset(); - - const SvxLineSpacingItem& rLSItem = pPortion->GetNode()->GetContentAttribs().GetItem( EE_PARA_SBL ); - sal_uInt16 nSBL = ( rLSItem.GetInterLineSpaceRule() == SvxInterLineSpaceRule::Fix ) - ? GetYValue( rLSItem.GetInterLineSpace() ) : 0; - - sal_Int32 nCurIndex = 0; - sal_Int32 nLineCount = pPortion->GetLines().Count(); - OSL_ENSURE( nLineCount, "Empty ParaPortion in GetEditCursor!" ); - if (nLineCount == 0) - return tools::Rectangle(); - const EditLine* pLine = nullptr; - bool bEOL( nFlags & GetCursorFlags::EndOfLine ); - for (sal_Int32 nLine = 0; nLine < nLineCount; ++nLine) - { - const EditLine& rTmpLine = pPortion->GetLines()[nLine]; - if ( ( rTmpLine.GetStart() == nIndex ) || ( rTmpLine.IsIn( nIndex, bEOL ) ) ) - { - pLine = &rTmpLine; - break; - } - - nCurIndex = nCurIndex + rTmpLine.GetLen(); - nY += rTmpLine.GetHeight(); - if ( !aStatus.IsOutliner() ) - nY += nSBL; - } - if ( !pLine ) - { - // Cursor at the End of the paragraph. - OSL_ENSURE( nIndex == nCurIndex, "Index dead wrong in GetEditCursor!" ); - - pLine = &pPortion->GetLines()[nLineCount-1]; - nY -= pLine->GetHeight(); - if ( !aStatus.IsOutliner() ) - nY -= nSBL; - } - - tools::Rectangle aEditCursor; - - aEditCursor.SetTop( nY ); - nY += pLine->GetHeight(); - aEditCursor.SetBottom( nY-1 ); - - // Search within the line... - tools::Long nX; - - if ( ( nIndex == pLine->GetStart() ) && ( nFlags & GetCursorFlags::StartOfLine ) ) - { - Range aXRange = GetLineXPosStartEnd( pPortion, pLine ); - nX = !IsRightToLeft( GetEditDoc().GetPos( pPortion->GetNode() ) ) ? aXRange.Min() : aXRange.Max(); - } - else if ( ( nIndex == pLine->GetEnd() ) && ( nFlags & GetCursorFlags::EndOfLine ) ) - { - Range aXRange = GetLineXPosStartEnd( pPortion, pLine ); - nX = !IsRightToLeft( GetEditDoc().GetPos( pPortion->GetNode() ) ) ? aXRange.Max() : aXRange.Min(); - } - else - { - nX = GetXPos( pPortion, pLine, nIndex, bool( nFlags & GetCursorFlags::PreferPortionStart ) ); - } - - aEditCursor.SetLeft(nX); - aEditCursor.SetRight(nX); - - if ( nFlags & GetCursorFlags::TextOnly ) - aEditCursor.SetTop( aEditCursor.Bottom() - pLine->GetTxtHeight() + 1 ); - else - aEditCursor.SetTop( aEditCursor.Bottom() - std::min( pLine->GetTxtHeight(), pLine->GetHeight() ) + 1 ); - - return aEditCursor; -} - void ImpEditEngine::SetValidPaperSize( const Size& rNewSz ) { aPaperSize = rNewSz; diff --git a/editeng/source/editeng/impedit3.cxx b/editeng/source/editeng/impedit3.cxx index 6a14cda16f92..c33db07b2a6b 100644 --- a/editeng/source/editeng/impedit3.cxx +++ b/editeng/source/editeng/impedit3.cxx @@ -70,6 +70,7 @@ #include <osl/diagnose.h> #include <comphelper/string.hxx> #include <memory> +#include <set> #include <vcl/outdev/ScopedStates.hxx> @@ -375,8 +376,8 @@ void ImpEditEngine::FormatDoc() // Here already, so that not always in CreateLines... bool bMapChanged = ImpCheckRefMapMode(); + std::set<sal_Int32> aRepaintParas; - aInvalidRect = tools::Rectangle(); // make empty for ( sal_Int32 nPara = 0; nPara < GetParaPortions().Count(); nPara++ ) { ParaPortion& rParaPortion = GetParaPortions()[nPara]; @@ -410,46 +411,21 @@ void ImpEditEngine::FormatDoc() rParaPortion.SetMustRepaint( false ); } - // InvalidRect set only once... - if ( aInvalidRect.IsEmpty() ) - { - // For Paperwidth 0 (AutoPageSize) it would otherwise be Empty()... - tools::Long nWidth = std::max(tools::Long(1), getWidthDirectionAware(aPaperSize)); - Range aInvRange( GetInvalidYOffsets( &rParaPortion ) ); - aInvalidRect = tools::Rectangle( Point( 0, nY+aInvRange.Min() ), - Size( nWidth, aInvRange.Len() ) ); - } - else - { - aInvalidRect.SetBottom( nY + rParaPortion.GetHeight() ); - } - } - else if ( bGrow ) - { - aInvalidRect.SetBottom( nY + rParaPortion.GetHeight() ); + aRepaintParas.insert(nPara); } nY += rParaPortion.GetHeight(); } + aInvalidRect = tools::Rectangle(); // make empty + // One can also get into the formatting through UpdateMode ON=>OFF=>ON... // enable optimization first after Vobis delivery... { - sal_uInt32 nNewHeightNTP; - sal_uInt32 nNewHeight = CalcTextHeight( &nNewHeightNTP ); + tools::Long nNewHeightNTP; + tools::Long nNewHeight = CalcTextHeight(&nNewHeightNTP); tools::Long nDiff = nNewHeight - nCurTextHeight; if ( nDiff ) aStatus.GetStatusWord() |= !IsVertical() ? EditStatusFlags::TextHeightChanged : EditStatusFlags::TEXTWIDTHCHANGED; - if ( nNewHeight < nCurTextHeight ) - { - aInvalidRect.SetBottom( static_cast<tools::Long>(std::max( nNewHeight, nCurTextHeight )) ); - if ( aInvalidRect.IsEmpty() ) - { - aInvalidRect.SetTop( 0 ); - // Left and Right are not evaluated, are however set due to IsEmpty. - aInvalidRect.SetLeft( 0 ); - aInvalidRect.SetRight(getWidthDirectionAware(aPaperSize)); - } - } nCurTextHeight = nNewHeight; nCurTextHeightNTP = nNewHeightNTP; @@ -473,6 +449,20 @@ void ImpEditEngine::FormatDoc() } } } + + if (nDiff) + aInvalidRect.Union(tools::Rectangle::Justify( + { 0, nNewHeight }, { getWidthDirectionAware(aPaperSize), nCurTextHeight })); + + if (!aRepaintParas.empty()) + { + auto CombineRepaintParasAreas = [&](const LineAreaInfo& rInfo) { + if (aRepaintParas.count(rInfo.nPortion)) + aInvalidRect.Union(rInfo.aArea); + return CallbackResult::Continue; + }; + IterateLineAreas(CombineRepaintParasAreas, IterFlag::inclILS); + } } bIsFormatting = false; @@ -566,10 +556,10 @@ void ImpEditEngine::CheckPageOverflow() { SAL_INFO("editeng.chaining", "[CONTROL_STATUS] AutoPageSize is " << (( aStatus.GetControlWord() & EEControlBits::AUTOPAGESIZE ) ? "ON" : "OFF") ); - sal_uInt32 nBoxHeight = GetMaxAutoPaperSize().Height(); + tools::Long nBoxHeight = GetMaxAutoPaperSize().Height(); SAL_INFO("editeng.chaining", "[OVERFLOW-CHECK] Current MaxAutoPaperHeight is " << nBoxHeight); - sal_uInt32 nTxtHeight = CalcTextHeight(nullptr); + tools::Long nTxtHeight = CalcTextHeight(nullptr); SAL_INFO("editeng.chaining", "[OVERFLOW-CHECK] Current Text Height is " << nTxtHeight); sal_uInt32 nParaCount = GetParaPortions().Count(); @@ -598,6 +588,13 @@ static sal_Int32 ImplCalculateFontIndependentLineSpacing( const sal_Int32 nFontH return ( nFontHeight * 12 ) / 10; // + 20% } +tools::Long ImpEditEngine::GetColumnWidth(const Size& rPaperSize) const +{ + assert(mnColumns >= 1); + tools::Long nWidth = IsVertical() ? rPaperSize.Height() : rPaperSize.Width(); + return (nWidth - mnColumnSpacing * (mnColumns - 1)) / mnColumns; +} + bool ImpEditEngine::CreateLines( sal_Int32 nPara, sal_uInt32 nStartPosY ) { ParaPortion& rParaPortion = GetParaPortions()[nPara]; @@ -785,11 +782,8 @@ bool ImpEditEngine::CreateLines( sal_Int32 nPara, sal_uInt32 nStartPosY ) } } - tools::Long nMaxLineWidth; - if ( !IsVertical() ) - nMaxLineWidth = aStatus.AutoPageWidth() ? aMaxAutoPaperSize.Width() : aPaperSize.Width(); - else - nMaxLineWidth = aStatus.AutoPageHeight() ? aMaxAutoPaperSize.Height() : aPaperSize.Height(); + const bool bAutoSize = IsVertical() ? aStatus.AutoPageHeight() : aStatus.AutoPageWidth(); + tools::Long nMaxLineWidth = GetColumnWidth(bAutoSize ? aMaxAutoPaperSize : aPaperSize); nMaxLineWidth -= GetXValue( rLRItem.GetRight() ); nMaxLineWidth -= nStartX; @@ -797,7 +791,7 @@ bool ImpEditEngine::CreateLines( sal_Int32 nPara, sal_uInt32 nStartPosY ) // If PaperSize == long_max, one cannot take away any negative // first line indent. (Overflow) if ( ( nMaxLineWidth < 0 ) && ( nStartX < 0 ) ) - nMaxLineWidth = getWidthDirectionAware(aPaperSize) - GetXValue(rLRItem.GetRight()); + nMaxLineWidth = GetColumnWidth(aPaperSize) - GetXValue(rLRItem.GetRight()); // If still less than 0, it may be just the right edge. if ( nMaxLineWidth <= 0 ) @@ -824,7 +818,7 @@ bool ImpEditEngine::CreateLines( sal_Int32 nPara, sal_uInt32 nStartPosY ) { GetTextRanger()->SetVertical( IsVertical() ); - tools::Long nTextY = nStartPosY + GetEditCursor( &rParaPortion, pLine->GetStart() ).Top(); + tools::Long nTextY = nStartPosY + GetEditCursor( &rParaPortion, pLine, pLine->GetStart(), GetCursorFlags::NONE ).Top(); if ( !bSameLineAgain ) { SeekCursor( pNode, nTmpPos+1, aTmpFont ); @@ -1468,7 +1462,7 @@ bool ImpEditEngine::CreateLines( sal_Int32 nPara, sal_uInt32 nStartPosY ) // has to be used for the Alignment. If it does not fit or if it // will change the paper width, it will be formatted again for // Justification! = LEFT anyway. - tools::Long nMaxLineWidthFix = getWidthDirectionAware(aPaperSize) + tools::Long nMaxLineWidthFix = GetColumnWidth(aPaperSize) - GetXValue( rLRItem.GetRight() ) - nStartX; if ( aTextSize.Width() < nMaxLineWidthFix ) nMaxLineWidth = nMaxLineWidthFix; @@ -1725,7 +1719,7 @@ void ImpEditEngine::CreateAndInsertEmptyLine( ParaPortion* pParaPortion ) { sal_Int32 nPara = GetParaPortions().GetPos( pParaPortion ); SvxAdjust eJustification = GetJustification( nPara ); - tools::Long nMaxLineWidth = getWidthDirectionAware(aPaperSize); + tools::Long nMaxLineWidth = GetColumnWidth(aPaperSize); nMaxLineWidth -= GetXValue( rLRItem.GetRight() ); if ( nMaxLineWidth < 0 ) nMaxLineWidth = 1; @@ -3020,15 +3014,17 @@ void ImpEditEngine::setYDirectionAware(Point& pt, tools::Long y) const pt.setX(y); } -bool ImpEditEngine::isYOverflowDirectionAware(const Point& pt, const tools::Rectangle& rectMax) const +tools::Long ImpEditEngine::getYOverflowDirectionAware(const Point& pt, + const tools::Rectangle& rectMax) const { + tools::Long nRes; if (!IsVertical()) - return pt.Y() >= rectMax.Bottom(); - - if (IsTopToBottom()) - return pt.X() <= rectMax.Left(); + nRes = pt.Y() - rectMax.Bottom(); + else if (IsTopToBottom()) + nRes = rectMax.Left() - pt.X(); else - return pt.X() >= rectMax.Right(); + nRes = pt.X() - rectMax.Right(); + return std::max(nRes, tools::Long(0)); } bool ImpEditEngine::isXOverflowDirectionAware(const Point& pt, const tools::Rectangle& rectMax) const @@ -3042,6 +3038,95 @@ bool ImpEditEngine::isXOverflowDirectionAware(const Point& pt, const tools::Rect return pt.Y() < rectMax.Top(); } +tools::Long ImpEditEngine::getLeftDirectionAware(const tools::Rectangle& rect) const +{ + if (!IsVertical()) + return rect.Left(); + + if (IsTopToBottom()) + return rect.Top(); + else + return rect.Bottom(); +} + +tools::Long ImpEditEngine::getRightDirectionAware(const tools::Rectangle& rect) const +{ + if (!IsVertical()) + return rect.Right(); + + if (IsTopToBottom()) + return rect.Bottom(); + else + return rect.Top(); +} + +tools::Long ImpEditEngine::getTopDirectionAware(const tools::Rectangle& rect) const +{ + if (!IsVertical()) + return rect.Top(); + + if (IsTopToBottom()) + return rect.Right(); + else + return rect.Left(); +} + +tools::Long ImpEditEngine::getBottomDirectionAware(const tools::Rectangle& rect) const +{ + if (!IsVertical()) + return rect.Bottom(); + + if (IsTopToBottom()) + return rect.Left(); + else + return rect.Right(); +} + +// Returns the resulting shift for the point; allows to apply the same shift to other points +Point ImpEditEngine::MoveToNextLine( + Point& rMovePos, // [in, out] Point that will move to the next line + tools::Long nLineHeight, // [in] Y-direction move distance (direction-aware) + sal_Int32& rColumn, // [in, out] current column number + Point aOrigin, // [in] Origin point to calculate limits and initial Y position in a new column + tools::Long* pnHeightNeededToNotWrap // On column wrap, returns how much more height is needed +) const +{ + const Point aOld = rMovePos; + + // Move the point by the requested distance in Y direction + adjustYDirectionAware(rMovePos, nLineHeight); + // Check if the resulting position has moved beyond the limits, and more columns left. + // The limits are defined by a rectangle starting from aOrigin with width of aPaperSize + // and height of nCurTextHeight + Size aActPaperSize(aPaperSize); + if (IsVertical()) + aActPaperSize.setWidth(nCurTextHeight); + else + aActPaperSize.setHeight(nCurTextHeight); + tools::Long nNeeded = getYOverflowDirectionAware(rMovePos, { aOrigin, aActPaperSize }); + if (pnHeightNeededToNotWrap) + *pnHeightNeededToNotWrap = nNeeded; + if (nNeeded && rColumn < mnColumns) + { + ++rColumn; + // If we didn't fit into the last column, indicate that only by setting the column number + // to the total number of columns; do not adjust + if (rColumn < mnColumns) + { + // Set Y position of the point to that of aOrigin + setYDirectionAware(rMovePos, getYDirectionAware(aOrigin)); + // Move the point by the requested distance in Y direction + adjustYDirectionAware(rMovePos, nLineHeight); + // Move the point by the column+spacing distance in X direction + adjustXDirectionAware(rMovePos, GetColumnWidth(aPaperSize) + mnColumnSpacing); + } + } + + return rMovePos - aOld; +} + +// TODO: use IterateLineAreas in ImpEditEngine::Paint, to avoid algorithm duplication + void ImpEditEngine::Paint( OutputDevice& rOutDev, tools::Rectangle aClipRect, Point aStartPos, bool bStripOnly, Degree10 nOrientation ) { if ( !GetUpdateMode() && !bStripOnly ) @@ -3077,6 +3162,7 @@ void ImpEditEngine::Paint( OutputDevice& rOutDev, tools::Rectangle aClipRect, Po const tools::Long nVertLineSpacing = CalcVertLineSpacing(aStartPos); + sal_Int32 nColumn = 0; // Over all the paragraphs... @@ -3109,8 +3195,6 @@ void ImpEditEngine::Paint( OutputDevice& rOutDev, tools::Rectangle aClipRect, Po adjustYDirectionAware(aStartPos, rPortion.GetFirstLineOffset()); - const Point aParaStart( aStartPos ); - const SvxLineSpacingItem& rLSItem = rPortion.GetNode()->GetContentAttribs().GetItem( EE_PARA_SBL ); sal_uInt16 nSBL = ( rLSItem.GetInterLineSpaceRule() == SvxInterLineSpaceRule::Fix ) ? GetYValue( rLSItem.GetInterLineSpace() ) : 0; @@ -3121,12 +3205,13 @@ void ImpEditEngine::Paint( OutputDevice& rOutDev, tools::Rectangle aClipRect, Po const EditLine* const pLine = &rPortion.GetLines()[nLine]; assert( pLine && "NULL-Pointer in the line iterator in UpdateViews" ); sal_Int32 nIndex = pLine->GetStart(); + tools::Long nLineHeight = pLine->GetHeight(); + if (nLine != nLastLine) + nLineHeight += nVertLineSpacing; + MoveToNextLine(aStartPos, nLineHeight, nColumn, aOrigin); aTmpPos = aStartPos; adjustXDirectionAware(aTmpPos, pLine->GetStartPosX()); - adjustYDirectionAware(aTmpPos, pLine->GetMaxAscent()); - adjustYDirectionAware(aStartPos, pLine->GetHeight()); - if (nLine != nLastLine) - adjustYDirectionAware(aStartPos, nVertLineSpacing); + adjustYDirectionAware(aTmpPos, pLine->GetMaxAscent() - nLineHeight); if ( ( !IsVertical() && ( aStartPos.Y() > aClipRect.Top() ) ) || ( IsVertical() && IsTopToBottom() && aStartPos.X() < aClipRect.Right() ) @@ -3140,7 +3225,9 @@ void ImpEditEngine::Paint( OutputDevice& rOutDev, tools::Rectangle aClipRect, Po // does, too. No change for not-layouting (painting). if(0 == nLine) // && !bStripOnly) { - GetEditEnginePtr()->PaintingFirstLine(n, aParaStart, aOrigin, nOrientation, rOutDev); + Point aLineStart(aStartPos); + adjustYDirectionAware(aLineStart, -nLineHeight); + GetEditEnginePtr()->PaintingFirstLine(n, aLineStart, aOrigin, nOrientation, rOutDev); // Remember whether a bullet was painted. const SfxBoolItem& rBulletState = pEditEngine->GetParaAttrib(n, EE_PARA_BULLETSTATE); @@ -3159,7 +3246,7 @@ void ImpEditEngine::Paint( OutputDevice& rOutDev, tools::Rectangle aClipRect, Po const TextPortion& rTextPortion = rPortion.GetTextPortions()[nPortion]; const tools::Long nPortionXOffset = GetPortionXOffset( &rPortion, pLine, nPortion ); - setXDirectionAware(aTmpPos, getXDirectionAware(aParaStart)); + setXDirectionAware(aTmpPos, getXDirectionAware(aStartPos)); adjustXDirectionAware(aTmpPos, nPortionXOffset); if (isXOverflowDirectionAware(aTmpPos, aClipRect)) break; // No further output in line necessary @@ -3326,8 +3413,8 @@ void ImpEditEngine::Paint( OutputDevice& rOutDev, tools::Rectangle aClipRect, Po // what will lead to a compressed look with multiple lines const sal_uInt16 nMaxAscent(pLine->GetMaxAscent()); - adjustYDirectionAware(aStartPos, nMaxAscent); - adjustYDirectionAware(aTmpPos, nMaxAscent); + aTmpPos += MoveToNextLine(aStartPos, nMaxAscent, + nColumn, aOrigin); } std::vector< sal_Int32 >::iterator curIt = itSubLines; ++itSubLines; @@ -3739,7 +3826,7 @@ void ImpEditEngine::Paint( OutputDevice& rOutDev, tools::Rectangle aClipRect, Po } // no more visible actions? - if (isYOverflowDirectionAware(aStartPos, aClipRect)) + if (getYOverflowDirectionAware(aStartPos, aClipRect)) break; } @@ -3780,7 +3867,7 @@ void ImpEditEngine::Paint( OutputDevice& rOutDev, tools::Rectangle aClipRect, Po pPDFExtOutDevData->EndStructureElement(); // no more visible actions? - if (isYOverflowDirectionAware(aStartPos, aClipRect)) + if (getYOverflowDirectionAware(aStartPos, aClipRect)) break; } } @@ -3958,7 +4045,7 @@ EditSelection ImpEditEngine::MoveParagraphs( Range aOldPositions, sal_Int32 nNew { aInvalidRect = tools::Rectangle(); // make empty aInvalidRect.SetLeft( 0 ); - aInvalidRect.SetRight( aPaperSize.Width() ); + aInvalidRect.SetRight(GetColumnWidth(aPaperSize)); aInvalidRect.SetTop( GetParaPortions().GetYOffset( pUpperPortion ) ); aInvalidRect.SetBottom( GetParaPortions().GetYOffset( pLowerPortion ) + pLowerPortion->GetHeight() ); @@ -4551,10 +4638,10 @@ void ImpEditEngine::ImplExpandCompressedPortions( EditLine* pLine, ParaPortion* } } -void ImpEditEngine::ImplUpdateOverflowingParaNum(sal_uInt32 nPaperHeight) +void ImpEditEngine::ImplUpdateOverflowingParaNum(tools::Long nPaperHeight) { - sal_uInt32 nY = 0; - sal_uInt32 nPH; + tools::Long nY = 0; + tools::Long nPH; for ( sal_Int32 nPara = 0; nPara < GetParaPortions().Count(); nPara++ ) { ParaPortion& rPara = GetParaPortions()[nPara]; @@ -4570,12 +4657,12 @@ void ImpEditEngine::ImplUpdateOverflowingParaNum(sal_uInt32 nPaperHeight) } } -void ImpEditEngine::ImplUpdateOverflowingLineNum(sal_uInt32 nPaperHeight, +void ImpEditEngine::ImplUpdateOverflowingLineNum(tools::Long nPaperHeight, sal_uInt32 nOverflowingPara, - sal_uInt32 nHeightBeforeOverflowingPara) + tools::Long nHeightBeforeOverflowingPara) { - sal_uInt32 nY = nHeightBeforeOverflowingPara; - sal_uInt32 nLH; + tools::Long nY = nHeightBeforeOverflowingPara; + tools::Long nLH; ParaPortion& rPara = GetParaPortions()[nOverflowingPara]; diff --git a/editeng/source/editeng/impedit4.cxx b/editeng/source/editeng/impedit4.cxx index 059d0bc7a523..ee199b663855 100644 --- a/editeng/source/editeng/impedit4.cxx +++ b/editeng/source/editeng/impedit4.cxx @@ -1094,7 +1094,7 @@ std::unique_ptr<EditTextObject> ImpEditEngine::CreateTextObject( EditSelection a // sleeper set up when Olli paragraphs not hacked! if ( bAllowBigObjects && bOnlyFullParagraphs && IsFormatted() && GetUpdateMode() && ( nTextPortions >= nBigObjectStart ) ) { - XParaPortionList* pXList = new XParaPortionList( GetRefDevice(), aPaperSize.Width(), nStretchX, nStretchY ); + XParaPortionList* pXList = new XParaPortionList( GetRefDevice(), GetColumnWidth(aPaperSize), nStretchX, nStretchY ); pTxtObj->mpImpl->SetPortionInfo(std::unique_ptr<XParaPortionList>(pXList)); for ( nNode = nStartNode; nNode <= nEndNode; nNode++ ) { @@ -1177,7 +1177,7 @@ EditSelection ImpEditEngine::InsertTextObject( const EditTextObject& rTextObject bool bUsePortionInfo = false; XParaPortionList* pPortionInfo = rTextObject.mpImpl->GetPortionInfo(); - if ( pPortionInfo && ( static_cast<tools::Long>(pPortionInfo->GetPaperWidth()) == aPaperSize.Width() ) + if ( pPortionInfo && ( static_cast<tools::Long>(pPortionInfo->GetPaperWidth()) == GetColumnWidth(aPaperSize) ) && ( pPortionInfo->GetRefMapMode() == GetRefDevice()->GetMapMode() ) && ( pPortionInfo->GetStretchX() == nStretchX ) && ( pPortionInfo->GetStretchY() == nStretchY ) ) diff --git a/editeng/source/outliner/outlin2.cxx b/editeng/source/outliner/outlin2.cxx index a0ea00d555f6..789d5d54e061 100644 --- a/editeng/source/outliner/outlin2.cxx +++ b/editeng/source/outliner/outlin2.cxx @@ -223,6 +223,11 @@ void Outliner::SetMaxAutoPaperSize( const Size& rSz ) pEditEngine->SetMaxAutoPaperSize( rSz ); } +void Outliner::SetMinColumnWrapHeight(tools::Long nVal) +{ + pEditEngine->SetMinColumnWrapHeight(nVal); +} + bool Outliner::IsExpanded( Paragraph const * pPara ) const { return pParaList->HasVisibleChildren( pPara ); diff --git a/include/editeng/editeng.hxx b/include/editeng/editeng.hxx index 73a89992f62b..53543cf178d2 100644 --- a/include/editeng/editeng.hxx +++ b/include/editeng/editeng.hxx @@ -272,6 +272,8 @@ public: const Size& GetMaxAutoPaperSize() const; void SetMaxAutoPaperSize( const Size& rSz ); + void SetMinColumnWrapHeight(tools::Long nVal); + OUString GetText( LineEnd eEnd = LINEEND_LF ) const; OUString GetText( const ESelection& rSelection ) const; sal_uInt32 GetTextLen() const; diff --git a/include/editeng/outliner.hxx b/include/editeng/outliner.hxx index 34de51fc904c..309334acc809 100644 --- a/include/editeng/outliner.hxx +++ b/include/editeng/outliner.hxx @@ -789,6 +789,8 @@ public: const Size& GetMaxAutoPaperSize() const; void SetMaxAutoPaperSize( const Size& rSz ); + void SetMinColumnWrapHeight(tools::Long nVal); + void SetDefTab( sal_uInt16 nTab ); bool IsFlatMode() const; diff --git a/sc/qa/uitest/chart/chartLegend.py b/sc/qa/uitest/chart/chartLegend.py index 2d6ec4dbe886..0e7727b6b854 100644 --- a/sc/qa/uitest/chart/chartLegend.py +++ b/sc/qa/uitest/chart/chartLegend.py @@ -94,7 +94,7 @@ class chartLegend(UITestCase): with guarded.execute_dialog_through_action(self, xLegends, "COMMAND", mkPropertyValues({"COMMAND": "TransformDialog"})) as xDialog: self.assertEqual("4.61", get_state_as_dict(xDialog.getChild("MTR_FLD_POS_X"))['Value']) - self.assertEqual("1.54", get_state_as_dict(xDialog.getChild("MTR_FLD_POS_Y"))['Value']) + self.assertEqual("1.53", get_state_as_dict(xDialog.getChild("MTR_FLD_POS_Y"))['Value']) xChartMain.executeAction("TYPE", mkPropertyValues({"KEYCODE": "UP"})) xChartMain.executeAction("TYPE", mkPropertyValues({"KEYCODE": "LEFT"})) @@ -102,6 +102,6 @@ class chartLegend(UITestCase): # Check the position has changed after moving the label using the arrows keys with guarded.execute_dialog_through_action(self, xLegends, "COMMAND", mkPropertyValues({"COMMAND": "TransformDialog"})) as xDialog: self.assertEqual("4.51", get_state_as_dict(xDialog.getChild("MTR_FLD_POS_X"))['Value']) - self.assertEqual("1.44", get_state_as_dict(xDialog.getChild("MTR_FLD_POS_Y"))['Value']) + self.assertEqual("1.43", get_state_as_dict(xDialog.getChild("MTR_FLD_POS_Y"))['Value']) # vim: set shiftwidth=4 softtabstop=4 expandtab: diff --git a/sc/qa/unit/filters-test.cxx b/sc/qa/unit/filters-test.cxx index 1a888725154c..f81a8a62d3d1 100644 --- a/sc/qa/unit/filters-test.cxx +++ b/sc/qa/unit/filters-test.cxx @@ -518,7 +518,7 @@ void ScFiltersTest::testCommentSize() const tools::Rectangle& rNewRect = pCaption->GetLogicRect(); CPPUNIT_ASSERT_EQUAL(rOldRect.getWidth(), rNewRect.getWidth()); - CPPUNIT_ASSERT_EQUAL(tools::Long(1605), rNewRect.getHeight()); + CPPUNIT_ASSERT_EQUAL(tools::Long(1606), rNewRect.getHeight()); rDoc.GetUndoManager()->Undo(); diff --git a/sd/qa/uitest/impress_tests/tdf91762.py b/sd/qa/uitest/impress_tests/tdf91762.py index 92a23de6b101..8492e3425373 100644 --- a/sd/qa/uitest/impress_tests/tdf91762.py +++ b/sd/qa/uitest/impress_tests/tdf91762.py @@ -26,9 +26,9 @@ class tdf91762(UITestCase): self.ui_test.close_dialog_through_button(xOkBtn) document = self.ui_test.get_component() - self.assertEqual(1929, document.DrawPages[0].getByIndex(1).BoundRect.Height) + self.assertEqual(1931, document.DrawPages[0].getByIndex(1).BoundRect.Height) self.assertEqual(25198, document.DrawPages[0].getByIndex(1).Size.Width) - self.assertEqual(1923, document.DrawPages[0].getByIndex(1).Size.Height) + self.assertEqual(1925, document.DrawPages[0].getByIndex(1).Size.Height) self.assertEqual(1400, document.DrawPages[0].getByIndex(1).Position.X) self.assertEqual(3685, document.DrawPages[0].getByIndex(1).Position.Y) @@ -40,8 +40,8 @@ class tdf91762(UITestCase): xEdit.executeAction("TYPE", mkPropertyValues({"KEYCODE": "RETURN"})) # tdf#138011: Without the fix in place, this test would have failed with - # AssertionError: 5494 != 3559 - self.assertEqual(5494, document.DrawPages[0].getByIndex(1).BoundRect.Height) + # AssertionError: 5496 != 3559 + self.assertEqual(5496, document.DrawPages[0].getByIndex(1).BoundRect.Height) self.ui_test.close_doc() diff --git a/sd/qa/unit/data/xml/n593612_0.xml b/sd/qa/unit/data/xml/n593612_0.xml index 7c93f494e3ca..51fb75eba050 100644 --- a/sd/qa/unit/data/xml/n593612_0.xml +++ b/sd/qa/unit/data/xml/n593612_0.xml @@ -1,6 +1,6 @@ <?xml version="1.0"?> <XShapes> - <XShape positionX="11429" positionY="1324" sizeX="2259" sizeY="15209" type="com.sun.star.drawing.CustomShape" name="Rectangle 52" text=" " fontHeight="24.000000" fontColor="ffffffff" textAutoGrowHeight="true" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="CENTER" textVerticalAdjust="TOP" textLeftDistance="254" textRightDistance="254" textUpperDistance="127" textLowerDistance="127" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="SOLID" fillColor="3c8c93" fillTransparence="0" fillTransparenceGradientName=""> + <XShape positionX="11429" positionY="1324" sizeX="2259" sizeY="15210" type="com.sun.star.drawing.CustomShape" name="Rectangle 52" text=" " fontHeight="24.000000" fontColor="ffffffff" textAutoGrowHeight="true" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="CENTER" textVerticalAdjust="TOP" textLeftDistance="254" textRightDistance="254" textUpperDistance="127" textLowerDistance="127" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="0" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="SOLID" fillColor="3c8c93" fillTransparence="0" fillTransparenceGradientName=""> <FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillGradient style="LINEAR" startColor="3465a4" endColor="ffffff" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/> @@ -10,7 +10,7 @@ <LineEnd/> <Transformation> <Line1 column1="2260.000000" column2="0.000000" column3="11429.000000"/> - <Line2 column1="0.000000" column2="15210.000000" column3="1324.000000"/> + <Line2 column1="0.000000" column2="15211.000000" column3="1324.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> <CustomShapeGeometry> diff --git a/sd/qa/unit/data/xml/n758621_1.xml b/sd/qa/unit/data/xml/n758621_1.xml index 556c18673065..92de100a09f1 100644 --- a/sd/qa/unit/data/xml/n758621_1.xml +++ b/sd/qa/unit/data/xml/n758621_1.xml @@ -1,6 +1,6 @@ <?xml version="1.0"?> <XShapes> - <XShape positionX="1485" positionY="610" sizeX="18411" sizeY="1954" type="com.sun.star.presentation.TitleTextShape" fontHeight="40.000000" fontColor="ff0000" textAutoGrowHeight="true" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="LEFT" textVerticalAdjust="CENTER" textLeftDistance="250" textRightDistance="250" textUpperDistance="130" textLowerDistance="130" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="1645" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="ffffff" fillTransparence="0" fillTransparenceGradientName=""> + <XShape positionX="1485" positionY="609" sizeX="18411" sizeY="1955" type="com.sun.star.presentation.TitleTextShape" fontHeight="40.000000" fontColor="ff0000" textAutoGrowHeight="true" textAutoGrowWidth="false" textContourFrame="false" textFitToSize="NONE" textHorizontalAdjust="LEFT" textVerticalAdjust="CENTER" textLeftDistance="250" textRightDistance="250" textUpperDistance="130" textLowerDistance="130" textMaximumFrameHeight="0" textMaximumFrameWidth="0" textMinimumFrameHeight="1645" textMinimumFrameWidth="0" textAnimationAmount="0" textAnimationCount="0" textAnimationDelay="0" textAnimationDirection="LEFT" textAnimationKind="NONE" textAnimationStartInside="false" textAnimationStopInside="false" textWritingMode="LR_TB" fillStyle="NONE" fillColor="ffffff" fillTransparence="0" fillTransparenceGradientName=""> <FillTransparenceGradient style="LINEAR" startColor="000000" endColor="000000" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillGradient style="LINEAR" startColor="000000" endColor="ffffff" angle="0" border="0" xOffset="50" yOffset="50" startIntensity="100" endIntensity="100" stepCount="0"/> <FillHatch style="SINGLE" color="3465a4" distance="20" angle="0"/> @@ -10,7 +10,7 @@ <LineEnd/> <Transformation> <Line1 column1="18412.000000" column2="0.000000" column3="1485.000000"/> - <Line2 column1="0.000000" column2="1955.000000" column3="610.000000"/> + <Line2 column1="0.000000" column2="1956.000000" column3="609.000000"/> <Line3 column1="0.000000" column2="0.000000" column3="1.000000"/> </Transformation> </XShape> diff --git a/sd/qa/unit/layout-tests.cxx b/sd/qa/unit/layout-tests.cxx index 1d10ab0a2a1e..8a2853693505 100644 --- a/sd/qa/unit/layout-tests.cxx +++ b/sd/qa/unit/layout-tests.cxx @@ -14,12 +14,14 @@ public: void testTdf104722(); void testTdf136949(); void testTdf128212(); + void testColumnsLayout(); CPPUNIT_TEST_SUITE(SdLayoutTest); CPPUNIT_TEST(testTdf104722); CPPUNIT_TEST(testTdf136949); CPPUNIT_TEST(testTdf128212); + CPPUNIT_TEST(testColumnsLayout); CPPUNIT_TEST_SUITE_END(); }; @@ -77,10 +79,111 @@ void SdLayoutTest::testTdf128212() CPPUNIT_ASSERT(pXmlDoc); // Without the fix in place, this test would have failed with - // - Expected: 7797 + // - Expected: 7798 // - Actual : 12068 assertXPath(pXmlDoc, "/metafile/push[1]/push[1]/textarray", "x", "4525"); - assertXPath(pXmlDoc, "/metafile/push[1]/push[1]/textarray", "y", "7797"); + assertXPath(pXmlDoc, "/metafile/push[1]/push[1]/textarray", "y", "7798"); + + xDocShRef->DoClose(); +} + +void SdLayoutTest::testColumnsLayout() +{ + // This tests a 2-column text box's layout + + const OUString sText[] = { + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum consequat mi quis " + "pretium semper. Proin luctus orci ac neque venenatis, quis commodo dolor posuere. " + "Curabitur dignissim sapien quis cursus egestas. Donec blandit auctor arcu, nec " + "pellentesque eros molestie eget. In consectetur aliquam hendrerit. Sed cursus mauris " + "vitae ligula pellentesque, non pellentesque urna aliquet. Fusce placerat mauris enim, " + "nec rutrum purus semper vel. Praesent tincidunt neque eu pellentesque pharetra. Fusce " + "pellentesque est orci.", + "Integer sodales tincidunt tristique. Sed a metus posuere, adipiscing nunc et, viverra " + "odio. Donec auctor molestie sem, sit amet tristique lectus hendrerit sed. Cras sodales " + "nisl sed orci mattis iaculis. Nunc eget dolor accumsan, pharetra risus a, vestibulum " + "mauris. Nunc vulputate lobortis mollis. Vivamus nec tellus faucibus, tempor magna nec, " + "facilisis felis. Donec commodo enim a vehicula pellentesque. Nullam vehicula vestibulum " + "est vel ultricies.", + "Aliquam velit massa, laoreet vel leo nec, volutpat facilisis eros. Donec consequat arcu " + "ut diam tempor luctus. Cum sociis natoque penatibus et magnis dis parturient montes, " + "nascetur ridiculus mus. Praesent vitae lacus vel leo sodales pharetra a a nibh. " + "Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; " + "Nam luctus tempus nibh, fringilla dictum augue consectetur eget. Curabitur at ante sit " + "amet tortor pharetra molestie eu nec ante. Mauris tincidunt, nibh eu sollicitudin " + "molestie, dolor sapien congue tortor, a pulvinar sapien turpis sed ante. Donec nec est " + "elementum, euismod nulla in, mollis nunc." + }; + + // sentence#, index, length, x, y + const std::tuple<int, int, int, int, int> strings[] = { + // Column 1 + { 0, 0, 40, 3750, 3193 }, + { 0, 40, 41, 3750, 3587 }, + { 0, 81, 39, 3750, 3981 }, + { 0, 120, 33, 3750, 4375 }, + { 0, 153, 35, 3750, 4769 }, + { 0, 188, 34, 3750, 5163 }, + { 0, 222, 38, 3750, 5557 }, + { 0, 260, 35, 3750, 5951 }, + { 0, 295, 37, 3750, 6345 }, + { 0, 332, 31, 3750, 6739 }, + { 0, 363, 33, 3750, 7133 }, + { 0, 396, 39, 3750, 7527 }, + { 0, 435, 37, 3750, 7921 }, + { 0, 472, 32, 3750, 8315 }, + { 0, 504, 22, 3750, 8709 }, + { 1, 0, 43, 3750, 9103 }, + { 1, 43, 35, 3750, 9497 }, + { 1, 78, 36, 3750, 9891 }, + { 1, 114, 41, 3750, 10285 }, + { 1, 155, 39, 3750, 10679 }, + { 1, 194, 35, 3750, 11073 }, + { 1, 229, 37, 3750, 11467 }, + { 1, 266, 40, 3750, 11861 }, + { 1, 306, 39, 3750, 12255 }, + { 1, 345, 38, 3750, 12649 }, + { 1, 383, 39, 3750, 13043 }, + { 1, 422, 29, 3750, 13437 }, + { 2, 0, 42, 3750, 13831 }, + { 2, 42, 41, 3750, 14225 }, + { 2, 83, 39, 3750, 14619 }, + { 2, 122, 32, 3750, 15013 }, + { 2, 154, 38, 3750, 15407 }, + { 2, 192, 34, 3750, 15801 }, + { 2, 226, 38, 3750, 16195 }, + // Column 2 + { 2, 264, 42, 10725, 3193 }, + { 2, 306, 39, 10725, 3587 }, + { 2, 345, 37, 10725, 3981 }, + { 2, 382, 37, 10725, 4375 }, + { 2, 419, 42, 10725, 4769 }, + { 2, 461, 36, 10725, 5163 }, + { 2, 497, 36, 10725, 5557 }, + { 2, 533, 40, 10725, 5951 }, + { 2, 573, 35, 10725, 6345 }, + { 2, 608, 30, 10725, 6739 }, + }; + + sd::DrawDocShellRef xDocShRef + = loadURL(m_directories.getURLFromSrc(u"/sd/qa/unit/data/odg/two_columns.odg"), ODG); + + std::shared_ptr<GDIMetaFile> xMetaFile = xDocShRef->GetPreviewMetaFile(); + MetafileXmlDump dumper; + + xmlDocUniquePtr pXmlDoc = XmlTestTools::dumpAndParse(dumper, *xMetaFile); + CPPUNIT_ASSERT(pXmlDoc); + + for (size_t i = 0; i < SAL_N_ELEMENTS(strings); ++i) + { + const auto & [ sentence, index, length, x, y ] = strings[i]; + OString sXPath = "/metafile/push[1]/push[1]/textarray[" + OString::number(i + 1) + "]"; + assertXPathContent(pXmlDoc, sXPath + "/text", sText[sentence]); + assertXPath(pXmlDoc, sXPath, "index", OUString::number(index)); + assertXPath(pXmlDoc, sXPath, "length", OUString::number(length)); + assertXPath(pXmlDoc, sXPath, "x", OUString::number(x)); + assertXPath(pXmlDoc, sXPath, "y", OUString::number(y)); + } xDocShRef->DoClose(); } diff --git a/sd/qa/unit/tiledrendering/LOKitSearchTest.cxx b/sd/qa/unit/tiledrendering/LOKitSearchTest.cxx index 762faaac1b56..7232d59cc29d 100644 --- a/sd/qa/unit/tiledrendering/LOKitSearchTest.cxx +++ b/sd/qa/unit/tiledrendering/LOKitSearchTest.cxx @@ -664,7 +664,7 @@ void LOKitSearchTest::testSearchIn2MixedObjects() CPPUNIT_ASSERT_EQUAL(size_t(1), mpCallbackRecorder->m_aSearchResultSelection.size()); CPPUNIT_ASSERT_EQUAL(size_t(1), mpCallbackRecorder->m_aSearchResultPart.size()); - CPPUNIT_ASSERT_EQUAL(OString("3546, 3174, 738, 402"), + CPPUNIT_ASSERT_EQUAL(OString("3546, 3173, 738, 401"), mpCallbackRecorder->m_aSearchResultSelection[0]); // Search next @@ -690,7 +690,7 @@ void LOKitSearchTest::testSearchIn2MixedObjects() CPPUNIT_ASSERT_EQUAL(size_t(1), mpCallbackRecorder->m_aSearchResultSelection.size()); CPPUNIT_ASSERT_EQUAL(size_t(1), mpCallbackRecorder->m_aSearchResultPart.size()); - CPPUNIT_ASSERT_EQUAL(OString("3546, 3174, 738, 402"), + CPPUNIT_ASSERT_EQUAL(OString("3546, 3173, 738, 401"), mpCallbackRecorder->m_aSearchResultSelection[0]); } diff --git a/svx/source/svdraw/svdotext.cxx b/svx/source/svdraw/svdotext.cxx index 27b514dc4ea9..52708ba56971 100644 --- a/svx/source/svdraw/svdotext.cxx +++ b/svx/source/svdraw/svdotext.cxx @@ -732,11 +732,13 @@ void SdrTextObj::TakeTextRect( SdrOutliner& rOutliner, tools::Rectangle& rTextRe if(SDRTEXTHORZADJUST_BLOCK == eHAdj && !IsVerticalWriting()) { rOutliner.SetMinAutoPaperSize(Size(nAnkWdt, 0)); + rOutliner.SetMinColumnWrapHeight(nAnkHgt); } if(SDRTEXTVERTADJUST_BLOCK == eVAdj && IsVerticalWriting()) { rOutliner.SetMinAutoPaperSize(Size(0, nAnkHgt)); + rOutliner.SetMinColumnWrapHeight(nAnkWdt); } } diff --git a/svx/source/svdraw/svdotextdecomposition.cxx b/svx/source/svdraw/svdotextdecomposition.cxx index 14911dfd89be..c2d5cd2301c8 100644 --- a/svx/source/svdraw/svdotextdecomposition.cxx +++ b/svx/source/svdraw/svdotextdecomposition.cxx @@ -770,11 +770,13 @@ void SdrTextObj::impDecomposeAutoFitTextPrimitive( if(SDRTEXTHORZADJUST_BLOCK == eHAdj && !bVerticalWriting) { rOutliner.SetMinAutoPaperSize(Size(nAnchorTextWidth, 0)); + rOutliner.SetMinColumnWrapHeight(nAnchorTextHeight); } if(SDRTEXTVERTADJUST_BLOCK == eVAdj && bVerticalWriting) { rOutliner.SetMinAutoPaperSize(Size(0, nAnchorTextHeight)); + rOutliner.SetMinColumnWrapHeight(nAnchorTextWidth); } rOutliner.SetPaperSize(aNullSize); @@ -983,10 +985,12 @@ void SdrTextObj::impDecomposeBlockTextPrimitive( if(bHorizontalIsBlock) { rOutliner.SetMinAutoPaperSize(Size(nAnchorTextWidth, 0)); + rOutliner.SetMinColumnWrapHeight(nAnchorTextHeight); } else if(bVerticalIsBlock) { rOutliner.SetMinAutoPaperSize(Size(0, nAnchorTextHeight)); + rOutliner.SetMinColumnWrapHeight(nAnchorTextWidth); } if((rSdrBlockTextPrimitive.getWordWrap() || IsTextFrame()) && !rSdrBlockTextPrimitive.getUnlimitedPage()) diff --git a/test/source/sheet/xsheetannotationshapesupplier.cxx b/test/source/sheet/xsheetannotationshapesupplier.cxx index dac446b72b52..fe392fc83494 100644 --- a/test/source/sheet/xsheetannotationshapesupplier.cxx +++ b/test/source/sheet/xsheetannotationshapesupplier.cxx @@ -33,7 +33,7 @@ void XSheetAnnotationShapeSupplier::testGetAnnotationShape() CPPUNIT_ASSERT_EQUAL_MESSAGE("getAnnotationShape() wrong width", sal_Int32(11275), xShape->getSize().Width); CPPUNIT_ASSERT_EQUAL_MESSAGE("getAnnotationShape() wrong height", - sal_Int32(1386), xShape->getSize().Height); + sal_Int32(1387), xShape->getSize().Height); } } |