예제 #1
0
        internal void FormatCellFinite(TableParaClient tableParaClient, IntPtr pfsbrkcellIn, IntPtr pfsFtnRejector, int fEmptyOK, uint fswdirTable, int dvrAvailable, out PTS.FSFMTR pfmtr, out IntPtr ppfscell, out IntPtr pfsbrkcellOut, out int dvrUsed)
        {
            CellParaClient cellParaClient = new CellParaClient(this, tableParaClient);
            Size           subpageSize    = new Size(cellParaClient.CalculateCellWidth(tableParaClient), Math.Max(TextDpi.FromTextDpi(dvrAvailable), 0.0));

            cellParaClient.FormatCellFinite(subpageSize, pfsbrkcellIn, PTS.ToBoolean(fEmptyOK), fswdirTable, PTS.FSKSUPPRESSHARDBREAKBEFOREFIRSTPARA.fsksuppresshardbreakbeforefirstparaNone, out pfmtr, out dvrUsed, out pfsbrkcellOut);
            ppfscell = cellParaClient.Handle;
            if (pfmtr.kstop == PTS.FSFMTRKSTOP.fmtrNoProgressOutOfSpace)
            {
                cellParaClient.Dispose();
                ppfscell = IntPtr.Zero;
                dvrUsed  = 0;
            }
            if (dvrAvailable < dvrUsed)
            {
                if (PTS.ToBoolean(fEmptyOK))
                {
                    if (cellParaClient != null)
                    {
                        cellParaClient.Dispose();
                    }
                    if (pfsbrkcellOut != IntPtr.Zero)
                    {
                        PTS.Validate(PTS.FsDestroySubpageBreakRecord(cellParaClient.PtsContext.Context, pfsbrkcellOut), cellParaClient.PtsContext);
                        pfsbrkcellOut = IntPtr.Zero;
                    }
                    ppfscell    = IntPtr.Zero;
                    pfmtr.kstop = PTS.FSFMTRKSTOP.fmtrNoProgressOutOfSpace;
                    dvrUsed     = 0;
                    return;
                }
                pfmtr.fForcedProgress = 1;
            }
        }
예제 #2
0
        internal void FormatCellFinite(
            TableParaClient tableParaClient,        // IN:
            IntPtr pfsbrkcellIn,                    // IN:  not NULL if cell broken from previous page/column
            IntPtr pfsFtnRejector,                  // IN:
            int fEmptyOK,                           // IN:
            uint fswdirTable,                       // IN:
            int dvrAvailable,                       // IN:
            out PTS.FSFMTR pfmtr,                   // OUT:
            out IntPtr ppfscell,                    // OUT: cell object
            out IntPtr pfsbrkcellOut,               // OUT: break if cell does not fit in dvrAvailable
            out int dvrUsed)                        // OUT: height -- min height required

        {
            Debug.Assert(Cell.Index != -1 && Cell.ColumnIndex != -1,
                         "Cell is not in a table");

            CellParaClient cellParaClient;
            Size           subpageSize;

            Debug.Assert(Cell.Table != null);

            cellParaClient = new CellParaClient(this, tableParaClient);

            subpageSize = new Size(
                cellParaClient.CalculateCellWidth(tableParaClient),
                Math.Max(TextDpi.FromTextDpi(dvrAvailable), 0));


            cellParaClient.FormatCellFinite(subpageSize,
                                            pfsbrkcellIn,
                                            PTS.ToBoolean(fEmptyOK),
                                            fswdirTable,
                                            PTS.FSKSUPPRESSHARDBREAKBEFOREFIRSTPARA.fsksuppresshardbreakbeforefirstparaNone,
                                            out pfmtr,
                                            out dvrUsed,
                                            out pfsbrkcellOut);

            //  initialize output parameters
            ppfscell = cellParaClient.Handle;

            if (pfmtr.kstop == PTS.FSFMTRKSTOP.fmtrNoProgressOutOfSpace)
            {
                cellParaClient.Dispose();
                ppfscell = IntPtr.Zero;
                dvrUsed  = 0;
            }

            if (dvrAvailable < dvrUsed)
            {
                if (PTS.ToBoolean(fEmptyOK))
                {
                    if (cellParaClient != null)
                    {
                        cellParaClient.Dispose();
                    }
                    if (pfsbrkcellOut != IntPtr.Zero)
                    {
                        PTS.Validate(PTS.FsDestroySubpageBreakRecord(cellParaClient.PtsContext.Context, pfsbrkcellOut), cellParaClient.PtsContext);
                        pfsbrkcellOut = IntPtr.Zero;
                    }

                    ppfscell    = IntPtr.Zero;
                    pfmtr.kstop = PTS.FSFMTRKSTOP.fmtrNoProgressOutOfSpace;
                    dvrUsed     = 0;
                }
                else
                {
                    pfmtr.fForcedProgress = PTS.True;
                }
            }
        }
예제 #3
0
        internal void FormatCellFinite( 
            TableParaClient tableParaClient,        // IN:
            IntPtr pfsbrkcellIn,                    // IN:  not NULL if cell broken from previous page/column
            IntPtr pfsFtnRejector,                  // IN:
            int fEmptyOK,                           // IN: 
            uint fswdirTable,                       // IN:
            int dvrAvailable,                       // IN: 
            out PTS.FSFMTR pfmtr,                   // OUT: 
            out IntPtr ppfscell,                    // OUT: cell object
            out IntPtr pfsbrkcellOut,               // OUT: break if cell does not fit in dvrAvailable 
            out int dvrUsed)                        // OUT: height -- min height required

        {
            Debug.Assert(Cell.Index != -1 && Cell.ColumnIndex != -1, 
                "Cell is not in a table");
 
            CellParaClient cellParaClient; 
            Size subpageSize;
 
            Debug.Assert(Cell.Table != null);

            cellParaClient = new CellParaClient(this, tableParaClient);
 
            subpageSize = new Size(
                cellParaClient.CalculateCellWidth(tableParaClient), 
                Math.Max(TextDpi.FromTextDpi(dvrAvailable), 0)); 

 
            cellParaClient.FormatCellFinite(subpageSize,
                                            pfsbrkcellIn,
                                            PTS.ToBoolean(fEmptyOK),
                                            fswdirTable, 
                                            PTS.FSKSUPPRESSHARDBREAKBEFOREFIRSTPARA.fsksuppresshardbreakbeforefirstparaNone,
                                            out pfmtr, 
                                            out dvrUsed, 
                                            out pfsbrkcellOut);
 
            //  initialize output parameters
            ppfscell = cellParaClient.Handle;

            if(pfmtr.kstop == PTS.FSFMTRKSTOP.fmtrNoProgressOutOfSpace) 
            {
                cellParaClient.Dispose(); 
                ppfscell = IntPtr.Zero; 
                dvrUsed = 0;
            } 

            if (dvrAvailable < dvrUsed)
            {
                if (PTS.ToBoolean(fEmptyOK)) 
                {
                    if (cellParaClient != null)     { cellParaClient.Dispose(); } 
                    if (pfsbrkcellOut != IntPtr.Zero) 
                    {
                        PTS.Validate(PTS.FsDestroySubpageBreakRecord(cellParaClient.PtsContext.Context, pfsbrkcellOut), cellParaClient.PtsContext); 
                        pfsbrkcellOut = IntPtr.Zero;
                    }

                    ppfscell = IntPtr.Zero; 
                    pfmtr.kstop = PTS.FSFMTRKSTOP.fmtrNoProgressOutOfSpace;
                    dvrUsed = 0; 
                } 
                else
                { 
                    pfmtr.fForcedProgress = PTS.True;
                }
            }
        }