Remove pixels_per_point
from FontDefinitions
This commit is contained in:
parent
847f67c835
commit
69ffa9be35
6 changed files with 44 additions and 44 deletions
|
@ -12,6 +12,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||||
### Changed 🔧
|
### Changed 🔧
|
||||||
|
|
||||||
* Renamed `FontFamily::VariableWidth` to `FontFamily::Proportional`.
|
* Renamed `FontFamily::VariableWidth` to `FontFamily::Proportional`.
|
||||||
|
* Remove `pixels_per_point` from `FontDefinitions`.
|
||||||
|
|
||||||
### Fixed 🐛
|
### Fixed 🐛
|
||||||
|
|
||||||
|
|
|
@ -543,14 +543,20 @@ impl Context {
|
||||||
self.input = std::mem::take(&mut self.input).begin_frame(new_raw_input);
|
self.input = std::mem::take(&mut self.input).begin_frame(new_raw_input);
|
||||||
self.frame_state.lock().begin_frame(&self.input);
|
self.frame_state.lock().begin_frame(&self.input);
|
||||||
|
|
||||||
let mut font_definitions = self.options.lock().font_definitions.clone();
|
let font_definitions = self.options.lock().font_definitions.clone();
|
||||||
font_definitions.pixels_per_point = self.input.pixels_per_point();
|
let pixels_per_point = self.input.pixels_per_point();
|
||||||
let same_as_current = match &self.fonts {
|
let same_as_current = match &self.fonts {
|
||||||
None => false,
|
None => false,
|
||||||
Some(fonts) => *fonts.definitions() == font_definitions,
|
Some(fonts) => {
|
||||||
|
*fonts.definitions() == font_definitions
|
||||||
|
&& (fonts.pixels_per_point() - pixels_per_point).abs() < 1e-3
|
||||||
|
}
|
||||||
};
|
};
|
||||||
if !same_as_current {
|
if !same_as_current {
|
||||||
self.fonts = Some(Arc::new(Fonts::from_definitions(font_definitions)));
|
self.fonts = Some(Arc::new(Fonts::from_definitions(
|
||||||
|
pixels_per_point,
|
||||||
|
font_definitions,
|
||||||
|
)));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ensure we register the background area so panels and background ui can catch clicks:
|
// Ensure we register the background area so panels and background ui can catch clicks:
|
||||||
|
|
|
@ -62,7 +62,7 @@ impl paint::FontDefinitions {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if ui.button("Reset fonts").clicked {
|
if ui.button("Reset fonts").clicked {
|
||||||
*self = paint::FontDefinitions::default_with_pixels_per_point(self.pixels_per_point);
|
*self = Default::default();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -81,9 +81,6 @@ fn rusttype_font_from_font_data(name: &str, data: &FontData) -> rusttype::Font<'
|
||||||
/// ```
|
/// ```
|
||||||
#[derive(Clone, Debug, PartialEq)]
|
#[derive(Clone, Debug, PartialEq)]
|
||||||
pub struct FontDefinitions {
|
pub struct FontDefinitions {
|
||||||
/// The dpi scale factor. Needed to get pixel perfect fonts.
|
|
||||||
pub pixels_per_point: f32, // TODO: remove from here
|
|
||||||
|
|
||||||
/// List of font names and their definitions.
|
/// List of font names and their definitions.
|
||||||
/// The definition must be the contents of either a `.ttf` or `.otf` font file.
|
/// The definition must be the contents of either a `.ttf` or `.otf` font file.
|
||||||
///
|
///
|
||||||
|
@ -105,13 +102,6 @@ pub struct FontDefinitions {
|
||||||
|
|
||||||
impl Default for FontDefinitions {
|
impl Default for FontDefinitions {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
Self::default_with_pixels_per_point(f32::NAN) // must be set later
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl FontDefinitions {
|
|
||||||
/// Default values for the fonts
|
|
||||||
pub fn default_with_pixels_per_point(pixels_per_point: f32) -> Self {
|
|
||||||
#[allow(unused)]
|
#[allow(unused)]
|
||||||
let mut font_data: BTreeMap<String, FontData> = BTreeMap::new();
|
let mut font_data: BTreeMap<String, FontData> = BTreeMap::new();
|
||||||
|
|
||||||
|
@ -175,7 +165,6 @@ impl FontDefinitions {
|
||||||
family_and_size.insert(TextStyle::Monospace, (FontFamily::Monospace, 13.0)); // 13 for `ProggyClean`
|
family_and_size.insert(TextStyle::Monospace, (FontFamily::Monospace, 13.0)); // 13 for `ProggyClean`
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
pixels_per_point,
|
|
||||||
font_data,
|
font_data,
|
||||||
fonts_for_family,
|
fonts_for_family,
|
||||||
family_and_size,
|
family_and_size,
|
||||||
|
@ -183,9 +172,12 @@ impl FontDefinitions {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Note: the `default()` fonts are invalid (missing `pixels_per_point`).
|
/// The collection of fonts used by Egui.
|
||||||
|
///
|
||||||
|
/// Note: `Fonts::default()` is invalid (missing `pixels_per_point`).
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
pub struct Fonts {
|
pub struct Fonts {
|
||||||
|
pixels_per_point: f32,
|
||||||
definitions: FontDefinitions,
|
definitions: FontDefinitions,
|
||||||
fonts: BTreeMap<TextStyle, Font>,
|
fonts: BTreeMap<TextStyle, Font>,
|
||||||
atlas: Arc<Mutex<TextureAtlas>>,
|
atlas: Arc<Mutex<TextureAtlas>>,
|
||||||
|
@ -195,22 +187,7 @@ pub struct Fonts {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Fonts {
|
impl Fonts {
|
||||||
pub fn from_definitions(definitions: FontDefinitions) -> Fonts {
|
pub fn from_definitions(pixels_per_point: f32, definitions: FontDefinitions) -> Self {
|
||||||
let mut fonts = Self::default();
|
|
||||||
fonts.set_definitions(definitions);
|
|
||||||
fonts
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn definitions(&self) -> &FontDefinitions {
|
|
||||||
&self.definitions
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn set_definitions(&mut self, definitions: FontDefinitions) {
|
|
||||||
if self.definitions == definitions {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
self.definitions = definitions;
|
|
||||||
|
|
||||||
// We want an atlas big enough to be able to include all the Emojis in the `TextStyle::Heading`,
|
// We want an atlas big enough to be able to include all the Emojis in the `TextStyle::Heading`,
|
||||||
// so we can show the Emoji picker demo window.
|
// so we can show the Emoji picker demo window.
|
||||||
let mut atlas = TextureAtlas::new(2048, 64);
|
let mut atlas = TextureAtlas::new(2048, 64);
|
||||||
|
@ -224,14 +201,13 @@ impl Fonts {
|
||||||
|
|
||||||
let atlas = Arc::new(Mutex::new(atlas));
|
let atlas = Arc::new(Mutex::new(atlas));
|
||||||
|
|
||||||
let mut font_impl_cache = FontImplCache::new(atlas.clone(), &self.definitions);
|
let mut font_impl_cache = FontImplCache::new(atlas.clone(), pixels_per_point, &definitions);
|
||||||
|
|
||||||
self.fonts = self
|
let fonts = definitions
|
||||||
.definitions
|
|
||||||
.family_and_size
|
.family_and_size
|
||||||
.iter()
|
.iter()
|
||||||
.map(|(&text_style, &(family, scale_in_points))| {
|
.map(|(&text_style, &(family, scale_in_points))| {
|
||||||
let fonts = &self.definitions.fonts_for_family.get(&family);
|
let fonts = &definitions.fonts_for_family.get(&family);
|
||||||
let fonts = fonts.unwrap_or_else(|| {
|
let fonts = fonts.unwrap_or_else(|| {
|
||||||
panic!("FontFamily::{:?} is not bound to any fonts", family)
|
panic!("FontFamily::{:?} is not bound to any fonts", family)
|
||||||
});
|
});
|
||||||
|
@ -254,10 +230,24 @@ impl Fonts {
|
||||||
texture.version = hasher.finish();
|
texture.version = hasher.finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
self.buffered_texture = Default::default(); //atlas.lock().texture().clone();
|
Self {
|
||||||
self.atlas = atlas;
|
pixels_per_point,
|
||||||
|
definitions,
|
||||||
|
fonts,
|
||||||
|
atlas,
|
||||||
|
buffered_texture: Default::default(), //atlas.lock().texture().clone();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn pixels_per_point(&self) -> f32 {
|
||||||
|
self.pixels_per_point
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn definitions(&self) -> &FontDefinitions {
|
||||||
|
&self.definitions
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Call each frame to get the latest available font texture data.
|
||||||
pub fn texture(&self) -> Arc<Texture> {
|
pub fn texture(&self) -> Arc<Texture> {
|
||||||
let atlas = self.atlas.lock();
|
let atlas = self.atlas.lock();
|
||||||
let mut buffered_texture = self.buffered_texture.lock();
|
let mut buffered_texture = self.buffered_texture.lock();
|
||||||
|
@ -290,7 +280,11 @@ struct FontImplCache {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl FontImplCache {
|
impl FontImplCache {
|
||||||
pub fn new(atlas: Arc<Mutex<TextureAtlas>>, definitions: &super::FontDefinitions) -> Self {
|
pub fn new(
|
||||||
|
atlas: Arc<Mutex<TextureAtlas>>,
|
||||||
|
pixels_per_point: f32,
|
||||||
|
definitions: &super::FontDefinitions,
|
||||||
|
) -> Self {
|
||||||
let rusttype_fonts = definitions
|
let rusttype_fonts = definitions
|
||||||
.font_data
|
.font_data
|
||||||
.iter()
|
.iter()
|
||||||
|
@ -304,7 +298,7 @@ impl FontImplCache {
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
atlas,
|
atlas,
|
||||||
pixels_per_point: definitions.pixels_per_point,
|
pixels_per_point,
|
||||||
rusttype_fonts,
|
rusttype_fonts,
|
||||||
cache: Default::default(),
|
cache: Default::default(),
|
||||||
}
|
}
|
||||||
|
|
|
@ -657,9 +657,7 @@ fn test_text_layout() {
|
||||||
use crate::paint::*;
|
use crate::paint::*;
|
||||||
|
|
||||||
let pixels_per_point = 1.0;
|
let pixels_per_point = 1.0;
|
||||||
let fonts = Fonts::from_definitions(FontDefinitions::default_with_pixels_per_point(
|
let fonts = Fonts::from_definitions(pixels_per_point, FontDefinitions::default());
|
||||||
pixels_per_point,
|
|
||||||
));
|
|
||||||
let font = &fonts[TextStyle::Monospace];
|
let font = &fonts[TextStyle::Monospace];
|
||||||
|
|
||||||
let galley = font.layout_multiline("".to_owned(), 1024.0);
|
let galley = font.layout_multiline("".to_owned(), 1024.0);
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
// TODO: `TextureData` or similar?
|
||||||
/// An 8-bit texture containing font data.
|
/// An 8-bit texture containing font data.
|
||||||
#[derive(Clone, Default)]
|
#[derive(Clone, Default)]
|
||||||
pub struct Texture {
|
pub struct Texture {
|
||||||
|
|
Loading…
Reference in a new issue