diff options
| author | Krzysztof Kosi??ski <tweenk.pl@gmail.com> | 2011-06-20 19:33:57 +0000 |
|---|---|---|
| committer | Krzysztof KosiĆski <tweenk.pl@gmail.com> | 2011-06-20 19:33:57 +0000 |
| commit | a39e3c37a508f9a389fc55270ae0336ad2f76f0e (patch) | |
| tree | 952db81c3238005e975f21845734444bba28ff40 /src/dialogs | |
| parent | Measure Tool: support measuring of text elements (without having to manually ... (diff) | |
| parent | Fix outline view (diff) | |
| download | inkscape-a39e3c37a508f9a389fc55270ae0336ad2f76f0e.tar.gz inkscape-a39e3c37a508f9a389fc55270ae0336ad2f76f0e.zip | |
Merge Cairo rendering branch
(bzr r10326)
Diffstat (limited to 'src/dialogs')
| -rw-r--r-- | src/dialogs/clonetiler.cpp | 88 | ||||
| -rw-r--r-- | src/dialogs/text-edit.cpp | 74 |
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); |
