Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / wpf / src / Core / CSharp / System / Windows / Input / Stylus / RawStylusInputReport.cs / 1305600 / RawStylusInputReport.cs
using System;
using System.ComponentModel;
using System.Windows;
using System.Windows.Threading;
using System.Windows.Media;
using System.Windows.Input.StylusPlugIns;
using System.Security;
using System.Security.Permissions;
using MS.Internal.PresentationCore; // SecurityHelper
using MS.Internal;
using SR=MS.Internal.PresentationCore.SR;
using SRID=MS.Internal.PresentationCore.SRID;
namespace System.Windows.Input
{
/////////////////////////////////////////////////////////////////////////
///
/// The RawStylusInputReport class encapsulates the raw input provided
/// from a stylus.
///
///
/// It is important to note that the InputReport class only contains
/// blittable types. This is required so that the report can be
/// marshalled across application domains.
///
internal class RawStylusInputReport : InputReport
{
/////////////////////////////////////////////////////////////////////
///
/// Constructs an instance of the RawStylusInputReport class.
///
///
/// The mode in which the input is being provided.
///
///
/// The time when the input occured.
///
///
/// The PresentationSource over which the stylus moved.
///
///
/// The PenContext.
///
///
/// The set of actions being reported.
///
///
/// Tablet device id.
///
///
/// Stylus device id.
///
///
/// Raw stylus data.
///
///
/// Critical: This handles critical data in the form of PresentationSource.
/// TreatAsSafe:There are demands on the critical data(PresentationSource)
///
[SecurityCritical,SecurityTreatAsSafe]
internal RawStylusInputReport(
InputMode mode,
int timestamp,
PresentationSource inputSource,
PenContext penContext,
RawStylusActions actions,
int tabletDeviceId,
int stylusDeviceId,
int[] data)
: base(inputSource, InputType.Stylus, mode, timestamp)
{
// Validate parameters
if (!RawStylusActionsHelper.IsValid(actions))
{
throw new InvalidEnumArgumentException(SR.Get(SRID.Enum_Invalid, "actions"));
}
if (data == null && actions != RawStylusActions.InRange)
{
throw new ArgumentNullException("data");
}
_penContext = new SecurityCriticalDataClass(penContext);
_actions = actions;
_tabletDeviceId = tabletDeviceId;
_stylusDeviceId = stylusDeviceId;
_data = data;
_isSynchronize = false;
}
/////////////////////////////////////////////////////////////////////
///
/// Constructs an instance of the RawStylusInputReport class.
///
///
/// The mode in which the input is being provided.
///
///
/// The time when the input occured.
///
///
/// The PresentationSource over which the stylus moved.
///
///
/// The set of actions being reported.
///
///
/// Raw stylus data StylusPointDescription.
///
///
/// Raw stylus data.
///
///
/// Critical: This handles critical data in the form of PresentationSource.
/// TreatAsSafe:There are demands on the critical data(PresentationSource)
///
[SecurityCritical,SecurityTreatAsSafe]
internal RawStylusInputReport(
InputMode mode,
int timestamp,
PresentationSource inputSource,
RawStylusActions actions,
StylusPointDescription mousePointDescription,
int[] mouseData)
: base(inputSource, InputType.Stylus, mode, timestamp)
{
// Validate parameters
if (!RawStylusActionsHelper.IsValid(actions))
{
throw new InvalidEnumArgumentException(SR.Get(SRID.Enum_Invalid, "actions"));
}
if (mouseData == null)
{
throw new ArgumentNullException("mouseData");
}
_penContext = new SecurityCriticalDataClass(null);
_actions = actions;
_tabletDeviceId = 0;
_stylusDeviceId = 0;
_data = mouseData;
_isSynchronize = false;
_mousePointDescription = mousePointDescription;
_isMouseInput = true;
}
/////////////////////////////////////////////////////////////////////
///
/// Read-only access to the set of actions that were reported.
///
internal RawStylusActions Actions { get { return _actions; } }
/////////////////////////////////////////////////////////////////////
///
/// Read-only access to stylus context id that reported the data.
///
internal int TabletDeviceId { get { return _tabletDeviceId; } }
/////////////////////////////////////////////////////////////////////
///
/// Read-only access to stylus context id that reported the data.
///
///
/// Critical: provides access to critical member _penContext
///
internal PenContext PenContext
{
[SecurityCritical]
get { return _penContext.Value; }
}
/////////////////////////////////////////////////////////////////////
///
/// Read-only access to stylus context id that reported the data.
///
///
/// Critical: This handles critical data _penContext
/// TreatAsSafe: We're returning safe data
///
internal StylusPointDescription StylusPointDescription
{
[SecurityCritical, SecurityTreatAsSafe]
get { return _isMouseInput ? _mousePointDescription : _penContext.Value.StylusPointDescription; }
}
/////////////////////////////////////////////////////////////////////
///
/// Read-only access to stylus device id that reported the data.
///
internal int StylusDeviceId { get { return _stylusDeviceId; } }
/////////////////////////////////////////////////////////////////////
internal StylusDevice StylusDevice
{
get { return _stylusDevice; }
set { _stylusDevice = value; }
}
/////////////////////////////////////////////////////////////////////
///
/// Read-only access to the raw data that was reported.
///
///
/// Critical: Access the critical field - _data
/// TreatAsSafe: No input is taken. It's safe to a clone.
///
[SecurityCritical, SecurityTreatAsSafe]
internal int[] GetRawPacketData()
{
if (_data == null)
return null;
return (int[])_data.Clone();
}
/////////////////////////////////////////////////////////////////////
///
/// Critical: Access the critical field - _data
/// TreatAsSafe: No input is taken. It's safe to return the last tablet point.
///
[SecurityCritical, SecurityTreatAsSafe]
internal Point GetLastTabletPoint()
{
int packetLength = StylusPointDescription.GetInputArrayLengthPerPoint();
int lastXIndex = _data.Length - packetLength;
return new Point(_data[lastXIndex], _data[lastXIndex + 1]);
}
/////////////////////////////////////////////////////////////////////
///
/// Critical - Hands out ref to internal data that can be used to spoof input.
///
internal int[] Data
{
[SecurityCritical]
get { return _data; }
}
/////////////////////////////////////////////////////////////////////
///
/// Critical - Setting property can be used to spoof input.
///
internal RawStylusInput RawStylusInput
{
get { return _rawStylusInput.Value; }
[SecurityCritical]
set { _rawStylusInput.Value = value; }
}
/////////////////////////////////////////////////////////////////////
internal bool Synchronized
{
get { return _isSynchronize; }
set { _isSynchronize = value; }
}
/////////////////////////////////////////////////////////////////////
RawStylusActions _actions;
int _tabletDeviceId;
///
/// Critical: Marked critical to prevent inadvertant spread to transparent code
///
private SecurityCriticalDataClass _penContext;
int _stylusDeviceId;
///
/// Critical to prevent accidental spread to transparent code
///
[SecurityCritical]
int[] _data;
StylusDevice _stylusDevice; // cached value looked up from _stylusDeviceId
SecurityCriticalDataForSet _rawStylusInput;
bool _isSynchronize; // Set from StylusDevice.Synchronize.
bool _isMouseInput; // Special case of mouse input being sent to plugins
StylusPointDescription _mousePointDescription; // layout for mouse points
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
using System;
using System.ComponentModel;
using System.Windows;
using System.Windows.Threading;
using System.Windows.Media;
using System.Windows.Input.StylusPlugIns;
using System.Security;
using System.Security.Permissions;
using MS.Internal.PresentationCore; // SecurityHelper
using MS.Internal;
using SR=MS.Internal.PresentationCore.SR;
using SRID=MS.Internal.PresentationCore.SRID;
namespace System.Windows.Input
{
/////////////////////////////////////////////////////////////////////////
///
/// The RawStylusInputReport class encapsulates the raw input provided
/// from a stylus.
///
///
/// It is important to note that the InputReport class only contains
/// blittable types. This is required so that the report can be
/// marshalled across application domains.
///
internal class RawStylusInputReport : InputReport
{
/////////////////////////////////////////////////////////////////////
///
/// Constructs an instance of the RawStylusInputReport class.
///
///
/// The mode in which the input is being provided.
///
///
/// The time when the input occured.
///
///
/// The PresentationSource over which the stylus moved.
///
///
/// The PenContext.
///
///
/// The set of actions being reported.
///
///
/// Tablet device id.
///
///
/// Stylus device id.
///
///
/// Raw stylus data.
///
///
/// Critical: This handles critical data in the form of PresentationSource.
/// TreatAsSafe:There are demands on the critical data(PresentationSource)
///
[SecurityCritical,SecurityTreatAsSafe]
internal RawStylusInputReport(
InputMode mode,
int timestamp,
PresentationSource inputSource,
PenContext penContext,
RawStylusActions actions,
int tabletDeviceId,
int stylusDeviceId,
int[] data)
: base(inputSource, InputType.Stylus, mode, timestamp)
{
// Validate parameters
if (!RawStylusActionsHelper.IsValid(actions))
{
throw new InvalidEnumArgumentException(SR.Get(SRID.Enum_Invalid, "actions"));
}
if (data == null && actions != RawStylusActions.InRange)
{
throw new ArgumentNullException("data");
}
_penContext = new SecurityCriticalDataClass(penContext);
_actions = actions;
_tabletDeviceId = tabletDeviceId;
_stylusDeviceId = stylusDeviceId;
_data = data;
_isSynchronize = false;
}
/////////////////////////////////////////////////////////////////////
///
/// Constructs an instance of the RawStylusInputReport class.
///
///
/// The mode in which the input is being provided.
///
///
/// The time when the input occured.
///
///
/// The PresentationSource over which the stylus moved.
///
///
/// The set of actions being reported.
///
///
/// Raw stylus data StylusPointDescription.
///
///
/// Raw stylus data.
///
///
/// Critical: This handles critical data in the form of PresentationSource.
/// TreatAsSafe:There are demands on the critical data(PresentationSource)
///
[SecurityCritical,SecurityTreatAsSafe]
internal RawStylusInputReport(
InputMode mode,
int timestamp,
PresentationSource inputSource,
RawStylusActions actions,
StylusPointDescription mousePointDescription,
int[] mouseData)
: base(inputSource, InputType.Stylus, mode, timestamp)
{
// Validate parameters
if (!RawStylusActionsHelper.IsValid(actions))
{
throw new InvalidEnumArgumentException(SR.Get(SRID.Enum_Invalid, "actions"));
}
if (mouseData == null)
{
throw new ArgumentNullException("mouseData");
}
_penContext = new SecurityCriticalDataClass(null);
_actions = actions;
_tabletDeviceId = 0;
_stylusDeviceId = 0;
_data = mouseData;
_isSynchronize = false;
_mousePointDescription = mousePointDescription;
_isMouseInput = true;
}
/////////////////////////////////////////////////////////////////////
///
/// Read-only access to the set of actions that were reported.
///
internal RawStylusActions Actions { get { return _actions; } }
/////////////////////////////////////////////////////////////////////
///
/// Read-only access to stylus context id that reported the data.
///
internal int TabletDeviceId { get { return _tabletDeviceId; } }
/////////////////////////////////////////////////////////////////////
///
/// Read-only access to stylus context id that reported the data.
///
///
/// Critical: provides access to critical member _penContext
///
internal PenContext PenContext
{
[SecurityCritical]
get { return _penContext.Value; }
}
/////////////////////////////////////////////////////////////////////
///
/// Read-only access to stylus context id that reported the data.
///
///
/// Critical: This handles critical data _penContext
/// TreatAsSafe: We're returning safe data
///
internal StylusPointDescription StylusPointDescription
{
[SecurityCritical, SecurityTreatAsSafe]
get { return _isMouseInput ? _mousePointDescription : _penContext.Value.StylusPointDescription; }
}
/////////////////////////////////////////////////////////////////////
///
/// Read-only access to stylus device id that reported the data.
///
internal int StylusDeviceId { get { return _stylusDeviceId; } }
/////////////////////////////////////////////////////////////////////
internal StylusDevice StylusDevice
{
get { return _stylusDevice; }
set { _stylusDevice = value; }
}
/////////////////////////////////////////////////////////////////////
///
/// Read-only access to the raw data that was reported.
///
///
/// Critical: Access the critical field - _data
/// TreatAsSafe: No input is taken. It's safe to a clone.
///
[SecurityCritical, SecurityTreatAsSafe]
internal int[] GetRawPacketData()
{
if (_data == null)
return null;
return (int[])_data.Clone();
}
/////////////////////////////////////////////////////////////////////
///
/// Critical: Access the critical field - _data
/// TreatAsSafe: No input is taken. It's safe to return the last tablet point.
///
[SecurityCritical, SecurityTreatAsSafe]
internal Point GetLastTabletPoint()
{
int packetLength = StylusPointDescription.GetInputArrayLengthPerPoint();
int lastXIndex = _data.Length - packetLength;
return new Point(_data[lastXIndex], _data[lastXIndex + 1]);
}
/////////////////////////////////////////////////////////////////////
///
/// Critical - Hands out ref to internal data that can be used to spoof input.
///
internal int[] Data
{
[SecurityCritical]
get { return _data; }
}
/////////////////////////////////////////////////////////////////////
///
/// Critical - Setting property can be used to spoof input.
///
internal RawStylusInput RawStylusInput
{
get { return _rawStylusInput.Value; }
[SecurityCritical]
set { _rawStylusInput.Value = value; }
}
/////////////////////////////////////////////////////////////////////
internal bool Synchronized
{
get { return _isSynchronize; }
set { _isSynchronize = value; }
}
/////////////////////////////////////////////////////////////////////
RawStylusActions _actions;
int _tabletDeviceId;
///
/// Critical: Marked critical to prevent inadvertant spread to transparent code
///
private SecurityCriticalDataClass _penContext;
int _stylusDeviceId;
///
/// Critical to prevent accidental spread to transparent code
///
[SecurityCritical]
int[] _data;
StylusDevice _stylusDevice; // cached value looked up from _stylusDeviceId
SecurityCriticalDataForSet _rawStylusInput;
bool _isSynchronize; // Set from StylusDevice.Synchronize.
bool _isMouseInput; // Special case of mouse input being sent to plugins
StylusPointDescription _mousePointDescription; // layout for mouse points
}
}
// 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
- BuildProvider.cs
- XmlQueryContext.cs
- Propagator.JoinPropagator.JoinPredicateVisitor.cs
- QilList.cs
- DataGridViewLayoutData.cs
- HttpWebResponse.cs
- StreamGeometryContext.cs
- PanelStyle.cs
- SAPIEngineTypes.cs
- BinaryObjectReader.cs
- HwndSourceKeyboardInputSite.cs
- MultipleViewPattern.cs
- ProviderBase.cs
- ScopelessEnumAttribute.cs
- ActivityCodeGenerator.cs
- StoreAnnotationsMap.cs
- XmlRootAttribute.cs
- VideoDrawing.cs
- SafePEFileHandle.cs
- ShaderRenderModeValidation.cs
- TextServicesCompartmentEventSink.cs
- DrawingState.cs
- ResourceSet.cs
- SendActivityValidator.cs
- QilChoice.cs
- GeneralTransform3DGroup.cs
- PeekCompletedEventArgs.cs
- MediaPlayer.cs
- EntityDataSourceSelectedEventArgs.cs
- BitmapPalettes.cs
- ResourcesBuildProvider.cs
- SqlBuffer.cs
- Operator.cs
- ControlIdConverter.cs
- TextShapeableCharacters.cs
- UserPreferenceChangingEventArgs.cs
- Grid.cs
- ItemCheckedEvent.cs
- TreeSet.cs
- Point4DValueSerializer.cs
- Utils.cs
- panel.cs
- TrustLevel.cs
- CharacterShapingProperties.cs
- HitTestFilterBehavior.cs
- RectValueSerializer.cs
- ProjectionPruner.cs
- TreeViewItem.cs
- Model3DGroup.cs
- PairComparer.cs
- NativeMethods.cs
- TextEditorParagraphs.cs
- ContentPosition.cs
- Psha1DerivedKeyGenerator.cs
- MessageBox.cs
- TemplateNameScope.cs
- BodyGlyph.cs
- PathData.cs
- OneOfElement.cs
- RequestCachingSection.cs
- ProfessionalColors.cs
- EntityRecordInfo.cs
- KeyboardEventArgs.cs
- ObjectStateEntry.cs
- LineBreakRecord.cs
- DecimalConstantAttribute.cs
- PeerPresenceInfo.cs
- TriggerBase.cs
- WpfPayload.cs
- ZipIOLocalFileDataDescriptor.cs
- ContentType.cs
- OrderByBuilder.cs
- DbDataRecord.cs
- DateTimeFormatInfo.cs
- ArithmeticException.cs
- WebBrowserDocumentCompletedEventHandler.cs
- WebPartDeleteVerb.cs
- Ops.cs
- diagnosticsswitches.cs
- WindowClosedEventArgs.cs
- xmlglyphRunInfo.cs
- SHA512.cs
- ProviderConnectionPointCollection.cs
- WebHttpBindingCollectionElement.cs
- CharAnimationUsingKeyFrames.cs
- XmlSchemaAny.cs
- ManifestResourceInfo.cs
- XmlSchemaAttribute.cs
- TraceListener.cs
- ImageIndexConverter.cs
- CursorConverter.cs
- CollaborationHelperFunctions.cs
- GeneralTransformGroup.cs
- LoginAutoFormat.cs
- NameValueConfigurationCollection.cs
- IBuiltInEvidence.cs
- XamlStream.cs
- ZipIOExtraFieldPaddingElement.cs
- QueryResponse.cs
- SystemUdpStatistics.cs