servo / core-graphics-rs Goto Github PK
View Code? Open in Web Editor NEWDEPRECATED - CoreGraphics bindings for Rust
Home Page: https://github.com/servo/core-foundation-rs/
License: Other
DEPRECATED - CoreGraphics bindings for Rust
Home Page: https://github.com/servo/core-foundation-rs/
License: Other
Seeing this after updating to 1.20.0:
...
error: type `private::ffi::CGSRegionObject` is private
--> /Users/zzz/.cargo/registry/src/github.com-1ecc6299db9ec823/core-graphics-0.3.2/src/private.rs:81:21
|
81 | assert!(ffi::CGSSetSurfaceShape(self.context_id,
| ^^^^^^^^^^^^^^^^^^^^^^^
Seems to be impacting data_provider::__CGDataProvider, color_space::__CGColorSpace and private::ffi::CGSRegionObject.
rustup show:
active toolchain
----------------
stable-x86_64-apple-darwin (default)
rustc 1.20.0 (f3d6973f4 2017-08-27)
Let me know if you need any more details, happy to provide it.
I've noticed several problems when worked with the code:
use
statements varies between files (it would be better to use the same style / order everywhere; one of the possible styles).use something::{str1, test, example}
and use something::{ str1, test, example }
styles are used, it would be nice to stick to one of the versions.TCFType
trait implementation. I think it makes sense to use impl_TCFType!
macro from core-foundation-sys
or something similar.It isn't possible to link against this crate on older macos versions since version 0.4.1 containing a commit around 1d652dd5db9124aba79e4f6292c3b292ee5403d7 which added a bunch of calls to the CGEvent API. The first symbol that stops working on our CI is CGEventPostToPid (macos 10.11+) but there are probably other missing symbols.
Unfortunately Firefox's WebRender integration needs to compile on macos 10.7.
It would be great to have a cargo feature flag to disable the APIs that are unavailable in 10.7. (Hopefully WebRender does not depend on any of them).
I'm trying to animate a Cocoa nsview via its layer. But with no luck. What would it take to make it work?
I'm trying for example to set the opacity of a layer. All the conditions to enable core animation are met.
This code crashes:
let content_view: id = msg_send![nswindow, contentView];
let layer: id = msg_send![content_view, layer];
let transform: CGAffineTransform = msg_send![layer, affineTransform];
msg_send![layer, setAffineTransform:transform];
And this code behaves in a strange way:
let content_view: id = msg_send![nswindow, contentView];
let layer: id = msg_send![content_view, layer];
let opacity: CGFloat = msg_send![layer, opacity];
// opacity is equal to 0.
let opacity: CGFloat = 0.5;
msg_send![layer, setOpacity:opacity];
// view disappear
let opacity: CGFloat = msg_send![layer, opacity];
// opacity is still equal to 0.
Problem
CGEvent::new_mouse_event
is not working
Reason
The values for CGEventType
are denoted as
// Mouse events.
LeftMouseDown = 1 << 1,
LeftMouseUp = 1 << 2,
RightMouseDown = 1 << 3,
RightMouseUp = 1 << 4,
MouseMoved = 1 << 5,
LeftMouseDragged = 1 << 6,
RightMouseDragged = 1 << 7,
etc.
which seems to be wrong. I think the declaration for e.g. NX_MOUSEMOVED
was confused with NX_MOUSEMOVEDMASK
If i look at like CGEventCreateMouseEvent
from CGEvent.h
it takes a CGEventType
and CGEventType
in CGEventTypes.h
is declared like this
typedef CF_ENUM(uint32_t, CGEventType) {
...
/* Mouse events. */
...
kCGEventMouseMoved = NX_MOUSEMOVED,
...
}
not NX_MOUSEMOVEDMASK
a minimal program shows the effect. If i use 5
for mousemoved โ the value of NX_MOUSEMOVED
โ instead of the values that is declared in CGEventType
1<<5
it works
extern crate core_graphics;
extern crate libc;
use self::core_graphics::display::*;
use self::core_graphics::event::*;
use self::core_graphics::geometry::*;
use self::core_graphics::event_source::*;
use std::ptr;
use libc::*;
#[link(name = "ApplicationServices", kind = "framework")]
extern {
fn CGEventCreateMouseEvent( source: CGEventSourceRef,
mouseType: uint32_t,//mouseType: CGEventType,
mouseCursorPosition: CGPoint,
mouseButton: CGMouseButton) -> CGEventRef;
fn CGEventPost(tapLocation: CGEventTapLocation, event: CGEventRef);
}
fn main() {
let x = 100.0;
let y = 100.0;
let MouseMoved = 5;
unsafe {
let mouse_ev = CGEventCreateMouseEvent(
ptr::null(),
MouseMoved, //CGEventType::MouseMoved,
CGPoint::new(x, y),
CGMouseButton::Left
);
if mouse_ev.is_null() {
println!("ref null");
}
CGEventPost(CGEventTapLocation::HID, mouse_ev);
}
}
Serialize impl serializes using the name of the font. This obviously won't work for fonts created from data.
This means adding a few items to Cargo.toml, and creating a small README.
Also it's probably a good idea to either rename this to rust-core-graphics-sys
. Alternatively one could move the externs into an ffi
folder and build an RAII API around them, but that's probably a job for another crate.
This is related to servo/core-text-rs#62 to remove the warnings when building.
The offending types for core-text
are CGAffineTransform
and CGContextRef
.
Other warnings in the crate should also be cleaned up or silenced. The method for the two listed types can be found at rust-lang/rust#27303
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.