mirror of
https://github.com/italicsjenga/mini_gl_fb.git
synced 2024-11-25 17:01:31 +11:00
Merge pull request #11 from LoganDark/builder
Implement builder pattern; closes #10
This commit is contained in:
commit
59618adfed
|
@ -15,3 +15,4 @@ readme = "README.md"
|
|||
glutin = "0.26.0"
|
||||
gl = "0.10.0"
|
||||
rustic_gl = "0.3.2"
|
||||
derive_builder = "0.10.0-alpha"
|
||||
|
|
|
@ -20,9 +20,21 @@ use glutin::dpi::LogicalSize;
|
|||
/// from a trait like [`Default`]. The [`config!`][config] macro makes it much less tedious to
|
||||
/// construct custom configs. See its documentation for more information.
|
||||
///
|
||||
/// Alternatively, you can choose to use the builder pattern instead:
|
||||
///
|
||||
/// ```
|
||||
/// use mini_gl_fb::ConfigBuilder;
|
||||
///
|
||||
/// let config = ConfigBuilder::default()
|
||||
/// .invert_y(false)
|
||||
/// .build();
|
||||
/// ```
|
||||
///
|
||||
/// If there's a config option you want to see or think is missing, please open an issue!
|
||||
#[non_exhaustive]
|
||||
#[derive(Clone, PartialEq, Debug)]
|
||||
#[builder(default)]
|
||||
#[builder(build_fn(skip))]
|
||||
#[derive(Clone, PartialEq, Debug, Builder)]
|
||||
pub struct Config {
|
||||
/// Sets the pixel dimensions of the buffer. The buffer will automatically stretch to fill the
|
||||
/// whole window. By default this will be the same as the window_size.
|
||||
|
@ -43,6 +55,28 @@ pub struct Config {
|
|||
pub invert_y: bool
|
||||
}
|
||||
|
||||
impl ConfigBuilder {
|
||||
/// Builds a new [`Config`].
|
||||
pub fn build(&self) -> Config {
|
||||
let mut config = Config::default();
|
||||
|
||||
macro_rules! fields {
|
||||
($($n:ident),+) => {
|
||||
$(
|
||||
if let Some($n) = &self.$n {
|
||||
config.$n = $n.clone();
|
||||
}
|
||||
)+
|
||||
}
|
||||
}
|
||||
|
||||
// I guess this is better than implementing the entire builder by hand
|
||||
fields!(buffer_size, resizable, window_title, window_size, invert_y);
|
||||
|
||||
config
|
||||
}
|
||||
}
|
||||
|
||||
impl Default for Config {
|
||||
fn default() -> Self {
|
||||
Config {
|
||||
|
|
|
@ -105,6 +105,8 @@
|
|||
|
||||
#[macro_use]
|
||||
pub extern crate rustic_gl;
|
||||
#[macro_use]
|
||||
extern crate derive_builder;
|
||||
|
||||
pub extern crate glutin;
|
||||
pub extern crate gl;
|
||||
|
@ -114,7 +116,7 @@ pub mod core;
|
|||
pub mod breakout;
|
||||
|
||||
pub use breakout::{GlutinBreakout, BasicInput};
|
||||
pub use config::Config;
|
||||
pub use config::{Config, ConfigBuilder};
|
||||
pub use core::{Internal, BufferFormat, Framebuffer};
|
||||
|
||||
use core::ToGlType;
|
||||
|
|
Loading…
Reference in a new issue