Commit b2802193 authored by Morten Welinder's avatar Morten Welinder

Code cleanup

parent d5df8836
2018-04-13 Morten Welinder <terra@gnome.org>
* src/mstyle.c: Hide internals.
src/gnm-style-impl.h: Remove.
* src/cell.c (gnm_cell_set_format): Remove. Unused and badly
named.
......
......@@ -42,7 +42,7 @@
#include "sheet-view.h"
#include "selection.h"
#include "rendered-value.h"
#include "gnm-style-impl.h"
#include "style-font.h"
#include <gsf/gsf-input.h>
#include <gsf/gsf-input-textline.h>
......
......@@ -263,7 +263,6 @@ libspreadsheet_include_HEADERS = \
gnm-so-line.h \
gnm-so-path.h \
gnm-so-polygon.h \
gnm-style-impl.h \
gnumeric-conf.h \
gnumeric-fwd.h \
gnumeric-simple-canvas.h \
......
......@@ -43,7 +43,6 @@
#include <commands.h>
#include <mathfunc.h>
#include <style-conditions.h>
#include <gnm-style-impl.h>
#include <gtk/gtk.h>
......@@ -463,6 +462,8 @@ cb_c_fmt_dialog_copy_button (G_GNUC_UNUSED GtkWidget *btn, CFormatState *state)
GtkTreeIter iter;
GnmParsePos pp;
GnmStyle *style;
GnmStyleConditions *conds;
/* Set the condition op */
if (gtk_tree_model_get_iter_first
(GTK_TREE_MODEL (state->editor.typestore), &iter)) {
......@@ -497,10 +498,12 @@ cb_c_fmt_dialog_copy_button (G_GNUC_UNUSED GtkWidget *btn, CFormatState *state)
gnm_expr_entry_load_from_text (GNM_EXPR_ENTRY (state->editor.expr_y),
"");
/* Set the style */
if (state->style && state->style->cond_styles)
conds = state->style
? gnm_style_get_conditions (state->style)
: NULL;
if (conds)
style = gnm_style_dup
(g_ptr_array_index (state->style->cond_styles,
ind));
(gnm_style_get_cond_style (state->style, ind));
else {
style = gnm_style_new_default ();
gnm_style_merge (style, gsc->overlay);
......
/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
#ifndef _GNM_STYLE_IMPL_H_
# define _GNM_STYLE_IMPL_H_
#include "style-border.h"
#include "style-color.h"
#include "style-font.h"
#include "validation.h"
#include "pattern.h"
#include <goffice/goffice.h>
G_BEGIN_DECLS
struct _GnmStyle {
unsigned int changed;
unsigned int set;
unsigned int hash_key;
unsigned int hash_key_xl;
unsigned int ref_count;
unsigned int link_count;
Sheet *linked_sheet;
PangoAttrList *pango_attrs;
double pango_attrs_zoom;
int pango_attrs_height;
GnmFont *font;
PangoContext *font_context;
/* public */
struct _GnmStyleColor {
GnmColor *font;
GnmColor *back;
GnmColor *pattern;
} color;
GnmBorder *borders[MSTYLE_BORDER_DIAGONAL - MSTYLE_BORDER_TOP + 1];
guint32 pattern;
/* FIXME: TODO use GOFont */
struct _GnmStyleFontDetails {
GOString *name;
gboolean bold;
gboolean italic;
GnmUnderline underline;
gboolean strikethrough;
GOFontScript script;
double size;
} font_detail;
GOFormat const *format;
GnmHAlign h_align;
GnmVAlign v_align;
int indent;
int rotation;
int text_dir;
gboolean wrap_text;
gboolean shrink_to_fit;
gboolean contents_locked;
gboolean contents_hidden;
GnmValidation *validation;
GnmHLink *hlink;
GnmInputMsg *input_msg;
GnmStyleConditions *conditions;
GPtrArray *cond_styles;
GPtrArray *deps;
};
#define elem_changed(style, elem) do { (style)->changed |= (1u << (elem)); } while(0)
#define elem_set(style, elem) do { (style)->set |= (1u << (elem)); } while(0)
#define elem_unset(style, elem) do { (style)->set &= ~(1u << (elem)); } while(0)
#define elem_is_set(style, elem) (((style)->set & (1u << (elem))) != 0)
#define MSTYLE_ANY_BORDER MSTYLE_BORDER_TOP: \
case MSTYLE_BORDER_BOTTOM: \
case MSTYLE_BORDER_LEFT: \
case MSTYLE_BORDER_RIGHT: \
case MSTYLE_BORDER_DIAGONAL: \
case MSTYLE_BORDER_REV_DIAGONAL
G_END_DECLS
#endif /* _GNM_STYLE_IMPL_H_ */
......@@ -31,7 +31,6 @@
#include "parse-util.h"
#include "mstyle.h"
#include "style-conditions.h"
#include "gnm-style-impl.h" /* cheesy */
#include "position.h" /* to eval conditions */
#include "style-border.h"
#include "style-color.h"
......@@ -283,6 +282,7 @@ item_grid_draw_merged_range (cairo_t *cr, GnmItemGrid *ig,
Sheet const *sheet = sv->sheet;
GnmCell const *cell = sheet_cell_get (sheet, range->start.col, range->start.row);
int const dir = sheet->text_is_rtl ? -1 : 1;
GnmStyleConditions *conds;
/* load style from corner which may not be visible */
GnmStyle const *style = sheet_style_get (sheet, range->start.col, range->start.row);
......@@ -311,12 +311,13 @@ item_grid_draw_merged_range (cairo_t *cr, GnmItemGrid *ig,
if (l == r || t == b)
return;
if (style->conditions) {
conds = gnm_style_get_conditions (style);
if (conds) {
GnmEvalPos ep;
int res;
eval_pos_init (&ep, (Sheet *)sheet, range->start.col, range->start.row);
if ((res = gnm_style_conditions_eval (style->conditions, &ep)) >= 0)
style = g_ptr_array_index (style->cond_styles, res);
if ((res = gnm_style_conditions_eval (conds, &ep)) >= 0)
style = gnm_style_get_cond_style (style, res);
}
/* Check for background THEN selection */
......
/* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/*
* gnm-style.c: Storing a style
* mstyle.c: Storing a style
*
* Authors:
* Michael Meeks <mmeeks@gnu.org>
......@@ -12,9 +11,13 @@
#include "gnumeric.h"
#include "style.h"
#include "gnm-style-impl.h"
#include "sheet-style.h"
#include "style-border.h"
#include "style-font.h"
#include "style-color.h"
#include "style-conditions.h"
#include "validation.h"
#include "pattern.h"
#include "hlink.h"
#include "input-msg.h"
#include "application.h"
......@@ -44,6 +47,77 @@ static GOMemChunk *gnm_style_pool;
#define CHUNK_FREE(p,v) g_free ((v))
#endif
struct _GnmStyle {
unsigned int changed;
unsigned int set;
unsigned int hash_key;
unsigned int hash_key_xl;
unsigned int ref_count;
unsigned int link_count;
Sheet *linked_sheet;
PangoAttrList *pango_attrs;
double pango_attrs_zoom;
int pango_attrs_height;
GnmFont *font;
PangoContext *font_context;
/* public */
struct _GnmStyleColor {
GnmColor *font;
GnmColor *back;
GnmColor *pattern;
} color;
GnmBorder *borders[MSTYLE_BORDER_DIAGONAL - MSTYLE_BORDER_TOP + 1];
guint32 pattern;
/* FIXME: TODO use GOFont */
struct _GnmStyleFontDetails {
GOString *name;
gboolean bold;
gboolean italic;
GnmUnderline underline;
gboolean strikethrough;
GOFontScript script;
double size;
} font_detail;
GOFormat const *format;
GnmHAlign h_align;
GnmVAlign v_align;
int indent;
int rotation;
int text_dir;
gboolean wrap_text;
gboolean shrink_to_fit;
gboolean contents_locked;
gboolean contents_hidden;
GnmValidation *validation;
GnmHLink *hlink;
GnmInputMsg *input_msg;
GnmStyleConditions *conditions;
GPtrArray *cond_styles;
GPtrArray *deps;
};
#define elem_changed(style, elem) do { (style)->changed |= (1u << (elem)); } while(0)
#define elem_set(style, elem) do { (style)->set |= (1u << (elem)); } while(0)
#define elem_unset(style, elem) do { (style)->set &= ~(1u << (elem)); } while(0)
#define elem_is_set(style, elem) (((style)->set & (1u << (elem))) != 0)
#define MSTYLE_ANY_BORDER MSTYLE_BORDER_TOP: \
case MSTYLE_BORDER_BOTTOM: \
case MSTYLE_BORDER_LEFT: \
case MSTYLE_BORDER_RIGHT: \
case MSTYLE_BORDER_DIAGONAL: \
case MSTYLE_BORDER_REV_DIAGONAL
#define UNROLLED_FOR(init_,cond_,step_,code_) \
do { \
init_; \
......@@ -1005,6 +1079,14 @@ gnm_style_unlink (GnmStyle *style)
}
}
// Internal function for sheet-style.c use only
void
gnm_style_abandon_link (GnmStyle *style)
{
style->link_count = 0;
style->linked_sheet = NULL;
}
gboolean
gnm_style_eq (GnmStyle const *a, GnmStyle const *b)
{
......@@ -1986,6 +2068,28 @@ gnm_style_get_conditions (GnmStyle const *style)
return style->conditions;
}
/**
* gnm_style_get_cond_style:
* @style: #GnmStyle
* @ix: The index of the condition for which style is desired
*
* Returns: (transfer none): the resulting style from applying the condition's
* style overlay onto @style.
**/
GnmStyle const *
gnm_style_get_cond_style (GnmStyle const *style, int ix)
{
g_return_val_if_fail (style != NULL, NULL);
g_return_val_if_fail (elem_is_set (style, MSTYLE_CONDITIONS), NULL);
g_return_val_if_fail (style->cond_styles != NULL, NULL);
g_return_val_if_fail (ix < 0 || (unsigned)ix > style->cond_styles->len, NULL);
return g_ptr_array_index (style->cond_styles, ix);
}
static gboolean
debug_style_deps (void)
{
......
......@@ -75,6 +75,7 @@ GnmStyle *gnm_style_link_sheet (GnmStyle *style, Sheet *sheet);
void gnm_style_link (GnmStyle *style);
void gnm_style_link_multiple (GnmStyle *style, int count);
void gnm_style_unlink (GnmStyle *style);
void gnm_style_abandon_link (GnmStyle *style);
gboolean gnm_style_eq (GnmStyle const *a, GnmStyle const *b);
gboolean gnm_style_equal (GnmStyle const *a, GnmStyle const *b);
......@@ -163,6 +164,7 @@ GnmInputMsg *gnm_style_get_input_msg (GnmStyle const *style);
void gnm_style_set_conditions (GnmStyle *style, GnmStyleConditions *sc);
GnmStyleConditions *gnm_style_get_conditions (GnmStyle const *style);
GnmStyle const * gnm_style_get_cond_style (GnmStyle const *style, int ix);
void gnm_style_link_dependents (GnmStyle *style,
GnmRange const *r);
......
......@@ -22,7 +22,6 @@
#include "value.h"
#include "style-border.h"
#include "style-conditions.h"
#include "gnm-style-impl.h"
#include "pattern.h"
#include "cellspan.h"
#include "ranges.h"
......@@ -217,6 +216,7 @@ print_merged_range_gtk (cairo_t *context,
int last;
GnmCell const *cell = sheet_cell_get (sheet, range->start.col, range->start.row);
int const dir = sheet->text_is_rtl ? -1 : 1;
GnmStyleConditions *conds;
/* load style from corner which may not be visible */
GnmStyle const *style = sheet_style_get (sheet, range->start.col, range->start.row);
......@@ -240,12 +240,13 @@ print_merged_range_gtk (cairo_t *context,
if (l == r || t == b)
return;
if (style->conditions) {
conds = gnm_style_get_conditions (style);
if (style) {
GnmEvalPos ep;
int res;
eval_pos_init (&ep, (Sheet *)sheet, range->start.col, range->start.row);
if ((res = gnm_style_conditions_eval (style->conditions, &ep)) >= 0)
style = g_ptr_array_index (style->cond_styles, res);
if ((res = gnm_style_conditions_eval (conds, &ep)) >= 0)
style = gnm_style_get_cond_style (style, res);
}
if (gnm_pattern_background_set (style, context, FALSE, NULL))
......
......@@ -33,7 +33,6 @@
#include "style-font.h"
#include "style-border.h"
#include "style-conditions.h"
#include "gnm-style-impl.h"
#include "sheet.h"
#include "sheet-merge.h"
#include "gnm-format.h"
......@@ -245,6 +244,7 @@ gnm_rendered_value_new (GnmCell const *cell,
PangoDirection dir;
char const *text;
gboolean debug = debug_rv ();
GnmStyleConditions *conds;
g_return_val_if_fail (cell != NULL, NULL);
......@@ -271,14 +271,15 @@ gnm_rendered_value_new (GnmCell const *cell,
mstyle = gnm_cell_get_style (cell);
if (mstyle->conditions) {
conds = gnm_style_get_conditions (mstyle);
if (conds) {
GnmEvalPos ep;
int res;
eval_pos_init_cell (&ep, cell);
res = gnm_style_conditions_eval (mstyle->conditions, &ep);
res = gnm_style_conditions_eval (conds, &ep);
if (res >= 0)
mstyle = g_ptr_array_index (mstyle->cond_styles, res);
mstyle = gnm_style_get_cond_style (mstyle, res);
}
rotation = gnm_style_get_rotation (mstyle);
......
......@@ -65,7 +65,6 @@ gnm_sheet_merge_add (Sheet *sheet, GnmRange const *r, gboolean clear,
GSList *test;
GnmRange *r_copy;
GnmCell *cell;
GnmStyle *style;
GnmComment *comment;
GnmRange r2;
......@@ -92,6 +91,7 @@ gnm_sheet_merge_add (Sheet *sheet, GnmRange const *r, gboolean clear,
if (clear) {
int i;
GnmStyle *style;
sheet_redraw_range (sheet, &r2);
......
......@@ -23,7 +23,6 @@
#include <gnumeric-config.h>
#include "sheet-style.h"
#include "gnm-style-impl.h"
#include "ranges.h"
#include "sheet.h"
#include "expr.h"
......@@ -213,8 +212,7 @@ sheet_style_find (Sheet const *sheet, GnmStyle *s)
* gnm_style_unlink as that would call sheet_style_unlink
* and thus remove "res" from the hash.
*/
s->link_count = 0;
s->linked_sheet = NULL;
gnm_style_abandon_link (s);
gnm_style_unref (s);
return res;
......@@ -737,10 +735,8 @@ sheet_style_resize (Sheet *sheet, int cols, int rows)
GnmRange const *r = &sr->range;
GnmStyle *style = sr->style;
GnmRange newr;
if (range_intersection (&newr, r, &new_full)) {
gnm_style_ref (style);
sheet_style_apply_range (sheet, &newr, style);
}
if (range_intersection (&newr, r, &new_full))
sheet_style_apply_range2 (sheet, &newr, style);
}
style_list_free (styles);
......@@ -1542,20 +1538,27 @@ sheet_style_get (Sheet const *sheet, int col, int row)
#define border_null(b) ((b) == none || (b) == NULL)
static void
style_row (GnmStyle *style, int start_col, int end_col, GnmStyleRow *sr, gboolean accept_conditions)
style_row (GnmStyle const *style, int start_col, int end_col,
GnmStyleRow *sr, gboolean accept_conditions)
{
GnmBorder const *top, *bottom, *none = gnm_style_border_none ();
GnmBorder const *left, *right, *v;
int const end = MIN (end_col, sr->end_col);
int i = MAX (start_col, sr->start_col);
GnmStyleConditions *conds;
if (accept_conditions && style->conditions) {
conds = accept_conditions
? gnm_style_get_conditions (style)
: NULL;
if (conds) {
GnmEvalPos ep;
int res;
for (eval_pos_init (&ep, (Sheet *)sr->sheet, i, sr->row); ep.eval.col <= end ; ep.eval.col++) {
res = gnm_style_conditions_eval (style->conditions, &ep);
style_row (res >= 0 ? g_ptr_array_index (style->cond_styles, res) : style,
res = gnm_style_conditions_eval (conds, &ep);
style_row (res >= 0
? gnm_style_get_cond_style (style, res)
: style,
ep.eval.col, ep.eval.col, sr, FALSE);
}
return;
......
......@@ -1709,12 +1709,10 @@ sheet_cell_calc_span (GnmCell *cell, GnmSpanCalcFlags flags)
* sheet_apply_style:
* @sheet: the sheet in which can be found
* @range: the range to which should be applied
* @mstyle: the style
* @mstyle: (transfer full): A #GnmStyle partial style
*
* A mid level routine that applies the supplied partial style @style to the
* target @range and performs the necessary respanning and redrawing.
*
* It absorbs the style reference.
**/
void
sheet_apply_style (Sheet *sheet,
......@@ -3072,6 +3070,8 @@ sheet_cell_set_value (GnmCell *cell, GnmValue *v)
void
sheet_cell_set_value_gi (Sheet *sheet, int col, int row, GnmValue *v)
{
// This version exists because not all versions of pygobject
// understand transfer-full parameters
sheet_cell_set_value (sheet_cell_fetch (sheet, col, row),
value_dup (v));
}
......
......@@ -833,8 +833,7 @@ highlight_apply (DiffState *state, const GnmRange *r)
g_return_if_fail (IS_SHEET (sheet));
gnm_style_ref (state->highlight_style);
sheet_style_apply_range (sheet, r, state->highlight_style);
sheet_style_apply_range2 (sheet, r, state->highlight_style);
}
static void
......
......@@ -23,7 +23,6 @@
#include "gnumeric.h"
#include "style-conditions.h"
#include "mstyle.h"
#include "gnm-style-impl.h"
#include "expr.h"
#include "expr-impl.h"
#include "cell.h"
......@@ -950,10 +949,10 @@ gnm_style_conditions_overlay (GnmStyleConditions const *sc,
GnmStyle const *overlay = cond->overlay;
GnmStyle *merge = gnm_style_new_merged (base, overlay);
/* We only draw a background colour if the pattern != 0 */
if (merge->pattern == 0 &&
elem_is_set (overlay, MSTYLE_COLOR_BACK) &&
!elem_is_set (overlay, MSTYLE_PATTERN))
merge->pattern = 1;
if (gnm_style_get_pattern (merge) == 0 &&
gnm_style_is_element_set (overlay, MSTYLE_COLOR_BACK) &&
!gnm_style_is_element_set (overlay, MSTYLE_PATTERN))
gnm_style_set_pattern (merge, 1);
g_ptr_array_add (res, merge);
}
return res;
......
......@@ -11,7 +11,6 @@
#include "gnumeric.h"
#include "style.h"
#include "style-font.h"
#include "gnm-style-impl.h"
#include "gnm-format.h"
#include "style-color.h"
......
......@@ -689,7 +689,7 @@ dao_autofit_rows (data_analysis_output_t *dao)
* @row1:
* @col2:
* @row2:
* @style:
* @style: (transfer full):
*
* Applies a partial style to the given region.
*
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment