Pebble Foundation Classes  0.2.0
C++ for Pebble
pebble_layer.hpp
1 #pragma once
2 
3 namespace Pebble {
4 
33 
34 class Layer
35 {
36 public:
38  Layer(::Layer *layer) : layer_(layer) {};
39 
40  virtual ~Layer() { }
41 
43  operator ::Layer*() { return layer_; }
44  operator const ::Layer*() const { return layer_; }
45 
54  inline void MarkDirty() { layer_mark_dirty(layer_); }
55 
62  inline void SetFrame(GRect frame) { layer_set_frame(layer_, frame); };
63  inline void SetFrame(int16_t x, int16_t y, int16_t w, int16_t h) { SetFrame(GRect(x, y, w, h)); }
64  inline void SetFrame(GPoint origin, GSize size) { SetFrame(GRect(origin, size)); }
65 
71  inline GRect GetFrame() { return GRect(layer_get_frame(layer_)); }
72 
77  inline void SetBounds(GRect bounds) { layer_set_bounds(layer_, bounds); }
78 
82  inline GRect GetBounds() { return GRect(layer_get_bounds(layer_)); }
83 
90  //inline Window& GetWindow() { return Windolayer_get_window(const Layer *layer);
91 
96  inline void RemoveFromParent() { layer_remove_from_parent(layer_); }
97 
101  inline void RemoveChildLayers() { layer_remove_child_layers(layer_); }
102 
112  inline void AddChild(Layer& child) { layer_add_child(layer_, child); }
113 
122  inline void InsertBelowSibling(Layer& below_sibling_layer) { layer_insert_below_sibling(layer_, below_sibling_layer); }
123 
132  inline void InsertAboveSibling(Layer& above_sibling_layer) { layer_insert_above_sibling(layer_, above_sibling_layer); }
133 
140  inline void SetHidden(bool hidden) { layer_set_hidden(layer_, hidden); }
141 
145  inline bool GetHidden() { return layer_get_hidden(layer_); }
146 
154  inline void SetClips(bool clips) { return layer_set_clips(layer_, clips); }
155 
162  inline bool GetClips() { return layer_get_clips(layer_); }
163 
164 protected:
165  // The layer pointer
166  ::Layer *layer_;
167 }; // End class
168 
175 class SimpleLayer : public Layer
176 {
177 public:
184  SimpleLayer(GRect frame) : Layer(layer_create_with_data(frame, sizeof(this))) {
185  // Sets the lawyer data as pointer to this instance
186  *(SimpleLayer**)layer_get_data(layer_) = this;
187  }
188 
190  virtual ~SimpleLayer() {
191  layer_destroy(layer_);
192  }
193 
194 protected:
198  static inline SimpleLayer& GetFromData(::Layer* layer) { return **(SimpleLayer**)(layer_get_data(layer)); }
199 
200 }; // End class
201 
207 class CustomLayer : public SimpleLayer
208 {
209 public:
216  CustomLayer(GRect frame) : SimpleLayer(frame) {
217  // Sets the layer update procedure to static method
218  layer_set_update_proc(layer_, layer_update_proc);
219  }
220 
221 protected:
224  virtual void OnUpdate(const GContext& ctx) = 0;
225 
226 private:
228  static void layer_update_proc(::Layer* layer, ::GContext *ctx) {
229  // Retrieves the layer object instance of layer pointer, casts to CustomLayer, and calls update method
230  static_cast<CustomLayer&>(GetFromData(layer)).OnUpdate(ctx);
231  }
232 }; // End class
233 
235 
236 }
Pebble::Layer
Definition: pebble_layer.hpp:34
GPoint
Definition: pebble.h:3316
Pebble::Layer::Layer
Layer(::Layer *layer)
Wraps an existing TextLayer.
Definition: pebble_layer.hpp:38
Pebble::Layer::InsertAboveSibling
void InsertAboveSibling(Layer &above_sibling_layer)
Definition: pebble_layer.hpp:132
layer_remove_from_parent
void layer_remove_from_parent(Layer *child)
Pebble::Layer::GetBounds
GRect GetBounds()
Definition: pebble_layer.hpp:82
Pebble::CustomLayer
Layer that is automatically managed and contains an OnUpdate callback for drawing.
Definition: pebble_layer.hpp:207
Pebble::Layer::RemoveChildLayers
void RemoveChildLayers()
Definition: pebble_layer.hpp:101
GSize
Represents a 2-dimensional size.
Definition: pebble.h:3336
Pebble::Layer::SetFrame
void SetFrame(GRect frame)
Definition: pebble_layer.hpp:62
layer_insert_above_sibling
void layer_insert_above_sibling(Layer *layer_to_insert, Layer *above_sibling_layer)
Pebble::SimpleLayer
Layer that is automatically managed.
Definition: pebble_layer.hpp:175
layer_set_bounds
void layer_set_bounds(Layer *layer, GRect bounds)
layer_insert_below_sibling
void layer_insert_below_sibling(Layer *layer_to_insert, Layer *below_sibling_layer)
Pebble::SimpleLayer::~SimpleLayer
virtual ~SimpleLayer()
Destroys the underlying AppLayer.
Definition: pebble_layer.hpp:190
layer_mark_dirty
void layer_mark_dirty(Layer *layer)
layer_set_hidden
void layer_set_hidden(Layer *layer, bool hidden)
layer_create_with_data
Layer * layer_create_with_data(GRect frame, size_t data_size)
Pebble::SimpleLayer::GetFromData
static SimpleLayer & GetFromData(::Layer *layer)
Definition: pebble_layer.hpp:198
layer_get_data
void * layer_get_data(const Layer *layer)
layer_get_hidden
bool layer_get_hidden(const Layer *layer)
layer_get_frame
GRect layer_get_frame(const Layer *layer)
Pebble::GRect
Definition: pebble_graphics_types.hpp:71
Pebble::GContext
Definition: pebble_graphics_context.hpp:73
Pebble::Layer::SetHidden
void SetHidden(bool hidden)
Definition: pebble_layer.hpp:140
Pebble::SimpleLayer::SimpleLayer
SimpleLayer(GRect frame)
Definition: pebble_layer.hpp:184
layer_get_clips
bool layer_get_clips(const Layer *layer)
Pebble::Layer::GetClips
bool GetClips()
Definition: pebble_layer.hpp:162
GRect
struct GRect GRect
Pebble::Layer::GetHidden
bool GetHidden()
Definition: pebble_layer.hpp:145
Pebble::CustomLayer::CustomLayer
CustomLayer(GRect frame)
Definition: pebble_layer.hpp:216
Pebble::Layer::MarkDirty
void MarkDirty()
Definition: pebble_layer.hpp:54
Pebble::Layer::SetClips
void SetClips(bool clips)
Definition: pebble_layer.hpp:154
Pebble::Layer::AddChild
void AddChild(Layer &child)
Definition: pebble_layer.hpp:112
layer_set_clips
void layer_set_clips(Layer *layer, bool clips)
Pebble::CustomLayer::OnUpdate
virtual void OnUpdate(const GContext &ctx)=0
layer_add_child
void layer_add_child(Layer *parent, Layer *child)
layer_destroy
void layer_destroy(Layer *layer)
Destroys a layer previously created by layer_create.
layer_remove_child_layers
void layer_remove_child_layers(Layer *parent)
Pebble::Layer::GetFrame
GRect GetFrame()
Definition: pebble_layer.hpp:71
layer_set_frame
void layer_set_frame(Layer *layer, GRect frame)
layer_get_bounds
GRect layer_get_bounds(const Layer *layer)
Pebble::Layer::InsertBelowSibling
void InsertBelowSibling(Layer &below_sibling_layer)
Definition: pebble_layer.hpp:122
Pebble::Layer::RemoveFromParent
void RemoveFromParent()
Definition: pebble_layer.hpp:96
Pebble::Layer::SetBounds
void SetBounds(GRect bounds)
Definition: pebble_layer.hpp:77
layer_set_update_proc
void layer_set_update_proc(Layer *layer, LayerUpdateProc update_proc)