summaryrefslogtreecommitdiff
path: root/src/entry.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/entry.c')
-rw-r--r--src/entry.c51
1 files changed, 10 insertions, 41 deletions
diff --git a/src/entry.c b/src/entry.c
index d6e6c81..def32b2 100644
--- a/src/entry.c
+++ b/src/entry.c
@@ -8,32 +8,13 @@
#include "log.h"
#include "nelem.h"
-#ifndef TWO_PI
-#define TWO_PI 6.283185307179586f
-#endif
-
-void entry_init(struct entry *entry, uint32_t scale)
+void entry_init(struct entry *entry, uint32_t width, uint32_t height, uint32_t scale)
{
- /* Calculate the size of the entry from our font and various widths. */
- //calculate_font_extents(entry, scale);
- entry->text_bounds.width = 200;
- entry->text_bounds.height = 200;
-
- entry->surface.width = entry->text_bounds.width;
- entry->surface.height = entry->text_bounds.height;
- entry->surface.width += 2 * (
- entry->border.width
- + 2 * entry->border.outline_width
- + entry->padding
- );
- entry->surface.height += 2 * (
- entry->border.width
- + 2 * entry->border.outline_width
- + entry->padding
- );
- entry->surface.width *= scale;
- entry->surface.height *= scale;
+ entry->image.width = width;
+ entry->image.height = height;
+ width /= scale;
+ height /= scale;
/*
* Cairo uses native 32 bit integers for pixels, so if this processor
@@ -48,16 +29,12 @@ void entry_init(struct entry *entry, uint32_t scale)
*/
cairo_surface_t *surface = cairo_image_surface_create(
CAIRO_FORMAT_ARGB32,
- entry->surface.width,
- entry->surface.height
+ width * scale,
+ height * scale
);
cairo_surface_set_device_scale(surface, scale, scale);
cairo_t *cr = cairo_create(surface);
- /* Running size of current drawing area. */
- int32_t width = entry->surface.width / scale;
- int32_t height = entry->surface.height / scale;
-
/* Draw the outer outline */
struct color color = entry->border.outline_color;
cairo_set_source_rgba(cr, color.r, color.g, color.b, color.a);
@@ -112,12 +89,6 @@ void entry_init(struct entry *entry, uint32_t scale)
cairo_rectangle(cr, 0, 0, width, height);
cairo_clip(cr);
- /*
- * Move the cursor back up, so that Pango draws in the correct place if
- * we're doing a tight layout.
- */
- //cairo_translate(cr, -entry->text_bounds.x, -entry->text_bounds.y);
-
/* Setup Pango. */
PangoContext *context = pango_cairo_create_context(cr);
@@ -143,8 +114,6 @@ void entry_init(struct entry *entry, uint32_t scale)
entry->cairo.surface = surface;
entry->cairo.cr = cr;
- entry->image.width = entry->surface.width;
- entry->image.height = entry->surface.height;
entry->image.buffer = cairo_image_surface_get_data(surface);
}
@@ -167,12 +136,12 @@ void entry_update(struct entry *entry)
entry->image.redraw = true;
/* Clear the image. */
- cairo_set_operator(cr, CAIRO_OPERATOR_CLEAR);
+ struct color color = entry->background_color;
+ cairo_set_source_rgba(cr, color.r, color.g, color.b, color.a);
cairo_paint(cr);
- cairo_set_operator(cr, CAIRO_OPERATOR_OVER);
/* Draw our text. */
- struct color color = entry->foreground_color;
+ color = entry->foreground_color;
cairo_set_source_rgba(cr, color.r, color.g, color.b, color.a);
pango_layout_set_text(entry->pango.entry_layout, entry->input_mb, -1);