Commit Graph

1545 Commits

Author SHA1 Message Date
Birunthan Mohanathas 46213a7ab0 Use typed wrap_under_{create,get}_rule() functions
Just some minor cleanup; no functional changes.
2018-01-30 20:49:10 +05:30
bors-servo c0c69aefdd Auto merge of #83 - poiru:font-traits, r=jdm
Add CTFontDescriptor::traits()

This provides easy access to e.g. the font weight.

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/core-text-rs/83)
<!-- Reviewable:end -->
2018-01-29 09:18:07 -06:00
Birunthan Mohanathas 4acd58e155 Add CTFontDescriptor::traits()
This provides easy access to e.g. the font weight.
2018-01-29 20:46:00 +05:30
bors-servo fd665cac20 Auto merge of #82 - poiru:fix-reference-leak, r=jdm
Properly release attribute returned by CTFontDescriptorCopyAttribute

CTFontDescriptorCopyAttribute returns a retained reference (i.e. it
follows the create rule) so were incorrectly retaining it again by using
`wrap_under_get_rule`.

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/core-text-rs/82)
<!-- Reviewable:end -->
2018-01-29 09:00:51 -06:00
Birunthan Mohanathas 7b5bee9608 Properly release attribute returned by CTFontDescriptorCopyAttribute
CTFontDescriptorCopyAttribute returns a retained reference (i.e. it
follows the create rule) so were incorrectly retaining it again by using
`wrap_under_get_rule`.
2018-01-29 20:27:52 +05:30
bors-servo cd657603ae Auto merge of #80 - jrmuizel:new-ver, r=jdm
Bump the version for a new release

<!-- Reviewable:start -->
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/core-text-rs/80)
<!-- Reviewable:end -->
2018-01-27 15:54:05 -06:00
Jeff Muizelaar 33f7081b12 Bump the version for a new release 2018-01-27 16:29:18 -05:00
bors-servo 0239987f57 Auto merge of #79 - jrmuizel:macros, r=jdm
Use macros from core-foundation for declaring types

This cleans up the code a lot and gives an implementation of Clone.

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/core-text-rs/79)
<!-- Reviewable:end -->
2018-01-27 15:24:32 -06:00
Jeff Muizelaar a7cc03d640 Use macros from core-foundation for declaring types
This cleans up the code a lot and gives an implementation of Clone.
2018-01-27 15:48:47 -05:00
bors-servo f062dcbc5e Auto merge of #154 - faern:iterate-untyped-array, r=jdm
Add possibility to iterate untyped CFArray

Maybe it was intentional, or maybe it was forgotten. But it is not possible to iterate an untyped array (`CFArray<*const c_void>`) in the `0.5.1` release, it was in `0.4`.

This extra `FromVoid` impl on `*const c_void` fixes that.

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/core-foundation-rs/154)
<!-- Reviewable:end -->
2018-01-27 09:37:41 -06:00
Linus Färnstrand dc9392c19e Add possibility to iterate untyped CFArray 2018-01-27 10:50:06 +01:00
bors-servo 3ffdfdc88c Auto merge of #77 - jrmuizel:typed-cfarray, r=jdm
Typed cfarray

We should merge this before publishing a new version.

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/core-text-rs/77)
<!-- Reviewable:end -->
2018-01-26 23:29:03 -06:00
Jeff Muizelaar 907b4f78b3 Add types to CFArrays 2018-01-27 00:28:39 -05:00
bors-servo 253d356cf4 Auto merge of #60 - faern:upgrade-core-foundation, r=jdm
Upgrade core foundation

This is a PR in a series of PRs originating at https://github.com/servo/core-foundation-rs/pull/132

The plan is to make a breaking change to `core-foundation` and release it as `0.5.0`. But before the merge/publish of `core-foundation` I will prepare a set of PRs making sure the entire dependency graph of Servo is ready for this change and can be switched over to `0.5.0` directly.

TODO before merge:
- [x] Merge `core-foundation` PR and publish.
- [x] Remove the last commit from this PR, so we depend on code from crates.io.

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/io-surface-rs/60)
<!-- Reviewable:end -->
2018-01-26 23:06:15 -06:00
bors-servo cc52e60442 Auto merge of #181 - faern:upgrade-core-foundation, r=jdm
Upgrade core foundation

This is a PR in a series of PRs originating at https://github.com/servo/core-foundation-rs/pull/132

The plan is to make a breaking change to `core-foundation` and release it as `0.5.0`. But before the merge/publish of `core-foundation` I will prepare a set of PRs making sure the entire dependency graph of Servo is ready for this change and can be switched over to `0.5.0` directly.

TODO before merge:
- [x] Merge `core-graphics` PR and publish.
- [x] Remove the last commit from this PR, so we depend on `core-foundation` from crates.io.

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/cocoa-rs/181)
<!-- Reviewable:end -->
2018-01-26 23:05:55 -06:00
bors-servo 192a4581c4 Auto merge of #75 - faern:upgrade-core-foundation, r=jdm
Upgrade core foundation

This is a PR in a series of PRs originating at https://github.com/servo/core-foundation-rs/pull/132

The plan is to make a breaking change to `core-foundation` and release it as `0.5.0`. But before the merge/publish of `core-foundation` I will prepare a set of PRs making sure the entire dependency graph of Servo is ready for this change and can be switched over to `0.5.0` directly

TODO before merge:
- [x] Merge `core-foundation` PR and publish.
- [x] Merge `core-graphics` PR and publish.
- [x] Remove the last commit from this PR, so we depend on `core-foundation` from crates.io.

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/core-text-rs/75)
<!-- Reviewable:end -->
2018-01-26 23:05:46 -06:00
bors-servo 87a3ea0de9 Auto merge of #110 - faern:upgrade-core-foundation, r=jdm
Upgrade core foundation

This is a PR in a series of PRs originating at https://github.com/servo/core-foundation-rs/pull/132

The plan is to make a breaking change to `core-foundation` and release it as `0.5.0`. But before the merge/publish of `core-foundation` I will prepare a set of PRs making sure the entire dependency graph of Servo is ready for this change and can be switched over to `0.5.0` directly.

TODO before merge:
- [x] Merge `core-foundation` PR and publish.
- [x] Remove the last commit from this PR, so we depend on `core-foundation` from crates.io.

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/core-graphics-rs/110)
<!-- Reviewable:end -->
2018-01-26 15:34:18 -06:00
bors-servo ff67c15632 Auto merge of #153 - servo:updateversion, r=jdm
Bump version to 0.5.1.

<!-- Reviewable:start -->
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/core-foundation-rs/153)
<!-- Reviewable:end -->
2018-01-26 13:01:11 -06:00
Josh Matthews 5d7753a78a Bump version to 0.5.1. 2018-01-26 13:48:25 -05:00
bors-servo 5330f5be1b Auto merge of #152 - servo:constmut, r=jrmuizel
Respect const/mut of system headers.

<!-- Reviewable:start -->
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/core-foundation-rs/152)
<!-- Reviewable:end -->
2018-01-26 12:47:09 -06:00
Josh Matthews 53609f26ac Respect const/mut of system headers. 2018-01-26 13:46:06 -05:00
bors-servo 725d73d180 Auto merge of #151 - jrmuizel:avoid-reexport, r=jdm
Avoid reexporting CFRelease

This is in theory a breaking change but maybe it doesn't matter.

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/core-foundation-rs/151)
<!-- Reviewable:end -->
2018-01-26 10:03:15 -06:00
Jeff Muizelaar c50094db9a Avoid reexporting CFRelease 2018-01-26 10:34:32 -05:00
Linus Färnstrand 2603f28cd0 Bump version to 9.0.0 2018-01-26 00:21:28 +01:00
Linus Färnstrand fc9e44f14f Update to new CFNumber constructor 2018-01-26 00:21:28 +01:00
Linus Färnstrand 2a6b5586bd Upgrade to core-foundation 0.5.0 2018-01-26 00:21:28 +01:00
bors-servo cb463d1ea5 Auto merge of #148 - jrmuizel:bounds-check, r=jdm
Lift getting the length of the array out.

This changes get() to return an Option<> and adds a get_unchecked() that doesn't do a bounds check. This means our bounds check can be inlined into the caller instead of us having to CFArrayGetCount twice for each element.

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/core-foundation-rs/148)
<!-- Reviewable:end -->
2018-01-25 13:22:59 -06:00
Jeff Muizelaar c662076906 Lift getting the length of the array out.
This changes get() to return an Option<> and adds a get_unchecked() that doesn't do a bounds check.
This means our bounds check can be inlined into the caller instead of us having to CFArrayGetCount twice
for each element.
2018-01-25 11:49:01 -05:00
bors-servo 4c7e92c677 Auto merge of #147 - jrmuizel:borrow, r=jdm
Add the ability to borrow values from the array.

This is a replacement for #143. It allows iteration while avoiding the reference count churn of the previous approach. It uses a TCFTypeBorrow (could probably use a better name) to hold a sort of reference to the array data. I'm interested in people's thoughts and opinions on this approach.

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/core-foundation-rs/147)
<!-- Reviewable:end -->
2018-01-25 09:32:50 -06:00
Jeff Muizelaar df7df6bb52 Add the ability to borrow values from the array.
This uses borrowed values from the array to avoid having to
Retain/Release during iteration. It also implements borrowing
for all TCFType.
2018-01-25 10:08:34 -05:00
bors-servo ec660b05cc Auto merge of #132 - faern:tcftype-ref-as-associated, r=jdm
Reference type as associated value instead of generic

Each `CFFoo` has exactly one `CFFooRef` and which one is defined by `CFFoo`, not by its user. Thus the type of reference can be an associated type instead of a generic.

As you can see this greatly simplifies things such as calling `instance_of` and `from_CFType_pairs` as well as using `CFPropertyListSubClass`. It basically removes one generic parameter from any method dealing with `TCFType`s in some way.

This is a breaking change, so it would probably mean a `0.5.0` release if accepted. I don't know what your stance on breaking changes or version bumps is, so I don't know if you want this or not. But it would simplify the API, both here, but first and foremost in higher level crates using this.

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/core-foundation-rs/132)
<!-- Reviewable:end -->
2018-01-24 11:30:17 -06:00
bors-servo 234846419e Auto merge of #76 - poiru:fix-family-name, r=jdm
Make CTFontDescriptor::family_name() actually return the family name

It was incorrectly returning the display name, which already has a separate
function.

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/core-text-rs/76)
<!-- Reviewable:end -->
2018-01-24 07:34:19 -06:00
Birunthan Mohanathas 397b5e36c1 Make CTFontDescriptor::family_name() actually return the family name
It incorrectly returning the display name, which already has a separate
function.
2018-01-24 19:02:51 +05:30
Linus Färnstrand 7e87a9d8fa Bump version to 0.5.0 2018-01-24 08:57:50 +01:00
Linus Färnstrand ab08525293 Rename as_untyped -> to_untyped, add into_untyped 2018-01-24 08:57:50 +01:00
Linus Färnstrand c071ba7874 Clean up my own non-rustfmt style 2018-01-23 22:42:39 +01:00
Linus Färnstrand 70dd9c3a7e Remove deprecated methods 2018-01-23 22:41:37 +01:00
Linus Färnstrand aae7c708c8 Change ConcreteTypeRef to an associated value 2018-01-23 22:41:37 +01:00
Linus Färnstrand 3aa63aa5b7 Add TCFTypeRef trait 2018-01-23 22:35:52 +01:00
Linus Färnstrand 249300d8ab Change CFErrorRef to *const ptr instead of *mut 2018-01-23 22:35:52 +01:00
bors-servo 0389b23266 Auto merge of #145 - faern:various-fixes-and-rearrangements, r=jdm
Various fixes and rearrangements

A couple of things that I found easy to do that would improve the readability and usability of the crate in various ways. Some might be more subjectively better rather than objectively better. I clogged some unrelated changes into the same PR since the merge process takes ages with Travis being this slow. Anyway, they all fit under the "cleanup" category :) Tell me if you want them split into multiple PRs.

* Export the sys part of the error module. All other modules do this. I guess it was missed?

* Fix so the macros are usable from other crates without having to depend on `core-foundation-sys` or import `CFRelease` into the scope where they are used.

* The tests in `lib.rs` were only testing the dictionary implementations, so I moved them to `dictionary.rs`

* I found it a bit undiscoverable that `CFRunLoopSource` define a method inside of `filedescriptor.rs`. At the same time it's not ideal to call the ffi-methods of the filedescriptor from runloop.rs. This rearrangement solves both of those problems by exposing `CFFileDescriptor::to_run_loop_source` that can be used from `runloop.rs`.

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/core-foundation-rs/145)
<!-- Reviewable:end -->
2018-01-23 12:12:28 -06:00
Linus Färnstrand 238756492f Fix consistency in how run_loop variables are named 2018-01-21 17:21:38 +01:00
Linus Färnstrand 637552ea4a Pub export sys part of error 2018-01-21 17:09:43 +01:00
Linus Färnstrand 224d741ff2 Fix so macros are usable outside of crate 2018-01-21 17:09:43 +01:00
Linus Färnstrand 251be4b2d6 Move dictionary test to dictionary.rs 2018-01-21 16:39:43 +01:00
Linus Färnstrand 3aa97e2abe Move CFRunLoopSource method to runloop.rs 2018-01-21 16:33:07 +01:00
bors-servo 8834563793 Auto merge of #142 - faern:add-consuming-cheap-cast, r=jdm
Add consuming cheap cast

There are a lot of places where we increment and decrement the retain count when we would not have to. For example, a very common use-case with PropertyLists is to just directly cast them to their correct sub type and then throw the PropertyList away (because there is nothing you can do with the PropertyList instance directly.)

The reason we do this, I guess, is mostly because all `Drop` implementations force a retain count decrement. So we have to keep incrementing it to keep it correct. But if we add a flag to types that can be used to disable the decrement, then we can also get rid of the increment when we virtually just want to cast a pointer between two types.

This PR implements this by adding a boolean flag to all CF structs that is used by the `Drop` impl to determine if it should `CFRelease` the instance or not. Then this flag is modified in appropriate places where we cast to other types and consume ourselves.

I added some benchmarks locally. I did not want to commit them since benchmarking only works on nighty, and I did not feel like adding a feature flag for it etc. Anyhow, the following benchmarks:
```rust
#[bench]
fn bench_before(b: &mut Bencher) {
   let string = CFString::from_static_string("Bar");
    b.iter(|| unsafe {
        string.clone()
            .to_CFPropertyList()
            .downcast::<_, CFString>()
            .unwrap()
            .disable_release();
    })
}

#[bench]
fn bench_after(b: &mut Bencher) {
    let string = CFString::from_static_string("Bar");
    b.iter(|| unsafe {
        string.clone()
            .into_CFPropertyList()
            .downcast_into::<_, CFString>()
            .unwrap()
            .disable_release();
    })
}
```
Given the following results:
```
test propertylist::test::bench_after         ... bench:          16 ns/iter (+/- 3)
test propertylist::test::bench_before        ... bench:          73 ns/iter (+/- 14)
```
The final call to `disable_release()` in the benchmarks are to prevent the type coming out of the `unwrap()` from calling `CFRelease` on drop, and thus avoid measuring that. I want to try to measure only `{to,into}_CFPropertyList`, `downcast` and `downcast_into`. The `clone` is needed because the `into` version requires it and it would then not be fair to not have it on both.

I would say that speeding it up by a factor of ~4 can be well worth it? (Well, that 4 is of course no good measurement of anything, microbenchmarks etc. etc.. The benchmark mostly shows that a lot can be gained from avoiding some retain counting.)

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/core-foundation-rs/142)
<!-- Reviewable:end -->
2018-01-20 19:13:21 -06:00
bors-servo 2d35ed2d49 Auto merge of #84 - trlim:filedescriptor, r=jdm
Add bindings for `CFFileDescriptor`

This pull request adds implementation of `CFFileDescriptor` and `CFRunLoopSource` related API.

<!-- Reviewable:start -->

---

This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/core-foundation-rs/84)

<!-- Reviewable:end -->
2018-01-20 17:17:36 -06:00
bors-servo a4cee535b6 Auto merge of #144 - Nemo157:publish-licenses, r=jdm
Include license files in packages

<!-- Reviewable:start -->
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/core-foundation-rs/144)
<!-- Reviewable:end -->
2018-01-20 13:01:36 -06:00
Linus Färnstrand 3ec0d57863 Convert CFMutableDictionary to use declare_TCFType 2018-01-20 17:15:58 +01:00