summaryrefslogtreecommitdiffstats
path: root/src/dialogs
diff options
context:
space:
mode:
authorKrzysztof Kosi??ski <tweenk.pl@gmail.com>2011-06-20 19:33:57 +0000
committerKrzysztof KosiƄski <tweenk.pl@gmail.com>2011-06-20 19:33:57 +0000
commita39e3c37a508f9a389fc55270ae0336ad2f76f0e (patch)
tree952db81c3238005e975f21845734444bba28ff40 /src/dialogs
parentMeasure Tool: support measuring of text elements (without having to manually ... (diff)
parentFix outline view (diff)
downloadinkscape-a39e3c37a508f9a389fc55270ae0336ad2f76f0e.tar.gz
inkscape-a39e3c37a508f9a389fc55270ae0336ad2f76f0e.zip
Merge Cairo rendering branch
(bzr r10326)
Diffstat (limited to 'src/dialogs')
-rw-r--r--src/dialogs/clonetiler.cpp88
-rw-r--r--src/dialogs/text-edit.cpp74
2 files changed, 84 insertions, 78 deletions
diff --git a/src/dialogs/clonetiler.cpp b/src/dialogs/clonetiler.cpp
index 0cfa1d3c9..60ec4f9f7 100644
--- a/src/dialogs/clonetiler.cpp
+++ b/src/dialogs/clonetiler.cpp
@@ -18,32 +18,33 @@
#include <gtk/gtk.h>
#include <glibmm/i18n.h>
-#include "../desktop.h"
-#include "../desktop-handles.h"
+#include "desktop.h"
+#include "desktop-handles.h"
#include "dialog-events.h"
+#include "display/cairo-utils.h"
#include "display/nr-arena.h"
#include "display/nr-arena-item.h"
-#include "../document.h"
-#include "../filter-chemistry.h"
+#include "document.h"
+#include "filter-chemistry.h"
#include "helper/unit-menu.h"
#include "helper/units.h"
#include "helper/window.h"
-#include "../inkscape.h"
-#include "../interface.h"
-#include "../macros.h"
-#include "../message-stack.h"
+#include "inkscape.h"
+#include "interface.h"
+#include "macros.h"
+#include "message-stack.h"
#include "preferences.h"
-#include "../selection.h"
-#include "../sp-filter.h"
-#include "../sp-namedview.h"
-#include "../sp-use.h"
-#include "../style.h"
+#include "selection.h"
+#include "sp-filter.h"
+#include "sp-namedview.h"
+#include "sp-use.h"
+#include "style.h"
#include "svg/svg-color.h"
#include "svg/svg.h"
#include "ui/icon-names.h"
#include "ui/widget/color-picker.h"
#include "unclump.h"
-#include "../verbs.h"
+#include "verbs.h"
#include "widgets/icon.h"
#include "xml/repr.h"
#include "sp-root.h"
@@ -879,60 +880,25 @@ static guint32 clonetiler_trace_pick(Geom::Rect box)
/* Item integer bbox in points */
NRRectL ibox;
- ibox.x0 = (int) floor(trace_zoom * box[Geom::X].min() + 0.5);
- ibox.y0 = (int) floor(trace_zoom * box[Geom::Y].min() + 0.5);
- ibox.x1 = (int) floor(trace_zoom * box[Geom::X].max() + 0.5);
- ibox.y1 = (int) floor(trace_zoom * box[Geom::Y].max() + 0.5);
+ ibox.x0 = floor(trace_zoom * box[Geom::X].min());
+ ibox.y0 = floor(trace_zoom * box[Geom::Y].min());
+ ibox.x1 = ceil(trace_zoom * box[Geom::X].max());
+ ibox.y1 = ceil(trace_zoom * box[Geom::Y].max());
/* Find visible area */
int width = ibox.x1 - ibox.x0;
int height = ibox.y1 - ibox.y0;
+ double R = 0, G = 0, B = 0, A = 0;
- /* Set up pixblock */
- guchar *px = g_new(guchar, 4 * width * height);
-
- if (px == NULL) {
- return 0; // buffer is too big or too small, cannot pick, so return 0
- }
-
- memset(px, 0x00, 4 * width * height);
-
+ cairo_surface_t *s = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height);
+ cairo_t *ct = cairo_create(s);
+ cairo_translate(ct, -ibox.x0, -ibox.y0);
/* Render */
- NRPixBlock pb;
- nr_pixblock_setup_extern( &pb, NR_PIXBLOCK_MODE_R8G8B8A8N,
- ibox.x0, ibox.y0, ibox.x1, ibox.y1,
- px, 4 * width, FALSE, FALSE );
- nr_arena_item_invoke_render(NULL, trace_root, &ibox, &pb,
+ nr_arena_item_invoke_render(ct, trace_root, &ibox, NULL,
NR_ARENA_ITEM_RENDER_NO_CACHE );
-
- double R = 0, G = 0, B = 0, A = 0;
- double count = 0;
- double weight = 0;
-
- for (int y = ibox.y0; y < ibox.y1; y++) {
- const unsigned char *s = NR_PIXBLOCK_PX (&pb) + (y - ibox.y0) * pb.rs;
- for (int x = ibox.x0; x < ibox.x1; x++) {
- count += 1;
- weight += s[3] / 255.0;
- R += s[0] / 255.0;
- G += s[1] / 255.0;
- B += s[2] / 255.0;
- A += s[3] / 255.0;
- s += 4;
- }
- }
-
- nr_pixblock_release(&pb);
-
- R = R / weight;
- G = G / weight;
- B = B / weight;
- A = A / count;
-
- R = CLAMP (R, 0.0, 1.0);
- G = CLAMP (G, 0.0, 1.0);
- B = CLAMP (B, 0.0, 1.0);
- A = CLAMP (A, 0.0, 1.0);
+ cairo_destroy(ct);
+ ink_cairo_surface_average_color(s, R, G, B, A);
+ cairo_surface_destroy(s);
return SP_RGBA32_F_COMPOSE (R, G, B, A);
}
diff --git a/src/dialogs/text-edit.cpp b/src/dialogs/text-edit.cpp
index 2e49cae8f..81bd0f5d2 100644
--- a/src/dialogs/text-edit.cpp
+++ b/src/dialogs/text-edit.cpp
@@ -369,8 +369,11 @@ sp_text_edit_dialog (void)
}
/* Font preview */
- GtkWidget *preview = sp_font_preview_new ();
- gtk_box_pack_start (GTK_BOX (vb), preview, TRUE, TRUE, 4);
+ GtkLabel *preview = (GtkLabel*) gtk_label_new(NULL);
+ gtk_label_set_ellipsize(preview, PANGO_ELLIPSIZE_END);
+ gtk_label_set_justify(preview, GTK_JUSTIFY_CENTER);
+ gtk_label_set_line_wrap(preview, FALSE);
+ gtk_box_pack_start (GTK_BOX (vb), (GtkWidget*) preview, TRUE, TRUE, 4);
g_object_set_data (G_OBJECT (dlg), "preview", preview);
}
@@ -697,7 +700,7 @@ sp_text_edit_dialog_read_selection ( GtkWidget *dlg,
g_object_set_data (G_OBJECT (dlg), "blocked", GINT_TO_POINTER (TRUE));
- GtkWidget *notebook = (GtkWidget*)g_object_get_data (G_OBJECT (dlg), "notebook");
+ //GtkWidget *notebook = (GtkWidget*)g_object_get_data (G_OBJECT (dlg), "notebook");
GtkWidget *textw = (GtkWidget*)g_object_get_data (G_OBJECT (dlg), "textw");
GtkWidget *fontsel = (GtkWidget*)g_object_get_data (G_OBJECT (dlg), "fontsel");
GtkWidget *preview = (GtkWidget*)g_object_get_data (G_OBJECT (dlg), "preview");
@@ -708,6 +711,12 @@ sp_text_edit_dialog_read_selection ( GtkWidget *dlg,
SPItem *text = sp_ted_get_selected_text_item ();
+ /* TRANSLATORS: Test string used in text and font dialog (when no
+ * text has been entered) to get a preview of the font. Choose
+ * some representative characters that users of your locale will be
+ * interested in. */
+ gchar *phrase = g_strdup(_("AaBbCcIiPpQq12369$\342\202\254\302\242?.;/()"));
+
Inkscape::XML::Node *repr;
if (text)
{
@@ -732,12 +741,10 @@ sp_text_edit_dialog_read_selection ( GtkWidget *dlg,
gtk_text_buffer_set_text (tb, str, strlen (str));
gtk_text_buffer_set_modified (tb, FALSE);
}
- sp_font_preview_set_phrase (SP_FONT_PREVIEW (preview), str);
- g_free (str);
+ phrase = str;
} else {
gtk_text_buffer_set_text (tb, "", 0);
- sp_font_preview_set_phrase (SP_FONT_PREVIEW (preview), NULL);
}
} // end of if (docontent)
repr = text->getRepr();
@@ -774,7 +781,13 @@ sp_text_edit_dialog_read_selection ( GtkWidget *dlg,
if (font) {
// the font is oversized, so we need to pass the true size separately
sp_font_selector_set_font (SP_FONT_SELECTOR (fontsel), font, query->font_size.computed);
- sp_font_preview_set_font (SP_FONT_PREVIEW (preview), font, SP_FONT_SELECTOR(fontsel));
+ char *desc = pango_font_description_to_string(font->descr);
+ double size = sp_font_selector_get_size(SP_FONT_SELECTOR(fontsel));
+ gchar *markup = g_strdup_printf("<span font=\"%s\" size=\"%d\">%s</span>",
+ desc, (int) size * PANGO_SCALE, phrase);
+ gtk_label_set_markup(GTK_LABEL(preview), markup);
+ g_free(desc);
+ g_free(markup);
font->Unref();
font=NULL;
}
@@ -812,7 +825,7 @@ sp_text_edit_dialog_read_selection ( GtkWidget *dlg,
sp_style_unref(query);
}
-
+ g_free(phrase);
g_object_set_data (G_OBJECT (dlg), "blocked", NULL);
}
@@ -820,7 +833,7 @@ sp_text_edit_dialog_read_selection ( GtkWidget *dlg,
static void
sp_text_edit_dialog_text_changed (GtkTextBuffer *tb, GtkWidget *dlg)
{
- GtkWidget *textw, *preview, *apply, *def;
+ GtkWidget *textw, *preview, *apply, *def, *fontsel;
GtkTextIter start, end;
gchar *str;
@@ -833,14 +846,23 @@ sp_text_edit_dialog_text_changed (GtkTextBuffer *tb, GtkWidget *dlg)
preview = (GtkWidget*)g_object_get_data (G_OBJECT (dlg), "preview");
apply = (GtkWidget*)g_object_get_data (G_OBJECT (dlg), "apply");
def = (GtkWidget*)g_object_get_data (G_OBJECT (dlg), "default");
+ fontsel = (GtkWidget*)g_object_get_data (G_OBJECT (dlg), "fontsel");
gtk_text_buffer_get_bounds (tb, &start, &end);
str = gtk_text_buffer_get_text (tb, &start, &end, TRUE);
-
- if (str && *str) {
- sp_font_preview_set_phrase (SP_FONT_PREVIEW (preview), str);
+ font_instance *font = sp_font_selector_get_font(SP_FONT_SELECTOR(fontsel));
+
+ if (font) {
+ gchar *phrase = str && *str ? str : _("AaBbCcIiPpQq12369$\342\202\254\302\242?.;/()");
+ char *desc = pango_font_description_to_string(font->descr);
+ double size = sp_font_selector_get_size(SP_FONT_SELECTOR(fontsel));
+ gchar *markup = g_strdup_printf("<span font=\"%s\" size=\"%d\">%s</span>",
+ desc, (int) size * PANGO_SCALE, phrase);
+ gtk_label_set_markup(GTK_LABEL(preview), markup);
+ g_free(desc);
+ g_free(markup);
} else {
- sp_font_preview_set_phrase (SP_FONT_PREVIEW (preview), NULL);
+ gtk_label_set_markup(GTK_LABEL(preview), NULL);
}
g_free (str);
@@ -865,7 +887,9 @@ sp_text_edit_dialog_font_changed ( SPFontSelector *fsel,
font_instance *font,
GtkWidget *dlg )
{
- GtkWidget *preview, *apply, *def;
+ GtkWidget *preview, *apply, *def, *fontsel;
+ GtkTextIter start, end;
+ gchar *str;
if (g_object_get_data (G_OBJECT (dlg), "blocked"))
return;
@@ -875,11 +899,27 @@ sp_text_edit_dialog_font_changed ( SPFontSelector *fsel,
preview = (GtkWidget*)g_object_get_data (G_OBJECT (dlg), "preview");
apply = (GtkWidget*)g_object_get_data (G_OBJECT (dlg), "apply");
def = (GtkWidget*)g_object_get_data (G_OBJECT (dlg), "default");
+ fontsel = (GtkWidget*)g_object_get_data (G_OBJECT (dlg), "fontsel");
+
+ GtkTextBuffer *tb = (GtkTextBuffer*)g_object_get_data (G_OBJECT (dlg), "text");
+ gtk_text_buffer_get_bounds (tb, &start, &end);
+ str = gtk_text_buffer_get_text (tb, &start, &end, TRUE);
- sp_font_preview_set_font (SP_FONT_PREVIEW (preview), font, SP_FONT_SELECTOR(fsel));
+ if (font) {
+ gchar *phrase = str && *str ? str : _("AaBbCcIiPpQq12369$\342\202\254\302\242?.;/()");
+ char *desc = pango_font_description_to_string(font->descr);
+ double size = sp_font_selector_get_size(SP_FONT_SELECTOR(fontsel));
+ gchar *markup = g_strdup_printf("<span font=\"%s\" size=\"%d\">%s</span>",
+ desc, (int) size * PANGO_SCALE, phrase);
+ gtk_label_set_markup(GTK_LABEL(preview), markup);
+ g_free(desc);
+ g_free(markup);
+ } else {
+ gtk_label_set_markup(GTK_LABEL(preview), NULL);
+ }
+ g_free(str);
- if (text)
- {
+ if (text) {
gtk_widget_set_sensitive (apply, TRUE);
}
gtk_widget_set_sensitive (def, TRUE);