Code:
/ Dotnetfx_Vista_SP2 / Dotnetfx_Vista_SP2 / 8.0.50727.4016 / DEVDIV / depot / DevDiv / releases / Orcas / QFE / 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
- ActivityExecutorOperation.cs
- XhtmlConformanceSection.cs
- DataGridRelationshipRow.cs
- UnaryQueryOperator.cs
- ReadOnlyPermissionSet.cs
- PostBackTrigger.cs
- ReadOnlyDictionary.cs
- CombinedGeometry.cs
- VScrollBar.cs
- FlowDocument.cs
- WinEventQueueItem.cs
- GlobalItem.cs
- HierarchicalDataBoundControlAdapter.cs
- InstanceData.cs
- PackageProperties.cs
- VirtualDirectoryMapping.cs
- RecognizedAudio.cs
- SourceFileInfo.cs
- MultiTouchSystemGestureLogic.cs
- HttpValueCollection.cs
- ToolStripSeparatorRenderEventArgs.cs
- EntityAdapter.cs
- AbstractExpressions.cs
- ProfileModule.cs
- UnsafeNetInfoNativeMethods.cs
- IdentityNotMappedException.cs
- NaturalLanguageHyphenator.cs
- PropertyGeneratedEventArgs.cs
- XmlNullResolver.cs
- ReachSerializationCacheItems.cs
- UncommonField.cs
- GC.cs
- ToggleButton.cs
- PeerContact.cs
- XmlResolver.cs
- ButtonFlatAdapter.cs
- CellParagraph.cs
- LoaderAllocator.cs
- PrintEvent.cs
- RealProxy.cs
- WebPartAuthorizationEventArgs.cs
- Transaction.cs
- UrlRoutingHandler.cs
- TextSpan.cs
- VisualTreeHelper.cs
- BindToObject.cs
- Expression.cs
- EmptyControlCollection.cs
- GrammarBuilderPhrase.cs
- DrawToolTipEventArgs.cs
- HighlightVisual.cs
- Int32.cs
- DataGridItemCollection.cs
- codemethodreferenceexpression.cs
- ColorConverter.cs
- PropertyCollection.cs
- HtmlEmptyTagControlBuilder.cs
- XmlAttributeAttribute.cs
- xmlfixedPageInfo.cs
- BooleanToSelectiveScrollingOrientationConverter.cs
- SafeRightsManagementQueryHandle.cs
- XmlSchemaProviderAttribute.cs
- DrawTreeNodeEventArgs.cs
- KeysConverter.cs
- XamlFilter.cs
- DesignerSerializerAttribute.cs
- AdPostCacheSubstitution.cs
- NativeMethods.cs
- QilCloneVisitor.cs
- RoutedEvent.cs
- WebFormDesignerActionService.cs
- ThreadStaticAttribute.cs
- UTF7Encoding.cs
- TextView.cs
- ConnectionManagementSection.cs
- CodeDirectoryCompiler.cs
- FileDialogPermission.cs
- InternalControlCollection.cs
- coordinatorscratchpad.cs
- CheckableControlBaseAdapter.cs
- StateMachineDesignerPaint.cs
- SslStream.cs
- KeyEventArgs.cs
- SafeFileHandle.cs
- PasswordRecovery.cs
- GraphicsState.cs
- BitmapEffectrendercontext.cs
- PrintPreviewDialog.cs
- SR.cs
- TiffBitmapDecoder.cs
- XmlMemberMapping.cs
- EntityDataSourceChangedEventArgs.cs
- FileSecurity.cs
- ToolboxComponentsCreatingEventArgs.cs
- KeyEvent.cs
- File.cs
- DialogDivider.cs
- Console.cs
- objectquery_tresulttype.cs
- Logging.cs