ColorLayer for Pebble

Edit: 100th post!

Quick post to share  a ‘new’ Layer type I created for an upcoming project: ColorLayer. It’s supposed to be a convenience for adding a simple layer of colour. Problem is, unless I’m missing something very obvious, the two options are to declare a standard Layer and assign it a basic _fill_rect() LayerUpdateProc, or use a TextLayer and modifying the background colours.

I normally choose the latter, so for the umpteenth time of doing so I decided to wrap it up to make it a bit simpler to use. Here’s the result!


 * Layer on top of TextLayer used just for coloring areas without using LayerUpdateProc
 * Author: Chris Lewis (@Chris_DL)
 * Version 1.0.0
#include <pebble.h>


typedef struct {
	TextLayer *layer;
} ColorLayer;

ColorLayer* color_layer_create(GRect bounds, GColor fill_color);
void color_layer_destroy(ColorLayer *this);
void color_layer_set_color(ColorLayer *this, GColor fill_color);
void color_layer_set_frame(ColorLayer *this, GRect bounds);
Layer* color_layer_get_layer(ColorLayer *this);



#include "color_layer.h"

ColorLayer* color_layer_create(GRect bounds, GColor fill_color)
	ColorLayer *this = malloc(sizeof(ColorLayer));
	this->layer = text_layer_create(bounds);
	text_layer_set_background_color(this->layer, fill_color);

	return this;

void color_layer_destroy(ColorLayer *this)

void color_layer_set_color(ColorLayer *this, GColor fill_color)
	text_layer_set_background_color(this->layer, fill_color);

void color_layer_set_frame(ColorLayer *this, GRect bounds)
	layer_set_frame(text_layer_get_layer(this->layer), bounds);

Layer* color_layer_get_layer(ColorLayer *this)
	return text_layer_get_layer(this->layer);

It could be argued that it’s such a thin layer you may as well not bother, but I find it to be sufficiently easier to setup and read (as well as avoiding confusion with TextLayers that actually show text), so once again I’m glad coding allows a degree of personal preference and style!

  1. Helge said:

    Not sure why you have to wrap this in another malloced object? That seems wasteful. The only thing your code does is rename the text-layer. If the naming annoys you, just do: typedef TextLayer ColorLayer; inline void color_layer_set_color(ColorLayer *self, GColor fill_color) { text_layer_set_background_color(self, fill_color); } etc. or #define color_layer_set_color text_layer_set_background_color.

    • bonsitm said:

      Inexperience, dear reader. I know much better these days 🙂

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s

%d bloggers like this: