Ejemplo n.º 1
0
        // ------------------------------------------------------------------
        // Returns calculated column information -  count, width, gap and rule.
        // ------------------------------------------------------------------
        internal static void GetColumnMetrics(StructuralCache structuralCache, out int cColumns, out double width, out double gap, out double rule)
        {
            ColumnPropertiesGroup columnProperties = new ColumnPropertiesGroup(structuralCache.PropertyOwner);
            FontFamily            pageFontFamily   = (FontFamily)structuralCache.PropertyOwner.GetValue(Block.FontFamilyProperty);
            double    lineHeight   = DynamicPropertyReader.GetLineHeightValue(structuralCache.PropertyOwner);
            double    pageFontSize = (double)structuralCache.PropertyOwner.GetValue(Block.FontSizeProperty);
            Size      pageSize     = structuralCache.CurrentFormatContext.PageSize;
            Thickness pageMargin   = structuralCache.CurrentFormatContext.PageMargin;
            double    pageWidth    = pageSize.Width - (pageMargin.Left + pageMargin.Right);

            cColumns = PtsHelper.CalculateColumnCount(columnProperties, lineHeight, pageWidth, pageFontSize, pageFontFamily, true);

            double freeSpace;

            rule = columnProperties.ColumnRuleWidth;
            PtsHelper.GetColumnMetrics(columnProperties, pageWidth,
                                       pageFontSize, pageFontFamily, true, cColumns,
                                       ref lineHeight, out width, out freeSpace, out gap);

            if (columnProperties.IsColumnWidthFlexible && columnProperties.ColumnSpaceDistribution == ColumnSpaceDistribution.Between)
            {
                width += freeSpace / cColumns;
            }

            width = Math.Min(width, pageWidth);
        }
Ejemplo n.º 2
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);
            }
        }
Ejemplo n.º 3
0
        // Token: 0x06006942 RID: 26946 RVA: 0x001DCDB0 File Offset: 0x001DAFB0
        internal static double CalculatePageMarginAdjustment(StructuralCache structuralCache, double pageMarginWidth)
        {
            double           result  = 0.0;
            DependencyObject element = structuralCache.Section.Element;

            if (element is FlowDocument)
            {
                ColumnPropertiesGroup columnPropertiesGroup = new ColumnPropertiesGroup(element);
                if (!columnPropertiesGroup.IsColumnWidthFlexible)
                {
                    double     lineHeightValue = DynamicPropertyReader.GetLineHeightValue(element);
                    double     pageFontSize    = (double)structuralCache.PropertyOwner.GetValue(TextElement.FontSizeProperty);
                    FontFamily pageFontFamily  = (FontFamily)structuralCache.PropertyOwner.GetValue(TextElement.FontFamilyProperty);
                    int        cColumns        = PtsHelper.CalculateColumnCount(columnPropertiesGroup, lineHeightValue, pageMarginWidth, pageFontSize, pageFontFamily, true);
                    double     num;
                    double     num2;
                    double     num3;
                    PtsHelper.GetColumnMetrics(columnPropertiesGroup, pageMarginWidth, pageFontSize, pageFontFamily, true, cColumns, ref lineHeightValue, out num, out num2, out num3);
                    result = num2;
                }
            }
            return(result);
        }