r12695 jmb - in /trunk/netsurf: !NetSurf/Resources/CSS, f79 css/select.c
by netsurf@semichrome.net
Author: jmb
Date: Wed Aug 31 16:12:57 2011
New Revision: 12695
URL: http://source.netsurf-browser.org?rev=12695&view=rev
Log:
More accurate legacy font size handling
Modified:
trunk/netsurf/!NetSurf/Resources/CSS,f79
trunk/netsurf/css/select.c
Modified: trunk/netsurf/!NetSurf/Resources/CSS,f79
URL: http://source.netsurf-browser.org/trunk/netsurf/%21NetSurf/Resources/CSS%...
==============================================================================
--- trunk/netsurf/!NetSurf/Resources/CSS,f79 (original)
+++ trunk/netsurf/!NetSurf/Resources/CSS,f79 Wed Aug 31 16:12:57 2011
@@ -103,21 +103,6 @@
strike, s { text-decoration: line-through; }
u { text-decoration: underline; }
-font[size="1"] { font-size: x-small; }
-font[size="2"] { font-size: small; }
-font[size="3"] { font-size: medium; }
-font[size="4"] { font-size: large; }
-font[size="5"] { font-size: x-large; }
-font[size="6"] { font-size: xx-large; }
-font[size="7"] { font-size: xx-large; }
-/* And now, some hackery for relative font size */
-font[size="-1"] { font-size: small }
-font[size="-2"] { font-size: x-small }
-font[size="+1"] { font-size: large }
-font[size="+2"] { font-size: x-large }
-font[size="+3"] { font-size: xx-large }
-font[size="+4"] { font-size: xx-large }
-
hr { display: block; background-color: #000; height: 1px;
margin: 4px auto; border: 1px #d9d9d9 inset; }
hr[noshade] { background-color: #888; height: 2px; border: none; }
Modified: trunk/netsurf/css/select.c
URL: http://source.netsurf-browser.org/trunk/netsurf/css/select.c?rev=12695&r1...
==============================================================================
--- trunk/netsurf/css/select.c (original)
+++ trunk/netsurf/css/select.c Wed Aug 31 16:12:57 2011
@@ -98,6 +98,8 @@
css_fixed *length, css_unit *unit);
static bool parse_number(const char *data, bool non_negative, bool real,
css_fixed *value, size_t *consumed);
+static bool parse_font_size(const char *size, uint8_t *val,
+ css_fixed *len, css_unit *unit);
static css_computed_style *nscss_get_initial_style(nscss_select_ctx *ctx,
css_allocator_fn, void *pw);
@@ -1766,6 +1768,27 @@
}
xmlFree(align);
+
+ return CSS_OK;
+ } else if (property == CSS_PROP_FONT_SIZE) {
+ xmlChar *size;
+
+ if (strcmp((const char *) n->name, "font") == 0)
+ size = xmlGetProp(n, (const xmlChar *) "size");
+ else
+ size = NULL;
+
+ if (size == NULL)
+ return CSS_PROPERTY_NOT_SET;
+
+ if (parse_font_size((const char *) size, &hint->status,
+ &hint->data.length.value,
+ &hint->data.length.unit) == false) {
+ xmlFree(size);
+ return CSS_PROPERTY_NOT_SET;
+ }
+
+ xmlFree(size);
return CSS_OK;
} else if (property == CSS_PROP_HEIGHT) {
@@ -2721,6 +2744,80 @@
return true;
}
+/**
+ * Parse a font @size attribute
+ *
+ * \param size Data to parse (NUL-terminated)
+ * \param val Pointer to location to receive enum value
+ * \param len Pointer to location to receive length
+ * \param unit Pointer to location to receive unit
+ * \return True on success, false on failure
+ */
+bool parse_font_size(const char *size, uint8_t *val,
+ css_fixed *len, css_unit *unit)
+{
+ static const uint8_t size_map[] = {
+ CSS_FONT_SIZE_XX_SMALL,
+ CSS_FONT_SIZE_SMALL,
+ CSS_FONT_SIZE_MEDIUM,
+ CSS_FONT_SIZE_LARGE,
+ CSS_FONT_SIZE_X_LARGE,
+ CSS_FONT_SIZE_XX_LARGE,
+ CSS_FONT_SIZE_DIMENSION /* xxx-large (see below) */
+ };
+
+ const char *p = size;
+ char mode;
+ int value = 0;
+
+ /* Skip whitespace */
+ while (*p != '\0' && isWhitespace(*p))
+ p++;
+
+ mode = *p;
+
+ /* Skip +/- */
+ if (mode == '+' || mode == '-')
+ p++;
+
+ /* Need at least one digit */
+ if (*p < '0' || *p > '9') {
+ return false;
+ }
+
+ /* Consume digits, computing value */
+ while ('0' <= *p && *p <= '9') {
+ value = value * 10 + (*p - '0');
+ p++;
+ }
+
+ /* Resolve relative sizes */
+ if (mode == '+')
+ value += 3;
+ else if (mode == '-')
+ value = 3 - value;
+
+ /* Clamp to range [1,7] */
+ if (value < 1)
+ value = 1;
+ else if (value > 7)
+ value = 7;
+
+ if (value == 7) {
+ /* Manufacture xxx-large */
+ *len = FDIV(FMUL(INTTOFIX(3), INTTOFIX(option_font_size)),
+ F_10);
+ } else {
+ /* Len is irrelevant */
+ *len = 0;
+ }
+
+ *unit = CSS_UNIT_PT;
+ *val = size_map[value - 1];
+
+ return true;
+}
+
/******************************************************************************
* Utility functions *
******************************************************************************/
12 years
r12694 chris_y - /trunk/netsurf/amiga/gui.c
by netsurf@semichrome.net
Author: chris_y
Date: Wed Aug 31 14:53:34 2011
New Revision: 12694
URL: http://source.netsurf-browser.org?rev=12694&view=rev
Log:
Don't refresh buttons when enabling/disabling. Fixes bitmap alpha/overprinting
problem (thanks to Simon Archer)
Modified:
trunk/netsurf/amiga/gui.c
Modified: trunk/netsurf/amiga/gui.c
URL: http://source.netsurf-browser.org/trunk/netsurf/amiga/gui.c?rev=12694&r1=...
==============================================================================
--- trunk/netsurf/amiga/gui.c (original)
+++ trunk/netsurf/amiga/gui.c Wed Aug 31 14:53:34 2011
@@ -2237,25 +2237,25 @@
}
}
- RefreshSetGadgetAttrs((struct Gadget *)gwin->objects[GID_BACK],gwin->win,NULL,
+ SetGadgetAttrs((struct Gadget *)gwin->objects[GID_BACK],gwin->win,NULL,
GA_Disabled,back,
TAG_DONE);
- RefreshSetGadgetAttrs((struct Gadget *)gwin->objects[GID_FORWARD],gwin->win,NULL,
+ SetGadgetAttrs((struct Gadget *)gwin->objects[GID_FORWARD],gwin->win,NULL,
GA_Disabled,forward,
TAG_DONE);
- RefreshSetGadgetAttrs((struct Gadget *)gwin->objects[GID_RELOAD],gwin->win,NULL,
+ SetGadgetAttrs((struct Gadget *)gwin->objects[GID_RELOAD],gwin->win,NULL,
GA_Disabled,reload,
TAG_DONE);
- RefreshSetGadgetAttrs((struct Gadget *)gwin->objects[GID_STOP],gwin->win,NULL,
+ SetGadgetAttrs((struct Gadget *)gwin->objects[GID_STOP],gwin->win,NULL,
GA_Disabled,stop,
TAG_DONE);
if((gwin->tabs) && (ClickTabBase->lib_Version < 53))
{
- RefreshSetGadgetAttrs((struct Gadget *)gwin->objects[GID_CLOSETAB],gwin->win,NULL,
+ SetGadgetAttrs((struct Gadget *)gwin->objects[GID_CLOSETAB],gwin->win,NULL,
GA_Disabled,tabclose,
TAG_DONE);
}
12 years
r12692 jmb - in /branches/jmb/opaque-browser: desktop/ framebuffer/ render/
by netsurf@semichrome.net
Author: jmb
Date: Wed Aug 31 14:42:54 2011
New Revision: 12692
URL: http://source.netsurf-browser.org?rev=12692&view=rev
Log:
Begin to make browser_window opaque
Added:
branches/jmb/opaque-browser/desktop/browser_internal.h
Modified:
branches/jmb/opaque-browser/desktop/browser.c
branches/jmb/opaque-browser/desktop/browser.h
branches/jmb/opaque-browser/desktop/frames.c
branches/jmb/opaque-browser/desktop/search.c
branches/jmb/opaque-browser/desktop/selection.c
branches/jmb/opaque-browser/desktop/textinput.c
branches/jmb/opaque-browser/framebuffer/gui.c
branches/jmb/opaque-browser/framebuffer/localhistory.c
branches/jmb/opaque-browser/render/form.c
branches/jmb/opaque-browser/render/textinput.c
Modified: branches/jmb/opaque-browser/desktop/browser.c
URL: http://source.netsurf-browser.org/branches/jmb/opaque-browser/desktop/bro...
==============================================================================
--- branches/jmb/opaque-browser/desktop/browser.c (original)
+++ branches/jmb/opaque-browser/desktop/browser.c Wed Aug 31 14:42:54 2011
@@ -42,7 +42,7 @@
#include "content/hlcache.h"
#include "content/urldb.h"
#include "desktop/401login.h"
-#include "desktop/browser.h"
+#include "desktop/browser_internal.h"
#include "desktop/download.h"
#include "desktop/frames.h"
#include "desktop/history_core.h"
Modified: branches/jmb/opaque-browser/desktop/browser.h
URL: http://source.netsurf-browser.org/branches/jmb/opaque-browser/desktop/bro...
==============================================================================
--- branches/jmb/opaque-browser/desktop/browser.h (original)
+++ branches/jmb/opaque-browser/desktop/browser.h Wed Aug 31 14:42:54 2011
@@ -65,143 +65,6 @@
DRAGGING_SCR_Y,
DRAGGING_OTHER
} browser_drag_type;
-
-
-
-/** Browser window data. */
-struct browser_window {
- /** Page currently displayed, or 0. Must have status READY or DONE. */
- struct hlcache_handle *current_content;
- /** Page being loaded, or 0. */
- struct hlcache_handle *loading_content;
-
- /** Window history structure. */
- struct history *history;
-
- /** Handler for keyboard input, or 0. */
- browser_caret_callback caret_callback;
- /** Handler for pasting text, or 0. */
- browser_paste_callback paste_callback;
- /** Handler for repositioning caret, or 0. */
- browser_move_callback move_callback;
-
- /** User parameters for caret_callback, paste_callback, and
- * move_callback */
- void *caret_p1;
- void *caret_p2;
-
- /** Platform specific window data. */
- struct gui_window *window;
-
- /** Busy indicator is active. */
- bool throbbing;
- /** Add loading_content to the window history when it loads. */
- bool history_add;
-
- /** Fragment identifier for current_content. */
- char *frag_id;
-
- /** Current drag status. */
- browser_drag_type drag_type;
-
- /** Current drag's browser window, when not in root bw. */
- struct browser_window *drag_window;
-
- /** Mouse position at start of current scroll drag. */
- int drag_start_x;
- int drag_start_y;
- /** Scroll offsets at start of current scroll draw. */
- int drag_start_scroll_x;
- int drag_start_scroll_y;
- /** Frame resize directions for current frame resize drag. */
- unsigned int drag_resize_left : 1;
- unsigned int drag_resize_right : 1;
- unsigned int drag_resize_up : 1;
- unsigned int drag_resize_down : 1;
-
- /** Current fetch is download */
- bool download;
-
- /** Refresh interval (-1 if undefined) */
- int refresh_interval;
-
- /** Window has been resized, and content needs reformatting. */
- bool reformat_pending;
-
- /** Window dimensions (to be phased out) */
- int x0;
- int y0;
- int x1;
- int y1;
-
- /** Window dimensions */
- int x;
- int y;
- int width;
- int height;
-
- struct scrollbar *scroll_x; /**< Horizontal scroll. */
- struct scrollbar *scroll_y; /**< Vertical scroll. */
-
- /** scale of window contents */
- float scale;
-
- /** Window characteristics */
- enum {
- BROWSER_WINDOW_NORMAL,
- BROWSER_WINDOW_IFRAME,
- BROWSER_WINDOW_FRAME,
- BROWSER_WINDOW_FRAMESET,
- } browser_window_type;
-
- /** frameset characteristics */
- int rows;
- int cols;
-
- /** frame dimensions */
- struct frame_dimension frame_width;
- struct frame_dimension frame_height;
- int margin_width;
- int margin_height;
-
- /** frame name for targetting */
- char *name;
-
- /** frame characteristics */
- bool no_resize;
- frame_scrolling scrolling;
- bool border;
- colour border_colour;
-
- /** iframe parent box */
- struct box *box;
-
- /** [cols * rows] children */
- struct browser_window *children;
- struct browser_window *parent;
-
- /** [iframe_count] iframes */
- int iframe_count;
- struct browser_window *iframes;
-
- /** browser window child of root browser window which has input focus */
- struct browser_window *focus;
-
- /** Last time a link was followed in this window */
- unsigned int last_action;
-
- /** Current selection, or NULL if none */
- struct selection *cur_sel;
-
- /** Current context for free text search, or NULL if none */
- struct search_context *cur_search;
-
- /** cache of the currently displayed status text. */
- char *status_text; /**< Current status bar text. */
- int status_text_len; /**< Length of the ::status_text buffer. */
- int status_match; /**< Number of times an idempotent status-set operation was performed. */
- int status_miss; /**< Number of times status was really updated. */
-};
extern bool browser_reformat_pending;
@@ -265,6 +128,11 @@
bool browser_window_reload_available(struct browser_window *bw);
bool browser_window_stop_available(struct browser_window *bw);
+/* Dubious accessors */
+float browser_window_get_scale(struct browser_window *bw);
+struct hlcache_handle *browser_window_get_content(struct browser_window *bw);
+struct history *browser_window_get_history(struct browser_window *bw);
+struct gui_window *browser_window_get_window(struct browser_window *bw);
/* In desktop/textinput.c */
void browser_window_place_caret(struct browser_window *bw,
Added: branches/jmb/opaque-browser/desktop/browser_internal.h
URL: http://source.netsurf-browser.org/branches/jmb/opaque-browser/desktop/bro...
==============================================================================
--- branches/jmb/opaque-browser/desktop/browser_internal.h (added)
+++ branches/jmb/opaque-browser/desktop/browser_internal.h Wed Aug 31 14:42:54 2011
@@ -1,0 +1,166 @@
+/*
+ * Copyright 2003 Phil Mellor <monkeyson(a)users.sourceforge.net>
+ * Copyright 2006 James Bursa <bursa(a)users.sourceforge.net>
+ *
+ * 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
+ * Browser window creation and manipulation (internals).
+ */
+
+#ifndef NETSURF_DESKTOP_BROWSER_H_
+#define NETSURF_DESKTOP_BROWSER_H_
+
+
+#include "desktop/browser.h"
+
+/** Browser window data. */
+struct browser_window {
+ /** Page currently displayed, or 0. Must have status READY or DONE. */
+ struct hlcache_handle *current_content;
+ /** Page being loaded, or 0. */
+ struct hlcache_handle *loading_content;
+
+ /** Window history structure. */
+ struct history *history;
+
+ /** Handler for keyboard input, or 0. */
+ browser_caret_callback caret_callback;
+ /** Handler for pasting text, or 0. */
+ browser_paste_callback paste_callback;
+ /** Handler for repositioning caret, or 0. */
+ browser_move_callback move_callback;
+
+ /** User parameters for caret_callback, paste_callback, and
+ * move_callback */
+ void *caret_p1;
+ void *caret_p2;
+
+ /** Platform specific window data. */
+ struct gui_window *window;
+
+ /** Busy indicator is active. */
+ bool throbbing;
+ /** Add loading_content to the window history when it loads. */
+ bool history_add;
+
+ /** Fragment identifier for current_content. */
+ char *frag_id;
+
+ /** Current drag status. */
+ browser_drag_type drag_type;
+
+ /** Current drag's browser window, when not in root bw. */
+ struct browser_window *drag_window;
+
+ /** Mouse position at start of current scroll drag. */
+ int drag_start_x;
+ int drag_start_y;
+ /** Scroll offsets at start of current scroll draw. */
+ int drag_start_scroll_x;
+ int drag_start_scroll_y;
+ /** Frame resize directions for current frame resize drag. */
+ unsigned int drag_resize_left : 1;
+ unsigned int drag_resize_right : 1;
+ unsigned int drag_resize_up : 1;
+ unsigned int drag_resize_down : 1;
+
+ /** Current fetch is download */
+ bool download;
+
+ /** Refresh interval (-1 if undefined) */
+ int refresh_interval;
+
+ /** Window has been resized, and content needs reformatting. */
+ bool reformat_pending;
+
+ /** Window dimensions (to be phased out) */
+ int x0;
+ int y0;
+ int x1;
+ int y1;
+
+ /** Window dimensions */
+ int x;
+ int y;
+ int width;
+ int height;
+
+ struct scrollbar *scroll_x; /**< Horizontal scroll. */
+ struct scrollbar *scroll_y; /**< Vertical scroll. */
+
+ /** scale of window contents */
+ float scale;
+
+ /** Window characteristics */
+ enum {
+ BROWSER_WINDOW_NORMAL,
+ BROWSER_WINDOW_IFRAME,
+ BROWSER_WINDOW_FRAME,
+ BROWSER_WINDOW_FRAMESET,
+ } browser_window_type;
+
+ /** frameset characteristics */
+ int rows;
+ int cols;
+
+ /** frame dimensions */
+ struct frame_dimension frame_width;
+ struct frame_dimension frame_height;
+ int margin_width;
+ int margin_height;
+
+ /** frame name for targetting */
+ char *name;
+
+ /** frame characteristics */
+ bool no_resize;
+ frame_scrolling scrolling;
+ bool border;
+ colour border_colour;
+
+ /** iframe parent box */
+ struct box *box;
+
+ /** [cols * rows] children */
+ struct browser_window *children;
+ struct browser_window *parent;
+
+ /** [iframe_count] iframes */
+ int iframe_count;
+ struct browser_window *iframes;
+
+ /** browser window child of root browser window which has input focus */
+ struct browser_window *focus;
+
+ /** Last time a link was followed in this window */
+ unsigned int last_action;
+
+ /** Current selection, or NULL if none */
+ struct selection *cur_sel;
+
+ /** Current context for free text search, or NULL if none */
+ struct search_context *cur_search;
+
+ /** cache of the currently displayed status text. */
+ char *status_text; /**< Current status bar text. */
+ int status_text_len; /**< Length of the ::status_text buffer. */
+ int status_match; /**< Number of times an idempotent status-set operation was performed. */
+ int status_miss; /**< Number of times status was really updated. */
+};
+
+#endif
+
Modified: branches/jmb/opaque-browser/desktop/frames.c
URL: http://source.netsurf-browser.org/branches/jmb/opaque-browser/desktop/fra...
==============================================================================
--- branches/jmb/opaque-browser/desktop/frames.c (original)
+++ branches/jmb/opaque-browser/desktop/frames.c Wed Aug 31 14:42:54 2011
@@ -30,7 +30,7 @@
#include <math.h>
#include "utils/config.h"
#include "content/hlcache.h"
-#include "desktop/browser.h"
+#include "desktop/browser_internal.h"
#include "desktop/frames.h"
#include "desktop/history_core.h"
#include "desktop/gui.h"
Modified: branches/jmb/opaque-browser/desktop/search.c
URL: http://source.netsurf-browser.org/branches/jmb/opaque-browser/desktop/sea...
==============================================================================
--- branches/jmb/opaque-browser/desktop/search.c (original)
+++ branches/jmb/opaque-browser/desktop/search.c Wed Aug 31 14:42:54 2011
@@ -27,7 +27,7 @@
#include <string.h>
#include "content/content.h"
#include "content/hlcache.h"
-#include "desktop/browser.h"
+#include "desktop/browser_internal.h"
#include "desktop/gui.h"
#include "desktop/options.h"
#include "desktop/search.h"
Modified: branches/jmb/opaque-browser/desktop/selection.c
URL: http://source.netsurf-browser.org/branches/jmb/opaque-browser/desktop/sel...
==============================================================================
--- branches/jmb/opaque-browser/desktop/selection.c (original)
+++ branches/jmb/opaque-browser/desktop/selection.c Wed Aug 31 14:42:54 2011
@@ -27,6 +27,7 @@
#include <stdbool.h>
#include <string.h>
+#include "desktop/browser_internal.h"
#include "desktop/gui.h"
#include "desktop/mouse.h"
#include "desktop/plotters.h"
Modified: branches/jmb/opaque-browser/desktop/textinput.c
URL: http://source.netsurf-browser.org/branches/jmb/opaque-browser/desktop/tex...
==============================================================================
--- branches/jmb/opaque-browser/desktop/textinput.c (original)
+++ branches/jmb/opaque-browser/desktop/textinput.c Wed Aug 31 14:42:54 2011
@@ -28,7 +28,7 @@
#include <ctype.h>
#include <string.h>
-#include "desktop/browser.h"
+#include "desktop/browser_internal.h"
#include "desktop/gui.h"
#include "desktop/mouse.h"
#include "desktop/scrollbar.h"
Modified: branches/jmb/opaque-browser/framebuffer/gui.c
URL: http://source.netsurf-browser.org/branches/jmb/opaque-browser/framebuffer...
==============================================================================
--- branches/jmb/opaque-browser/framebuffer/gui.c (original)
+++ branches/jmb/opaque-browser/framebuffer/gui.c Wed Aug 31 14:42:54 2011
@@ -117,7 +117,7 @@
struct browser_widget_s *bwidget = fbtk_get_userpw(gw->browser);
int content_height;
int height;
- float scale = gw->bw->scale;
+ float scale = browser_window_get_scale(gw->bw);
LOG(("window scroll"));
if (abs) {
@@ -127,7 +127,8 @@
}
bwidget->pan_required = true;
- content_height = content_get_height(gw->bw->current_content) * scale;
+ content_height =
+ content_get_height(browser_window_get_content(gw->bw)) * scale;
height = fbtk_get_height(gw->browser);
@@ -151,7 +152,7 @@
struct browser_widget_s *bwidget = fbtk_get_userpw(gw->browser);
int content_width;
int width;
- float scale = gw->bw->scale;
+ float scale = browser_window_get_scale(gw->bw);
if (abs) {
bwidget->panx = x - bwidget->scrollx;
@@ -160,7 +161,8 @@
}
bwidget->pan_required = true;
- content_width = content_get_width(gw->bw->current_content) * scale;
+ content_width =
+ content_get_width(browser_window_get_content(gw->bw)) * scale;
width = fbtk_get_width(gw->browser);
@@ -336,8 +338,8 @@
clip.y1 = bwidget->redraw_box.y1;
browser_window_redraw(bw,
- (x - bwidget->scrollx) / bw->scale,
- (y - bwidget->scrolly) / bw->scale,
+ (x - bwidget->scrollx) / browser_window_get_scale(bw),
+ (y - bwidget->scrolly) / browser_window_get_scale(bw),
&clip, &ctx);
nsfb_update(fbtk_get_nsfb(widget), &bwidget->redraw_box);
@@ -590,7 +592,7 @@
case NSFB_EVENT_KEY_DOWN:
switch (cbi->event->value.keycode) {
case NSFB_KEY_MOUSE_1:
- scale = gw->bw->scale;
+ scale = browser_window_get_scale(gw->bw);
browser_window_mouse_click(gw->bw,
BROWSER_MOUSE_PRESS_1,
(cbi->x + bwidget->scrollx) / scale,
@@ -598,7 +600,7 @@
break;
case NSFB_KEY_MOUSE_3:
- scale = gw->bw->scale;
+ scale = browser_window_get_scale(gw->bw);
browser_window_mouse_click(gw->bw,
BROWSER_MOUSE_PRESS_2,
(cbi->x + bwidget->scrollx) / scale,
@@ -624,7 +626,7 @@
case NSFB_EVENT_KEY_UP:
switch (cbi->event->value.keycode) {
case NSFB_KEY_MOUSE_1:
- scale = gw->bw->scale;
+ scale = browser_window_get_scale(gw->bw);
browser_window_mouse_click(gw->bw,
BROWSER_MOUSE_CLICK_1,
(cbi->x + bwidget->scrollx) / scale,
@@ -632,7 +634,7 @@
break;
case NSFB_KEY_MOUSE_3:
- scale = gw->bw->scale;
+ scale = browser_window_get_scale(gw->bw);
browser_window_mouse_click(gw->bw,
BROWSER_MOUSE_CLICK_2,
(cbi->x + bwidget->scrollx) / scale,
@@ -658,10 +660,11 @@
{
struct gui_window *gw = cbi->context;
struct browser_widget_s *bwidget = fbtk_get_userpw(widget);
+ float scale = browser_window_get_scale(gw->bw);
browser_window_mouse_track(gw->bw, 0,
- (cbi->x + bwidget->scrollx) / gw->bw->scale,
- (cbi->y + bwidget->scrolly) / gw->bw->scale);
+ (cbi->x + bwidget->scrollx) / scale,
+ (cbi->y + bwidget->scrolly) / scale);
return 0;
}
@@ -773,8 +776,8 @@
if (cbi->event->type != NSFB_EVENT_KEY_UP)
return 0;
- if (history_back_available(bw->history))
- history_back(bw, bw->history);
+ if (history_back_available(browser_window_get_history(bw)))
+ history_back(bw, browser_window_get_history(bw));
fb_update_back_forward(gw);
@@ -791,8 +794,8 @@
if (cbi->event->type != NSFB_EVENT_KEY_UP)
return 0;
- if (history_forward_available(bw->history))
- history_forward(bw, bw->history);
+ if (history_forward_available(browser_window_get_history(bw)))
+ history_forward(bw, browser_window_get_history(bw));
fb_update_back_forward(gw);
return 1;
@@ -1267,28 +1270,11 @@
gw->bw = bw;
- switch(bw->browser_window_type) {
- case BROWSER_WINDOW_NORMAL:
- create_normal_browser_window(gw, option_fb_furniture_size);
- gw->localhistory = fb_create_localhistory(bw, fbtk, option_fb_furniture_size);
-
- /* map and request redraw of gui window */
- fbtk_set_mapping(gw->window, true);
-
- break;
-
- case BROWSER_WINDOW_FRAME:
- gw->window = fbtk_create_window(bw->parent->window->window, 0, 0, 0, 0, 0);
- create_browser_widget(gw, 0, 0);
- LOG(("create frame"));
- break;
-
- default:
- gw->window = fbtk_create_window(bw->parent->window->window, 0, 0, 0, 0, 0);
- create_browser_widget(gw, 0, 0);
- LOG(("unhandled type"));
-
- }
+ create_normal_browser_window(gw, option_fb_furniture_size);
+ gw->localhistory = fb_create_localhistory(bw, fbtk, option_fb_furniture_size);
+
+ /* map and request redraw of gui window */
+ fbtk_set_mapping(gw->window, true);
return gw;
}
@@ -1331,8 +1317,8 @@
{
struct browser_widget_s *bwidget = fbtk_get_userpw(g->browser);
- *sx = bwidget->scrollx / g->bw->scale;
- *sy = bwidget->scrolly / g->bw->scale;
+ *sx = bwidget->scrollx / browser_window_get_scale(g->bw);
+ *sy = bwidget->scrolly / browser_window_get_scale(g->bw);
return true;
}
@@ -1344,8 +1330,8 @@
assert(bwidget);
- widget_scroll_x(gw, sx * gw->bw->scale, true);
- widget_scroll_y(gw, sy * gw->bw->scale, true);
+ widget_scroll_x(gw, sx * browser_window_get_scale(gw->bw), true);
+ widget_scroll_y(gw, sy * browser_window_get_scale(gw->bw), true);
}
void
@@ -1358,6 +1344,7 @@
void
gui_window_position_frame(struct gui_window *g, int x0, int y0, int x1, int y1)
{
+#if 0
struct gui_window *parent;
int px, py;
int w, h;
@@ -1380,7 +1367,7 @@
fbtk_set_pos_and_size(g->window, px, py , w , h);
fbtk_request_redraw(parent->browser);
-
+#endif
}
void
@@ -1393,22 +1380,23 @@
*height = fbtk_get_height(g->browser);
if (scaled) {
- *width /= g->bw->scale;
- *height /= g->bw->scale;
+ *width /= browser_window_get_scale(g->bw);
+ *height /= browser_window_get_scale(g->bw);
}
}
void
gui_window_update_extent(struct gui_window *gw)
{
- float scale = gw->bw->scale;
+ float scale = browser_window_get_scale(gw->bw);
+ hlcache_handle *content = browser_window_get_content(gw->bw);
fbtk_set_scroll_parameters(gw->hscroll, 0,
- content_get_width(gw->bw->current_content) * scale,
+ content_get_width(content) * scale,
fbtk_get_width(gw->browser), 100);
fbtk_set_scroll_parameters(gw->vscroll, 0,
- content_get_height(gw->bw->current_content) * scale,
+ content_get_height(content) * scale,
fbtk_get_height(gw->browser), 100);
}
Modified: branches/jmb/opaque-browser/framebuffer/localhistory.c
URL: http://source.netsurf-browser.org/branches/jmb/opaque-browser/framebuffer...
==============================================================================
--- branches/jmb/opaque-browser/framebuffer/localhistory.c (original)
+++ branches/jmb/opaque-browser/framebuffer/localhistory.c Wed Aug 31 14:42:54 2011
@@ -76,7 +76,7 @@
nsfb_plot_rectangle_fill(fbtk_get_nsfb(widget), &rbox, 0xffffffff);
- history_redraw_rectangle(glh->bw->history,
+ history_redraw_rectangle(browser_window_get_history(glh->bw),
glh->scrollx,
glh->scrolly,
fbtk_get_width(widget) + glh->scrollx,
@@ -96,7 +96,8 @@
if (cbi->event->type != NSFB_EVENT_KEY_UP)
return 0;
- history_click(glh->bw, glh->bw->history, cbi->x, cbi->y, false);
+ history_click(glh->bw, browser_window_get_history(glh->bw),
+ cbi->x, cbi->y, false);
fbtk_set_mapping(glh->window, false);
Modified: branches/jmb/opaque-browser/render/form.c
URL: http://source.netsurf-browser.org/branches/jmb/opaque-browser/render/form...
==============================================================================
--- branches/jmb/opaque-browser/render/form.c (original)
+++ branches/jmb/opaque-browser/render/form.c Wed Aug 31 14:42:54 2011
@@ -92,6 +92,8 @@
int x, int y);
static void form_select_menu_scroll_callback(void *client_data,
struct scrollbar_msg_data *scrollbar_data);
+static void form__select_process_selection(struct content *c,
+ struct form_control *control, int item);
/**
* Create a struct form.
@@ -1131,7 +1133,7 @@
{
struct form_select_menu *menu = control->data.select.menu;
struct form_option *option;
- html_content *html = (html_content *)menu->c;
+ html_content *html = (html_content *) menu->c;
int line_height, line_height_with_spacing;
int item_bottom_y;
int scroll, i;
@@ -1152,9 +1154,7 @@
}
if (option != NULL) {
- /* TODO: going via the bw to get a hlcache_handle is nasty */
- form_select_process_selection(html->bw->current_content,
- control, i);
+ form__select_process_selection(&html->base, control, i);
}
menu->callback(menu->client_data, 0, 0, menu->width, menu->height);
@@ -1292,7 +1292,8 @@
menu->scroll_capture = true;
root_bw = browser_window_get_root(html->bw);
- gui_window_box_scroll_start(root_bw->window,
+ gui_window_box_scroll_start(
+ browser_window_get_window(root_bw),
scrollbar_data->x0, scrollbar_data->y0,
scrollbar_data->x1, scrollbar_data->y1);
break;
@@ -1330,17 +1331,24 @@
void form_select_process_selection(hlcache_handle *h,
struct form_control *control, int item)
{
+ assert(h != NULL);
+
+ /** \todo Even though the form code is effectively part of the html
+ * content handler, poking around inside contents is not good */
+ form__select_process_selection(hlcache_handle_get_content(h),
+ control, item);
+}
+
+void form__select_process_selection(struct content *c,
+ struct form_control *control, int item)
+{
struct box *inline_box;
struct form_option *o;
int count;
- struct content *current_content;
assert(control != NULL);
- assert(h != NULL);
-
- /** \todo Even though the form code is effectively part of the html
- * content handler, poking around inside contents is not good */
- current_content = hlcache_handle_get_content(h);
+ assert(c != NULL);
+
inline_box = control->box->children->children;
@@ -1369,14 +1377,12 @@
talloc_free(inline_box->text);
inline_box->text = 0;
if (control->data.select.num_selected == 0)
- inline_box->text = talloc_strdup(current_content,
- messages_get("Form_None"));
+ inline_box->text = talloc_strdup(c, messages_get("Form_None"));
else if (control->data.select.num_selected == 1)
- inline_box->text = talloc_strdup(current_content,
+ inline_box->text = talloc_strdup(c,
control->data.select.current->text);
else
- inline_box->text = talloc_strdup(current_content,
- messages_get("Form_Many"));
+ inline_box->text = talloc_strdup(c, messages_get("Form_Many"));
if (!inline_box->text) {
warn_user("NoMemory", 0);
inline_box->length = 0;
@@ -1384,7 +1390,7 @@
inline_box->length = strlen(inline_box->text);
inline_box->width = control->box->width;
- html_redraw_a_box(h, control->box);
+ html__redraw_a_box(c, control->box);
}
/**
Modified: branches/jmb/opaque-browser/render/textinput.c
URL: http://source.netsurf-browser.org/branches/jmb/opaque-browser/render/text...
==============================================================================
--- branches/jmb/opaque-browser/render/textinput.c (original)
+++ branches/jmb/opaque-browser/render/textinput.c Wed Aug 31 14:42:54 2011
@@ -1305,7 +1305,7 @@
break;
case KEY_PASTE:
- gui_paste_from_clipboard(bw->window,
+ gui_paste_from_clipboard(browser_window_get_window(bw),
box_x + inline_container->x +
text_box->x + pixel_offset,
box_y + inline_container->y + text_box->y);
@@ -1907,8 +1907,11 @@
case KEY_CR: /* Return/Enter hit */
selection_clear(&html->sel, true);
- if (form)
- form_submit(bw->current_content, bw, form, 0);
+ if (form) {
+ form_submit(browser_window_get_content(bw),
+ bw, form, 0);
+ }
+
return true;
case KEY_SHIFT_TAB:
@@ -1946,7 +1949,7 @@
break;
case KEY_PASTE:
- gui_paste_from_clipboard(bw->window,
+ gui_paste_from_clipboard(browser_window_get_window(bw),
box_x + input->children->x + text_box->x + pixel_offset,
box_y + input->children->y + text_box->y);
12 years
r12690 tlsa - in /trunk/netsurf/render: box.c box.h html.h html_interaction.c
by netsurf@semichrome.net
Author: tlsa
Date: Wed Aug 31 12:53:40 2011
New Revision: 12690
URL: http://source.netsurf-browser.org?rev=12690&view=rev
Log:
Avoid instance of using bw->current_content outside desktop/.
Modified:
trunk/netsurf/render/box.c
trunk/netsurf/render/box.h
trunk/netsurf/render/html.h
trunk/netsurf/render/html_interaction.c
Modified: trunk/netsurf/render/box.c
URL: http://source.netsurf-browser.org/trunk/netsurf/render/box.c?rev=12690&r1...
==============================================================================
--- trunk/netsurf/render/box.c (original)
+++ trunk/netsurf/render/box.c Wed Aug 31 12:53:40 2011
@@ -784,7 +784,7 @@
* the mouse pointer, or nearest in the given direction if the pointer is
* not over a text box.
*
- * \param h html content's high level cache handle
+ * \param html an HTML content
* \param x coordinate of mouse
* \param y coordinate of mouse
* \param dir direction to search (-1 = above-left, +1 = below-right)
@@ -792,46 +792,50 @@
* \param dy receives y ordinate of mouse relative to text box
*/
-struct box *box_pick_text_box(hlcache_handle *h,
+struct box *box_pick_text_box(struct html_content *html,
int x, int y, int dir, int *dx, int *dy)
{
struct box *text_box = NULL;
-
- if (h != NULL && content_get_type(h) == CONTENT_HTML) {
- struct box *box = html_get_box_tree(h);
- int nr_xd, nr_yd;
- int bx = box->margin[LEFT];
- int by = box->margin[TOP];
- int fx = bx;
- int fy = by;
- int tx, ty;
-
- if (!box_nearest_text_box(box, bx, by, fx, fy, x, y,
- dir, &text_box, &tx, &ty, &nr_xd, &nr_yd)) {
- if (text_box && text_box->text && !text_box->object) {
- int w = (text_box->padding[LEFT] +
- text_box->width +
- text_box->padding[RIGHT]);
- int h = (text_box->padding[TOP] +
- text_box->height +
- text_box->padding[BOTTOM]);
- int x1, y1;
-
- y1 = ty + h;
- x1 = tx + w;
-
- /* ensure point lies within the text box */
- if (x < tx) x = tx;
- if (y < ty) y = ty;
- if (y > y1) y = y1;
- if (x > x1) x = x1;
- }
- }
-
- /* return coordinates relative to box */
- *dx = x - tx;
- *dy = y - ty;
- }
+ struct box *box;
+ int nr_xd, nr_yd;
+ int bx, by;
+ int fx, fy;
+ int tx, ty;
+
+ if (html == NULL)
+ return NULL;
+
+ box = html->layout;
+ bx = box->margin[LEFT];
+ by = box->margin[TOP];
+ fx = bx;
+ fy = by;
+
+ if (!box_nearest_text_box(box, bx, by, fx, fy, x, y,
+ dir, &text_box, &tx, &ty, &nr_xd, &nr_yd)) {
+ if (text_box && text_box->text && !text_box->object) {
+ int w = (text_box->padding[LEFT] +
+ text_box->width +
+ text_box->padding[RIGHT]);
+ int h = (text_box->padding[TOP] +
+ text_box->height +
+ text_box->padding[BOTTOM]);
+ int x1, y1;
+
+ y1 = ty + h;
+ x1 = tx + w;
+
+ /* ensure point lies within the text box */
+ if (x < tx) x = tx;
+ if (y < ty) y = ty;
+ if (y > y1) y = y1;
+ if (x > x1) x = x1;
+ }
+ }
+
+ /* return coordinates relative to box */
+ *dx = x - tx;
+ *dy = y - ty;
return text_box;
}
Modified: trunk/netsurf/render/box.h
URL: http://source.netsurf-browser.org/trunk/netsurf/render/box.h?rev=12690&r1...
==============================================================================
--- trunk/netsurf/render/box.h (original)
+++ trunk/netsurf/render/box.h Wed Aug 31 12:53:40 2011
@@ -324,7 +324,7 @@
int *box_x, int *box_y, struct hlcache_handle **content);
struct box *box_object_at_point(struct hlcache_handle *h, int x, int y);
struct box *box_href_at_point(struct hlcache_handle *h, int x, int y);
-struct box *box_pick_text_box(struct hlcache_handle *h,
+struct box *box_pick_text_box(struct html_content *html,
int x, int y, int dir, int *dx, int *dy);
struct box *box_find_by_id(struct box *box, const char *id);
bool box_visible(struct box *box);
Modified: trunk/netsurf/render/html.h
URL: http://source.netsurf-browser.org/trunk/netsurf/render/html.h?rev=12690&r...
==============================================================================
--- trunk/netsurf/render/html.h (original)
+++ trunk/netsurf/render/html.h Wed Aug 31 12:53:40 2011
@@ -148,8 +148,6 @@
void html_overflow_scroll_drag_end(struct scrollbar *scrollbar,
browser_mouse_state mouse, int x, int y);
-size_t html_selection_drag_end(struct hlcache_handle *h,
- browser_mouse_state mouse, int x, int y, int dir);
bool text_redraw(const char *utf8_text, size_t utf8_len,
size_t offset, int space,
Modified: trunk/netsurf/render/html_interaction.c
URL: http://source.netsurf-browser.org/trunk/netsurf/render/html_interaction.c...
==============================================================================
--- trunk/netsurf/render/html_interaction.c (original)
+++ trunk/netsurf/render/html_interaction.c Wed Aug 31 12:53:40 2011
@@ -48,6 +48,39 @@
struct box *box, bool imagemap);
static void html_box_drag_start(struct box *box, int x, int y);
+
+/**
+ * End overflow scroll scrollbar drags
+ *
+ * \param h html content's high level cache entry
+ * \param mouse state of mouse buttons and modifier keys
+ * \param x coordinate of mouse
+ * \param y coordinate of mouse
+ */
+static size_t html_selection_drag_end(struct html_content *html,
+ browser_mouse_state mouse, int x, int y, int dir)
+{
+ int pixel_offset;
+ struct box *box;
+ int dx, dy;
+ size_t idx = 0;
+
+ box = box_pick_text_box(html, x, y, dir, &dx, &dy);
+ if (box) {
+ plot_font_style_t fstyle;
+
+ font_plot_style_from_css(box->style, &fstyle);
+
+ nsfont.font_position_in_string(&fstyle, box->text, box->length,
+ dx, &idx, &pixel_offset);
+
+ idx += box->byte_offset;
+ }
+
+ return idx;
+}
+
+
/**
* Handle mouse tracking (including drags) in an HTML content window.
*
@@ -62,7 +95,6 @@
browser_mouse_state mouse, int x, int y)
{
html_content *html = (html_content*) c;
- hlcache_handle *h = bw->current_content;
if (bw->drag_type == DRAGGING_SELECTION && !mouse) {
int dir = -1;
@@ -71,7 +103,7 @@
if (selection_dragging_start(&html->sel))
dir = 1;
- idx = html_selection_drag_end(h, mouse, x, y, dir);
+ idx = html_selection_drag_end(html, mouse, x, y, dir);
if (idx != 0)
selection_track(&html->sel, mouse, idx);
@@ -88,7 +120,7 @@
if (selection_dragging_start(&html->sel))
dir = 1;
- box = box_pick_text_box(h, x, y, dir, &dx, &dy);
+ box = box_pick_text_box(html, x, y, dir, &dx, &dy);
if (box) {
int pixel_offset;
@@ -870,38 +902,6 @@
/**
- * End overflow scroll scrollbar drags
- *
- * \param h html content's high level cache entry
- * \param mouse state of mouse buttons and modifier keys
- * \param x coordinate of mouse
- * \param y coordinate of mouse
- */
-size_t html_selection_drag_end(hlcache_handle *h, browser_mouse_state mouse,
- int x, int y, int dir)
-{
- int pixel_offset;
- struct box *box;
- int dx, dy;
- size_t idx = 0;
-
- box = box_pick_text_box(h, x, y, dir, &dx, &dy);
- if (box) {
- plot_font_style_t fstyle;
-
- font_plot_style_from_css(box->style, &fstyle);
-
- nsfont.font_position_in_string(&fstyle, box->text, box->length,
- dx, &idx, &pixel_offset);
-
- idx += box->byte_offset;
- }
-
- return idx;
-}
-
-
-/**
* Start drag scrolling the contents of a box
*
* \param box the box to be scrolled
12 years
r12689 vince - in /trunk/netsurf: ./ cocoa/Makefile.target
by netsurf@semichrome.net
Author: vince
Date: Wed Aug 31 08:49:14 2011
New Revision: 12689
URL: http://source.netsurf-browser.org?rev=12689&view=rev
Log:
add Mac OS X .dmg instalelr file build rules
Modified:
trunk/netsurf/ (props changed)
trunk/netsurf/cocoa/Makefile.target
Propchange: trunk/netsurf/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Wed Aug 31 08:49:14 2011
@@ -4,6 +4,7 @@
NetSurf.exe
NetSurf.app
NetSurf.dbg
+NetSurf.dmg
NetSurf
core
nsfb-*
Modified: trunk/netsurf/cocoa/Makefile.target
URL: http://source.netsurf-browser.org/trunk/netsurf/cocoa/Makefile.target?rev...
==============================================================================
--- trunk/netsurf/cocoa/Makefile.target (original)
+++ trunk/netsurf/cocoa/Makefile.target Wed Aug 31 08:49:14 2011
@@ -198,3 +198,13 @@
-e 's/$${NETSURF_VERSION}/$(VERSION_FULL)/' \
-e 's/$${NETSURF_SHORT_VERSION}/$(VERSION_MAJ).$(VERSION_MIN)/' \
< cocoa/res/NetSurf-Info.plist > NetSurf.app/Contents/Info.plist
+
+NetSurf.tmp.dmg: NetSurf.app
+ hdiutil create -size 8m -fs HFS+ -volname "NetSurf" $@
+ hdiutil attach $@
+ cp -a $^ /Volumes/NetSurf/
+ hdiutil detach $$(echo $$(hdiutil attach $@ | cut -f 1) | cut -f 1 -d ' ')
+
+NetSurf.dmg: NetSurf.tmp.dmg
+ hdiutil convert $^ -format UDZO -o $@
+
12 years
r12688 tlsa - /trunk/netsurf/desktop/scrollbar.c
by netsurf@semichrome.net
Author: tlsa
Date: Wed Aug 31 08:04:50 2011
New Revision: 12688
URL: http://source.netsurf-browser.org?rev=12688&view=rev
Log:
Optimise out scrollbar action induced redraws with no effect.
Modified:
trunk/netsurf/desktop/scrollbar.c
Modified: trunk/netsurf/desktop/scrollbar.c
URL: http://source.netsurf-browser.org/trunk/netsurf/desktop/scrollbar.c?rev=1...
==============================================================================
--- trunk/netsurf/desktop/scrollbar.c (original)
+++ trunk/netsurf/desktop/scrollbar.c Wed Aug 31 08:04:50 2011
@@ -397,6 +397,7 @@
void scrollbar_set(struct scrollbar *s, int value, bool bar_pos)
{
int well_length;
+ int old_offset = s->offset;
struct scrollbar_msg_data msg;
if (value < 0)
@@ -425,6 +426,10 @@
s->bar_pos = (s->full_size < 1) ? 0 :
((well_length * s->offset) / s->full_size);
}
+
+ if (s->offset == old_offset)
+ /* Nothing happened */
+ return;
msg.scrollbar = s;
msg.msg = SCROLLBAR_MSG_MOVED;
12 years
r12687 vince - /trunk/netsurf/cocoa/apple_image.m
by netsurf@semichrome.net
Author: vince
Date: Wed Aug 31 07:18:25 2011
New Revision: 12687
URL: http://source.netsurf-browser.org?rev=12687&view=rev
Log:
fix apple image content handler
Modified:
trunk/netsurf/cocoa/apple_image.m
Modified: trunk/netsurf/cocoa/apple_image.m
URL: http://source.netsurf-browser.org/trunk/netsurf/cocoa/apple_image.m?rev=1...
==============================================================================
--- trunk/netsurf/cocoa/apple_image.m (original)
+++ trunk/netsurf/cocoa/apple_image.m Wed Aug 31 07:18:25 2011
@@ -146,8 +146,8 @@
++ai->currentFrame;
if (ai->currentFrame >= ai->frames) ai->currentFrame = 0;
- [(NSBitmapImageRep *)ai->base.bitmap setProperty: NSImageCurrentFrame withValue: [NSNumber numberWithUnsignedInteger: ai->currentFrame]];
- bitmap_modified( ai->base.bitmap );
+ [(NSBitmapImageRep *)ai->bitmap setProperty: NSImageCurrentFrame withValue: [NSNumber numberWithUnsignedInteger: ai->currentFrame]];
+ bitmap_modified( ai->bitmap );
union content_msg_data data;
data.redraw.full_redraw = true;
@@ -224,6 +224,7 @@
nserror apple_image_clone(const struct content *old, struct content **newc)
{
apple_image_content *ai;
+ apple_image_content *ai_old = (apple_image_content *)old;
nserror error;
ai = talloc_zero(0, apple_image_content);
@@ -240,7 +241,7 @@
old->status == CONTENT_STATUS_DONE) {
ai->base.width = old->width;
ai->base.height = old->height;
- ai->base.bitmap = (void *)[(id)old->bitmap retain];
+ ai->bitmap = (void *)[(id)ai_old->bitmap retain];
}
*newc = (struct content *) ai;
12 years
r12686 vince - in /trunk/netsurf: amiga/ cocoa/ content/ image/ render/
by netsurf@semichrome.net
Author: vince
Date: Wed Aug 31 07:12:41 2011
New Revision: 12686
URL: http://source.netsurf-browser.org?rev=12686&view=rev
Log:
refactor bitmap out of generic content structure
Modified:
trunk/netsurf/amiga/dt_anim.c
trunk/netsurf/amiga/dt_picture.c
trunk/netsurf/amiga/icon.c
trunk/netsurf/cocoa/apple_image.m
trunk/netsurf/content/content.c
trunk/netsurf/content/content.h
trunk/netsurf/content/content_protected.h
trunk/netsurf/image/bmp.c
trunk/netsurf/image/gif.c
trunk/netsurf/image/ico.c
trunk/netsurf/image/jpeg.c
trunk/netsurf/image/mng.c
trunk/netsurf/image/nssprite.c
trunk/netsurf/image/png.c
trunk/netsurf/image/rsvg.c
trunk/netsurf/image/webp.c
trunk/netsurf/render/html_redraw.c
Modified: trunk/netsurf/amiga/dt_anim.c
URL: http://source.netsurf-browser.org/trunk/netsurf/amiga/dt_anim.c?rev=12686...
==============================================================================
--- trunk/netsurf/amiga/dt_anim.c (original)
+++ trunk/netsurf/amiga/dt_anim.c Wed Aug 31 07:12:41 2011
@@ -43,6 +43,8 @@
typedef struct amiga_dt_anim_content {
struct content base;
+
+ struct bitmap *bitmap; /**< Created NetSurf bitmap */
Object *dto;
int x;
@@ -70,6 +72,13 @@
static nserror amiga_dt_anim_clone(const struct content *old, struct content **newc);
static content_type amiga_dt_anim_content_type(lwc_string *mime_type);
+static void *amiga_dt_anim_get_internal(const struct content *c, void *context)
+{
+ amiga_dt_anim_content *adta_c = (amiga_dt_anim_content *)c;
+
+ return adta_c->bitmap;
+}
+
static const content_handler amiga_dt_anim_content_handler = {
.create = amiga_dt_anim_create,
.data_complete = amiga_dt_anim_convert,
@@ -79,6 +88,7 @@
.open = amiga_dt_anim_open,
.close = amiga_dt_anim_close,
.clone = amiga_dt_anim_clone,
+ .get_internal = amiga_dt_anim_get_internal,
.type = amiga_dt_anim_content_type,
.no_share = false,
};
@@ -183,14 +193,14 @@
width = (int)bmh->bmh_Width;
height = (int)bmh->bmh_Height;
- c->bitmap = bitmap_create(width, height, bm_flags);
- if (!c->bitmap) {
+ plugin->bitmap = bitmap_create(width, height, bm_flags);
+ if (!plugin->bitmap) {
msg_data.error = messages_get("NoMemory");
content_broadcast(c, CONTENT_MSG_ERROR, msg_data);
return false;
}
- bm_buffer = bitmap_get_buffer(c->bitmap);
+ bm_buffer = bitmap_get_buffer(plugin->bitmap);
adt_frame.MethodID = ADTM_LOADFRAME;
adt_frame.alf_TimeStamp = 0;
@@ -227,7 +237,7 @@
content__set_title(c, title);
*/
- bitmap_modified(c->bitmap);
+ bitmap_modified(plugin->bitmap);
content_set_ready(c);
content_set_done(c);
@@ -242,8 +252,8 @@
LOG(("amiga_dt_anim_destroy"));
- if (c->bitmap != NULL)
- bitmap_destroy(c->bitmap);
+ if (plugin->bitmap != NULL)
+ bitmap_destroy(plugin->bitmap);
DisposeDTObject(plugin->dto);
@@ -255,10 +265,9 @@
const struct redraw_context *ctx)
{
amiga_dt_anim_content *plugin = (amiga_dt_anim_content *) c;
+ bitmap_flags_t flags = BITMAPF_NONE;
LOG(("amiga_dt_anim_redraw"));
-
- bitmap_flags_t flags = BITMAPF_NONE;
if (data->repeat_x)
flags |= BITMAPF_REPEAT_X;
@@ -266,7 +275,7 @@
flags |= BITMAPF_REPEAT_Y;
return ctx->plot->bitmap(data->x, data->y, data->width, data->height,
- c->bitmap, data->background_colour, flags);
+ plugin->bitmap, data->background_colour, flags);
}
/**
Modified: trunk/netsurf/amiga/dt_picture.c
URL: http://source.netsurf-browser.org/trunk/netsurf/amiga/dt_picture.c?rev=12...
==============================================================================
--- trunk/netsurf/amiga/dt_picture.c (original)
+++ trunk/netsurf/amiga/dt_picture.c Wed Aug 31 07:12:41 2011
@@ -39,6 +39,8 @@
typedef struct amiga_dt_picture_content {
struct content base;
+
+ struct bitmap *bitmap; /**< Created NetSurf bitmap */
Object *dto;
int x;
@@ -59,12 +61,20 @@
static nserror amiga_dt_picture_clone(const struct content *old, struct content **newc);
static content_type amiga_dt_picture_content_type(lwc_string *mime_type);
+static void *amiga_dt_picture_get_internal(const struct content *c, void *context)
+{
+ amiga_dt_picture_content *pic_c = (amiga_dt_picture_content *) c;
+
+ return pic_c->bitmap;
+}
+
static const content_handler amiga_dt_picture_content_handler = {
.create = amiga_dt_picture_create,
.data_complete = amiga_dt_picture_convert,
.destroy = amiga_dt_picture_destroy,
.redraw = amiga_dt_picture_redraw,
.clone = amiga_dt_picture_clone,
+ .get_internal = amiga_dt_picture_get_internal,
.type = amiga_dt_picture_content_type,
.no_share = false,
};
@@ -171,17 +181,17 @@
width = (int)bmh->bmh_Width;
height = (int)bmh->bmh_Height;
- c->bitmap = bitmap_create(width, height, bm_flags);
- if (!c->bitmap) {
+ plugin->bitmap = bitmap_create(width, height, bm_flags);
+ if (!plugin->bitmap) {
msg_data.error = messages_get("NoMemory");
content_broadcast(c, CONTENT_MSG_ERROR, msg_data);
return false;
}
- bm_buffer = bitmap_get_buffer(c->bitmap);
+ bm_buffer = bitmap_get_buffer(plugin->bitmap);
IDoMethod(plugin->dto, PDTM_READPIXELARRAY,
- bm_buffer, bm_format, bitmap_get_rowstride(c->bitmap),
+ bm_buffer, bm_format, bitmap_get_rowstride(plugin->bitmap),
0, 0, width, height);
}
else return false;
@@ -197,7 +207,7 @@
content__set_title(c, title);
*/
- bitmap_modified(c->bitmap);
+ bitmap_modified(plugin->bitmap);
content_set_ready(c);
content_set_done(c);
@@ -212,8 +222,9 @@
LOG(("amiga_dt_picture_destroy"));
- if (c->bitmap != NULL)
- bitmap_destroy(c->bitmap);
+ if (plugin->bitmap != NULL) {
+ bitmap_destroy(plugin->bitmap);
+ }
DisposeDTObject(plugin->dto);
@@ -221,11 +232,14 @@
}
bool amiga_dt_picture_redraw(struct content *c,
- struct content_redraw_data *data, const struct rect *clip,
+ struct content_redraw_data *data,
+ const struct rect *clip,
const struct redraw_context *ctx)
{
+ amiga_dt_picture_content *plugin = (amiga_dt_picture_content *) c;
+ bitmap_flags_t flags = BITMAPF_NONE;
+
LOG(("amiga_dt_picture_redraw"));
- bitmap_flags_t flags = BITMAPF_NONE;
if (data->repeat_x)
flags |= BITMAPF_REPEAT_X;
@@ -233,7 +247,7 @@
flags |= BITMAPF_REPEAT_Y;
return ctx->plot->bitmap(data->x, data->y, data->width, data->height,
- c->bitmap, data->background_colour, flags);
+ plugin->bitmap, data->background_colour, flags);
}
nserror amiga_dt_picture_clone(const struct content *old, struct content **newc)
@@ -254,8 +268,8 @@
}
/* We "clone" the old content by replaying conversion */
- if (old->status == CONTENT_STATUS_READY ||
- old->status == CONTENT_STATUS_DONE) {
+ if ((old->status == CONTENT_STATUS_READY) ||
+ (old->status == CONTENT_STATUS_DONE)) {
if (amiga_dt_picture_convert(&plugin->base) == false) {
content_destroy(&plugin->base);
return NSERROR_CLONE_FAILED;
Modified: trunk/netsurf/amiga/icon.c
URL: http://source.netsurf-browser.org/trunk/netsurf/amiga/icon.c?rev=12686&r1...
==============================================================================
--- trunk/netsurf/amiga/icon.c (original)
+++ trunk/netsurf/amiga/icon.c Wed Aug 31 07:12:41 2011
@@ -58,6 +58,8 @@
typedef struct amiga_icon_content {
struct content base;
+
+ struct bitmap *bitmap; /**< Created NetSurf bitmap */
} amiga_icon_content;
static nserror amiga_icon_create(const content_handler *handler,
@@ -73,12 +75,20 @@
struct content **newc);
static content_type amiga_icon_content_type(lwc_string *mime_type);
+static void *amiga_icon_get_internal(const struct content *c, void *context)
+{
+ amiga_icon_content *icon_c = (amiga_icon_content *)c;
+
+ return icon_c->bitmap;
+}
+
static const content_handler amiga_icon_content_handler = {
.create = amiga_icon_create,
.data_complete = amiga_icon_convert,
.destroy = amiga_icon_destroy,
.redraw = amiga_icon_redraw,
.clone = amiga_icon_clone,
+ .get_internal = amiga_icon_get_internal,
.type = amiga_icon_content_type,
.no_share = false,
};
@@ -134,21 +144,21 @@
llcache_handle *llcache, const char *fallback_charset,
bool quirks, struct content **c)
{
- amiga_icon_content *ai;
+ amiga_icon_content *ai_content;
nserror error;
- ai = talloc_zero(0, amiga_icon_content);
- if (ai == NULL)
+ ai_content = talloc_zero(0, amiga_icon_content);
+ if (ai_content == NULL)
return NSERROR_NOMEM;
- error = content__init(&ai->base, handler, imime_type, params,
+ error = content__init(&ai_content->base, handler, imime_type, params,
llcache, fallback_charset, quirks);
if (error != NSERROR_OK) {
- talloc_free(ai);
+ talloc_free(ai_content);
return error;
}
- *c = (struct content *) ai;
+ *c = (struct content *)ai_content;
return NSERROR_OK;
}
@@ -161,6 +171,7 @@
bool amiga_icon_convert(struct content *c)
{
+ amiga_icon_content *icon_c = (amiga_icon_content *)c;
union content_msg_data msg_data;
struct DiskObject *dobj;
ULONG *imagebuf;
@@ -213,8 +224,8 @@
return false;
}
- c->bitmap = bitmap_create(width, height, BITMAP_NEW);
- if (!c->bitmap) {
+ icon_c->bitmap = bitmap_create(width, height, BITMAP_NEW);
+ if (!icon_c->bitmap) {
msg_data.error = messages_get("NoMemory");
content_broadcast(c, CONTENT_MSG_ERROR, msg_data);
if(dobj) FreeDiskObject(dobj);
@@ -260,7 +271,7 @@
c->width = width;
c->height = height;
- bitmap_modified(c->bitmap);
+ bitmap_modified(icon_c->bitmap);
content_set_ready(c);
content_set_done(c);
content_set_status(c, "");
@@ -280,8 +291,10 @@
void amiga_icon_destroy(struct content *c)
{
- if (c->bitmap != NULL)
- bitmap_destroy(c->bitmap);
+ amiga_icon_content *icon_c = (amiga_icon_content *)c;
+
+ if (icon_c->bitmap != NULL)
+ bitmap_destroy(icon_c->bitmap);
}
@@ -293,6 +306,7 @@
struct content_redraw_data *data, const struct rect *clip,
const struct redraw_context *ctx)
{
+ amiga_icon_content *icon_c = (amiga_icon_content *)c;
bitmap_flags_t flags = BITMAPF_NONE;
if (data->repeat_x)
@@ -301,7 +315,7 @@
flags |= BITMAPF_REPEAT_Y;
return ctx->plot->bitmap(data->x, data->y, data->width, data->height,
- c->bitmap, data->background_colour, flags);
+ icon_c->bitmap, data->background_colour, flags);
}
Modified: trunk/netsurf/cocoa/apple_image.m
URL: http://source.netsurf-browser.org/trunk/netsurf/cocoa/apple_image.m?rev=1...
==============================================================================
--- trunk/netsurf/cocoa/apple_image.m (original)
+++ trunk/netsurf/cocoa/apple_image.m Wed Aug 31 07:12:41 2011
@@ -30,6 +30,9 @@
typedef struct apple_image_content {
struct content base;
+
+ struct bitmap *bitmap; /**< Created NetSurf bitmap */
+
NSUInteger frames;
NSUInteger currentFrame;
int *frameTimes;
@@ -47,12 +50,20 @@
struct content **newc);
static content_type apple_image_content_type(lwc_string *mime_type);
+static void *apple_image_get_internal(const struct content *c, void *context)
+{
+ apple_image_content *ai_c = (apple_image_content *)c;
+
+ return ai_c->bitmap;
+}
+
static const content_handler apple_image_content_handler = {
.create = apple_image_create,
.data_complete = apple_image_convert,
.destroy = apple_image_destroy,
.redraw = apple_image_redraw,
.clone = apple_image_clone,
+ .get_internal = apple_image_get_internal,
.type = apple_image_content_type,
.no_share = false
};
@@ -156,6 +167,7 @@
bool apple_image_convert(struct content *c)
{
+ apple_image_content *ai_c = (apple_image_content *)c;
unsigned long size;
const char *bytes = content__get_source_data(c, &size);
@@ -171,7 +183,7 @@
c->width = [image pixelsWide];
c->height = [image pixelsHigh];
- c->bitmap = (void *)image;
+ ai_c->bitmap = (void *)image;
NSString *url = [NSString stringWithUTF8String: llcache_handle_get_url( content_get_llcache_handle( c ) )];
NSString *title = [NSString stringWithFormat: @"%@ (%dx%d)", [url lastPathComponent], c->width, c->height];
@@ -201,8 +213,10 @@
void apple_image_destroy(struct content *c)
{
- [(id)c->bitmap release];
- c->bitmap = NULL;
+ apple_image_content *ai_c = (apple_image_content *)c;
+
+ [(id)ai_c->bitmap release];
+ ai_c->bitmap = NULL;
schedule_remove( animate_image_cb, c );
}
@@ -246,6 +260,7 @@
bool apple_image_redraw(struct content *c, struct content_redraw_data *data,
const struct rect *clip, const struct redraw_context *ctx)
{
+ apple_image_content *ai_c = (apple_image_content *)c;
bitmap_flags_t flags = BITMAPF_NONE;
if (data->repeat_x)
@@ -254,7 +269,7 @@
flags |= BITMAPF_REPEAT_Y;
return ctx->plot->bitmap(data->x, data->y, data->width, data->height,
- c->bitmap, data->background_colour, flags);
+ ai_c->bitmap, data->background_colour, flags);
}
#endif /* WITH_APPLE_IMAGE */
Modified: trunk/netsurf/content/content.c
URL: http://source.netsurf-browser.org/trunk/netsurf/content/content.c?rev=126...
==============================================================================
--- trunk/netsurf/content/content.c (original)
+++ trunk/netsurf/content/content.c Wed Aug 31 07:12:41 2011
@@ -103,7 +103,6 @@
c->available_width = 0;
c->quirks = quirks;
c->refresh = 0;
- c->bitmap = NULL;
c->time = wallclock();
c->size = 0;
c->title = NULL;
@@ -959,6 +958,7 @@
return c->refresh;
}
+
/**
* Retrieve the bitmap contained in an image content
*
@@ -972,10 +972,56 @@
struct bitmap *content__get_bitmap(struct content *c)
{
- if (c == NULL)
- return NULL;
-
- return c->bitmap;
+ struct bitmap *bitmap = NULL;
+
+ if ((c != NULL) &&
+ (c->handler != NULL) &&
+ (c->handler->type != NULL) &&
+ (c->handler->type(NULL) == CONTENT_IMAGE) &&
+ (c->handler->get_internal != NULL) ) {
+ bitmap = c->handler->get_internal(c, NULL);
+ }
+
+ return bitmap;
+}
+
+
+/**
+ * Determine if a content is opaque from handle
+ *
+ * \param h high level cache handle to retrieve opacity from.
+ * \return false if the content is not opaque or information is not
+ * known else true.
+ */
+bool content_get_opaque(hlcache_handle *h)
+{
+ return content__get_opaque(hlcache_handle_get_content(h));
+}
+
+/**
+ * Determine if a content is opaque
+ *
+ * \param c Content to retrieve opacity from
+ * \return false if the content is not opaque or information is not
+ * known else true.
+ */
+bool content__get_opaque(struct content *c)
+{
+ bool opaque = false;
+
+ if ((c != NULL) &&
+ (c->handler != NULL) &&
+ (c->handler->type != NULL) &&
+ (c->handler->type(NULL) == CONTENT_IMAGE) &&
+ (c->handler->get_internal != NULL) ) {
+ struct bitmap *bitmap = NULL;
+ bitmap = c->handler->get_internal(c, NULL);
+ if (bitmap != NULL) {
+ opaque = bitmap_get_opaque(bitmap);
+ }
+ }
+
+ return opaque;
}
Modified: trunk/netsurf/content/content.h
URL: http://source.netsurf-browser.org/trunk/netsurf/content/content.h?rev=126...
==============================================================================
--- trunk/netsurf/content/content.h (original)
+++ trunk/netsurf/content/content.h Wed Aug 31 07:12:41 2011
@@ -174,6 +174,7 @@
void content_invalidate_reuse_data(struct hlcache_handle *c);
const char *content_get_refresh_url(struct hlcache_handle *c);
struct bitmap *content_get_bitmap(struct hlcache_handle *c);
+bool content_get_opaque(struct hlcache_handle *h);
bool content_get_quirks(struct hlcache_handle *c);
bool content_is_locked(struct hlcache_handle *h);
Modified: trunk/netsurf/content/content_protected.h
URL: http://source.netsurf-browser.org/trunk/netsurf/content/content_protected...
==============================================================================
--- trunk/netsurf/content/content_protected.h (original)
+++ trunk/netsurf/content/content_protected.h Wed Aug 31 07:12:41 2011
@@ -68,6 +68,10 @@
nserror (*clone)(const struct content *old, struct content **newc);
bool (*matches_quirks)(const struct content *c, bool quirks);
content_type (*type)(lwc_string *mime_type);
+
+ /** handler dependant content sensitive internal data interface. */
+ void * (*get_internal)(const struct content *c, void *context);
+
/** There must be one content per user for this type. */
bool no_share;
};
@@ -98,11 +102,8 @@
bool quirks; /**< Content is in quirks mode */
char *fallback_charset; /**< Fallback charset, or NULL */
- /**< URL for refresh request, in standard form as from url_join. */
+ /** URL for refresh request, in standard form as from url_join. */
char *refresh;
-
- /** Bitmap, for various image contents. */
- struct bitmap *bitmap;
unsigned int time; /**< Creation time,
if LOADING or READY,
@@ -174,6 +175,7 @@
void content__invalidate_reuse_data(struct content *c);
const char *content__get_refresh_url(struct content *c);
struct bitmap *content__get_bitmap(struct content *c);
+bool content__get_opaque(struct content *c);
bool content__is_locked(struct content *c);
Modified: trunk/netsurf/image/bmp.c
URL: http://source.netsurf-browser.org/trunk/netsurf/image/bmp.c?rev=12686&r1=...
==============================================================================
--- trunk/netsurf/image/bmp.c (original)
+++ trunk/netsurf/image/bmp.c Wed Aug 31 07:12:41 2011
@@ -43,6 +43,8 @@
struct content base;
bmp_image *bmp; /** BMP image data */
+
+ struct bitmap *bitmap; /**< Created NetSurf bitmap */
} nsbmp_content;
static nserror nsbmp_create_bmp_data(nsbmp_content *bmp)
@@ -165,8 +167,8 @@
c->size += (swidth * bmp->bmp->height) + 16 + 44;
/* exit as a success */
- c->bitmap = bmp->bmp->bitmap;
- bitmap_modified(c->bitmap);
+ bmp->bitmap = bmp->bmp->bitmap;
+ bitmap_modified(bmp->bitmap);
content_set_ready(c);
content_set_done(c);
@@ -186,7 +188,7 @@
if (bmp_decode(bmp->bmp) != BMP_OK)
return false;
- c->bitmap = bmp->bmp->bitmap;
+ bmp->bitmap = bmp->bmp->bitmap;
if (data->repeat_x)
flags |= BITMAPF_REPEAT_X;
@@ -194,7 +196,7 @@
flags |= BITMAPF_REPEAT_Y;
return ctx->plot->bitmap(data->x, data->y, data->width, data->height,
- c->bitmap, data->background_colour, flags);
+ bmp->bitmap, data->background_colour, flags);
}
@@ -242,6 +244,13 @@
return NSERROR_OK;
}
+static void *nsbmp_get_internal(const struct content *c, void *context)
+{
+ nsbmp_content *bmp = (nsbmp_content *)c;
+
+ return bmp->bitmap;
+}
+
static content_type nsbmp_content_type(lwc_string *mime_type)
{
return CONTENT_IMAGE;
@@ -254,6 +263,7 @@
.destroy = nsbmp_destroy,
.redraw = nsbmp_redraw,
.clone = nsbmp_clone,
+ .get_internal = nsbmp_get_internal,
.type = nsbmp_content_type,
.no_share = false,
};
Modified: trunk/netsurf/image/gif.c
URL: http://source.netsurf-browser.org/trunk/netsurf/image/gif.c?rev=12686&r1=...
==============================================================================
--- trunk/netsurf/image/gif.c (original)
+++ trunk/netsurf/image/gif.c Wed Aug 31 07:12:41 2011
@@ -51,6 +51,7 @@
struct gif_animation *gif; /**< GIF animation data */
int current_frame; /**< current frame to display [0...(max-1)] */
+ struct bitmap *bitmap; /**< Created NetSurf bitmap */
} nsgif_content;
@@ -297,9 +298,11 @@
nsgif_invalidate);
/* Exit as a success */
- c->bitmap = gif->gif->frame_image;
+ gif->bitmap = gif->gif->frame_image;
+
content_set_ready(c);
content_set_done(c);
+
/* Done: update status bar */
content_set_status(c, "");
return true;
@@ -340,7 +343,7 @@
if (nsgif_get_frame(c) != GIF_OK)
return false;
- c->bitmap = gif->gif->frame_image;
+ gif->bitmap = gif->gif->frame_image;
if ((data->width == -1) && (data->height == -1))
return true;
@@ -351,7 +354,7 @@
flags |= BITMAPF_REPEAT_Y;
return ctx->plot->bitmap(data->x, data->y, data->width, data->height,
- c->bitmap, data->background_colour, flags);
+ gif->bitmap, data->background_colour, flags);
}
@@ -401,11 +404,17 @@
return NSERROR_OK;
}
+static void *nsgif_get_internal(const struct content *c, void *context)
+{
+ nsgif_content *gif = (nsgif_content *) c;
+
+ return gif->bitmap;
+}
+
static content_type nsgif_content_type(lwc_string *mime_type)
{
return CONTENT_IMAGE;
}
-
static const content_handler nsgif_content_handler = {
.create = nsgif_create,
@@ -413,6 +422,7 @@
.destroy = nsgif_destroy,
.redraw = nsgif_redraw,
.clone = nsgif_clone,
+ .get_internal = nsgif_get_internal,
.type = nsgif_content_type,
.no_share = false,
};
Modified: trunk/netsurf/image/ico.c
URL: http://source.netsurf-browser.org/trunk/netsurf/image/ico.c?rev=12686&r1=...
==============================================================================
--- trunk/netsurf/image/ico.c (original)
+++ trunk/netsurf/image/ico.c Wed Aug 31 07:12:41 2011
@@ -41,6 +41,8 @@
struct content base;
struct ico_collection *ico; /** ICO collection data */
+
+ struct bitmap *bitmap; /**< Created NetSurf bitmap */
} nsico_content;
@@ -132,8 +134,8 @@
/* exit as a success */
bmp = ico_find(ico->ico, 255, 255);
assert(bmp);
- c->bitmap = bmp->bitmap;
- bitmap_modified(c->bitmap);
+ ico->bitmap = bmp->bitmap;
+ bitmap_modified(ico->bitmap);
content_set_ready(c);
content_set_done(c);
@@ -155,7 +157,7 @@
if (bmp_decode(bmp) != BMP_OK)
return false;
- c->bitmap = bmp->bitmap;
+ ico->bitmap = bmp->bitmap;
if (data->repeat_x)
flags |= BITMAPF_REPEAT_X;
@@ -163,7 +165,7 @@
flags |= BITMAPF_REPEAT_Y;
return ctx->plot->bitmap(data->x, data->y, data->width, data->height,
- c->bitmap, data->background_colour, flags);
+ ico->bitmap, data->background_colour, flags);
}
@@ -210,6 +212,13 @@
return NSERROR_OK;
}
+static void *nsico_get_internal(const struct content *c, void *context)
+{
+ nsico_content *ico = (nsico_content *) c;
+
+ return ico->bitmap;
+}
+
static content_type nsico_content_type(lwc_string *mime_type)
{
return CONTENT_IMAGE;
@@ -221,6 +230,7 @@
.destroy = nsico_destroy,
.redraw = nsico_redraw,
.clone = nsico_clone,
+ .get_internal = nsico_get_internal,
.type = nsico_content_type,
.no_share = false,
};
Modified: trunk/netsurf/image/jpeg.c
URL: http://source.netsurf-browser.org/trunk/netsurf/image/jpeg.c?rev=12686&r1...
==============================================================================
--- trunk/netsurf/image/jpeg.c (original)
+++ trunk/netsurf/image/jpeg.c Wed Aug 31 07:12:41 2011
@@ -56,6 +56,8 @@
typedef struct nsjpeg_content {
struct content base; /**< base content */
+
+ struct bitmap *bitmap; /**< Created NetSurf bitmap */
} nsjpeg_content;
struct nsjpeg_error_mgr {
@@ -171,6 +173,7 @@
*/
static bool nsjpeg_convert(struct content *c)
{
+ struct nsjpeg_content *jpeg_content = (nsjpeg_content *)c;
struct jpeg_decompress_struct cinfo;
struct nsjpeg_error_mgr jerr;
struct jpeg_source_mgr source_mgr = { 0, 0,
@@ -257,7 +260,7 @@
c->width = width;
c->height = height;
- c->bitmap = bitmap;
+ jpeg_content->bitmap = bitmap;
snprintf(title, sizeof(title), messages_get("JPEGTitle"),
width, height, size);
content__set_title(c, title);
@@ -275,8 +278,11 @@
*/
static void nsjpeg_destroy(struct content *c)
{
- if (c->bitmap)
- bitmap_destroy(c->bitmap);
+ struct nsjpeg_content *jpeg_content = (nsjpeg_content *)c;
+
+ if (jpeg_content->bitmap) {
+ bitmap_destroy(jpeg_content->bitmap);
+ }
}
@@ -286,6 +292,7 @@
static bool nsjpeg_redraw(struct content *c, struct content_redraw_data *data,
const struct rect *clip, const struct redraw_context *ctx)
{
+ struct nsjpeg_content *jpeg_content = (nsjpeg_content *)c;
bitmap_flags_t flags = BITMAPF_NONE;
if (data->repeat_x)
@@ -294,7 +301,7 @@
flags |= BITMAPF_REPEAT_Y;
return ctx->plot->bitmap(data->x, data->y, data->width, data->height,
- c->bitmap, data->background_colour, flags);
+ jpeg_content->bitmap, data->background_colour, flags);
}
@@ -331,6 +338,12 @@
return NSERROR_OK;
}
+static void *nsjpeg_get_internal(const struct content *c, void *context)
+{
+ nsjpeg_content *jpeg_c = (nsjpeg_content *)c;
+
+ return jpeg_c->bitmap;
+}
static content_type nsjpeg_content_type(lwc_string *mime_type)
{
@@ -343,6 +356,7 @@
.destroy = nsjpeg_destroy,
.redraw = nsjpeg_redraw,
.clone = nsjpeg_clone,
+ .get_internal = nsjpeg_get_internal,
.type = nsjpeg_content_type,
.no_share = false,
};
Modified: trunk/netsurf/image/mng.c
URL: http://source.netsurf-browser.org/trunk/netsurf/image/mng.c?rev=12686&r1=...
==============================================================================
--- trunk/netsurf/image/mng.c (original)
+++ trunk/netsurf/image/mng.c Wed Aug 31 07:12:41 2011
@@ -53,6 +53,8 @@
bool waiting;
bool displayed;
void *handle;
+
+ struct bitmap *bitmap; /**< Created NetSurf bitmap */
} nsmng_content;
@@ -166,8 +168,8 @@
c = (nsmng_content *) mng_get_userdata(mng);
assert(c != NULL);
- c->base.bitmap = bitmap_create(width, height, BITMAP_NEW);
- if (c->base.bitmap == NULL) {
+ c->bitmap = bitmap_create(width, height, BITMAP_NEW);
+ if (c->bitmap == NULL) {
msg_data.error = messages_get("NoMemory");
content_broadcast(&c->base, CONTENT_MSG_ERROR, msg_data);
LOG(("Insufficient memory to create canvas."));
@@ -176,7 +178,7 @@
/* Get the buffer to ensure that it is allocated and the calls in
* nsmng_getcanvasline() succeed. */
- buffer = bitmap_get_buffer(c->base.bitmap);
+ buffer = bitmap_get_buffer(c->bitmap);
if (buffer == NULL) {
msg_data.error = messages_get("NoMemory");
content_broadcast(&c->base, CONTENT_MSG_ERROR, msg_data);
@@ -254,8 +256,8 @@
/* Calculate the address
*/
- return bitmap_get_buffer(c->base.bitmap) +
- bitmap_get_rowstride(c->base.bitmap) * line;
+ return bitmap_get_buffer(c->bitmap) +
+ bitmap_get_rowstride(c->bitmap) * line;
}
static mng_bool nsmng_refresh(mng_handle mng, mng_uint32 x, mng_uint32 y,
@@ -329,8 +331,8 @@
c->waiting = false;
mng_display_resume(c->handle);
c->opaque_test_pending = true;
- if (c->base.bitmap)
- bitmap_modified(c->base.bitmap);
+ if (c->bitmap)
+ bitmap_modified(c->bitmap);
}
}
@@ -549,7 +551,7 @@
/* by this point, the png should have been parsed
* and the bitmap created, so ensure that's the case
*/
- if (content__get_bitmap(c) == NULL) {
+ if (mng->bitmap == NULL) {
return nsmng_broadcast_error(mng, -1) == NSERROR_OK;
}
@@ -585,7 +587,7 @@
LOG(("Unable to start display (%i)", status));
return nsmng_broadcast_error(mng, status) == NSERROR_OK;
}
- bitmap_modified(c->bitmap);
+ bitmap_modified(mng->bitmap);
/* Optimise the plotting of MNG */
mng->opaque_test_pending = false;
@@ -607,7 +609,7 @@
/* by this point, the png should have been parsed
* and the bitmap created, so ensure that's the case
*/
- if (content__get_bitmap(c) == NULL) {
+ if (mng->bitmap == NULL) {
return nsmng_broadcast_error(mng, -1) == NSERROR_OK;
}
@@ -642,12 +644,12 @@
LOG(("Unable to start display (%i)", status));
return nsmng_broadcast_error(mng, status) == NSERROR_OK;
}
- bitmap_modified(c->bitmap);
+ bitmap_modified(mng->bitmap);
/* Optimise the plotting of JNG/PNGs
*/
mng->opaque_test_pending = true;
- bitmap_set_opaque(c->bitmap, false);
+ bitmap_set_opaque(mng->bitmap, false);
/* free associated memory */
@@ -678,8 +680,9 @@
mng->handle = NULL;
}
- if (c->bitmap)
- bitmap_destroy(c->bitmap);
+ if (mng->bitmap) {
+ bitmap_destroy(mng->bitmap);
+ }
}
@@ -693,8 +696,9 @@
/* mark image as having been requested to display */
mng->displayed = true;
- if ((c->bitmap) && (mng->opaque_test_pending)) {
- bitmap_set_opaque(c->bitmap, bitmap_test_opaque(c->bitmap));
+ if ((mng->bitmap) &&
+ (mng->opaque_test_pending)) {
+ bitmap_set_opaque(mng->bitmap, bitmap_test_opaque(mng->bitmap));
mng->opaque_test_pending = false;
}
@@ -704,7 +708,7 @@
flags |= BITMAPF_REPEAT_Y;
ret = ctx->plot->bitmap(data->x, data->y, data->width, data->height,
- c->bitmap, data->background_colour, flags);
+ mng->bitmap, data->background_colour, flags);
/* Check if we need to restart the animation */
if ((mng->waiting) && (option_animate_images))
@@ -757,6 +761,13 @@
*newc = (struct content *) mng;
return NSERROR_OK;
+}
+
+static void *nsmng_get_internal(const struct content *c, void *context)
+{
+ nsmng_content *mng = (nsmng_content *)c;
+
+ return mng->bitmap;
}
static content_type nsmng_content_type(lwc_string *mime_type)
@@ -772,6 +783,7 @@
.destroy = nsmng_destroy,
.redraw = nsmng_redraw,
.clone = nsmng_clone,
+ .get_internal = nsmng_get_internal,
.type = nsmng_content_type,
.no_share = false,
};
@@ -794,6 +806,7 @@
.destroy = nsmng_destroy,
.redraw = nsmng_redraw,
.clone = nsmng_clone,
+ .get_internal = nsmng_get_internal,
.type = nsmng_content_type,
.no_share = false,
};
Modified: trunk/netsurf/image/nssprite.c
URL: http://source.netsurf-browser.org/trunk/netsurf/image/nssprite.c?rev=1268...
==============================================================================
--- trunk/netsurf/image/nssprite.c (original)
+++ trunk/netsurf/image/nssprite.c Wed Aug 31 07:12:41 2011
@@ -37,6 +37,7 @@
typedef struct nssprite_content {
struct content base;
+ struct bitmap *bitmap; /**< Created NetSurf bitmap */
struct rosprite_area* sprite_area;
} nssprite_content;
@@ -112,19 +113,19 @@
struct rosprite* sprite = sprite_area->sprites[0];
- c->bitmap = bitmap_create(sprite->width, sprite->height, BITMAP_NEW);
- if (!c->bitmap) {
+ nssprite->bitmap = bitmap_create(sprite->width, sprite->height, BITMAP_NEW);
+ if (!nssprite->bitmap) {
msg_data.error = messages_get("NoMemory");
content_broadcast(c, CONTENT_MSG_ERROR, msg_data);
return false;
}
- unsigned char* imagebuf = bitmap_get_buffer(c->bitmap);
+ unsigned char* imagebuf = bitmap_get_buffer(nssprite->bitmap);
if (!imagebuf) {
msg_data.error = messages_get("NoMemory");
content_broadcast(c, CONTENT_MSG_ERROR, msg_data);
return false;
}
- unsigned int row_width = bitmap_get_rowstride(c->bitmap);
+ unsigned int row_width = bitmap_get_rowstride(nssprite->bitmap);
memcpy(imagebuf, sprite->image, row_width * sprite->height); // TODO: avoid copying entire image buffer
@@ -145,7 +146,7 @@
c->width = sprite->width;
c->height = sprite->height;
- bitmap_modified(c->bitmap);
+ bitmap_modified(nssprite->bitmap);
content_set_ready(c);
content_set_done(c);
@@ -160,12 +161,12 @@
static void nssprite_destroy(struct content *c)
{
- nssprite_content *sprite = (nssprite_content *) c;
-
- if (sprite->sprite_area != NULL)
- rosprite_destroy_sprite_area(sprite->sprite_area);
- if (c->bitmap != NULL)
- bitmap_destroy(c->bitmap);
+ nssprite_content *nssprite = (nssprite_content *) c;
+
+ if (nssprite->sprite_area != NULL)
+ rosprite_destroy_sprite_area(nssprite->sprite_area);
+ if (nssprite->bitmap != NULL)
+ bitmap_destroy(nssprite->bitmap);
}
@@ -176,6 +177,7 @@
static bool nssprite_redraw(struct content *c, struct content_redraw_data *data,
const struct rect *clip, const struct redraw_context *ctx)
{
+ nssprite_content *nssprite = (nssprite_content *) c;
bitmap_flags_t flags = BITMAPF_NONE;
if (data->repeat_x)
@@ -184,7 +186,7 @@
flags |= BITMAPF_REPEAT_Y;
return ctx->plot->bitmap(data->x, data->y, data->width, data->height,
- c->bitmap, data->background_colour, flags);
+ nssprite->bitmap, data->background_colour, flags);
}
@@ -217,10 +219,18 @@
return NSERROR_OK;
}
+static void *nssprite_get_internal(const struct content *c, void *context)
+{
+ nssprite_content *nssprite = (nssprite_content *) c;
+
+ return nssprite->bitmap;
+}
+
static content_type nssprite_content_type(lwc_string *mime_type)
{
return CONTENT_IMAGE;
}
+
static const content_handler nssprite_content_handler = {
.create = nssprite_create,
@@ -228,6 +238,7 @@
.destroy = nssprite_destroy,
.redraw = nssprite_redraw,
.clone = nssprite_clone,
+ .get_internal = nssprite_get_internal,
.type = nssprite_content_type,
.no_share = false,
};
Modified: trunk/netsurf/image/png.c
URL: http://source.netsurf-browser.org/trunk/netsurf/image/png.c?rev=12686&r1=...
==============================================================================
--- trunk/netsurf/image/png.c (original)
+++ trunk/netsurf/image/png.c Wed Aug 31 07:12:41 2011
@@ -331,8 +331,6 @@
bitmap_set_opaque(png_c->bitmap, bitmap_test_opaque(png_c->bitmap));
bitmap_modified(png_c->bitmap);
- c->bitmap = png_c->bitmap; /* this needs to go */
-
content_set_ready(c);
content_set_done(c);
content_set_status(c, "");
@@ -411,6 +409,13 @@
*new_c = (struct content *)clone_png_c;
return NSERROR_OK;
+}
+
+static void *nspng_get_internal(const struct content *c, void *context)
+{
+ nspng_content *png_c = (nspng_content *) c;
+
+ return png_c->bitmap;
}
static content_type nspng_content_type(lwc_string *mime_type)
@@ -425,6 +430,7 @@
.destroy = nspng_destroy,
.redraw = nspng_redraw,
.clone = nspng_clone,
+ .get_internal = nspng_get_internal,
.type = nspng_content_type,
.no_share = false,
};
Modified: trunk/netsurf/image/rsvg.c
URL: http://source.netsurf-browser.org/trunk/netsurf/image/rsvg.c?rev=12686&r1...
==============================================================================
--- trunk/netsurf/image/rsvg.c (original)
+++ trunk/netsurf/image/rsvg.c Wed Aug 31 07:12:41 2011
@@ -207,8 +207,7 @@
c->width, c->height,
bitmap_get_rowstride(d->bitmap));
- c->bitmap = d->bitmap;
- bitmap_modified(c->bitmap);
+ bitmap_modified(d->bitmap);
content_set_ready(c);
content_set_done(c);
/* Done: update status bar */
@@ -220,9 +219,10 @@
static bool rsvg_redraw(struct content *c, struct content_redraw_data *data,
const struct rect *clip, const struct redraw_context *ctx)
{
+ rsvg_content *rsvgcontent = (rsvg_content *) c;
bitmap_flags_t flags = BITMAPF_NONE;
- assert(c->bitmap != NULL);
+ assert(rsvgcontent->bitmap != NULL);
if (data->repeat_x)
flags |= BITMAPF_REPEAT_X;
@@ -230,7 +230,7 @@
flags |= BITMAPF_REPEAT_Y;
return ctx->plot->bitmap(data->x, data->y, data->width, data->height,
- c->bitmap, data->background_colour, flags);
+ rsvgcontent->bitmap, data->background_colour, flags);
}
static void rsvg_destroy(struct content *c)
@@ -288,6 +288,13 @@
*newc = (struct content *) svg;
return NSERROR_OK;
+}
+
+static void *rsvg_get_internal(const struct content *c, void *context)
+{
+ rsvg_content *d = (rsvg_content *) c;
+
+ return d->bitmap;
}
static content_type rsvg_content_type(lwc_string *mime_type)
@@ -302,6 +309,7 @@
.destroy = rsvg_destroy,
.redraw = rsvg_redraw,
.clone = rsvg_clone,
+ .get_internal = rsvg_get_internal,
.type = rsvg_content_type,
.no_share = false,
};
Modified: trunk/netsurf/image/webp.c
URL: http://source.netsurf-browser.org/trunk/netsurf/image/webp.c?rev=12686&r1...
==============================================================================
--- trunk/netsurf/image/webp.c (original)
+++ trunk/netsurf/image/webp.c Wed Aug 31 07:12:41 2011
@@ -36,6 +36,8 @@
typedef struct webp_content
{
struct content base;
+
+ struct bitmap *bitmap; /**< Created NetSurf bitmap */
} webp_content;
@@ -71,6 +73,7 @@
static bool webp_convert(struct content *c)
{
+ webp_content *webp = (webp_content *)c;
union content_msg_data msg_data;
const uint8_t *data;
unsigned char *imagebuf = NULL;
@@ -89,20 +92,20 @@
return false;
}
- c->bitmap = bitmap_create(width, height, BITMAP_NEW | BITMAP_OPAQUE);
- if (!c->bitmap) {
- msg_data.error = messages_get("NoMemory");
- content_broadcast(c, CONTENT_MSG_ERROR, msg_data);
- return false;
- }
-
- imagebuf = bitmap_get_buffer(c->bitmap);
+ webp->bitmap = bitmap_create(width, height, BITMAP_NEW | BITMAP_OPAQUE);
+ if (!webp->bitmap) {
+ msg_data.error = messages_get("NoMemory");
+ content_broadcast(c, CONTENT_MSG_ERROR, msg_data);
+ return false;
+ }
+
+ imagebuf = bitmap_get_buffer(webp->bitmap);
if (!imagebuf) {
msg_data.error = messages_get("NoMemory");
content_broadcast(c, CONTENT_MSG_ERROR, msg_data);
return false;
}
- unsigned int row_width = bitmap_get_rowstride(c->bitmap);
+ unsigned int row_width = bitmap_get_rowstride(webp->bitmap);
res_p = WebPDecodeRGBAInto(data, size, imagebuf,
row_width * height, row_width);
@@ -118,7 +121,7 @@
width, height, size);
content__set_title(c, title);
- bitmap_modified(c->bitmap);
+ bitmap_modified(webp->bitmap);
content_set_ready(c);
content_set_done(c);
@@ -134,8 +137,10 @@
static void webp_destroy(struct content *c)
{
- if (c->bitmap != NULL)
- bitmap_destroy(c->bitmap);
+ webp_content *webp = (webp_content *)c;
+
+ if (webp->bitmap != NULL)
+ bitmap_destroy(webp->bitmap);
}
@@ -146,6 +151,7 @@
static bool webp_redraw(struct content *c, struct content_redraw_data *data,
const struct rect *clip, const struct redraw_context *ctx)
{
+ webp_content *webp = (webp_content *)c;
bitmap_flags_t flags = BITMAPF_NONE;
if (data->repeat_x)
@@ -154,7 +160,7 @@
flags |= BITMAPF_REPEAT_Y;
return ctx->plot->bitmap(data->x, data->y, data->width, data->height,
- c->bitmap, data->background_colour, flags);
+ webp->bitmap, data->background_colour, flags);
}
@@ -187,6 +193,13 @@
return NSERROR_OK;
}
+static void *webp_get_internal(const struct content *c, void *context)
+{
+ webp_content *webp = (webp_content *)c;
+
+ return webp->bitmap;
+}
+
static content_type webp_content_type(lwc_string *mime_type)
{
return CONTENT_IMAGE;
@@ -198,6 +211,7 @@
.destroy = webp_destroy,
.redraw = webp_redraw,
.clone = webp_clone,
+ .get_internal = webp_get_internal,
.type = webp_content_type,
.no_share = false,
};
Modified: trunk/netsurf/render/html_redraw.c
URL: http://source.netsurf-browser.org/trunk/netsurf/render/html_redraw.c?rev=...
==============================================================================
--- trunk/netsurf/render/html_redraw.c (original)
+++ trunk/netsurf/render/html_redraw.c Wed Aug 31 07:12:41 2011
@@ -2060,24 +2060,23 @@
/* handle background-repeat */
switch (css_computed_background_repeat(background->style)) {
case CSS_BACKGROUND_REPEAT_REPEAT:
- {
- struct bitmap *bmp = content_get_bitmap(
- background->background);
repeat_x = repeat_y = true;
/* optimisation: only plot the colour if
* bitmap is not opaque */
- if (bmp != NULL)
- plot_colour = !bitmap_get_opaque(bmp);
- }
+ plot_colour = !content_get_opaque(background->background);
break;
+
case CSS_BACKGROUND_REPEAT_REPEAT_X:
repeat_x = true;
break;
+
case CSS_BACKGROUND_REPEAT_REPEAT_Y:
repeat_y = true;
break;
+
case CSS_BACKGROUND_REPEAT_NO_REPEAT:
break;
+
default:
break;
}
@@ -2126,8 +2125,6 @@
for (; clip_box; clip_box = clip_box->next) {
/* clip to child boxes if needed */
if (clip_to_children) {
- struct bitmap *bmp = NULL;
-
assert(clip_box->type == BOX_TABLE_CELL);
/* update clip.* to the child cell */
@@ -2145,16 +2142,17 @@
if (r.x1 > clip->x1) r.x1 = clip->x1;
if (r.y1 > clip->y1) r.y1 = clip->y1;
- if (clip_box->background != NULL)
- bmp = content_get_bitmap(clip_box->background);
-
css_computed_background_color(clip_box->style, &bgcol);
/* <td> attributes override <tr> */
- if ((r.x0 >= r.x1) || (r.y0 >= r.y1) ||
- (nscss_color_is_transparent(bgcol) ==
- false) ||
- (bmp != NULL && bitmap_get_opaque(bmp)))
+ /* if the background content is opaque there
+ * is no need to plot underneath it.
+ */
+ if ((r.x0 >= r.x1) ||
+ (r.y0 >= r.y1) ||
+ (nscss_color_is_transparent(bgcol) == false) ||
+ ((clip_box->background != NULL) &&
+ content_get_opaque(clip_box->background)))
continue;
}
@@ -2259,24 +2257,24 @@
/* handle background-repeat */
switch (css_computed_background_repeat(box->style)) {
case CSS_BACKGROUND_REPEAT_REPEAT:
- {
- struct bitmap *bmp =
- content_get_bitmap(box->background);
repeat_x = repeat_y = true;
/* optimisation: only plot the colour if
- * bitmap is not opaque */
- if (bmp != NULL)
- plot_colour = !bitmap_get_opaque(bmp);
- }
+ * bitmap is not opaque
+ */
+ plot_colour = !content_get_opaque(box->background);
break;
+
case CSS_BACKGROUND_REPEAT_REPEAT_X:
repeat_x = true;
break;
+
case CSS_BACKGROUND_REPEAT_REPEAT_Y:
repeat_y = true;
break;
+
case CSS_BACKGROUND_REPEAT_NO_REPEAT:
break;
+
default:
break;
}
12 years