Giter Site home page Giter Site logo

core-graphics-rs's Introduction

The Servo Parallel Browser Engine Project

Servo is a prototype web browser engine written in the Rust language. It is currently developed on 64-bit macOS, 64-bit Linux, 64-bit Windows, and Android.

Servo welcomes contribution from everyone. Check out The Servo Book to get started, or go to servo.org for news and guides.

Getting started

For more detailed build instructions, see the Servo book under Setting up your environment, Building Servo, and Building for Android.

macOS

  • Download and install python, Xcode, and brew
  • Install rustup: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
  • Restart your shell to make sure cargo is available
  • Install the other dependencies: ./mach bootstrap
  • Build servoshell: ./mach build

Linux

  • Install curl and python:
    • Arch: sudo pacman -S --needed curl python python-pip
    • Debian, Ubuntu: sudo apt install curl python3-pip python3-venv
    • Fedora: sudo dnf install curl python3 python3-pip python3-devel
    • Gentoo: sudo emerge net-misc/curl dev-python/pip
  • Install rustup: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
  • Restart your shell to make sure cargo is available
  • Install the other dependencies: ./mach bootstrap
  • Build servoshell: ./mach build

Windows

  • Download and install python, choco, and rustup
    • Be sure to select Quick install via the Visual Studio Community installer
  • In the Visual Studio Installer, ensure the following components are installed:
    • Windows 10 SDK (10.0.19041.0) (Microsoft.VisualStudio.Component.Windows10SDK.19041)
    • MSVC v143 - VS 2022 C++ x64/x86 build tools (Latest) (Microsoft.VisualStudio.Component.VC.Tools.x86.x64)
    • C++ ATL for latest v143 build tools (x86 & x64) (Microsoft.VisualStudio.Component.VC.ATL)
    • C++ MFC for latest v143 build tools (x86 & x64) (Microsoft.VisualStudio.Component.VC.ATLMFC)
  • Restart your shell to make sure cargo is available
  • Install the other dependencies: .\mach bootstrap
  • Build servoshell: .\mach build

Android

  • Ensure that the following environment variables are set:
    • ANDROID_SDK_ROOT
    • ANDROID_NDK_ROOT: $ANDROID_SDK_ROOT/ndk/26.2.11394342/ ANDROID_SDK_ROOT can be any directory (such as ~/android-sdk). All of the Android build dependencies will be installed there.
  • Install the latest version of the Android command-line tools to $ANDROID_SDK_ROOT/cmdline-tools/latest.
  • Run the following command to install the necessary components:
    sudo $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager --install
     "build-tools;33.0.2" \
     "emulator" \
     "ndk;26.2.11394342" \
     "platform-tools" \
     "platforms;android-33" \
     "system-images;android-33;google_apis;x86_64"
  • Follow the instructions above for the platform you are building on

core-graphics-rs's People

Contributors

algesten avatar amccreight avatar brson avatar daniel-abramov avatar eijebong avatar faern avatar fkaa avatar frewsxcv avatar glennw avatar gw3583 avatar jdm avatar jrmuizel avatar kmcallister avatar kornelski avatar larsbergstrom avatar lsalzman avatar mbrubeck avatar metajack avatar ms2ger avatar msanders avatar natalyakovalova avatar nox avatar pcwalton avatar pythoneer avatar ratake avatar robertg avatar rthomas avatar simonsapin avatar ssheldon avatar wilsongiese avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

core-graphics-rs's Issues

Clean up the code

I've noticed several problems when worked with the code:

  1. Some inconsistencies in coding style: the order of use statements varies between files (it would be better to use the same style / order everywhere; one of the possible styles).
  2. When multiple functions/structures/types are imported from the module, both 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.
  3. Sometimes the text width is more than 100 characters.
  4. There is a lot of boilerplate code in each module when it comes to TCFType trait implementation. I think it makes sense to use impl_TCFType! macro from core-foundation-sys or something similar.

Publish to crates.io

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.

How to use nsview.layer?

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.

core-graphics 0.3.2 fails to build on 1.20.0 on OSX

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.

The crate does not work with MacOS versions below 10.11 anymore.

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).

Wrong enum declaration for CGEventType

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.his 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);     
    }
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.