mirror of
https://github.com/servo/servo.git
synced 2025-06-24 09:04:33 +01:00
Bug 1331213: Add sugar for nsCSSValue and nsCSSValue::Array. r=heycam r=Manishearth
I will use this soon to implement the media query evaluation code. Please review carefully. MozReview-Commit-ID: HXelawXBfH8 Signed-off-by: Emilio Cobos Álvarez <emilio@crisal.io>
This commit is contained in:
parent
ad32f40e13
commit
2dceb4502f
2 changed files with 79 additions and 0 deletions
|
@ -6,6 +6,7 @@
|
||||||
|
|
||||||
mod ns_com_ptr;
|
mod ns_com_ptr;
|
||||||
mod ns_css_shadow_array;
|
mod ns_css_shadow_array;
|
||||||
|
mod ns_css_value;
|
||||||
mod ns_style_auto_array;
|
mod ns_style_auto_array;
|
||||||
pub mod ns_style_coord;
|
pub mod ns_style_coord;
|
||||||
mod ns_t_array;
|
mod ns_t_array;
|
||||||
|
|
78
components/style/gecko_bindings/sugar/ns_css_value.rs
Normal file
78
components/style/gecko_bindings/sugar/ns_css_value.rs
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
|
//! Little helpers for `nsCSSValue`.
|
||||||
|
|
||||||
|
use gecko_bindings::bindings::Gecko_CSSValue_Drop;
|
||||||
|
use gecko_bindings::structs::{nsCSSValue, nsCSSUnit, nsCSSValue_Array};
|
||||||
|
use std::mem;
|
||||||
|
use std::ops::Index;
|
||||||
|
use std::slice;
|
||||||
|
|
||||||
|
impl nsCSSValue {
|
||||||
|
/// Create a CSSValue with null unit, useful to be used as a return value.
|
||||||
|
#[inline]
|
||||||
|
pub fn null() -> Self {
|
||||||
|
unsafe { mem::zeroed() }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns this nsCSSValue value as an integer, unchecked in release
|
||||||
|
/// builds.
|
||||||
|
pub fn integer_unchecked(&self) -> i32 {
|
||||||
|
debug_assert!(self.mUnit == nsCSSUnit::eCSSUnit_Integer ||
|
||||||
|
self.mUnit == nsCSSUnit::eCSSUnit_Enumerated ||
|
||||||
|
self.mUnit == nsCSSUnit::eCSSUnit_EnumColor);
|
||||||
|
unsafe { *self.mValue.mInt.as_ref() }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns this nsCSSValue value as a floating point value, unchecked in
|
||||||
|
/// release builds.
|
||||||
|
pub fn float_unchecked(&self) -> f32 {
|
||||||
|
debug_assert!(nsCSSUnit::eCSSUnit_Number as u32 <= self.mUnit as u32);
|
||||||
|
unsafe { *self.mValue.mFloat.as_ref() }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns this nsCSSValue as a nsCSSValue::Array, unchecked in release
|
||||||
|
/// builds.
|
||||||
|
pub unsafe fn array_unchecked(&self) -> &nsCSSValue_Array {
|
||||||
|
debug_assert!(nsCSSUnit::eCSSUnit_Array as u32 <= self.mUnit as u32 &&
|
||||||
|
self.mUnit as u32 <= nsCSSUnit::eCSSUnit_Calc_Divided as u32);
|
||||||
|
let array = *self.mValue.mArray.as_ref();
|
||||||
|
debug_assert!(!array.is_null());
|
||||||
|
&*array
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Drop for nsCSSValue {
|
||||||
|
fn drop(&mut self) {
|
||||||
|
unsafe { Gecko_CSSValue_Drop(self) };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl nsCSSValue_Array {
|
||||||
|
/// Return the length of this `nsCSSShadowArray`
|
||||||
|
#[inline]
|
||||||
|
pub fn len(&self) -> usize {
|
||||||
|
self.mCount
|
||||||
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn buffer(&self) -> *const nsCSSValue {
|
||||||
|
self.mArray.as_ptr()
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Get the array as a slice of nsCSSValues.
|
||||||
|
#[inline]
|
||||||
|
pub fn as_slice(&self) -> &[nsCSSValue] {
|
||||||
|
unsafe { slice::from_raw_parts(self.buffer(), self.len()) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Index<usize> for nsCSSValue_Array {
|
||||||
|
type Output = nsCSSValue;
|
||||||
|
#[inline]
|
||||||
|
fn index(&self, i: usize) -> &nsCSSValue {
|
||||||
|
&self.as_slice()[i]
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue