parent
4a71f79a78
commit
aa7e0df514
|
@ -57,6 +57,14 @@ To run the demo, make sure NPM and nightly Rust are installed, and run the follo
|
|||
|
||||
Then navigate to http://localhost:8000/.
|
||||
|
||||
## Testing
|
||||
|
||||
Pathfinder contains reference tests that compare its output to that of other rendering libraries,
|
||||
such as Cairo. To run them, install Cairo and FreeType if necessary, then perform the above steps,
|
||||
substituting the last line with:
|
||||
|
||||
$ cargo run --release --features reftests
|
||||
|
||||
## Authors
|
||||
|
||||
The primary author is Patrick Walton (@pcwalton), with contributions from the Servo development
|
||||
|
|
|
@ -3,6 +3,10 @@ name = "pathfinder_server"
|
|||
version = "0.1.0"
|
||||
authors = ["Patrick Walton <pcwalton@mimiga.net>"]
|
||||
|
||||
[features]
|
||||
default = []
|
||||
reftests = ["rsvg", "cairo-rs", "pathfinder_font_renderer/freetype"]
|
||||
|
||||
[dependencies]
|
||||
app_units = "0.5"
|
||||
base64 = "0.6"
|
||||
|
@ -16,7 +20,6 @@ lru-cache = "0.1"
|
|||
rocket = "0.3"
|
||||
rocket_codegen = "0.3"
|
||||
rocket_contrib = "0.3"
|
||||
rsvg = "0.3"
|
||||
serde = "1.0"
|
||||
serde_derive = "1.0"
|
||||
serde_json = "1.0"
|
||||
|
@ -24,13 +27,17 @@ serde_json = "1.0"
|
|||
[dependencies.cairo-rs]
|
||||
version = "0.3"
|
||||
features = ["png"]
|
||||
optional = true
|
||||
|
||||
[dependencies.rsvg]
|
||||
version = "0.3"
|
||||
optional = true
|
||||
|
||||
[dependencies.fontsan]
|
||||
git = "https://github.com/servo/fontsan.git"
|
||||
|
||||
[dependencies.pathfinder_font_renderer]
|
||||
path = "../../font-renderer"
|
||||
features = ["freetype"]
|
||||
|
||||
[dependencies.pathfinder_partitioner]
|
||||
path = "../../partitioner"
|
||||
|
|
|
@ -13,7 +13,6 @@
|
|||
|
||||
extern crate app_units;
|
||||
extern crate base64;
|
||||
extern crate cairo;
|
||||
extern crate env_logger;
|
||||
extern crate euclid;
|
||||
extern crate fontsan;
|
||||
|
@ -24,16 +23,19 @@ extern crate pathfinder_partitioner;
|
|||
extern crate pathfinder_path_utils;
|
||||
extern crate rocket;
|
||||
extern crate rocket_contrib;
|
||||
extern crate rsvg;
|
||||
|
||||
#[macro_use]
|
||||
extern crate lazy_static;
|
||||
#[macro_use]
|
||||
extern crate serde_derive;
|
||||
|
||||
#[cfg(feature = "reftests")]
|
||||
extern crate cairo;
|
||||
#[cfg(feature = "reftests")]
|
||||
extern crate rsvg;
|
||||
|
||||
use app_units::Au;
|
||||
use cairo::{Format, ImageSurface};
|
||||
use euclid::{Point2D, Size2D, Transform2D};
|
||||
use euclid::{Point2D, Transform2D};
|
||||
use image::{DynamicImage, ImageBuffer, ImageFormat, ImageRgba8};
|
||||
use lru_cache::LruCache;
|
||||
use pathfinder_font_renderer::{FontContext, FontInstance, FontKey, GlyphImage};
|
||||
|
@ -49,7 +51,6 @@ use rocket::http::{ContentType, Header, Status};
|
|||
use rocket::request::Request;
|
||||
use rocket::response::{NamedFile, Redirect, Responder, Response};
|
||||
use rocket_contrib::json::Json;
|
||||
use rsvg::{Handle, HandleExt};
|
||||
use std::fs::File;
|
||||
use std::io::{self, Cursor, Read};
|
||||
use std::ops::Range;
|
||||
|
@ -61,6 +62,13 @@ use std::u32;
|
|||
#[cfg(target_os = "macos")]
|
||||
use pathfinder_font_renderer::core_graphics;
|
||||
|
||||
#[cfg(feature = "reftests")]
|
||||
use euclid::Size2D;
|
||||
#[cfg(feature = "reftests")]
|
||||
use cairo::{Format, ImageSurface};
|
||||
#[cfg(feature = "reftests")]
|
||||
use rsvg::{Handle, HandleExt};
|
||||
|
||||
const SUGGESTED_JSON_SIZE_LIMIT: u64 = 32 * 1024 * 1024;
|
||||
|
||||
const CUBIC_ERROR_TOLERANCE: f32 = 0.1;
|
||||
|
@ -192,6 +200,7 @@ enum FontError {
|
|||
|
||||
#[derive(Clone, Copy, Debug, Serialize, Deserialize)]
|
||||
enum SvgError {
|
||||
ReftestsDisabled,
|
||||
UnknownBuiltinSvg,
|
||||
LoadingFailed,
|
||||
ImageWritingFailed,
|
||||
|
@ -353,6 +362,7 @@ fn otf_data_from_request(face: &FontRequestFace) -> Result<Arc<Vec<u8>>, FontErr
|
|||
}
|
||||
|
||||
// Fetches the SVG data.
|
||||
#[cfg(feature = "reftests")]
|
||||
fn svg_data_from_request(builtin_svg_name: &str) -> Result<Arc<Vec<u8>>, SvgError> {
|
||||
// Read in the builtin SVG.
|
||||
match BUILTIN_SVGS.iter().filter(|& &(name, _)| name == builtin_svg_name).next() {
|
||||
|
@ -619,6 +629,7 @@ fn render_reference_text(request: Json<RenderTextReferenceRequest>)
|
|||
Ok(reference_image)
|
||||
}
|
||||
|
||||
#[cfg(feature = "reftests")]
|
||||
#[post("/render-reference/svg", format = "application/json", data = "<request>")]
|
||||
fn render_reference_svg(request: Json<RenderSvgReferenceRequest>)
|
||||
-> Result<ReferenceImage, SvgError> {
|
||||
|
@ -656,6 +667,14 @@ fn render_reference_svg(request: Json<RenderSvgReferenceRequest>)
|
|||
})
|
||||
}
|
||||
|
||||
#[cfg(not(feature = "reftests"))]
|
||||
#[post("/render-reference/svg", format = "application/json", data = "<request>")]
|
||||
#[allow(unused_variables)]
|
||||
fn render_reference_svg(request: Json<RenderSvgReferenceRequest>)
|
||||
-> Result<ReferenceImage, SvgError> {
|
||||
Err(SvgError::ReftestsDisabled)
|
||||
}
|
||||
|
||||
// Static files
|
||||
#[get("/")]
|
||||
fn static_index() -> io::Result<NamedFile> {
|
||||
|
|
Loading…
Reference in New Issue