Switch to using rusttype
This commit is contained in:
parent
b6cec7fb0c
commit
b0802162ea
|
@ -4,4 +4,5 @@ version = "0.1.0"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
ransid = { git = "https://github.com/redox-os/ransid.git", branch = "new_api" }
|
ransid = { git = "https://github.com/redox-os/ransid.git", branch = "new_api" }
|
||||||
|
rusttype = { git = "https://github.com/dylanede/rusttype.git" }
|
||||||
syscall = { path = "../../syscall/" }
|
syscall = { path = "../../syscall/" }
|
||||||
|
|
|
@ -1,8 +1,15 @@
|
||||||
|
extern crate rusttype;
|
||||||
|
|
||||||
use std::cmp;
|
use std::cmp;
|
||||||
|
|
||||||
use primitive::{fast_set32, fast_set64, fast_copy64};
|
use primitive::{fast_set32, fast_set64, fast_copy64};
|
||||||
|
|
||||||
static FONT: &'static [u8] = include_bytes!("../../../res/unifont.font");
|
use self::rusttype::{Font, FontCollection, Scale, point};
|
||||||
|
|
||||||
|
static FONT: &'static [u8] = include_bytes!("../../../res/fonts/DejaVuSansMono.ttf");
|
||||||
|
static FONT_BOLD: &'static [u8] = include_bytes!("../../../res/fonts/DejaVuSansMono-Bold.ttf");
|
||||||
|
static FONT_BOLD_ITALIC: &'static [u8] = include_bytes!("../../../res/fonts/DejaVuSansMono-BoldOblique.ttf");
|
||||||
|
static FONT_ITALIC: &'static [u8] = include_bytes!("../../../res/fonts/DejaVuSansMono-Oblique.ttf");
|
||||||
|
|
||||||
/// A display
|
/// A display
|
||||||
pub struct Display {
|
pub struct Display {
|
||||||
|
@ -10,6 +17,10 @@ pub struct Display {
|
||||||
pub height: usize,
|
pub height: usize,
|
||||||
pub onscreen: &'static mut [u32],
|
pub onscreen: &'static mut [u32],
|
||||||
pub offscreen: &'static mut [u32],
|
pub offscreen: &'static mut [u32],
|
||||||
|
pub font: Font<'static>,
|
||||||
|
pub font_bold: Font<'static>,
|
||||||
|
pub font_bold_italic: Font<'static>,
|
||||||
|
pub font_italic: Font<'static>
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Display {
|
impl Display {
|
||||||
|
@ -19,6 +30,10 @@ impl Display {
|
||||||
height: height,
|
height: height,
|
||||||
onscreen: onscreen,
|
onscreen: onscreen,
|
||||||
offscreen: offscreen,
|
offscreen: offscreen,
|
||||||
|
font: FontCollection::from_bytes(FONT).into_font().unwrap(),
|
||||||
|
font_bold: FontCollection::from_bytes(FONT_BOLD).into_font().unwrap(),
|
||||||
|
font_bold_italic: FontCollection::from_bytes(FONT_BOLD_ITALIC).into_font().unwrap(),
|
||||||
|
font_italic: FontCollection::from_bytes(FONT_ITALIC).into_font().unwrap()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,42 +67,42 @@ impl Display {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Draw a character
|
/// Draw a character
|
||||||
pub fn char(&mut self, x: usize, y: usize, character: char, color: u32) {
|
pub fn char(&mut self, x: usize, y: usize, character: char, color: u32, bold: bool, italic: bool) {
|
||||||
if x + 8 <= self.width && y + 16 <= self.height {
|
let width = self.width;
|
||||||
let mut font_i = 16 * (character as usize);
|
let height = self.height;
|
||||||
let font_end = font_i + 16;
|
let offscreen = self.offscreen.as_mut_ptr();
|
||||||
if font_end <= FONT.len() {
|
let onscreen = self.onscreen.as_mut_ptr();
|
||||||
let mut offscreen_ptr = self.offscreen.as_mut_ptr() as usize;
|
|
||||||
let mut onscreen_ptr = self.onscreen.as_mut_ptr() as usize;
|
|
||||||
|
|
||||||
let stride = self.width * 4;
|
let font = if bold && italic {
|
||||||
|
&self.font_bold_italic
|
||||||
|
} else if bold {
|
||||||
|
&self.font_bold
|
||||||
|
} else if italic {
|
||||||
|
&self.font_italic
|
||||||
|
} else {
|
||||||
|
&self.font
|
||||||
|
};
|
||||||
|
|
||||||
let offset = y * stride + x * 4;
|
if let Some(glyph) = font.glyph(character){
|
||||||
offscreen_ptr += offset;
|
let scale = Scale::uniform(16.0);
|
||||||
onscreen_ptr += offset;
|
let v_metrics = font.v_metrics(scale);
|
||||||
|
let point = point(0.0, v_metrics.ascent);
|
||||||
|
glyph.scaled(scale).positioned(point).draw(|off_x, off_y, v| {
|
||||||
|
let off_x = x + off_x as usize;
|
||||||
|
let off_y = y + off_y as usize;
|
||||||
|
// There's still a possibility that the glyph clips the boundaries of the bitmap
|
||||||
|
if off_x < width && off_y < height {
|
||||||
|
let v_u = (v * 255.0) as u32;
|
||||||
|
let r = ((color >> 16) & 0xFF * v_u)/255;
|
||||||
|
let g = ((color >> 8) & 0xFF * v_u)/255;
|
||||||
|
let b = (color & 0xFF * v_u)/255;
|
||||||
|
let c = (r << 16) | (g << 8) | b;
|
||||||
|
|
||||||
while font_i < font_end {
|
let index = (off_y * width + off_x) as isize;
|
||||||
let mut row_data = FONT[font_i];
|
unsafe { *offscreen.offset(index) = c; }
|
||||||
let mut col = 8;
|
unsafe { *onscreen.offset(index) = c; }
|
||||||
while col > 0 {
|
|
||||||
col -= 1;
|
|
||||||
if row_data & 1 == 1 {
|
|
||||||
unsafe {
|
|
||||||
*((offscreen_ptr + col * 4) as *mut u32) = color;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
row_data = row_data >> 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsafe {
|
|
||||||
fast_copy64(onscreen_ptr as *mut u64, offscreen_ptr as *const u64, 4);
|
|
||||||
}
|
|
||||||
|
|
||||||
offscreen_ptr += stride;
|
|
||||||
onscreen_ptr += stride;
|
|
||||||
font_i += 1;
|
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -67,7 +67,7 @@ impl Scheme for DisplayScheme {
|
||||||
let mut display = self.display.borrow_mut();
|
let mut display = self.display.borrow_mut();
|
||||||
self.console.borrow_mut().write(buf, |event| {
|
self.console.borrow_mut().write(buf, |event| {
|
||||||
match event {
|
match event {
|
||||||
Event::Char { x, y, c, color, .. } => display.char(x * 8, y * 16, c, color.data),
|
Event::Char { x, y, c, color, bold, .. } => display.char(x * 8, y * 16, c, color.data, bold, false),
|
||||||
Event::Rect { x, y, w, h, color } => display.rect(x * 8, y * 16, w * 8, h * 16, color.data),
|
Event::Rect { x, y, w, h, color } => display.rect(x * 8, y * 16, w * 8, h * 16, color.data),
|
||||||
Event::Scroll { rows, color } => display.scroll(rows * 16, color.data)
|
Event::Scroll { rows, color } => display.scroll(rows * 16, color.data)
|
||||||
}
|
}
|
||||||
|
|
BIN
res/fonts/DejaVuSansMono-Bold.ttf
Normal file
BIN
res/fonts/DejaVuSansMono-Bold.ttf
Normal file
Binary file not shown.
BIN
res/fonts/DejaVuSansMono-BoldOblique.ttf
Normal file
BIN
res/fonts/DejaVuSansMono-BoldOblique.ttf
Normal file
Binary file not shown.
187
res/fonts/DejaVuSansMono-LICENSE
Normal file
187
res/fonts/DejaVuSansMono-LICENSE
Normal file
|
@ -0,0 +1,187 @@
|
||||||
|
Fonts are (c) Bitstream (see below). DejaVu changes are in public domain.
|
||||||
|
Glyphs imported from Arev fonts are (c) Tavmjong Bah (see below)
|
||||||
|
|
||||||
|
|
||||||
|
Bitstream Vera Fonts Copyright
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is
|
||||||
|
a trademark of Bitstream, Inc.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of the fonts accompanying this license ("Fonts") and associated
|
||||||
|
documentation files (the "Font Software"), to reproduce and distribute the
|
||||||
|
Font Software, including without limitation the rights to use, copy, merge,
|
||||||
|
publish, distribute, and/or sell copies of the Font Software, and to permit
|
||||||
|
persons to whom the Font Software is furnished to do so, subject to the
|
||||||
|
following conditions:
|
||||||
|
|
||||||
|
The above copyright and trademark notices and this permission notice shall
|
||||||
|
be included in all copies of one or more of the Font Software typefaces.
|
||||||
|
|
||||||
|
The Font Software may be modified, altered, or added to, and in particular
|
||||||
|
the designs of glyphs or characters in the Fonts may be modified and
|
||||||
|
additional glyphs or characters may be added to the Fonts, only if the fonts
|
||||||
|
are renamed to names not containing either the words "Bitstream" or the word
|
||||||
|
"Vera".
|
||||||
|
|
||||||
|
This License becomes null and void to the extent applicable to Fonts or Font
|
||||||
|
Software that has been modified and is distributed under the "Bitstream
|
||||||
|
Vera" names.
|
||||||
|
|
||||||
|
The Font Software may be sold as part of a larger software package but no
|
||||||
|
copy of one or more of the Font Software typefaces may be sold by itself.
|
||||||
|
|
||||||
|
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT,
|
||||||
|
TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME
|
||||||
|
FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING
|
||||||
|
ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
|
||||||
|
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
|
||||||
|
THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE
|
||||||
|
FONT SOFTWARE.
|
||||||
|
|
||||||
|
Except as contained in this notice, the names of Gnome, the Gnome
|
||||||
|
Foundation, and Bitstream Inc., shall not be used in advertising or
|
||||||
|
otherwise to promote the sale, use or other dealings in this Font Software
|
||||||
|
without prior written authorization from the Gnome Foundation or Bitstream
|
||||||
|
Inc., respectively. For further information, contact: fonts at gnome dot
|
||||||
|
org.
|
||||||
|
|
||||||
|
Arev Fonts Copyright
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of the fonts accompanying this license ("Fonts") and
|
||||||
|
associated documentation files (the "Font Software"), to reproduce
|
||||||
|
and distribute the modifications to the Bitstream Vera Font Software,
|
||||||
|
including without limitation the rights to use, copy, merge, publish,
|
||||||
|
distribute, and/or sell copies of the Font Software, and to permit
|
||||||
|
persons to whom the Font Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright and trademark notices and this permission notice
|
||||||
|
shall be included in all copies of one or more of the Font Software
|
||||||
|
typefaces.
|
||||||
|
|
||||||
|
The Font Software may be modified, altered, or added to, and in
|
||||||
|
particular the designs of glyphs or characters in the Fonts may be
|
||||||
|
modified and additional glyphs or characters may be added to the
|
||||||
|
Fonts, only if the fonts are renamed to names not containing either
|
||||||
|
the words "Tavmjong Bah" or the word "Arev".
|
||||||
|
|
||||||
|
This License becomes null and void to the extent applicable to Fonts
|
||||||
|
or Font Software that has been modified and is distributed under the
|
||||||
|
"Tavmjong Bah Arev" names.
|
||||||
|
|
||||||
|
The Font Software may be sold as part of a larger software package but
|
||||||
|
no copy of one or more of the Font Software typefaces may be sold by
|
||||||
|
itself.
|
||||||
|
|
||||||
|
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||||
|
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL
|
||||||
|
TAVMJONG BAH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||||
|
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||||
|
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||||
|
|
||||||
|
Except as contained in this notice, the name of Tavmjong Bah shall not
|
||||||
|
be used in advertising or otherwise to promote the sale, use or other
|
||||||
|
dealings in this Font Software without prior written authorization
|
||||||
|
from Tavmjong Bah. For further information, contact: tavmjong @ free
|
||||||
|
. fr.
|
||||||
|
|
||||||
|
TeX Gyre DJV Math
|
||||||
|
-----------------
|
||||||
|
Fonts are (c) Bitstream (see below). DejaVu changes are in public domain.
|
||||||
|
|
||||||
|
Math extensions done by B. Jackowski, P. Strzelczyk and P. Pianowski
|
||||||
|
(on behalf of TeX users groups) are in public domain.
|
||||||
|
|
||||||
|
Letters imported from Euler Fraktur from AMSfonts are (c) American
|
||||||
|
Mathematical Society (see below).
|
||||||
|
Bitstream Vera Fonts Copyright
|
||||||
|
Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera
|
||||||
|
is a trademark of Bitstream, Inc.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of the fonts accompanying this license (“Fonts”) and associated
|
||||||
|
documentation
|
||||||
|
files (the “Font Software”), to reproduce and distribute the Font Software,
|
||||||
|
including without limitation the rights to use, copy, merge, publish,
|
||||||
|
distribute,
|
||||||
|
and/or sell copies of the Font Software, and to permit persons to whom
|
||||||
|
the Font Software is furnished to do so, subject to the following
|
||||||
|
conditions:
|
||||||
|
|
||||||
|
The above copyright and trademark notices and this permission notice
|
||||||
|
shall be
|
||||||
|
included in all copies of one or more of the Font Software typefaces.
|
||||||
|
|
||||||
|
The Font Software may be modified, altered, or added to, and in particular
|
||||||
|
the designs of glyphs or characters in the Fonts may be modified and
|
||||||
|
additional
|
||||||
|
glyphs or characters may be added to the Fonts, only if the fonts are
|
||||||
|
renamed
|
||||||
|
to names not containing either the words “Bitstream” or the word “Vera”.
|
||||||
|
|
||||||
|
This License becomes null and void to the extent applicable to Fonts or
|
||||||
|
Font Software
|
||||||
|
that has been modified and is distributed under the “Bitstream Vera”
|
||||||
|
names.
|
||||||
|
|
||||||
|
The Font Software may be sold as part of a larger software package but
|
||||||
|
no copy
|
||||||
|
of one or more of the Font Software typefaces may be sold by itself.
|
||||||
|
|
||||||
|
THE FONT SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT,
|
||||||
|
TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME
|
||||||
|
FOUNDATION
|
||||||
|
BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL,
|
||||||
|
SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN
|
||||||
|
ACTION
|
||||||
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR
|
||||||
|
INABILITY TO USE
|
||||||
|
THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||||
|
Except as contained in this notice, the names of GNOME, the GNOME
|
||||||
|
Foundation,
|
||||||
|
and Bitstream Inc., shall not be used in advertising or otherwise to promote
|
||||||
|
the sale, use or other dealings in this Font Software without prior written
|
||||||
|
authorization from the GNOME Foundation or Bitstream Inc., respectively.
|
||||||
|
For further information, contact: fonts at gnome dot org.
|
||||||
|
|
||||||
|
AMSFonts (v. 2.2) copyright
|
||||||
|
|
||||||
|
The PostScript Type 1 implementation of the AMSFonts produced by and
|
||||||
|
previously distributed by Blue Sky Research and Y&Y, Inc. are now freely
|
||||||
|
available for general use. This has been accomplished through the
|
||||||
|
cooperation
|
||||||
|
of a consortium of scientific publishers with Blue Sky Research and Y&Y.
|
||||||
|
Members of this consortium include:
|
||||||
|
|
||||||
|
Elsevier Science IBM Corporation Society for Industrial and Applied
|
||||||
|
Mathematics (SIAM) Springer-Verlag American Mathematical Society (AMS)
|
||||||
|
|
||||||
|
In order to assure the authenticity of these fonts, copyright will be
|
||||||
|
held by
|
||||||
|
the American Mathematical Society. This is not meant to restrict in any way
|
||||||
|
the legitimate use of the fonts, such as (but not limited to) electronic
|
||||||
|
distribution of documents containing these fonts, inclusion of these fonts
|
||||||
|
into other public domain or commercial font collections or computer
|
||||||
|
applications, use of the outline data to create derivative fonts and/or
|
||||||
|
faces, etc. However, the AMS does require that the AMS copyright notice be
|
||||||
|
removed from any derivative versions of the fonts which have been altered in
|
||||||
|
any way. In addition, to ensure the fidelity of TeX documents using Computer
|
||||||
|
Modern fonts, Professor Donald Knuth, creator of the Computer Modern faces,
|
||||||
|
has requested that any alterations which yield different font metrics be
|
||||||
|
given a different name.
|
||||||
|
|
||||||
|
$Id$
|
BIN
res/fonts/DejaVuSansMono-Oblique.ttf
Normal file
BIN
res/fonts/DejaVuSansMono-Oblique.ttf
Normal file
Binary file not shown.
BIN
res/fonts/DejaVuSansMono.ttf
Normal file
BIN
res/fonts/DejaVuSansMono.ttf
Normal file
Binary file not shown.
BIN
res/unifont.font
BIN
res/unifont.font
Binary file not shown.
Loading…
Reference in a new issue