Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / Orcas / SP / wpf / src / Framework / MS / Internal / PtsHost / CellParagraph.cs / 1 / CellParagraph.cs
//---------------------------------------------------------------------------- // // Copyright (C) Microsoft Corporation. All rights reserved. // // File: CellParagraph.cs // // Description: CellParagraph represents a single list item. // // History: // 06/01/2004 : grzegorz - moving from Avalon branch. // //--------------------------------------------------------------------------- using System; using System.Diagnostics; using System.Security; using System.Windows; using System.Windows.Documents; using MS.Internal.PtsHost; using MS.Internal.Text; using MS.Internal.PtsHost.UnsafeNativeMethods; namespace MS.Internal.PtsHost { // --------------------------------------------------------------------- // CellParagraph represents a single cell. // --------------------------------------------------------------------- internal sealed class CellParagraph : SubpageParagraph { // ------------------------------------------------------------------ // Constructor. // // element - Element associated with paragraph. // structuralCache - Content's structural cache // ----------------------------------------------------------------- internal CellParagraph(DependencyObject element, StructuralCache structuralCache) : base(element, structuralCache) { _isInterruptible = false; } ////// Table owner accessor /// internal TableCell Cell { get { return (TableCell)Element; } } ////// FormatCellFinite /// /// Table para client /// Subpage break record - not NULL if cell broken from previous page/column /// Footnote rejector /// Allow empty cell /// Table direction /// Available vertical space /// Formatting result /// Cell para client /// Break record for the current cell /// Ised vertical space ////// Critical - as this calls Critical function CellParaClient.FormatCellFinite. /// [SecurityCritical] 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; } } } ////// FormatCellBottomless /// /// Table para client /// Flow direction /// Formatting result /// Cell para client /// Height consumed internal void FormatCellBottomless( TableParaClient tableParaClient, // IN: uint fswdirTable, // IN: out PTS.FSFMTRBL fmtrbl, // OUT: out IntPtr ppfscell, // OUT: cell object out int dvrUsed) // OUT: height -- min height // required { Debug.Assert(Cell.Index != -1 && Cell.ColumnIndex != -1, "Cell is not in a table"); Debug.Assert(Cell.Table != null); CellParaClient cellParaClient = new CellParaClient(this, tableParaClient); cellParaClient.FormatCellBottomless(fswdirTable, cellParaClient.CalculateCellWidth(tableParaClient), out fmtrbl, out dvrUsed); // initialize output parameters ppfscell = cellParaClient.Handle; } ////// UpdateBottomlessCell /// /// Current cell para client /// Table para cleint /// Flow direction /// Formatting result /// Height consumed internal void UpdateBottomlessCell( CellParaClient cellParaClient, // IN: TableParaClient tableParaClient, // IN: uint fswdirTable, // IN: out PTS.FSFMTRBL fmtrbl, // OUT: out int dvrUsed) // OUT: height -- min height required { Debug.Assert(Cell.Index != -1 && Cell.ColumnIndex != -1, "Cell is not in a table"); Debug.Assert(Cell.Table != null); cellParaClient.UpdateBottomlessCell(fswdirTable, cellParaClient.CalculateCellWidth(tableParaClient), out fmtrbl, out dvrUsed); } ////// SetCellHeight /// /// Cell para client /// Table para client /// Break record if cell is broken /// Cell broken on this page/column /// Flow direction /// Actual height internal void SetCellHeight( CellParaClient cellParaClient, // IN: cell object TableParaClient tableParaClient, // table's para client IntPtr subpageBreakRecord, // not NULL if cell broken from previous page/column int fBrokenHere, // TRUE if cell broken on this page/column: no reformatting uint fswdirTable, int dvrActual) { cellParaClient.ArrangeHeight = TextDpi.FromTextDpi(dvrActual); } ////// UpdGetCellChange /// /// Indication that cell's width changed /// /// Change kind. One of: None, New, Inside /// internal void UpdGetCellChange( out int fWidthChanged, // OUT: out PTS.FSKCHANGE fskchCell) // OUT: { // calculate state change fWidthChanged = PTS.True; fskchCell = PTS.FSKCHANGE.fskchNew; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved. //---------------------------------------------------------------------------- // // Copyright (C) Microsoft Corporation. All rights reserved. // // File: CellParagraph.cs // // Description: CellParagraph represents a single list item. // // History: // 06/01/2004 : grzegorz - moving from Avalon branch. // //--------------------------------------------------------------------------- using System; using System.Diagnostics; using System.Security; using System.Windows; using System.Windows.Documents; using MS.Internal.PtsHost; using MS.Internal.Text; using MS.Internal.PtsHost.UnsafeNativeMethods; namespace MS.Internal.PtsHost { // --------------------------------------------------------------------- // CellParagraph represents a single cell. // --------------------------------------------------------------------- internal sealed class CellParagraph : SubpageParagraph { // ------------------------------------------------------------------ // Constructor. // // element - Element associated with paragraph. // structuralCache - Content's structural cache // ----------------------------------------------------------------- internal CellParagraph(DependencyObject element, StructuralCache structuralCache) : base(element, structuralCache) { _isInterruptible = false; } ////// Table owner accessor /// internal TableCell Cell { get { return (TableCell)Element; } } ////// FormatCellFinite /// /// Table para client /// Subpage break record - not NULL if cell broken from previous page/column /// Footnote rejector /// Allow empty cell /// Table direction /// Available vertical space /// Formatting result /// Cell para client /// Break record for the current cell /// Ised vertical space ////// Critical - as this calls Critical function CellParaClient.FormatCellFinite. /// [SecurityCritical] 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; } } } ////// FormatCellBottomless /// /// Table para client /// Flow direction /// Formatting result /// Cell para client /// Height consumed internal void FormatCellBottomless( TableParaClient tableParaClient, // IN: uint fswdirTable, // IN: out PTS.FSFMTRBL fmtrbl, // OUT: out IntPtr ppfscell, // OUT: cell object out int dvrUsed) // OUT: height -- min height // required { Debug.Assert(Cell.Index != -1 && Cell.ColumnIndex != -1, "Cell is not in a table"); Debug.Assert(Cell.Table != null); CellParaClient cellParaClient = new CellParaClient(this, tableParaClient); cellParaClient.FormatCellBottomless(fswdirTable, cellParaClient.CalculateCellWidth(tableParaClient), out fmtrbl, out dvrUsed); // initialize output parameters ppfscell = cellParaClient.Handle; } ////// UpdateBottomlessCell /// /// Current cell para client /// Table para cleint /// Flow direction /// Formatting result /// Height consumed internal void UpdateBottomlessCell( CellParaClient cellParaClient, // IN: TableParaClient tableParaClient, // IN: uint fswdirTable, // IN: out PTS.FSFMTRBL fmtrbl, // OUT: out int dvrUsed) // OUT: height -- min height required { Debug.Assert(Cell.Index != -1 && Cell.ColumnIndex != -1, "Cell is not in a table"); Debug.Assert(Cell.Table != null); cellParaClient.UpdateBottomlessCell(fswdirTable, cellParaClient.CalculateCellWidth(tableParaClient), out fmtrbl, out dvrUsed); } ////// SetCellHeight /// /// Cell para client /// Table para client /// Break record if cell is broken /// Cell broken on this page/column /// Flow direction /// Actual height internal void SetCellHeight( CellParaClient cellParaClient, // IN: cell object TableParaClient tableParaClient, // table's para client IntPtr subpageBreakRecord, // not NULL if cell broken from previous page/column int fBrokenHere, // TRUE if cell broken on this page/column: no reformatting uint fswdirTable, int dvrActual) { cellParaClient.ArrangeHeight = TextDpi.FromTextDpi(dvrActual); } ////// UpdGetCellChange /// /// Indication that cell's width changed /// /// Change kind. One of: None, New, Inside /// internal void UpdGetCellChange( out int fWidthChanged, // OUT: out PTS.FSKCHANGE fskchCell) // OUT: { // calculate state change fWidthChanged = PTS.True; fskchCell = PTS.FSKCHANGE.fskchNew; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- TableItemPatternIdentifiers.cs
- WebControlToolBoxItem.cs
- TryCatch.cs
- KeyboardEventArgs.cs
- MetabaseServerConfig.cs
- JsonFormatReaderGenerator.cs
- ReadOnlyDataSourceView.cs
- XmlSchemaObjectCollection.cs
- Compilation.cs
- ResourceReferenceExpression.cs
- InputLangChangeRequestEvent.cs
- validation.cs
- AttributeXamlType.cs
- HGlobalSafeHandle.cs
- EncodingInfo.cs
- NegationPusher.cs
- cookiecontainer.cs
- ReferentialConstraintRoleElement.cs
- BaseValidator.cs
- TransformGroup.cs
- SystemIPv6InterfaceProperties.cs
- SaveFileDialog.cs
- WebPartMinimizeVerb.cs
- QuadraticEase.cs
- ButtonFieldBase.cs
- DetailsViewUpdateEventArgs.cs
- WebSysDisplayNameAttribute.cs
- SizeAnimation.cs
- ProfileSettings.cs
- IsolatedStorageFile.cs
- BamlLocalizableResourceKey.cs
- ParseChildrenAsPropertiesAttribute.cs
- ImageIndexConverter.cs
- XmlStreamStore.cs
- ClientCultureInfo.cs
- KeyToListMap.cs
- RadialGradientBrush.cs
- TraceContext.cs
- COM2PropertyBuilderUITypeEditor.cs
- DocumentXPathNavigator.cs
- EdgeModeValidation.cs
- _ShellExpression.cs
- ProcessHostFactoryHelper.cs
- CookieProtection.cs
- KeyedHashAlgorithm.cs
- ScrollViewer.cs
- TraceHandlerErrorFormatter.cs
- Matrix3DConverter.cs
- ToolboxControl.cs
- EdmToObjectNamespaceMap.cs
- AnnotationResourceCollection.cs
- ToolStripSeparatorRenderEventArgs.cs
- Int64.cs
- SerializationInfo.cs
- CalculatedColumn.cs
- InvalidFilterCriteriaException.cs
- WebContext.cs
- ToolboxCategory.cs
- CharacterBufferReference.cs
- HtmlInputRadioButton.cs
- SelectionWordBreaker.cs
- MouseActionConverter.cs
- XsltOutput.cs
- MenuDesigner.cs
- ImageMap.cs
- XmlMemberMapping.cs
- OperatingSystem.cs
- XamlToRtfWriter.cs
- TimeoutConverter.cs
- ErrorProvider.cs
- LeftCellWrapper.cs
- SqlProviderManifest.cs
- BitmapImage.cs
- MsmqInputChannelListenerBase.cs
- StyleXamlTreeBuilder.cs
- TraceFilter.cs
- DataGridViewRow.cs
- HtmlHistory.cs
- NativeMethods.cs
- RadioButtonPopupAdapter.cs
- ToolStrip.cs
- SqlConnectionStringBuilder.cs
- HandledEventArgs.cs
- NamespaceList.cs
- KnownIds.cs
- ListViewPagedDataSource.cs
- CannotUnloadAppDomainException.cs
- HtmlInputRadioButton.cs
- WebServicesDescriptionAttribute.cs
- CalendarDay.cs
- SerializationEventsCache.cs
- SpeakInfo.cs
- CustomCategoryAttribute.cs
- KnownTypeDataContractResolver.cs
- PEFileEvidenceFactory.cs
- BackStopAuthenticationModule.cs
- DesignerTextBoxAdapter.cs
- PageEventArgs.cs
- X509Utils.cs
- DataSetUtil.cs