pebble_rust/pebble/
layer.rs1use crate::pebble::internal::{types, functions::interface};
20use crate::pebble::types::{GRect, Bitmap, GCompOp};
21
22pub struct Layer {
23 internal: *mut types::Layer
24}
25
26pub struct TextLayer {
27 internal: *mut types::TextLayer,
28 inner: *mut types::Layer
29}
30
31pub struct BitmapLayer {
32 internal: *mut types::BitmapLayer,
33 inner: *mut types::Layer
34}
35
36pub trait ILayer {
37 fn get_bounds(&self) -> GRect;
38 fn get_frame(&self) -> GRect;
39 fn add_child(&self, layer: &ILayer);
40 fn mark_dirty(&self);
41 fn get_internal(&self) -> *mut types::Layer;
42}
43
44impl ILayer for Layer {
45 fn get_bounds(&self) -> GRect {
46 interface::layer_get_bounds(self.internal)
47 }
48
49 fn get_frame(&self) -> GRect {
50 interface::layer_get_frame(self.internal)
51 }
52
53 fn add_child(&self, layer: &ILayer) {
54 interface::layer_add_child(self.internal, layer.get_internal())
55 }
56
57 fn mark_dirty(&self) {
58 interface::layer_mark_dirty(self.internal);
59 }
60
61 fn get_internal(&self) -> *mut types::Layer {
62 self.internal
63 }
64}
65
66impl Layer {
67 pub fn new(bounds: GRect) -> Layer {
68 Layer {
69 internal: interface::layer_create(bounds)
70 }
71 }
72
73 pub fn from_raw(ptr: *mut types::Layer) -> Layer {
74 Layer {
75 internal: ptr
76 }
77 }
78}
79
80impl ILayer for TextLayer {
81 fn get_bounds(&self) -> GRect {
82 interface::layer_get_bounds(self.inner)
83 }
84
85 fn get_frame(&self) -> GRect {
86 interface::layer_get_frame(self.inner)
87 }
88
89 fn add_child(&self, layer: &ILayer) {
90 interface::layer_add_child(self.inner, layer.get_internal());
91 }
92
93 fn mark_dirty(&self) {
94 interface::layer_mark_dirty(self.inner);
95 }
96
97 fn get_internal(&self) -> *mut types::Layer {
98 self.inner
99 }
100}
101
102impl TextLayer {
103 pub fn new(bounds: GRect) -> TextLayer {
104 let internal = interface::text_layer_create(bounds);
105 let inner = interface::text_layer_get_layer(internal);
106
107 TextLayer {
108 internal, inner
109 }
110 }
111
112 pub fn set_text(&self, text: &str) {
113 interface::text_layer_set_text(self.internal, text);
114 }
115}
116
117impl ILayer for BitmapLayer {
118 fn get_bounds(&self) -> GRect {
119 interface::layer_get_bounds(self.inner)
120 }
121
122 fn get_frame(&self) -> GRect {
123 interface::layer_get_frame(self.inner)
124 }
125
126 fn add_child(&self, layer: &ILayer) {
127 interface::layer_add_child(self.inner, layer.get_internal())
128 }
129
130 fn mark_dirty(&self) {
131 interface::layer_mark_dirty(self.inner)
132 }
133
134 fn get_internal(&self) -> *mut types::Layer {
135 self.inner
136 }
137}
138
139impl BitmapLayer {
140 pub fn new(bounds: GRect) -> BitmapLayer {
141 let internal = interface::bitmap_layer_create(bounds);
142 let inner = interface::bitmap_layer_get_layer(internal);
143
144 BitmapLayer {
145 internal, inner
146 }
147 }
148
149 pub fn set_bitmap(&self, bitmap: &Bitmap) {
150 interface::bitmap_layer_set_bitmap(self.internal, bitmap.internal);
151 }
152
153 pub fn set_compositing_mode(&self, mode: GCompOp) {
154 interface::bitmap_layer_set_compositing_mode(self.internal, mode);
155 }
156}