#![allow(non_camel_case_types, non_snake_case)]
use crate::co;
use crate::decl::*;
use crate::guard::*;
use crate::ole::privs::*;
use crate::prelude::*;
use crate::uxtheme::ffi;
impl_handle! { HTHEME;
}
impl uxtheme_Htheme for HTHEME {}
pub trait uxtheme_Htheme: Handle {
fn DrawThemeBackground(&self,
hdc: &HDC,
part_state: co::VS,
rc: RECT,
rc_clip: RECT,
) -> HrResult<()>
{
ok_to_hrresult(
unsafe {
ffi::DrawThemeBackground(
self.ptr(),
hdc.ptr(),
part_state.part,
part_state.state,
&rc as *const _ as _,
&rc_clip as *const _ as _,
)
},
)
}
#[must_use]
fn GetThemeAppProperties() -> co::STAP {
unsafe { co::STAP::from_raw(ffi::GetThemeAppProperties()) }
}
#[must_use]
fn GetThemeBackgroundContentRect(&self,
hdc: &HDC,
part_state: co::VS,
bounds: RECT,
) -> HrResult<RECT>
{
let mut rc_content = RECT::default();
ok_to_hrresult(
unsafe {
ffi::GetThemeBackgroundContentRect(
self.ptr(),
hdc.ptr(),
part_state.part,
part_state.state,
&bounds as *const _ as _,
&mut rc_content as *mut _ as _,
)
},
).map(|_| rc_content)
}
#[must_use]
fn GetThemeBackgroundExtent(&self,
hdc: &HDC,
part_state: co::VS,
rc_content: RECT,
) -> HrResult<RECT>
{
let mut rc_extent = RECT::default();
ok_to_hrresult(
unsafe {
ffi::GetThemeBackgroundExtent(
self.ptr(),
hdc.ptr(),
part_state.part,
part_state.state,
&rc_content as *const _ as _,
&mut rc_extent as *mut _ as _,
)
},
).map(|_| rc_extent)
}
#[must_use]
fn GetThemeBackgroundRegion(&self,
hdc: &HDC,
part_state: co::VS,
rc: RECT,
) -> HrResult<DeleteObjectGuard<HRGN>>
{
let mut hrgn = HRGN::NULL;
unsafe {
ok_to_hrresult(
ffi::GetThemeBackgroundRegion(
self.ptr(),
hdc.ptr(),
part_state.part,
part_state.state,
&rc as *const _ as _,
hrgn.as_mut(),
),
).map(|_| DeleteObjectGuard::new(hrgn))
}
}
#[must_use]
fn GetThemeColor(&self,
part_state: co::VS,
prop: co::TMT,
) -> HrResult<COLORREF>
{
let mut color = COLORREF::default();
ok_to_hrresult(
unsafe {
ffi::GetThemeColor(
self.ptr(),
part_state.part,
part_state.state,
prop.raw(),
color.as_mut(),
)
},
).map(|_| color)
}
#[must_use]
fn GetThemeMargins(&self,
hdc_fonts: Option<&HDC>,
part_state: co::VS,
prop: co::TMT,
draw_dest: Option<&RECT>,
) -> HrResult<MARGINS>
{
let mut margins = MARGINS::default();
ok_to_hrresult(
unsafe {
ffi::GetThemeMargins(
self.ptr(),
hdc_fonts.map_or(std::ptr::null_mut(), |h| h.ptr()),
part_state.part(),
part_state.state(),
prop.raw(),
draw_dest.map_or(std::ptr::null(), |p| p as *const _ as _),
&mut margins as *mut _ as _,
)
},
).map(|_| margins)
}
#[must_use]
fn GetThemeMetric(&self,
hdc_fonts: Option<&HDC>,
part_state: co::VS,
prop: co::TMT,
) -> HrResult<i32>
{
let mut val = i32::default();
ok_to_hrresult(
unsafe {
ffi::GetThemeMetric(
self.ptr(),
hdc_fonts.map_or(std::ptr::null_mut(), |h| h.ptr()),
part_state.part(),
part_state.state(),
prop.raw(),
&mut val,
)
},
).map(|_| val)
}
#[must_use]
fn GetThemePartSize(&self,
hdc_fonts: Option<&HDC>,
part_state: co::VS,
draw_dest: Option<&RECT>,
esize: co::THEMESIZE,
) -> HrResult<SIZE>
{
let mut sz = SIZE::default();
ok_to_hrresult(
unsafe {
ffi::GetThemePartSize(
self.ptr(),
hdc_fonts.map_or(std::ptr::null_mut(), |h| h.ptr()),
part_state.part(),
part_state.state(),
draw_dest.map_or(std::ptr::null(), |p| p as *const _ as _),
esize.raw(),
&mut sz as *mut _ as _,
)
}
).map(|_| sz)
}
#[must_use]
fn GetThemePosition(&self,
part_state: co::VS,
prop: co::TMT,
) -> HrResult<POINT>
{
let mut pt = POINT::default();
ok_to_hrresult(
unsafe {
ffi::GetThemePosition(
self.ptr(),
part_state.part(),
part_state.state(),
prop.raw(),
&mut pt as *mut _ as _,
)
},
).map(|_| pt)
}
#[must_use]
fn GetThemePropertyOrigin(&self,
part_state: co::VS,
prop: co::TMT,
) -> HrResult<co::PROPERTYORIGIN>
{
let mut origin = co::PROPERTYORIGIN::default();
ok_to_hrresult(
unsafe {
ffi::GetThemePropertyOrigin(
self.ptr(),
part_state.part(),
part_state.state(),
prop.raw(),
origin.as_mut(),
)
},
).map(|_| origin)
}
#[must_use]
fn GetThemeRect(&self,
part_state: co::VS,
prop: co::TMT,
) -> HrResult<RECT>
{
let mut rc = RECT::default();
ok_to_hrresult(
unsafe {
ffi::GetThemeRect(
self.ptr(),
part_state.part(),
part_state.state(),
prop.raw(),
&mut rc as *mut _ as _,
)
},
).map(|_| rc)
}
#[must_use]
fn IsThemeBackgroundPartiallyTransparent(&self,
part_state: co::VS,
) -> bool
{
unsafe {
ffi::IsThemeBackgroundPartiallyTransparent(
self.ptr(), part_state.part, part_state.state) != 0
}
}
#[must_use]
fn IsThemePartDefined(&self, part_state: co::VS) -> bool {
unsafe {
ffi::IsThemePartDefined(
self.ptr(), part_state.part, part_state.state) != 0
}
}
}