1
0
mirror of git://projects.qi-hardware.com/eda-tools.git synced 2024-11-25 21:55:20 +02:00

eeshow/gui/diff.c: improve sectioning

This commit is contained in:
Werner Almesberger 2016-08-22 13:15:38 -03:00
parent 5e647637b6
commit ef3d118c9e

View File

@ -116,7 +116,7 @@ static unsigned diff_text_width(void *ctx, const char *s, unsigned size)
} }
/* ----- Initialization and termination ------------------------------------ */ /* ----- Initialization ---------------------------------------------------- */
static void *diff_init(int argc, char *const *argv) static void *diff_init(int argc, char *const *argv)
@ -182,6 +182,9 @@ fail_open:
} }
/* ----- Area highlighting ------------------------------------------------- */
void add_area(struct area **areas, int xa, int ya, int xb, int yb, void add_area(struct area **areas, int xa, int ya, int xb, int yb,
uint32_t color) uint32_t color)
{ {
@ -226,30 +229,6 @@ static void mark_area(struct diff *diff, int x, int y)
} }
static void differences(struct diff *diff, uint32_t *a, const uint32_t *b)
{
unsigned skip = diff->w * 4 - diff->stride;
int x, y;
for (y = 0; y != diff->h; y++) {
for (x = 0; x != diff->w; x++) {
if (!((*a ^ *b) & MASK)) {
*a = ((*a >> FADE_SHIFT) & FADE_MASK) |
FADE_OFFSET;
} else {
mark_area(diff, x, y);
*a = (*a & MASK) == MASK ? ONLY_NEW :
(*b & MASK) == MASK ? ONLY_OLD : BOTH;
}
a++;
b++;
}
a += skip;
b += skip;
}
}
static void complement_box(struct diff *diff, uint32_t *a, static void complement_box(struct diff *diff, uint32_t *a,
int xa, int ya, int xb, int yb, uint32_t color) int xa, int ya, int xb, int yb, uint32_t color)
{ {
@ -296,6 +275,33 @@ void free_areas(struct area **areas)
} }
/* ----- Termination ------------------------------------------------------- */
static void differences(struct diff *diff, uint32_t *a, const uint32_t *b)
{
unsigned skip = diff->w * 4 - diff->stride;
int x, y;
for (y = 0; y != diff->h; y++) {
for (x = 0; x != diff->w; x++) {
if (!((*a ^ *b) & MASK)) {
*a = ((*a >> FADE_SHIFT) & FADE_MASK) |
FADE_OFFSET;
} else {
mark_area(diff, x, y);
*a = (*a & MASK) == MASK ? ONLY_NEW :
(*b & MASK) == MASK ? ONLY_OLD : BOTH;
}
a++;
b++;
}
a += skip;
b += skip;
}
}
static void diff_end(void *ctx) static void diff_end(void *ctx)
{ {
struct diff *diff = ctx; struct diff *diff = ctx;