make local history use system colours

This commit is contained in:
Vincent Sanders 2017-01-12 07:58:33 +00:00
parent 9e03737627
commit 74e73a3b8b
4 changed files with 150 additions and 63 deletions

View File

@ -37,6 +37,7 @@
#include "content/urldb.h" #include "content/urldb.h"
#include "netsurf/bitmap.h" #include "netsurf/bitmap.h"
#include "desktop/system_colour.h"
#include "desktop/gui_internal.h" #include "desktop/gui_internal.h"
#include "desktop/browser_history.h" #include "desktop/browser_history.h"
#include "desktop/browser_private.h" #include "desktop/browser_private.h"
@ -235,6 +236,45 @@ static void browser_window_history__layout(struct history *history)
history->height += BOTTOM_MARGIN / 2; history->height += BOTTOM_MARGIN / 2;
} }
/** plot style for drawing lines between nodes */
static plot_style_t pstyle_line = {
.stroke_type = PLOT_OP_TYPE_SOLID,
.stroke_width = 2,
};
/** plot style for drawing background */
static plot_style_t pstyle_bg = {
.fill_type = PLOT_OP_TYPE_SOLID,
};
/** plot style for drawing rectangle round unselected nodes */
static plot_style_t pstyle_rect = {
.stroke_type = PLOT_OP_TYPE_SOLID,
.stroke_width = 1,
};
/** plot style for drawing rectangle round selected nodes */
static plot_style_t pstyle_rect_sel = {
.stroke_type = PLOT_OP_TYPE_SOLID,
.stroke_width = 3,
};
/** plot style for font on unselected nodes */
static plot_font_style_t pfstyle_node = {
.family = PLOT_FONT_FAMILY_SANS_SERIF,
.size = 8 * FONT_SIZE_SCALE,
.weight = 400,
.flags = FONTF_NONE,
};
/** plot style for font on unselected nodes */
static plot_font_style_t pfstyle_node_sel = {
.family = PLOT_FONT_FAMILY_SANS_SERIF,
.size = 8 * FONT_SIZE_SCALE,
.weight = 900,
.flags = FONTF_NONE,
};
/** /**
* Recursively redraw a history_entry. * Recursively redraw a history_entry.
* *
@ -260,19 +300,25 @@ browser_window_history__redraw_entry(struct history *history,
size_t char_offset; size_t char_offset;
int actual_x; int actual_x;
struct history_entry *child; struct history_entry *child;
colour c = entry == history->current ?
HISTORY_COLOUR_SELECTED : HISTORY_COLOUR_FOREGROUND;
int tailsize = 5; int tailsize = 5;
int xoffset = x - x0; int xoffset = x - x0;
int yoffset = y - y0; int yoffset = y - y0;
plot_style_t pstyle_history_rect = {
.stroke_type = PLOT_OP_TYPE_SOLID, plot_style_t *pstyle;
.stroke_colour = c, plot_font_style_t *pfstyle;
.stroke_width = entry == history->current ? 3 : 1,
};
plot_font_style_t fstyle = *plot_style_font;
nserror res; nserror res;
/* setup plot styles */
if (entry == history->current) {
pstyle = &pstyle_rect_sel;
pfstyle = &pfstyle_node_sel;
} else {
pstyle = &pstyle_rect;
pfstyle = &pfstyle_node;
}
/* setup clip area */
if (clip) { if (clip) {
struct rect rect; struct rect rect;
rect.x0 = x0 + xoffset; rect.x0 = x0 + xoffset;
@ -289,14 +335,16 @@ browser_window_history__redraw_entry(struct history *history,
plot->bitmap(entry->x + xoffset, plot->bitmap(entry->x + xoffset,
entry->y + yoffset, entry->y + yoffset,
WIDTH, HEIGHT, WIDTH, HEIGHT,
entry->bitmap, 0xffffff, 0); entry->bitmap,
0xffffff,
0);
} }
if (!plot->rectangle(entry->x - 1 + xoffset, if (!plot->rectangle(entry->x - 1 + xoffset,
entry->y - 1 + yoffset, entry->y - 1 + yoffset,
entry->x + xoffset + WIDTH, entry->x + xoffset + WIDTH,
entry->y + yoffset + HEIGHT, entry->y + yoffset + HEIGHT,
&pstyle_history_rect)) { pstyle)) {
return false; return false;
} }
@ -307,36 +355,42 @@ browser_window_history__redraw_entry(struct history *history,
return false; return false;
} }
fstyle.background = HISTORY_COLOUR_BACKGROUND;
fstyle.foreground = c;
fstyle.weight = entry == history->current ? 900 : 400;
if (!plot->text(entry->x + xoffset, entry->y + HEIGHT + 12 + yoffset, if (!plot->text(entry->x + xoffset,
entry->page.title, char_offset, &fstyle)) entry->y + HEIGHT + 12 + yoffset,
entry->page.title,
char_offset,
pfstyle)) {
return false; return false;
}
/* for each child node draw a line and recurse redraw into it */
for (child = entry->forward; child; child = child->next) { for (child = entry->forward; child; child = child->next) {
if (!plot->line(entry->x + WIDTH + xoffset, if (!plot->line(entry->x + WIDTH + xoffset,
entry->y + HEIGHT / 2 + yoffset, entry->y + HEIGHT / 2 + yoffset,
entry->x + WIDTH + tailsize + xoffset, entry->x + WIDTH + tailsize + xoffset,
entry->y + HEIGHT / 2 + yoffset, entry->y + HEIGHT / 2 + yoffset,
plot_style_stroke_history)) &pstyle_line)) {
return false; return false;
}
if (!plot->line(entry->x + WIDTH + tailsize + xoffset, if (!plot->line(entry->x + WIDTH + tailsize + xoffset,
entry->y + HEIGHT / 2 + yoffset, entry->y + HEIGHT / 2 + yoffset,
child->x - tailsize +xoffset, child->x - tailsize +xoffset,
child->y + HEIGHT / 2 + yoffset, child->y + HEIGHT / 2 + yoffset,
plot_style_stroke_history)) &pstyle_line)) {
return false; return false;
}
if (!plot->line(child->x - tailsize + xoffset, if (!plot->line(child->x - tailsize + xoffset,
child->y + HEIGHT / 2 + yoffset, child->y + HEIGHT / 2 + yoffset,
child->x + xoffset, child->y + child->x + xoffset, child->y +
HEIGHT / 2 + yoffset, HEIGHT / 2 + yoffset,
plot_style_stroke_history)) &pstyle_line)) {
return false; return false;
}
if (!browser_window_history__redraw_entry(history, child, if (!browser_window_history__redraw_entry(history, child,
x0, y0, x1, y1, x, y, clip, ctx)) x0, y0, x1, y1, x, y, clip, ctx)) {
return false; return false;
}
} }
return true; return true;
@ -415,6 +469,17 @@ nserror browser_window_history_create(struct browser_window *bw)
{ {
struct history *history; struct history *history;
pstyle_bg.fill_colour = ns_system_colour_char("Window");
pfstyle_node.background = pstyle_bg.fill_colour;
pfstyle_node_sel.background = pstyle_bg.fill_colour;
pstyle_line.stroke_colour = ns_system_colour_char("GrayText");
pstyle_rect.stroke_colour = pstyle_line.stroke_colour;
pfstyle_node.foreground = pstyle_line.stroke_colour;
pstyle_rect_sel.stroke_colour = ns_system_colour_char("Highlight");
pfstyle_node_sel.foreground = pstyle_rect_sel.stroke_colour;
bw->history = NULL; bw->history = NULL;
history = calloc(1, sizeof *history); history = calloc(1, sizeof *history);
@ -426,6 +491,7 @@ nserror browser_window_history_create(struct browser_window *bw)
history->height = BOTTOM_MARGIN / 2; history->height = BOTTOM_MARGIN / 2;
bw->history = history; bw->history = history;
return NSERROR_OK; return NSERROR_OK;
} }
@ -709,6 +775,7 @@ bool browser_window_history_redraw(struct browser_window *bw,
if (!history->start) if (!history->start)
return true; return true;
return browser_window_history__redraw_entry(history, history->start, return browser_window_history__redraw_entry(history, history->start,
0, 0, 0, 0, 0, 0, false, ctx); 0, 0, 0, 0, 0, 0, false, ctx);
} }
@ -726,6 +793,7 @@ bool browser_window_history_redraw_rectangle(struct browser_window *bw,
if (!history->start) if (!history->start)
return true; return true;
return browser_window_history__redraw_entry(history, history->start, return browser_window_history__redraw_entry(history, history->start,
x0, y0, x1, y1, x, y, true, ctx); x0, y0, x1, y1, x, y, true, ctx);
} }

View File

@ -152,15 +152,6 @@ static plot_style_t plot_style_stroke_lightwbasec_static = {
}; };
plot_style_t *plot_style_stroke_lightwbasec = &plot_style_stroke_lightwbasec_static; plot_style_t *plot_style_stroke_lightwbasec = &plot_style_stroke_lightwbasec_static;
/* history styles */
/** stroke style for history core. */
static plot_style_t plot_style_stroke_history_static = {
.stroke_type = PLOT_OP_TYPE_SOLID,
.stroke_colour = HISTORY_COLOUR_LINES,
.stroke_width = 2,
};
plot_style_t *plot_style_stroke_history = &plot_style_stroke_history_static;
/* Generic font style */ /* Generic font style */
static const plot_font_style_t plot_style_font_static = { static const plot_font_style_t plot_style_font_static = {

View File

@ -24,11 +24,20 @@
#define _NETSURF_DESKTOP_PLOT_STYLE_H_ #define _NETSURF_DESKTOP_PLOT_STYLE_H_
#include <stdint.h> #include <stdint.h>
#include "netsurf/types.h"
/* html widget colours */ /* html widget colours */
/** light grey widget base colour */
#define WIDGET_BASEC 0xd9d9d9 #define WIDGET_BASEC 0xd9d9d9
/** black blob colour */
#define WIDGET_BLOBC 0x000000 #define WIDGET_BLOBC 0x000000
/**
* Transparent value
*/
#define NS_TRANSPARENT 0x01000000
/* Darken a colour by taking three quarters of each channel's intensity */ /* Darken a colour by taking three quarters of each channel's intensity */
#define darken_colour(c1) \ #define darken_colour(c1) \
((((3 * (c1 & 0xff00ff)) >> 2) & 0xff00ff) | \ ((((3 * (c1 & 0xff00ff)) >> 2) & 0xff00ff) | \
@ -90,15 +99,6 @@
#define blue_from_colour(c) \ #define blue_from_colour(c) \
((c >> 16) & 0xff) ((c >> 16) & 0xff)
/**
* Colour type: XBGR
*/
typedef uint32_t colour;
/**
* Magical transparent value
*/
#define NS_TRANSPARENT 0x01000000
/** /**
* Type of plot operation * Type of plot operation
@ -110,6 +110,7 @@ typedef enum {
PLOT_OP_TYPE_DASH, /**< Dashed plot */ PLOT_OP_TYPE_DASH, /**< Dashed plot */
} plot_operation_type_t; } plot_operation_type_t;
/** /**
* Plot style for stroke/fill plotters * Plot style for stroke/fill plotters
*/ */
@ -121,6 +122,7 @@ typedef struct plot_style_s {
colour fill_colour; /**< Colour of fill */ colour fill_colour; /**< Colour of fill */
} plot_style_t; } plot_style_t;
/** /**
* Generic font family type * Generic font family type
*/ */
@ -133,6 +135,7 @@ typedef enum {
PLOT_FONT_FAMILY_COUNT /**< Number of generic families */ PLOT_FONT_FAMILY_COUNT /**< Number of generic families */
} plot_font_generic_family_t; } plot_font_generic_family_t;
/** /**
* Font plot flags * Font plot flags
*/ */
@ -142,11 +145,13 @@ typedef unsigned long plot_font_flags_t;
#define FONTF_OBLIQUE 2 #define FONTF_OBLIQUE 2
#define FONTF_SMALLCAPS 4 #define FONTF_SMALLCAPS 4
/** /**
* Scaling factor for font sizes * Scaling factor for font sizes
*/ */
#define FONT_SIZE_SCALE 1024 #define FONT_SIZE_SCALE 1024
/** /**
* Font style for plotting * Font style for plotting
*/ */
@ -159,16 +164,19 @@ typedef struct plot_font_style {
colour foreground; /**< Colour of text */ colour foreground; /**< Colour of text */
} plot_font_style_t; } plot_font_style_t;
/* global fill styles */ /* global fill styles */
extern plot_style_t *plot_style_fill_white; extern plot_style_t *plot_style_fill_white;
extern plot_style_t *plot_style_fill_red; extern plot_style_t *plot_style_fill_red;
extern plot_style_t *plot_style_fill_black; extern plot_style_t *plot_style_fill_black;
/* Box model debug outline styles for content, padding and margin edges */ /* Box model debug outline styles for content, padding and margin edges */
extern plot_style_t const * const plot_style_content_edge; extern plot_style_t const * const plot_style_content_edge;
extern plot_style_t const * const plot_style_padding_edge; extern plot_style_t const * const plot_style_padding_edge;
extern plot_style_t const * const plot_style_margin_edge; extern plot_style_t const * const plot_style_margin_edge;
/* Broken object replacement styles */ /* Broken object replacement styles */
extern plot_style_t const * const plot_style_broken_object; extern plot_style_t const * const plot_style_broken_object;
extern plot_font_style_t const * const plot_fstyle_broken_object; extern plot_font_style_t const * const plot_fstyle_broken_object;
@ -176,7 +184,6 @@ extern plot_font_style_t const * const plot_fstyle_broken_object;
/* other styles */ /* other styles */
extern plot_style_t *plot_style_caret; extern plot_style_t *plot_style_caret;
extern plot_style_t *plot_style_stroke_history;
extern plot_style_t *plot_style_fill_wbasec; extern plot_style_t *plot_style_fill_wbasec;
extern plot_style_t *plot_style_fill_darkwbasec; extern plot_style_t *plot_style_fill_darkwbasec;
extern plot_style_t *plot_style_fill_lightwbasec; extern plot_style_t *plot_style_fill_lightwbasec;
@ -185,23 +192,9 @@ extern plot_style_t *plot_style_stroke_wblobc;
extern plot_style_t *plot_style_stroke_darkwbasec; extern plot_style_t *plot_style_stroke_darkwbasec;
extern plot_style_t *plot_style_stroke_lightwbasec; extern plot_style_t *plot_style_stroke_lightwbasec;
/* Default font style */ /* Default font style */
extern plot_font_style_t const * const plot_style_font; extern plot_font_style_t const * const plot_style_font;
#ifndef HISTORY_COLOUR_SELECTED
#define HISTORY_COLOUR_SELECTED 0xFF0000
#endif
#ifndef HISTORY_COLOUR_FOREGROUND
#define HISTORY_COLOUR_FOREGROUND 0x333333
#endif
#ifndef HISTORY_COLOUR_BACKGROUND
#define HISTORY_COLOUR_BACKGROUND 0xFFFFFF
#endif
#ifndef HISTORY_COLOUR_LINES
#define HISTORY_COLOUR_LINES HISTORY_COLOUR_FOREGROUND
#endif
#endif #endif

35
include/netsurf/types.h Normal file
View File

@ -0,0 +1,35 @@
/*
* Copyright 2017 Vincent Sanders <vince@netsurf-browser.org>
*
* This file is part of NetSurf, http://www.netsurf-browser.org/
*
* NetSurf is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2 of the License.
*
* NetSurf is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* \file
*
* NetSurf types.
*
* These are convenience types used throughout the browser.
*/
#ifndef NETSURF_TYPES_H
#define NETSURF_TYPES_H
/**
* Colour type: XBGR
*/
typedef uint32_t colour;
#endif