Author: tlsa
Date: Sat Jan 17 13:39:38 2009
New Revision: 6119

URL: http://source.netsurf-browser.org?rev=6119&view=rev
Log:
Move handling of background related print options to background specific 
functions.

Modified:
    trunk/netsurf/render/html_redraw.c

Modified: trunk/netsurf/render/html_redraw.c
URL: 
http://source.netsurf-browser.org/trunk/netsurf/render/html_redraw.c?rev=6119&r1=6118&r2=6119&view=diff
==============================================================================
--- trunk/netsurf/render/html_redraw.c (original)
+++ trunk/netsurf/render/html_redraw.c Sat Jan 17 13:39:38 2009
@@ -356,110 +356,94 @@
         *   element is processed, ignore the background.
         * + For any other box, just use its own styling.
         */
-
-#ifdef WITH_PDF_EXPORT
-       if (!html_redraw_printing ||
-                       (html_redraw_printing && !option_remove_backgrounds)) {
-#else
-       {
-#endif
+       if (!box->parent) {
+               /* Root box */
+               if (box->style &&
+                               (box->style->background_color != TRANSPARENT ||
+                               box->background)) {
+                       /* With its own background */
+                       bg_box = box;
+               } else if (!box->style ||
+                               (box->style->background_color == TRANSPARENT &&
+                               !box->background)) {
+                       /* Without its own background */
+                       if (box->children && box->children->style &&
+                                       (box->children->style->
+                                       background_color != TRANSPARENT ||
+                                       box->children->background)) {
+                               /* But body has one, so use that */
+                               bg_box = box->children;
+                       }
+               }
+       } else if (box->parent && !box->parent->parent) {
+               /* Body box */
+               if (box->style &&
+                               (box->style->background_color != TRANSPARENT ||
+                               box->background)) {
+                       /* With a background */
+                       if (box->parent->style &&
+                               (box->parent->style->background_color !=
+                                       TRANSPARENT ||
+                                       box->parent->background)) {
+                               /* Root has own background; process normally */
+                               bg_box = box;
+                       }
+               }
+       } else {
+               /* Any other box */
+               bg_box = box;
+       }
+
+       /* bg_box == NULL implies that this box should not have
+       * its background rendered. Otherwise filter out linebreaks,
+       * optimize away non-differing inlines, only plot background
+       * for BOX_TEXT it's in an inline and ensure the bg_box
+       * has something worth rendering */
+       if (bg_box && bg_box->style &&
+                       bg_box->type != BOX_BR &&
+                       bg_box->type != BOX_TEXT &&
+                       bg_box->type != BOX_INLINE_END &&
+                       (bg_box->type != BOX_INLINE || bg_box->object) &&
+                       ((bg_box->style->background_color != TRANSPARENT) ||
+                       (bg_box->background))) {
+               /* find intersection of clip box and border edge */
+               int px0, py0, px1, py1;
+               px0 = x - border_left < x0 ? x0 : x - border_left;
+               py0 = y - border_top < y0 ? y0 : y - border_top;
+               px1 = x + padding_width + border_right < x1 ?
+                               x + padding_width + border_right : x1;
+               py1 = y + padding_height + border_bottom < y1 ?
+                               y + padding_height + border_bottom : y1;
                if (!box->parent) {
-                       /* Root box */
-                       if (box->style &&
-                                       (box->style->background_color !=
-                                       TRANSPARENT ||
-                                       box->background)) {
-                               /* With its own background */
-                               bg_box = box;
-                       } else if (!box->style ||
-                                       (box->style->background_color ==
-                                       TRANSPARENT &&
-                                       !box->background)) {
-                               /* Without its own background */
-                               if (box->children && box->children->style &&
-                                               (box->children->style->
-                                               background_color !=
-                                               TRANSPARENT ||
-                                               box->children->background)) {
-                                       /* But body has one, so use that */
-                                       bg_box = box->children;
-                               }
+                       /* Root element, special case:
+                        * background covers margins too */
+                       int m_left, m_top, m_right, m_bottom;
+                       if (scale == 1.0) {
+                               m_left = box->margin[LEFT];
+                               m_top = box->margin[TOP];
+                               m_right = box->margin[RIGHT];
+                               m_bottom = box->margin[BOTTOM];
+                       } else {
+                               m_left = box->margin[LEFT] * scale;
+                               m_top = box->margin[TOP] * scale;
+                               m_right = box->margin[RIGHT] * scale;
+                               m_bottom = box->margin[BOTTOM] * scale;
                        }
-               } else if (box->parent && !box->parent->parent) {
-                       /* Body box */
-                       if (box->style &&
-                                       (box->style->background_color !=
-                                       TRANSPARENT ||
-                                       box->background)) {
-                               /* With a background */
-                               if (box->parent->style &&
-                                       (box->parent->style->background_color !=
-                                               TRANSPARENT ||
-                                               box->parent->background)) {
-                                       /* Root has own background; process
-                                        * normally */
-                                       bg_box = box;
-                               }
-                       }
-               } else {
-                       /* Any other box */
-                       bg_box = box;
-               }
-
-               /* bg_box == NULL implies that this box should not have
-               * its background rendered. Otherwise filter out linebreaks,
-               * optimize away non-differing inlines, only plot background
-               * for BOX_TEXT it's in an inline and ensure the bg_box
-               * has something worth rendering */
-               if (bg_box && bg_box->style &&
-                               bg_box->type != BOX_BR &&
-                               bg_box->type != BOX_TEXT &&
-                               bg_box->type != BOX_INLINE_END &&
-                               (bg_box->type != BOX_INLINE ||
-                               bg_box->object) &&
-                               ((bg_box->style->background_color !=
-                               TRANSPARENT) ||
-                               (bg_box->background))) {
-                       /* find intersection of clip box and border edge */
-                       int px0, py0, px1, py1;
-                       px0 = x - border_left < x0 ? x0 : x - border_left;
-                       py0 = y - border_top < y0 ? y0 : y - border_top;
-                       px1 = x + padding_width + border_right < x1 ?
-                                       x + padding_width + border_right : x1;
-                       py1 = y + padding_height + border_bottom < y1 ?
-                                       y + padding_height + border_bottom : y1;
-                       if (!box->parent) {
-                               /* Root element, special case:
-                                * background covers margins too */
-                               int m_left, m_top, m_right, m_bottom;
-                               if (scale == 1.0) {
-                                       m_left = box->margin[LEFT];
-                                       m_top = box->margin[TOP];
-                                       m_right = box->margin[RIGHT];
-                                       m_bottom = box->margin[BOTTOM];
-                               } else {
-                                       m_left = box->margin[LEFT] * scale;
-                                       m_top = box->margin[TOP] * scale;
-                                       m_right = box->margin[RIGHT] * scale;
-                                       m_bottom = box->margin[BOTTOM] * scale;
-                               }
-                               px0 = px0 - m_left < x0 ? x0 : px0 - m_left;
-                               py0 = py0 - m_top < y0 ? y0 : py0 - m_top;
-                               px1 = px1 + m_right < x1 ? px1 + m_right : x1;
-                               py1 = py1 + m_bottom < y1 ? py1 + m_bottom : y1;
-                       }
-                       /* valid clipping rectangles only */
-                       if ((px0 < px1) && (py0 < py1)) {
-                               /* plot background */
-                               if (!html_redraw_background(x, y, box, scale,
-                                               px0, py0, px1, py1,
-                                               &current_background_color,
-                                               bg_box))
-                                       return false;
-                               /* restore previous graphics window */
-                               if (!plot.clip(x0, y0, x1, y1))
-                                       return false;
-                       }
+                       px0 = px0 - m_left < x0 ? x0 : px0 - m_left;
+                       py0 = py0 - m_top < y0 ? y0 : py0 - m_top;
+                       px1 = px1 + m_right < x1 ? px1 + m_right : x1;
+                       py1 = py1 + m_bottom < y1 ? py1 + m_bottom : y1;
+               }
+               /* valid clipping rectangles only */
+               if ((px0 < px1) && (py0 < py1)) {
+                       /* plot background */
+                       if (!html_redraw_background(x, y, box, scale,
+                                       px0, py0, px1, py1,
+                                       &current_background_color, bg_box))
+                               return false;
+                       /* restore previous graphics window */
+                       if (!plot.clip(x0, y0, x1, y1))
+                               return false;
                }
        }
 
@@ -807,11 +791,13 @@
                }
 
                /* what about the current search operation, if any? */
-               if (!highlighted &&
-                       search_current_window == current_redraw_browser->window 
&&
-                       
gui_search_term_highlighted(current_redraw_browser->window,
-                               offset, offset + len, &start_idx, &end_idx)) {
-                               highlighted = true;
+               if (!highlighted && search_current_window ==
+                               current_redraw_browser->window &&
+                               gui_search_term_highlighted(
+                                               current_redraw_browser->window,
+                                               offset, offset + len,
+                                               &start_idx, &end_idx)) {
+                       highlighted = true;
                }
 
                /* \todo make search terms visible within selected text */
@@ -823,22 +809,28 @@
                        int startx, endx;
 
                        if (end_idx > utf8_len) {
-                               /* adjust for trailing space, not present in 
utf8_text */
+                               /* adjust for trailing space, not present in
+                                * utf8_text */
                                assert(end_idx == utf8_len + 1);
                                endtxt_idx = utf8_len;
                        }
 
-                       if (!nsfont.font_width(style, utf8_text, start_idx, 
&startx))
+                       if (!nsfont.font_width(style, utf8_text, start_idx,
+                                       &startx))
                                startx = 0;
 
-                       if (!nsfont.font_width(style, utf8_text, endtxt_idx, 
&endx))
+                       if (!nsfont.font_width(style, utf8_text, endtxt_idx,
+                                       &endx))
                                endx = 0;
 
-                       /* is there a trailing space that should be highlighted 
as well? */
+                       /* is there a trailing space that should be highlighted
+                        * as well? */
                        if (end_idx > utf8_len) {
                                int spc_width;
-                               /* \todo is there a more elegant/efficient 
solution? */
-                               if (nsfont.font_width(style, " ", 1, 
&spc_width))
+                               /* \todo is there a more elegant/efficient
+                                * solution? */
+                               if (nsfont.font_width(style, " ", 1,
+                                               &spc_width))
                                        endx += spc_width;
                        }
 
@@ -852,11 +844,12 @@
                                !plot.text(x, y + (int) (height * 0.75 * scale),
                                                style, utf8_text, start_idx,
                                                current_background_color,
-                                               /*print_text_black ? 0 :*/ 
style->color))
+                                               /*print_text_black ? 0 :*/
+                                               style->color))
                                return false;
 
-                       /* decide whether highlighted portion is to be 
white-on-black or
-                          black-on-white */
+                       /* decide whether highlighted portion is to be
+                        * white-on-black or black-on-white */
                        if ((current_background_color & 0x808080) == 0x808080)
                                hback_col = 0;
                        else
@@ -864,8 +857,8 @@
                        hfore_col = hback_col ^ 0xffffff;
 
                        /* highlighted portion */
-                       if (!plot.fill(x + startx, y, x + endx, y + height * 
scale,
-                                       hback_col))
+                       if (!plot.fill(x + startx, y, x + endx,
+                                       y + height * scale, hback_col))
                                return false;
 
                        if (start_idx > 0) {
@@ -873,11 +866,13 @@
                                int px1 = min(x + endx, clip->x1);
 
                                if (px0 < px1) {
-                                       if (!plot.clip(px0, clip->y0, px1, 
clip->y1))
+                                       if (!plot.clip(px0, clip->y0, px1,
+                                                       clip->y1))
                                                return false;
                                        clip_changed = true;
-                               } else
+                               } else {
                                        text_visible = false;
+                               }
                        }
 
                        if (text_visible &&
@@ -891,21 +886,25 @@
                                int px0 = max(x + endx, clip->x0);
                                if (px0 < clip->x1) {
 
-                                       if (!plot.clip(px0, clip->y0, clip->x1, 
clip->y1))
+                                       if (!plot.clip(px0, clip->y0,
+                                                       clip->x1, clip->y1))
                                                return false;
 
                                        clip_changed = true;
 
-                                       if (!plot.text(x, y + (int) (height * 
0.75 * scale),
+                                       if (!plot.text(x, y + (int)
+                                               (height * 0.75 * scale),
                                                style, utf8_text, utf8_len,
                                                current_background_color,
-                                               /*print_text_black ? 0 :*/ 
style->color))
+                                               /*print_text_black ? 0 :*/
+                                               style->color))
                                                return false;
                                }
                        }
 
                        if (clip_changed &&
-                               !plot.clip(clip->x0, clip->y0, clip->x1, 
clip->y1))
+                               !plot.clip(clip->x0, clip->y0,
+                                               clip->x1, clip->y1))
                                return false;
                }
        }
@@ -1438,6 +1437,12 @@
        int ox = x, oy = y;
        int width, height;
        struct box *parent;
+
+#ifdef WITH_PDF_EXPORT
+       if (html_redraw_printing && option_remove_backgrounds)
+               return true;
+#endif
+
 
        plot_content = (background->background != NULL);
 
@@ -1652,6 +1657,11 @@
 
        plot_content = (box->background != NULL);
 
+#ifdef WITH_PDF_EXPORT
+       if (html_redraw_printing && option_remove_backgrounds)
+               return true;
+#endif
+
        if (plot_content) {
                /* handle background-repeat */
                switch (box->style->background_repeat) {


_______________________________________________
netsurf-commits mailing list
[email protected]
http://vlists.pepperfish.net/cgi-bin/mailman/listinfo/netsurf-commits-netsurf-browser.org

Reply via email to