summaryrefslogtreecommitdiff
path: root/src/render_hint.rs
diff options
context:
space:
mode:
authorBen Bridle <bridle.benjamin@gmail.com>2023-10-10 14:56:04 +1300
committerBen Bridle <bridle.benjamin@gmail.com>2023-10-10 14:56:04 +1300
commita6e97019bd53e4478c846f8f636c18ecb53bece2 (patch)
tree69dada994e34cdfb4ddcef5a29c753f449407ec7 /src/render_hint.rs
downloadphosphor-a6e97019bd53e4478c846f8f636c18ecb53bece2.zip
First commit, before upgrading winit to version 28.1
Diffstat (limited to 'src/render_hint.rs')
-rw-r--r--src/render_hint.rs33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/render_hint.rs b/src/render_hint.rs
new file mode 100644
index 0000000..e4d37c3
--- /dev/null
+++ b/src/render_hint.rs
@@ -0,0 +1,33 @@
+use std::ops::*;
+
+/// A hint to tell a window controller whether the previous render state is
+/// intact and can be updated, or was destroyed and needs to be fully redrawn.
+#[derive(Clone, Copy, Debug, PartialEq, Eq)]
+pub enum RenderHint {
+ /// The buffer contents are intact, only updates need to be drawn.
+ Update,
+ /// The buffer contents were destroyed, a full redraw is required.
+ Redraw,
+}
+
+impl RenderHint {
+ pub fn is_update(&self) -> bool { *self == RenderHint::Update }
+ pub fn is_redraw(&self) -> bool { *self == RenderHint::Redraw }
+}
+
+impl BitAnd for RenderHint {
+ type Output = RenderHint;
+ fn bitand(self, other: RenderHint) -> Self::Output {
+ if self == RenderHint::Redraw || other == RenderHint::Redraw {
+ RenderHint::Redraw
+ } else {
+ RenderHint::Update
+ }
+ }
+}
+
+impl BitAndAssign for RenderHint {
+ fn bitand_assign(&mut self, other: RenderHint) {
+ *self = *self & other;
+ }
+}