Ejemplo n.º 1
0
        internal unsafe void GetSectionColumnInfo(uint fswdir, int ncol, PTS.FSCOLUMNINFO *pfscolinfo, out int ccol)
        {
            ColumnPropertiesGroup columnProperties = new ColumnPropertiesGroup(this.Element);
            Size       pageSize        = this._structuralCache.CurrentFormatContext.PageSize;
            double     lineHeightValue = DynamicPropertyReader.GetLineHeightValue(this.Element);
            Thickness  pageMargin      = this._structuralCache.CurrentFormatContext.PageMargin;
            double     pageFontSize    = (double)this._structuralCache.PropertyOwner.GetValue(TextElement.FontSizeProperty);
            FontFamily pageFontFamily  = (FontFamily)this._structuralCache.PropertyOwner.GetValue(TextElement.FontFamilyProperty);
            bool       finitePage      = this._structuralCache.CurrentFormatContext.FinitePage;

            ccol = ncol;
            PtsHelper.GetColumnsInfo(columnProperties, lineHeightValue, pageSize.Width - (pageMargin.Left + pageMargin.Right), pageFontSize, pageFontFamily, ncol, pfscolinfo, finitePage);
        }
Ejemplo n.º 2
0
        internal static unsafe void GetColumnsInfo(
            ColumnPropertiesGroup columnProperties,
            double lineHeight,
            double pageWidth,
            double pageFontSize,
            FontFamily pageFontFamily,
            int cColumns,
            PTS.FSCOLUMNINFO *pfscolinfo,
            bool enableColumns)
        {
            Debug.Assert(cColumns > 0, "At least one column is required.");

            double columnWidth;
            double freeSpace;
            double gap;

            double rule = columnProperties.ColumnRuleWidth;

            GetColumnMetrics(columnProperties, pageWidth,
                             pageFontSize, pageFontFamily, enableColumns, cColumns,
                             ref lineHeight, out columnWidth, out freeSpace, out gap);

            // Set columns information
            if (!columnProperties.IsColumnWidthFlexible)
            {
                // All columns have the declared width
                // ColumnGap is flexible and is increased based on ColumnSpaceDistribution policy
                // (ColumnGap is effectively min)
                for (int i = 0; i < cColumns; i++)
                {
                    // Today there is no way to change the default value of ColumnSpaceDistribution.
                    // If column widths are not flexible, always allocate unused space on the right side.
                    pfscolinfo[i].durBefore = TextDpi.ToTextDpi((i == 0) ? 0 : gap);
                    pfscolinfo[i].durWidth  = TextDpi.ToTextDpi(columnWidth);
                    // ColumnWidth has to be > 0 and SpaceBefore has to be >= 0
                    pfscolinfo[i].durBefore = Math.Max(0, pfscolinfo[i].durBefore);
                    pfscolinfo[i].durWidth  = Math.Max(1, pfscolinfo[i].durWidth);
                }
            }
            else
            {
                //  ColumnGap is honored
                //  ColumnWidth is effectively min, and space is distributed according to ColumnSpaceDistribution policy
                for (int i = 0; i < cColumns; i++)
                {
                    if (columnProperties.ColumnSpaceDistribution == ColumnSpaceDistribution.Right)
                    {
                        pfscolinfo[i].durWidth = TextDpi.ToTextDpi((i == cColumns - 1) ? columnWidth + freeSpace : columnWidth);
                    }
                    else if (columnProperties.ColumnSpaceDistribution == ColumnSpaceDistribution.Left)
                    {
                        pfscolinfo[i].durWidth = TextDpi.ToTextDpi((i == 0) ? columnWidth + freeSpace : columnWidth);
                    }
                    else
                    {
                        pfscolinfo[i].durWidth = TextDpi.ToTextDpi(columnWidth + (freeSpace / cColumns));
                    }

                    // If calculated column width is greater than the page width, set it to page width to
                    // avoid clipping
                    if (pfscolinfo[i].durWidth > TextDpi.ToTextDpi(pageWidth))
                    {
                        pfscolinfo[i].durWidth = TextDpi.ToTextDpi(pageWidth);
                    }

                    pfscolinfo[i].durBefore = TextDpi.ToTextDpi((i == 0) ? 0 : gap);
                    // ColumnWidth has to be > 0 and SpaceBefore has to be >= 0
                    pfscolinfo[i].durBefore = Math.Max(0, pfscolinfo[i].durBefore);
                    pfscolinfo[i].durWidth  = Math.Max(1, pfscolinfo[i].durWidth);
                }
            }
        }
Ejemplo n.º 3
0
        internal unsafe static void GetColumnsInfo(ColumnPropertiesGroup columnProperties, double lineHeight, double pageWidth, double pageFontSize, FontFamily pageFontFamily, int cColumns, PTS.FSCOLUMNINFO *pfscolinfo, bool enableColumns)
        {
            double columnRuleWidth = columnProperties.ColumnRuleWidth;
            double num;
            double num2;
            double num3;

            PtsHelper.GetColumnMetrics(columnProperties, pageWidth, pageFontSize, pageFontFamily, enableColumns, cColumns, ref lineHeight, out num, out num2, out num3);
            if (!columnProperties.IsColumnWidthFlexible)
            {
                for (int i = 0; i < cColumns; i++)
                {
                    pfscolinfo[i].durBefore = TextDpi.ToTextDpi((i == 0) ? 0.0 : num3);
                    pfscolinfo[i].durWidth  = TextDpi.ToTextDpi(num);
                    pfscolinfo[i].durBefore = Math.Max(0, pfscolinfo[i].durBefore);
                    pfscolinfo[i].durWidth  = Math.Max(1, pfscolinfo[i].durWidth);
                }
                return;
            }
            for (int j = 0; j < cColumns; j++)
            {
                if (columnProperties.ColumnSpaceDistribution == ColumnSpaceDistribution.Right)
                {
                    pfscolinfo[j].durWidth = TextDpi.ToTextDpi((j == cColumns - 1) ? (num + num2) : num);
                }
                else if (columnProperties.ColumnSpaceDistribution == ColumnSpaceDistribution.Left)
                {
                    pfscolinfo[j].durWidth = TextDpi.ToTextDpi((j == 0) ? (num + num2) : num);
                }
                else
                {
                    pfscolinfo[j].durWidth = TextDpi.ToTextDpi(num + num2 / (double)cColumns);
                }
                if (pfscolinfo[j].durWidth > TextDpi.ToTextDpi(pageWidth))
                {
                    pfscolinfo[j].durWidth = TextDpi.ToTextDpi(pageWidth);
                }
                pfscolinfo[j].durBefore = TextDpi.ToTextDpi((j == 0) ? 0.0 : num3);
                pfscolinfo[j].durBefore = Math.Max(0, pfscolinfo[j].durBefore);
                pfscolinfo[j].durWidth  = Math.Max(1, pfscolinfo[j].durWidth);
            }
        }