3 * Copyright (c) 2007-2010 SlimDX Group
\r
5 * Permission is hereby granted, free of charge, to any person obtaining a copy
\r
6 * of this software and associated documentation files (the "Software"), to deal
\r
7 * in the Software without restriction, including without limitation the rights
\r
8 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
\r
9 * copies of the Software, and to permit persons to whom the Software is
\r
10 * furnished to do so, subject to the following conditions:
\r
12 * The above copyright notice and this permission notice shall be included in
\r
13 * all copies or substantial portions of the Software.
\r
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
\r
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
\r
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
\r
18 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
\r
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
\r
20 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
\r
26 #include "ModeDescription.h"
\r
28 using namespace System;
\r
29 using namespace System::Globalization;
\r
35 ModeDescription::ModeDescription( int width, int height, Rational refreshRate, DXGI::Format format )
\r
36 : m_Width( width ), m_Height( height ), m_RefreshRate( refreshRate ), m_Format( format ),
\r
37 m_ScanlineOrdering( DisplayModeScanlineOrdering::Unspecified ), m_Scaling( DisplayModeScaling::Unspecified )
\r
41 ModeDescription::ModeDescription( const DXGI_MODE_DESC& native )
\r
43 m_Width = native.Width;
\r
44 m_Height = native.Height;
\r
45 m_RefreshRate.Numerator = native.RefreshRate.Numerator;
\r
46 m_RefreshRate.Denominator = native.RefreshRate.Denominator;
\r
47 m_Format = static_cast<DXGI::Format>( native.Format );
\r
48 m_ScanlineOrdering = static_cast<DisplayModeScanlineOrdering>( native.ScanlineOrdering );
\r
49 m_Scaling = static_cast<DisplayModeScaling>( native.Scaling );
\r
52 DXGI_MODE_DESC ModeDescription::CreateNativeVersion()
\r
54 DXGI_MODE_DESC native;
\r
55 native.Width = m_Width;
\r
56 native.Height = m_Height;
\r
57 native.RefreshRate.Numerator = m_RefreshRate.Numerator;
\r
58 native.RefreshRate.Denominator = m_RefreshRate.Denominator;
\r
59 native.Format = static_cast<DXGI_FORMAT>( m_Format );
\r
60 native.ScanlineOrdering = static_cast<DXGI_MODE_SCANLINE_ORDER>( m_ScanlineOrdering );
\r
61 native.Scaling = static_cast<DXGI_MODE_SCALING>( m_Scaling );
\r
66 int ModeDescription::Width::get()
\r
71 void ModeDescription::Width::set( int value )
\r
76 int ModeDescription::Height::get()
\r
81 void ModeDescription::Height::set( int value )
\r
86 Rational ModeDescription::RefreshRate::get()
\r
88 return m_RefreshRate;
\r
91 void ModeDescription::RefreshRate::set( Rational value )
\r
93 m_RefreshRate = value;
\r
96 DXGI::Format ModeDescription::Format::get()
\r
101 void ModeDescription::Format::set( DXGI::Format value )
\r
106 DisplayModeScanlineOrdering ModeDescription::ScanlineOrdering::get()
\r
108 return m_ScanlineOrdering;
\r
111 void ModeDescription::ScanlineOrdering::set( DisplayModeScanlineOrdering value )
\r
113 m_ScanlineOrdering = value;
\r
116 DisplayModeScaling ModeDescription::Scaling::get()
\r
121 void ModeDescription::Scaling::set( DisplayModeScaling value )
\r
126 String^ ModeDescription::ToString()
\r
128 return String::Format( CultureInfo::CurrentCulture, "{0}x{1}x{2}", m_Width, m_Height, m_RefreshRate.Denominator == 0 ? 0 : m_RefreshRate.Numerator / m_RefreshRate.Denominator );
\r
131 bool ModeDescription::operator == ( ModeDescription left, ModeDescription right )
\r
133 return ModeDescription::Equals( left, right );
\r
136 bool ModeDescription::operator != ( ModeDescription left, ModeDescription right )
\r
138 return !ModeDescription::Equals( left, right );
\r
141 int ModeDescription::GetHashCode()
\r
143 return m_Width.GetHashCode() + m_Height.GetHashCode() + m_RefreshRate.GetHashCode()
\r
144 + m_Format.GetHashCode() + m_ScanlineOrdering.GetHashCode() + m_Scaling.GetHashCode();
\r
147 bool ModeDescription::Equals( Object^ value )
\r
149 if( value == nullptr )
\r
152 if( value->GetType() != GetType() )
\r
155 return Equals( safe_cast<ModeDescription>( value ) );
\r
158 bool ModeDescription::Equals( ModeDescription value )
\r
160 return ( m_Width == value.m_Width && m_Height == value.m_Height && m_RefreshRate == value.m_RefreshRate
\r
161 && m_Format == value.m_Format && m_ScanlineOrdering == value.m_ScanlineOrdering && m_Scaling == value.m_Scaling );
\r
164 bool ModeDescription::Equals( ModeDescription% value1, ModeDescription% value2 )
\r
166 return ( value1.m_Width == value2.m_Width && value1.m_Height == value2.m_Height && value1.m_RefreshRate == value2.m_RefreshRate
\r
167 && value1.m_Format == value2.m_Format && value1.m_ScanlineOrdering == value2.m_ScanlineOrdering && value1.m_Scaling == value2.m_Scaling );
\r