#include "gtkmm2ext/utils.h"
using std::string;
+using std::vector;
using std::map;
using std::max;
using std::cerr;
switch (fd.get_style()) {
case Pango::STYLE_NORMAL:
- slant = Cairo::FONT_SLANT_NORMAL;
+ _slant = Cairo::FONT_SLANT_NORMAL;
break;
case Pango::STYLE_OBLIQUE:
- slant = Cairo::FONT_SLANT_OBLIQUE;
+ _slant = Cairo::FONT_SLANT_OBLIQUE;
break;
case Pango::STYLE_ITALIC:
- slant = Cairo::FONT_SLANT_ITALIC;
+ _slant = Cairo::FONT_SLANT_ITALIC;
break;
}
switch (fd.get_weight()) {
case Pango::WEIGHT_ULTRALIGHT:
- weight = Cairo::FONT_WEIGHT_NORMAL;
+ _weight = Cairo::FONT_WEIGHT_NORMAL;
break;
case Pango::WEIGHT_LIGHT:
- weight = Cairo::FONT_WEIGHT_NORMAL;
+ _weight = Cairo::FONT_WEIGHT_NORMAL;
break;
case Pango::WEIGHT_NORMAL:
- weight = Cairo::FONT_WEIGHT_NORMAL;
+ _weight = Cairo::FONT_WEIGHT_NORMAL;
break;
case Pango::WEIGHT_SEMIBOLD:
- weight = Cairo::FONT_WEIGHT_BOLD;
+ _weight = Cairo::FONT_WEIGHT_BOLD;
break;
case Pango::WEIGHT_BOLD:
- weight = Cairo::FONT_WEIGHT_BOLD;
+ _weight = Cairo::FONT_WEIGHT_BOLD;
break;
case Pango::WEIGHT_ULTRABOLD:
- weight = Cairo::FONT_WEIGHT_BOLD;
+ _weight = Cairo::FONT_WEIGHT_BOLD;
break;
case Pango::WEIGHT_HEAVY:
- weight = Cairo::FONT_WEIGHT_BOLD;
+ _weight = Cairo::FONT_WEIGHT_BOLD;
break;
+ /* to silence warnings when compiling with newer pango versions. */
+ default:
+ _weight = Cairo::FONT_WEIGHT_NORMAL;
+ break;
}
face = fd.get_family();
-}
+}
CairoCell::CairoCell (int32_t id)
: _id (id)
CairoTextCell::set_size (Cairo::RefPtr<Cairo::Context>& context)
{
const uint32_t lim = (uint32_t) ceil (_width_chars);
- char buf[lim+1];
+ vector<char> buf(lim+1);
uint32_t n;
double max_width = 0.0;
double max_height = 0.0;
for (int digit = 0; digit < 10; digit++) {
for (n = 0; n < lim; ++n) {
- buf[n] = '0' + digit;
+ buf[n] = '0' + digit;
}
-
- context->get_text_extents (buf, ext);
-
+
+ context->get_text_extents (&buf[0], ext);
+
max_width = max (ext.width + ext.x_bearing, max_width);
max_height = max (ext.height, max_height);
bsum += ext.x_bearing;
Cairo::TextExtents ext;
_font->apply (context);
-
+
{
const char* buf = "8";
context->get_text_extents (buf, ext);
set_flags (Gtk::CAN_FOCUS);
set_can_default (true);
- set_receives_default (true);
}
CairoEditableText::~CairoEditableText ()
}
bool
-CairoEditableText::on_focus_in_event (GdkEventFocus* ev)
+CairoEditableText::on_focus_in_event (GdkEventFocus*)
{
return false;
}
bool
-CairoEditableText::on_focus_out_event (GdkEventFocus* ev)
+CairoEditableText::on_focus_out_event (GdkEventFocus*)
{
if (editing_cell) {
queue_draw_cell (editing_cell);
CairoEditableText::add_cell (CairoCell* cell)
{
cells.push_back (cell);
-
+
CairoTextCell* tc = dynamic_cast<CairoTextCell*>(cell);
if (tc) {
bool
CairoEditableText::on_expose_event (GdkEventExpose* ev)
{
- Cairo::RefPtr<Cairo::Context> context = get_window()->create_cairo_context();
+ Glib::RefPtr<Gdk::Window> win = get_window ();
+
+ if (!win) {
+ std::cerr << "CET: no window to draw on\n";
+ return false;
+ }
+
+ Cairo::RefPtr<Cairo::Context> context = win->create_cairo_context();
if (cells.empty()) {
return true;
Gtk::Allocation alloc = get_allocation ();
double width = alloc.get_width();
double height = alloc.get_height ();
-
+
if (_draw_bg) {
context->set_source_rgba (bg_r, bg_g, bg_b, bg_a);
if (_corner_radius) {
}
context->fill ();
}
-
+
for (CellMap::iterator i = cells.begin(); i != cells.end(); ++i) {
CairoCell* cell = (*i);
/* is cell inside the expose area?
*/
-
+
if (cell->intersects (ev->area)) {
if (cell == editing_cell) {
context->set_source_rgba (edit_r, edit_b, edit_g, edit_a);
if (!win) {
return;
}
-
+
Cairo::RefPtr<Cairo::Context> context = win->create_cairo_context();
-
+
if (!context) {
return;
}
max_cell_width = 0;
max_cell_height = 0;
-
+
for (CellMap::iterator i = cells.begin(); i != cells.end(); ++i) {
max_cell_width += (*i)->width();
max_cell_height = std::max ((double) (*i)->height(), max_cell_height);