1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
use crate::enums::Mode;
use crate::prelude::*;
use std::path;
mod channel;
pub use channel::*;
mod event;
pub use event::*;
mod font;
pub use font::*;
mod init;
pub use init::*;
mod rt;
pub use rt::*;
mod screen;
pub use screen::*;
mod state;
pub use state::*;
mod version;
pub use version::*;
mod visual;
pub use visual::*;
mod widget;
pub use widget::*;
mod opts;
pub use opts::*;
/// Enables the use of the cairo context with Cairo-rs. Requires the cairoext build flag.
pub mod cairo;
/// Provids bindings to Preferences which provides methods to store user settings between application starts
pub mod prefs;
/// Basic Application struct, used to instantiate, set the scheme and run the event loop
#[derive(Debug, Copy, Clone)]
pub struct App {}
impl Default for App {
fn default() -> Self {
init_all();
App {}
}
}
impl App {
/// Sets the scheme of the application
pub fn set_scheme(&mut self, scheme: Scheme) {
set_scheme(scheme);
}
/// Sets the scheme of the application
pub fn with_scheme(self, scheme: Scheme) -> App {
set_scheme(scheme);
self
}
/// Gets the scheme of the application
pub fn scheme(self) -> Scheme {
scheme()
}
/// Runs the event loop
/// # Errors
/// Can error on failure to run the application
pub fn run(self) -> Result<(), FltkError> {
run()
}
/// Wait for incoming messages.
/// Calls to redraw within wait require an explicit sleep
pub fn wait(self) -> bool {
wait()
}
/// Loads system fonts
pub fn load_system_fonts(self) -> Self {
*FONTS.lock().unwrap() = get_font_names();
self
}
/**
Loads a font from a path.
On success, returns a String with the ttf Font Family name. The font's index is always 16.
As such only one font can be loaded at a time.
The font name can be used with [`Font::by_name`](`crate::enums::Font::by_name`), and index with [`Font::by_index`](`crate::enums::Font::by_index`).
# Examples
```rust,no_run
use fltk::{prelude::*, *};
let app = app::App::default();
let font = app.load_font("font.ttf").unwrap();
let mut frame = frame::Frame::new(0, 0, 400, 100, "Hello");
frame.set_label_font(enums::Font::by_name(&font));
```
# Errors
Returns `ResourceNotFound` if the Font file was not found
*/
pub fn load_font<P: AsRef<path::Path>>(self, path: P) -> Result<String, FltkError> {
Self::load_font_(path.as_ref())
}
fn load_font_(path: &path::Path) -> Result<String, FltkError> {
if !path.exists() {
return Err::<String, FltkError>(FltkError::Internal(FltkErrorKind::ResourceNotFound));
}
if let Some(p) = path.to_str() {
let name = load_font(p)?;
Ok(name)
} else {
Err(FltkError::Internal(FltkErrorKind::ResourceNotFound))
}
}
/// Set the visual of the application
/// # Errors
/// Returns `FailedOperation` if FLTK failed to set the visual mode
pub fn set_visual(self, mode: Mode) -> Result<(), FltkError> {
set_visual(mode)
}
/// Redraws the app
pub fn redraw(self) {
redraw()
}
/// Quit the application
pub fn quit(self) {
quit()
}
}