Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Core / CSharp / System / Windows / Input / Stylus / RawStylusInput.cs / 1305600 / RawStylusInput.cs
using System;
using System.Collections;
using System.Windows.Media;
using System.Security;
using System.Security.Permissions;
using MS.Internal;
using MS.Internal.PresentationCore; // SecurityHelper
using SR=MS.Internal.PresentationCore.SR;
using SRID=MS.Internal.PresentationCore.SRID;
namespace System.Windows.Input.StylusPlugIns
{
/////////////////////////////////////////////////////////////////////////
///
/// [TBS]
///
public class RawStylusInput
{
/////////////////////////////////////////////////////////////////////
///
/// [TBS]
///
/// [TBS]
/// [TBS]
/// [TBS]
internal RawStylusInput(
RawStylusInputReport report,
GeneralTransform tabletToElementTransform,
StylusPlugInCollection targetPlugInCollection)
{
if (report == null)
{
throw new ArgumentNullException("report");
}
if (tabletToElementTransform.Inverse == null)
{
throw new ArgumentException(SR.Get(SRID.Stylus_MatrixNotInvertable), "tabletToElementTransform");
}
if (targetPlugInCollection == null)
{
throw new ArgumentNullException("targetPlugInCollection");
}
// We should always see this GeneralTransform is frozen since we access this from multiple threads.
System.Diagnostics.Debug.Assert(tabletToElementTransform.IsFrozen);
_report = report;
_tabletToElementTransform = tabletToElementTransform;
_targetPlugInCollection = targetPlugInCollection;
}
///
///
///
public int StylusDeviceId { get { return _report.StylusDeviceId; } }
///
///
///
public int TabletDeviceId { get { return _report.TabletDeviceId; } }
///
///
///
public int Timestamp { get { return _report.Timestamp; } }
///
/// Returns a copy of the StylusPoints
///
public StylusPointCollection GetStylusPoints()
{
return GetStylusPoints(Transform.Identity);
}
///
/// Internal method called by StylusDevice to prevent two copies
///
///
/// Critical: This code accesses InputReport.InputSource
/// TreatAsSafe: The method only gets a transform from PresentationSource and returns StylusPointCollection.
/// Those operations are considered safe.
/// This method is called by:
/// RawStylusInput.GetStylusPoints
/// StylusDevice.UpdateEventStylusPoints(RawStylusInputReport, Boolean)
///
[SecurityCritical, SecurityTreatAsSafe]
internal StylusPointCollection GetStylusPoints(GeneralTransform transform)
{
if (_stylusPoints == null)
{
//
GeneralTransformGroup group = new GeneralTransformGroup();
if ( StylusDeviceId == 0)
{
// Only do this for the Mouse
group.Children.Add(new MatrixTransform(_report.InputSource.CompositionTarget.TransformFromDevice));
}
group.Children.Add(_tabletToElementTransform);
group.Children.Add(transform);
return new StylusPointCollection(_report.StylusPointDescription, _report.GetRawPacketData(), group, Matrix.Identity);
}
else
{
return _stylusPoints.Clone(transform, _stylusPoints.Description);
}
}
///
/// Replaces the StylusPoints.
///
///
/// Callers must have Unmanaged code permission to call this API.
///
/// stylusPoints
///
/// Callers must have Unmanaged code permission to call this API.
///
public void SetStylusPoints(StylusPointCollection stylusPoints)
{
// To modify the points we require Unmanaged code permission.
SecurityHelper.DemandUnmanagedCode();
if (null == stylusPoints)
{
throw new ArgumentNullException("stylusPoints");
}
if (!StylusPointDescription.AreCompatible( stylusPoints.Description,
_report.StylusPointDescription))
{
throw new ArgumentException(SR.Get(SRID.IncompatibleStylusPointDescriptions), "stylusPoints");
}
if (stylusPoints.Count == 0)
{
throw new ArgumentException(SR.Get(SRID.Stylus_StylusPointsCantBeEmpty), "stylusPoints");
}
_stylusPoints = stylusPoints.Clone();
}
///
/// Returns the RawStylusInputCustomDataList used to notify plugins before
/// PreviewStylus event has been processed by application.
///
public void NotifyWhenProcessed(object callbackData)
{
if (_currentNotifyPlugIn == null)
{
throw new InvalidOperationException(SR.Get(SRID.Stylus_CanOnlyCallForDownMoveOrUp));
}
if (_customData == null)
{
_customData = new RawStylusInputCustomDataList();
}
_customData.Add(new RawStylusInputCustomData(_currentNotifyPlugIn, callbackData));
}
///
/// True if a StylusPlugIn has modifiedthe StylusPoints.
///
internal bool StylusPointsModified
{
get
{
return _stylusPoints != null;
}
}
///
/// Target StylusPlugInCollection that real time pen input sent to.
///
internal StylusPlugInCollection Target
{
get
{
return _targetPlugInCollection;
}
}
///
/// Real RawStylusInputReport that this report is generated from.
///
internal RawStylusInputReport Report
{
get
{
return _report;
}
}
///
/// Matrix that was used for rawstylusinput packets.
///
internal GeneralTransform ElementTransform
{
get
{
return _tabletToElementTransform;
}
}
///
/// Retrieves the RawStylusInputCustomDataList associated with this input.
///
internal RawStylusInputCustomDataList CustomDataList
{
get
{
if (_customData == null)
{
_customData = new RawStylusInputCustomDataList();
}
return _customData;
}
}
///
/// StylusPlugIn that is adding a notify event.
///
internal StylusPlugIn CurrentNotifyPlugIn
{
get
{
return _currentNotifyPlugIn;
}
set
{
_currentNotifyPlugIn = value;
}
}
/////////////////////////////////////////////////////////////////////
RawStylusInputReport _report;
GeneralTransform _tabletToElementTransform;
StylusPlugInCollection _targetPlugInCollection;
StylusPointCollection _stylusPoints;
StylusPlugIn _currentNotifyPlugIn;
RawStylusInputCustomDataList _customData;
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
using System;
using System.Collections;
using System.Windows.Media;
using System.Security;
using System.Security.Permissions;
using MS.Internal;
using MS.Internal.PresentationCore; // SecurityHelper
using SR=MS.Internal.PresentationCore.SR;
using SRID=MS.Internal.PresentationCore.SRID;
namespace System.Windows.Input.StylusPlugIns
{
/////////////////////////////////////////////////////////////////////////
///
/// [TBS]
///
public class RawStylusInput
{
/////////////////////////////////////////////////////////////////////
///
/// [TBS]
///
/// [TBS]
/// [TBS]
/// [TBS]
internal RawStylusInput(
RawStylusInputReport report,
GeneralTransform tabletToElementTransform,
StylusPlugInCollection targetPlugInCollection)
{
if (report == null)
{
throw new ArgumentNullException("report");
}
if (tabletToElementTransform.Inverse == null)
{
throw new ArgumentException(SR.Get(SRID.Stylus_MatrixNotInvertable), "tabletToElementTransform");
}
if (targetPlugInCollection == null)
{
throw new ArgumentNullException("targetPlugInCollection");
}
// We should always see this GeneralTransform is frozen since we access this from multiple threads.
System.Diagnostics.Debug.Assert(tabletToElementTransform.IsFrozen);
_report = report;
_tabletToElementTransform = tabletToElementTransform;
_targetPlugInCollection = targetPlugInCollection;
}
///
///
///
public int StylusDeviceId { get { return _report.StylusDeviceId; } }
///
///
///
public int TabletDeviceId { get { return _report.TabletDeviceId; } }
///
///
///
public int Timestamp { get { return _report.Timestamp; } }
///
/// Returns a copy of the StylusPoints
///
public StylusPointCollection GetStylusPoints()
{
return GetStylusPoints(Transform.Identity);
}
///
/// Internal method called by StylusDevice to prevent two copies
///
///
/// Critical: This code accesses InputReport.InputSource
/// TreatAsSafe: The method only gets a transform from PresentationSource and returns StylusPointCollection.
/// Those operations are considered safe.
/// This method is called by:
/// RawStylusInput.GetStylusPoints
/// StylusDevice.UpdateEventStylusPoints(RawStylusInputReport, Boolean)
///
[SecurityCritical, SecurityTreatAsSafe]
internal StylusPointCollection GetStylusPoints(GeneralTransform transform)
{
if (_stylusPoints == null)
{
//
GeneralTransformGroup group = new GeneralTransformGroup();
if ( StylusDeviceId == 0)
{
// Only do this for the Mouse
group.Children.Add(new MatrixTransform(_report.InputSource.CompositionTarget.TransformFromDevice));
}
group.Children.Add(_tabletToElementTransform);
group.Children.Add(transform);
return new StylusPointCollection(_report.StylusPointDescription, _report.GetRawPacketData(), group, Matrix.Identity);
}
else
{
return _stylusPoints.Clone(transform, _stylusPoints.Description);
}
}
///
/// Replaces the StylusPoints.
///
///
/// Callers must have Unmanaged code permission to call this API.
///
/// stylusPoints
///
/// Callers must have Unmanaged code permission to call this API.
///
public void SetStylusPoints(StylusPointCollection stylusPoints)
{
// To modify the points we require Unmanaged code permission.
SecurityHelper.DemandUnmanagedCode();
if (null == stylusPoints)
{
throw new ArgumentNullException("stylusPoints");
}
if (!StylusPointDescription.AreCompatible( stylusPoints.Description,
_report.StylusPointDescription))
{
throw new ArgumentException(SR.Get(SRID.IncompatibleStylusPointDescriptions), "stylusPoints");
}
if (stylusPoints.Count == 0)
{
throw new ArgumentException(SR.Get(SRID.Stylus_StylusPointsCantBeEmpty), "stylusPoints");
}
_stylusPoints = stylusPoints.Clone();
}
///
/// Returns the RawStylusInputCustomDataList used to notify plugins before
/// PreviewStylus event has been processed by application.
///
public void NotifyWhenProcessed(object callbackData)
{
if (_currentNotifyPlugIn == null)
{
throw new InvalidOperationException(SR.Get(SRID.Stylus_CanOnlyCallForDownMoveOrUp));
}
if (_customData == null)
{
_customData = new RawStylusInputCustomDataList();
}
_customData.Add(new RawStylusInputCustomData(_currentNotifyPlugIn, callbackData));
}
///
/// True if a StylusPlugIn has modifiedthe StylusPoints.
///
internal bool StylusPointsModified
{
get
{
return _stylusPoints != null;
}
}
///
/// Target StylusPlugInCollection that real time pen input sent to.
///
internal StylusPlugInCollection Target
{
get
{
return _targetPlugInCollection;
}
}
///
/// Real RawStylusInputReport that this report is generated from.
///
internal RawStylusInputReport Report
{
get
{
return _report;
}
}
///
/// Matrix that was used for rawstylusinput packets.
///
internal GeneralTransform ElementTransform
{
get
{
return _tabletToElementTransform;
}
}
///
/// Retrieves the RawStylusInputCustomDataList associated with this input.
///
internal RawStylusInputCustomDataList CustomDataList
{
get
{
if (_customData == null)
{
_customData = new RawStylusInputCustomDataList();
}
return _customData;
}
}
///
/// StylusPlugIn that is adding a notify event.
///
internal StylusPlugIn CurrentNotifyPlugIn
{
get
{
return _currentNotifyPlugIn;
}
set
{
_currentNotifyPlugIn = value;
}
}
/////////////////////////////////////////////////////////////////////
RawStylusInputReport _report;
GeneralTransform _tabletToElementTransform;
StylusPlugInCollection _targetPlugInCollection;
StylusPointCollection _stylusPoints;
StylusPlugIn _currentNotifyPlugIn;
RawStylusInputCustomDataList _customData;
}
}
// 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
- _AuthenticationState.cs
- PageBuildProvider.cs
- TopClause.cs
- NativeRecognizer.cs
- QueryAccessibilityHelpEvent.cs
- LoadRetryConstantStrategy.cs
- HttpServerVarsCollection.cs
- BuildResult.cs
- SubMenuStyle.cs
- XmlChoiceIdentifierAttribute.cs
- EventWaitHandleSecurity.cs
- ClientRolePrincipal.cs
- XamlSerializerUtil.cs
- SmtpException.cs
- SafeFileMappingHandle.cs
- GridProviderWrapper.cs
- HttpGetServerProtocol.cs
- MetadataCollection.cs
- MSAANativeProvider.cs
- TimeZoneInfo.cs
- ImageSourceConverter.cs
- HttpDebugHandler.cs
- TriggerCollection.cs
- StylusEventArgs.cs
- SchemaTypeEmitter.cs
- HierarchicalDataBoundControl.cs
- RequiredAttributeAttribute.cs
- GroupStyle.cs
- AliasExpr.cs
- WmlValidatorAdapter.cs
- ManualWorkflowSchedulerService.cs
- ACE.cs
- HelpPage.cs
- TypefaceCollection.cs
- IndexedString.cs
- XmlSchemaProviderAttribute.cs
- EDesignUtil.cs
- ConcurrencyMode.cs
- RenderContext.cs
- Token.cs
- RoutedEvent.cs
- XhtmlBasicLiteralTextAdapter.cs
- RSAOAEPKeyExchangeDeformatter.cs
- PointConverter.cs
- FrameSecurityDescriptor.cs
- DrawingContextDrawingContextWalker.cs
- TransactionFlowOption.cs
- DateTimePicker.cs
- TreeBuilderXamlTranslator.cs
- CodeVariableDeclarationStatement.cs
- MetadataHelper.cs
- WebScriptMetadataMessage.cs
- TextSpan.cs
- storepermissionattribute.cs
- CompilationRelaxations.cs
- TemplatedMailWebEventProvider.cs
- FunctionQuery.cs
- XPathSingletonIterator.cs
- TypeGeneratedEventArgs.cs
- XmlSchemaGroupRef.cs
- ActiveXSite.cs
- Matrix.cs
- NotSupportedException.cs
- XmlAttributes.cs
- MediaCommands.cs
- AnnotationMap.cs
- XmlSchemaException.cs
- PersonalizationStateInfoCollection.cs
- SerialReceived.cs
- SerialPort.cs
- StrokeCollection.cs
- CommentEmitter.cs
- SimpleLine.cs
- GlyphTypeface.cs
- PropertyDescriptor.cs
- ResXFileRef.cs
- RequestQueue.cs
- XmlSiteMapProvider.cs
- TypeConstant.cs
- GridViewRowEventArgs.cs
- HttpVersion.cs
- DataGridViewLinkCell.cs
- PtsContext.cs
- StreamResourceInfo.cs
- TransactionFlowProperty.cs
- StringTraceRecord.cs
- AnnotationDocumentPaginator.cs
- DrawingImage.cs
- Int32AnimationUsingKeyFrames.cs
- ArraySortHelper.cs
- FixedSOMTableRow.cs
- HwndSourceParameters.cs
- XmlPreloadedResolver.cs
- CaseInsensitiveHashCodeProvider.cs
- HandlerWithFactory.cs
- StylusShape.cs
- XmlLanguage.cs
- DataControlPagerLinkButton.cs
- PartialCachingControl.cs
- StickyNoteHelper.cs