mirror of
https://github.com/netsurf-browser/netsurf
synced 2024-12-18 18:23:25 +03:00
Update gtk frontend to use layout table
This commit is contained in:
parent
974a4a21e1
commit
922faa743b
@ -176,10 +176,10 @@ endif
|
||||
# ----------------------------------------------------------------------------
|
||||
|
||||
# S_GTK are sources purely for the GTK build
|
||||
S_GTK := font_pango.c bitmap.c gui.c schedule.c plotters.c \
|
||||
S_GTK := gui.c schedule.c layout_pango.c bitmap.c plotters.c \
|
||||
treeview.c scaffolding.c gdk.c completion.c login.c throbber.c \
|
||||
selection.c history.c window.c fetch.c download.c menu.c \
|
||||
print.c search.c tabs.c toolbar.c gettext.c \
|
||||
print.c search.c tabs.c toolbar.c gettext.c \
|
||||
compat.c cookies.c hotlist.c viewdata.c viewsource.c \
|
||||
preferences.c about.c ssl_cert.c resources.c
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright 2004-2010 James Bursa <bursa@users.sourceforge.net>
|
||||
* Copyright 2010 Vincent Sanders <vince@debian.org>
|
||||
* Copyright 2010-2016 Vincent Sanders <vince@netsurf-browser.org>
|
||||
* Copyright 2004-2009 John-Mark Bell <jmb@netsurf-browser.org>
|
||||
* Copyright 2009 Paul Blokus <paul_pl@users.sourceforge.net>
|
||||
* Copyright 2006-2009 Daniel Silverstone <dsilvers@netsurf-browser.org>
|
||||
@ -69,6 +69,7 @@
|
||||
#include "gtk/bitmap.h"
|
||||
#include "gtk/resources.h"
|
||||
#include "gtk/login.h"
|
||||
#include "gtk/layout_pango.h"
|
||||
|
||||
bool nsgtk_complete = false;
|
||||
|
||||
@ -1058,6 +1059,7 @@ int main(int argc, char** argv)
|
||||
.search = nsgtk_search_table,
|
||||
.search_web = nsgtk_search_web_table,
|
||||
.bitmap = nsgtk_bitmap_table,
|
||||
.layout = nsgtk_layout_table,
|
||||
};
|
||||
|
||||
ret = netsurf_register(&nsgtk_table);
|
||||
|
@ -16,8 +16,9 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/** \file
|
||||
* Font handling (GTK implementation).
|
||||
/**
|
||||
* \file
|
||||
* GTK implementation of layout handling using pango.
|
||||
*
|
||||
* Pango is used handle and render fonts.
|
||||
*/
|
||||
@ -30,29 +31,11 @@
|
||||
#include "utils/utils.h"
|
||||
#include "utils/log.h"
|
||||
#include "utils/nsoption.h"
|
||||
#include "desktop/font.h"
|
||||
#include "desktop/gui_layout.h"
|
||||
|
||||
#include "gtk/font_pango.h"
|
||||
#include "gtk/layout_pango.h"
|
||||
#include "gtk/plotters.h"
|
||||
|
||||
static bool nsfont_width(const plot_font_style_t *fstyle,
|
||||
const char *string, size_t length,
|
||||
int *width);
|
||||
|
||||
static bool nsfont_position_in_string(const plot_font_style_t *fstyle,
|
||||
const char *string, size_t length,
|
||||
int x, size_t *char_offset, int *actual_x);
|
||||
|
||||
static bool nsfont_split(const plot_font_style_t *style,
|
||||
const char *string, size_t length,
|
||||
int x, size_t *char_offset, int *actual_x);
|
||||
|
||||
const struct font_functions nsfont = {
|
||||
nsfont_width,
|
||||
nsfont_position_in_string,
|
||||
nsfont_split
|
||||
};
|
||||
|
||||
static PangoContext *nsfont_pango_context = NULL;
|
||||
static PangoLayout *nsfont_pango_layout = NULL;
|
||||
|
||||
@ -72,22 +55,23 @@ static inline void nsfont_pango_check(void)
|
||||
/**
|
||||
* Measure the width of a string.
|
||||
*
|
||||
* \param fstyle plot style for this text
|
||||
* \param string UTF-8 string to measure
|
||||
* \param length length of string
|
||||
* \param width updated to width of string[0..length)
|
||||
* \return true on success, false on error and error reported
|
||||
* \param[in] fstyle plot style for this text
|
||||
* \param[in] string UTF-8 string to measure
|
||||
* \param[in] length length of string, in bytes
|
||||
* \param[out] width updated to width of string[0..length)
|
||||
* \return NSERROR_OK and width updated or appropriate error code on faliure
|
||||
*/
|
||||
|
||||
bool nsfont_width(const plot_font_style_t *fstyle,
|
||||
const char *string, size_t length,
|
||||
int *width)
|
||||
static nserror
|
||||
nsfont_width(const plot_font_style_t *fstyle,
|
||||
const char *string,
|
||||
size_t length,
|
||||
int *width)
|
||||
{
|
||||
PangoFontDescription *desc;
|
||||
|
||||
if (length == 0) {
|
||||
*width = 0;
|
||||
return true;
|
||||
return NSERROR_OK;
|
||||
}
|
||||
|
||||
nsfont_pango_check();
|
||||
@ -104,25 +88,29 @@ bool nsfont_width(const plot_font_style_t *fstyle,
|
||||
fstyle, length, string, length, *width);
|
||||
*/
|
||||
|
||||
return true;
|
||||
return NSERROR_OK;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Find the position in a string where an x coordinate falls.
|
||||
*
|
||||
* \param fstyle plot style for this text
|
||||
* \param string UTF-8 string to measure
|
||||
* \param length length of string
|
||||
* \param x x coordinate to search for
|
||||
* \param char_offset updated to offset in string of actual_x, [0..length]
|
||||
* \param actual_x updated to x coordinate of character closest to x
|
||||
* \return true on success, false on error and error reported
|
||||
* \param[in] fstyle style for this text
|
||||
* \param[in] string UTF-8 string to measure
|
||||
* \param[in] length length of string, in bytes
|
||||
* \param[in] x coordinate to search for
|
||||
* \param[out] char_offset updated to offset in string of actual_x, [0..length]
|
||||
* \param[out] actual_x updated to x coordinate of character closest to x
|
||||
* \return NSERROR_OK and char_offset and actual_x updated or appropriate
|
||||
* error code on faliure
|
||||
*/
|
||||
|
||||
bool nsfont_position_in_string(const plot_font_style_t *fstyle,
|
||||
const char *string, size_t length,
|
||||
int x, size_t *char_offset, int *actual_x)
|
||||
static nserror
|
||||
nsfont_position_in_string(const plot_font_style_t *fstyle,
|
||||
const char *string,
|
||||
size_t length,
|
||||
int x,
|
||||
size_t *char_offset,
|
||||
int *actual_x)
|
||||
{
|
||||
int index;
|
||||
PangoFontDescription *desc;
|
||||
@ -136,33 +124,35 @@ bool nsfont_position_in_string(const plot_font_style_t *fstyle,
|
||||
|
||||
pango_layout_set_text(nsfont_pango_layout, string, length);
|
||||
|
||||
if (pango_layout_xy_to_index(nsfont_pango_layout, x * PANGO_SCALE,
|
||||
0, &index, 0) == FALSE)
|
||||
if (pango_layout_xy_to_index(nsfont_pango_layout,
|
||||
x * PANGO_SCALE,
|
||||
0, &index, 0) == FALSE) {
|
||||
index = length;
|
||||
}
|
||||
|
||||
pango_layout_index_to_pos(nsfont_pango_layout, index, &pos);
|
||||
|
||||
*char_offset = index;
|
||||
*actual_x = PANGO_PIXELS(pos.x);
|
||||
|
||||
return true;
|
||||
return NSERROR_OK;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Find where to split a string to make it fit a width.
|
||||
*
|
||||
* \param fstyle style for this text
|
||||
* \param string UTF-8 string to measure
|
||||
* \param length length of string, in bytes
|
||||
* \param x width available
|
||||
* \param char_offset updated to offset in string of actual_x, [1..length]
|
||||
* \param actual_x updated to x coordinate of character closest to x
|
||||
* \return true on success, false on error and error reported
|
||||
* \param[in] fstyle style for this text
|
||||
* \param[in] string UTF-8 string to measure
|
||||
* \param[in] length length of string, in bytes
|
||||
* \param[in] x width available
|
||||
* \param[out] char_offset updated to offset in string of actual_x, [1..length]
|
||||
* \param[out] actual_x updated to x coordinate of character closest to x
|
||||
* \return NSERROR_OK or appropriate error code on faliure
|
||||
*
|
||||
* On exit, char_offset indicates first character after split point.
|
||||
*
|
||||
* Note: char_offset of 0 should never be returned.
|
||||
* \note char_offset of 0 must never be returned.
|
||||
*
|
||||
* Returns:
|
||||
* char_offset giving split point closest to x, where actual_x <= x
|
||||
@ -171,10 +161,13 @@ bool nsfont_position_in_string(const plot_font_style_t *fstyle,
|
||||
*
|
||||
* Returning char_offset == length means no split possible
|
||||
*/
|
||||
|
||||
bool nsfont_split(const plot_font_style_t *fstyle,
|
||||
const char *string, size_t length,
|
||||
int x, size_t *char_offset, int *actual_x)
|
||||
static nserror
|
||||
nsfont_split(const plot_font_style_t *fstyle,
|
||||
const char *string,
|
||||
size_t length,
|
||||
int x,
|
||||
size_t *char_offset,
|
||||
int *actual_x)
|
||||
{
|
||||
int index = length;
|
||||
PangoFontDescription *desc;
|
||||
@ -215,7 +208,7 @@ bool nsfont_split(const plot_font_style_t *fstyle,
|
||||
/* Obtain the pixel offset of the split character */
|
||||
nsfont_width(fstyle, string, index, actual_x);
|
||||
|
||||
return true;
|
||||
return NSERROR_OK;
|
||||
}
|
||||
|
||||
|
||||
@ -229,7 +222,6 @@ bool nsfont_split(const plot_font_style_t *fstyle,
|
||||
* \param fstyle plot style for this text
|
||||
* \return true on success, false on error and error reported
|
||||
*/
|
||||
|
||||
bool nsfont_paint(int x, int y, const char *string, size_t length,
|
||||
const plot_font_style_t *fstyle)
|
||||
{
|
||||
@ -259,15 +251,9 @@ bool nsfont_paint(int x, int y, const char *string, size_t length,
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Convert a plot style to a PangoFontDescription.
|
||||
*
|
||||
* \param fstyle plot style for this text
|
||||
* \return A new Pango font description
|
||||
*/
|
||||
|
||||
PangoFontDescription *nsfont_style_to_description(
|
||||
const plot_font_style_t *fstyle)
|
||||
/* exported interface documented in gtk/layout_pango.h */
|
||||
PangoFontDescription *
|
||||
nsfont_style_to_description(const plot_font_style_t *fstyle)
|
||||
{
|
||||
unsigned int size;
|
||||
PangoFontDescription *desc;
|
||||
@ -315,3 +301,10 @@ PangoFontDescription *nsfont_style_to_description(
|
||||
return desc;
|
||||
}
|
||||
|
||||
static struct gui_layout_table layout_table = {
|
||||
.width = nsfont_width,
|
||||
.position = nsfont_position_in_string,
|
||||
.split = nsfont_split,
|
||||
};
|
||||
|
||||
struct gui_layout_table *nsgtk_layout_table = &layout_table;
|
@ -16,22 +16,28 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/** \file
|
||||
* Font handling (GTK interface).
|
||||
/**
|
||||
* \file
|
||||
* Interface to GTK layout handling using pango.
|
||||
*/
|
||||
|
||||
#ifndef _NETSURF_GTK_FONT_PANGO_H_
|
||||
#define _NETSURF_GTK_FONT_PANGO_H_
|
||||
#ifndef _NETSURF_GTK_LAYOUT_PANGO_H_
|
||||
#define _NETSURF_GTK_LAYOUT_PANGO_H_
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
#include "desktop/plot_style.h"
|
||||
struct plot_font_style;
|
||||
|
||||
bool nsfont_paint(int x, int y, const char *string, size_t length,
|
||||
const plot_font_style_t *fstyle);
|
||||
extern struct gui_layout_table *nsgtk_layout_table;
|
||||
|
||||
bool nsfont_paint(int x, int y, const char *string, size_t length, const struct plot_font_style *fstyle);
|
||||
|
||||
/**
|
||||
* Convert a plot style to a PangoFontDescription.
|
||||
*
|
||||
* \param fstyle plot style for this text
|
||||
* \return A new Pango font description
|
||||
*/
|
||||
PangoFontDescription *nsfont_style_to_description(const struct plot_font_style *fstyle);
|
||||
|
||||
PangoFontDescription *nsfont_style_to_description(
|
||||
const plot_font_style_t *fstyle);
|
||||
|
||||
|
||||
#endif
|
@ -17,13 +17,12 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/** \file
|
||||
* Target independent plotting (GDK / GTK+ and Cairo implementation).
|
||||
* Can use either GDK drawing primitives (which are mostly passed straight
|
||||
* to X to process, and thus accelerated) or Cairo drawing primitives (much
|
||||
* higher quality, not accelerated). Cairo's fast enough, so it defaults
|
||||
* to using it if it is available. It does this by checking for the
|
||||
* CAIRO_VERSION define that the cairo headers set.
|
||||
/**
|
||||
* \file
|
||||
* GTK and Cairo plotter implementations.
|
||||
*
|
||||
* Uses Cairo drawing primitives to render browser output.
|
||||
* \todo remove the use of the gdk structure for clipping
|
||||
*/
|
||||
|
||||
#include <math.h>
|
||||
@ -36,7 +35,7 @@
|
||||
#include "desktop/plotters.h"
|
||||
#include "utils/nsoption.h"
|
||||
|
||||
#include "gtk/font_pango.h"
|
||||
#include "gtk/layout_pango.h"
|
||||
#include "gtk/plotters.h"
|
||||
#include "gtk/scaffolding.h"
|
||||
#include "gtk/bitmap.h"
|
||||
@ -272,7 +271,7 @@ static bool nsgtk_plot_polygon(const int *p, unsigned int n, const plot_style_t
|
||||
|
||||
|
||||
static bool nsgtk_plot_text(int x, int y, const char *text, size_t length,
|
||||
const plot_font_style_t *fstyle)
|
||||
const struct plot_font_style *fstyle)
|
||||
{
|
||||
return nsfont_paint(x, y, text, length, fstyle);
|
||||
}
|
||||
|
@ -39,9 +39,8 @@
|
||||
#include "desktop/plotters.h"
|
||||
#include "desktop/print.h"
|
||||
#include "desktop/printer.h"
|
||||
#include "desktop/font.h"
|
||||
|
||||
#include "gtk/font_pango.h"
|
||||
#include "gtk/layout_pango.h"
|
||||
#include "gtk/bitmap.h"
|
||||
#include "gtk/print.h"
|
||||
#include "gtk/scaffolding.h"
|
||||
@ -562,8 +561,8 @@ void gtk_print_signal_begin_print (GtkPrintOperation *operation,
|
||||
settings->margins[MARGINRIGHT] = 0;
|
||||
settings->page_width = gtk_print_context_get_width(context);
|
||||
settings->page_height = gtk_print_context_get_height(context);
|
||||
settings->scale = 0.7;/*at 0.7 the pages look the best*/
|
||||
settings->font_func = &nsfont;
|
||||
settings->scale = 0.7; /* at 0.7 the pages look the best */
|
||||
settings->font_func = nsgtk_layout_table;
|
||||
|
||||
if (print_set_up(content_to_print, >k_printer,
|
||||
settings, &height_to_print) == false) {
|
||||
|
@ -46,7 +46,6 @@
|
||||
#include "desktop/save_text.h"
|
||||
#include "desktop/searchweb.h"
|
||||
#include "desktop/textinput.h"
|
||||
#include "desktop/font.h"
|
||||
#include "content/hlcache.h"
|
||||
|
||||
#include "gtk/compat.h"
|
||||
@ -73,6 +72,7 @@
|
||||
#include "gtk/schedule.h"
|
||||
#include "gtk/viewdata.h"
|
||||
#include "gtk/resources.h"
|
||||
#include "gtk/layout_pango.h"
|
||||
|
||||
/** Macro to define a handler for menu, button and activate events. */
|
||||
#define MULTIHANDLER(q)\
|
||||
@ -874,7 +874,7 @@ MULTIHANDLER(print)
|
||||
}
|
||||
gtk_print_operation_set_default_page_setup(print_op, page_setup);
|
||||
|
||||
nssettings = print_make_settings(PRINT_DEFAULT, NULL, &nsfont);
|
||||
nssettings = print_make_settings(PRINT_DEFAULT, NULL, nsgtk_layout_table);
|
||||
|
||||
g_signal_connect(print_op, "begin_print",
|
||||
G_CALLBACK(gtk_print_signal_begin_print), nssettings);
|
||||
|
Loading…
Reference in New Issue
Block a user