1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 5 use std::cell::UnsafeCell; 6 use std::ptr; 7 use winapi::um::dwrite::IDWriteRenderingParams; 8 use wio::com::ComPtr; 9 10 use super::DWriteFactory; 11 12 pub struct RenderingParams { 13 native: UnsafeCell<ComPtr<IDWriteRenderingParams>>, 14 } 15 16 impl RenderingParams { create_for_primary_monitor() -> RenderingParams17 pub fn create_for_primary_monitor() -> RenderingParams { 18 unsafe { 19 let mut native: *mut IDWriteRenderingParams = ptr::null_mut(); 20 let hr = (*DWriteFactory()).CreateRenderingParams(&mut native); 21 assert!(hr == 0); 22 RenderingParams::take(ComPtr::from_raw(native)) 23 } 24 } 25 take(native: ComPtr<IDWriteRenderingParams>) -> RenderingParams26 pub fn take(native: ComPtr<IDWriteRenderingParams>) -> RenderingParams { 27 RenderingParams { 28 native: UnsafeCell::new(native), 29 } 30 } 31 as_ptr(&self) -> *mut IDWriteRenderingParams32 pub unsafe fn as_ptr(&self) -> *mut IDWriteRenderingParams { 33 (*self.native.get()).as_raw() 34 } 35 } 36