JNIEXPORT jstring JNICALL Java_org_gnome_pango_PangoColor_pango_1color_1to_1string ( JNIEnv* env, jclass cls, jlong _self ) { gchar* result; jstring _result; PangoColor* self; // convert parameter self self = (PangoColor*) _self; // call function result = pango_color_to_string(self); // cleanup parameter self // translate return value to JNI type _result = (jstring) bindings_java_newString(env, result); // cleanup return value if (result != NULL) { g_free(result); } // and finally return _result; }
static gchar *color_to_string (const GdkColor *color) { PangoColor pango_color; pango_color.red = color->red; pango_color.green = color->green; pango_color.blue = color->blue; return pango_color_to_string (&pango_color); }
static gchar *rgba_to_string (const GdkRGBA *rgba) { PangoColor pango_color; pango_color.red = 0xffff * rgba->red; pango_color.green = 0xffff * rgba->green; pango_color.blue = 0xffff * rgba->blue; return pango_color_to_string (&pango_color); }
void go_load_pango_attributes_into_buffer (PangoAttrList *markup, GtkTextBuffer *buffer, gchar const *str) { PangoAttrIterator * iter; PangoAttrList *copied_markup; PangoAttrList *our_markup; if (markup == NULL) return; /* For some styles we create named tags. The names are taken from the Pango enums */ copied_markup = pango_attr_list_copy (markup); our_markup = pango_attr_list_filter (copied_markup, go_load_pango_attributes_into_buffer_named_filter, NULL); pango_attr_list_unref (copied_markup); if (our_markup != NULL) { iter = pango_attr_list_get_iterator (our_markup); do { GSList *attr = pango_attr_iterator_get_attrs (iter); if (attr != NULL) { GSList *ptr; gint start, end; GtkTextIter start_iter, end_iter; char const *name; pango_attr_iterator_range (iter, &start, &end); start = go_load_pango_byte_to_char (str, start); end = go_load_pango_byte_to_char (str, end); gtk_text_buffer_get_iter_at_offset (buffer, &start_iter, start); gtk_text_buffer_get_iter_at_offset (buffer, &end_iter, end); for (ptr = attr; ptr != NULL; ptr = ptr->next) { PangoAttribute *attribute = ptr->data; GtkTextTag *tag; int val; switch (attribute->klass->type) { case PANGO_ATTR_STYLE: name = (((PangoAttrInt *)attribute)->value == PANGO_STYLE_NORMAL) ? "PANGO_STYLE_NORMAL" : "PANGO_STYLE_ITALIC"; tag = gtk_text_tag_table_lookup (gtk_text_buffer_get_tag_table (buffer), name); gtk_text_buffer_apply_tag (buffer, tag, &start_iter, &end_iter); break; case PANGO_ATTR_STRIKETHROUGH: name = (((PangoAttrInt *)attribute)->value) ? "PANGO_STRIKETHROUGH_TRUE" : "PANGO_STRIKETHROUGH_FALSE"; tag = gtk_text_tag_table_lookup (gtk_text_buffer_get_tag_table (buffer), name); gtk_text_buffer_apply_tag (buffer, tag, &start_iter, &end_iter); break; case PANGO_ATTR_UNDERLINE: val = ((PangoAttrInt *)attribute)->value; if (val == PANGO_UNDERLINE_NONE) gtk_text_buffer_apply_tag_by_name (buffer,"PANGO_UNDERLINE_NONE", &start_iter, &end_iter); else if (val == PANGO_UNDERLINE_SINGLE) gtk_text_buffer_apply_tag_by_name (buffer,"PANGO_UNDERLINE_SINGLE", &start_iter, &end_iter); else if (val == PANGO_UNDERLINE_DOUBLE) gtk_text_buffer_apply_tag_by_name (buffer,"PANGO_UNDERLINE_DOUBLE", &start_iter, &end_iter); else if (val == PANGO_UNDERLINE_LOW) gtk_text_buffer_apply_tag_by_name (buffer,"PANGO_UNDERLINE_LOW", &start_iter, &end_iter); else if (val == PANGO_UNDERLINE_ERROR) gtk_text_buffer_apply_tag_by_name (buffer,"PANGO_UNDERLINE_ERROR", &start_iter, &end_iter); break; case PANGO_ATTR_WEIGHT: val = ((PangoAttrInt *)attribute)->value; if (val < (PANGO_WEIGHT_THIN + PANGO_WEIGHT_ULTRALIGHT)/2) gtk_text_buffer_apply_tag_by_name (buffer,"PANGO_WEIGHT_THIN", &start_iter, &end_iter); else if (val < (PANGO_WEIGHT_ULTRALIGHT + PANGO_WEIGHT_LIGHT)/2) gtk_text_buffer_apply_tag_by_name (buffer,"PANGO_WEIGHT_ULTRALIGHT", &start_iter, &end_iter); else if (val < (PANGO_WEIGHT_LIGHT + PANGO_WEIGHT_BOOK)/2) gtk_text_buffer_apply_tag_by_name (buffer,"PANGO_WEIGHT_LIGHT", &start_iter, &end_iter); else if (val < (PANGO_WEIGHT_BOOK + PANGO_WEIGHT_NORMAL)/2) gtk_text_buffer_apply_tag_by_name (buffer,"PANGO_WEIGHT_BOOK", &start_iter, &end_iter); else if (val < (PANGO_WEIGHT_NORMAL + PANGO_WEIGHT_MEDIUM)/2) gtk_text_buffer_apply_tag_by_name (buffer,"PANGO_WEIGHT_NORMAL", &start_iter, &end_iter); else if (val < (PANGO_WEIGHT_MEDIUM + PANGO_WEIGHT_SEMIBOLD)/2) gtk_text_buffer_apply_tag_by_name (buffer,"PANGO_WEIGHT_MEDIUM", &start_iter, &end_iter); else if (val < (PANGO_WEIGHT_SEMIBOLD + PANGO_WEIGHT_BOLD)/2) gtk_text_buffer_apply_tag_by_name (buffer,"PANGO_WEIGHT_SEMIBOLD", &start_iter, &end_iter); else if (val < (PANGO_WEIGHT_BOLD + PANGO_WEIGHT_ULTRABOLD)/2) gtk_text_buffer_apply_tag_by_name (buffer,"PANGO_WEIGHT_BOLD", &start_iter, &end_iter); else if (val < (PANGO_WEIGHT_ULTRABOLD + PANGO_WEIGHT_HEAVY)/2) gtk_text_buffer_apply_tag_by_name (buffer,"PANGO_WEIGHT_ULTRABOLD", &start_iter, &end_iter); else if (val < (PANGO_WEIGHT_HEAVY + PANGO_WEIGHT_ULTRAHEAVY)/2) gtk_text_buffer_apply_tag_by_name (buffer,"PANGO_WEIGHT_HEAVY", &start_iter, &end_iter); else gtk_text_buffer_apply_tag_by_name (buffer,"PANGO_WEIGHT_ULTRAHEAVY", &start_iter, &end_iter); break; default: break; } } g_slist_free_full (attr, (GDestroyNotify)pango_attribute_destroy); } } while (pango_attr_iterator_next (iter)); pango_attr_iterator_destroy (iter); pango_attr_list_unref (our_markup); } /* For other styles (that are not at true/false type styles) we use unnamed styles */ copied_markup = pango_attr_list_copy (markup); our_markup = pango_attr_list_filter (copied_markup, go_load_pango_attributes_into_buffer_filter, NULL); pango_attr_list_unref (copied_markup); if (our_markup != NULL) { iter = pango_attr_list_get_iterator (our_markup); do { GSList *attr = pango_attr_iterator_get_attrs (iter); if (attr != NULL) { char *string; GSList *ptr; gint start, end; GtkTextIter start_iter, end_iter; GtkTextTag *tag = gtk_text_buffer_create_tag (buffer, NULL, NULL); for (ptr = attr; ptr != NULL; ptr = ptr->next) { PangoAttribute *attribute = ptr->data; switch (attribute->klass->type) { case PANGO_ATTR_FOREGROUND: string = pango_color_to_string (&((PangoAttrColor *)attribute)->color); g_object_set (G_OBJECT (tag), "foreground", string, "foreground-set", TRUE, NULL); g_free (string); break; case PANGO_ATTR_RISE: g_object_set (G_OBJECT (tag), "rise", ((PangoAttrInt *)attribute)->value, "rise-set", TRUE, NULL); break; default: break; } } pango_attr_iterator_range (iter, &start, &end); start = go_load_pango_byte_to_char (str, start); end = go_load_pango_byte_to_char (str, end); gtk_text_buffer_get_iter_at_offset (buffer, &start_iter, start); gtk_text_buffer_get_iter_at_offset (buffer, &end_iter, end); gtk_text_buffer_apply_tag (buffer, tag, &start_iter, &end_iter); g_slist_free_full (attr, (GDestroyNotify)pango_attribute_destroy); } } while (pango_attr_iterator_next (iter)); pango_attr_iterator_destroy (iter); pango_attr_list_unref (our_markup); } }
static void print_attr (PangoAttribute *attr, GString *string) { g_string_append_printf (string, "[%d %d] ", attr->start_index, attr->end_index); switch (attr->klass->type) { case PANGO_ATTR_LANGUAGE: g_string_append_printf (string,"language %s\n", pango_language_to_string (((PangoAttrLanguage *)attr)->value)); break; case PANGO_ATTR_FAMILY: g_string_append_printf (string,"family %s\n", ((PangoAttrString *)attr)->value); break; case PANGO_ATTR_STYLE: g_string_append_printf (string,"style %d\n", ((PangoAttrInt *)attr)->value); break; case PANGO_ATTR_WEIGHT: g_string_append_printf (string,"weight %d\n", ((PangoAttrInt *)attr)->value); break; case PANGO_ATTR_VARIANT: g_string_append_printf (string,"variant %d\n", ((PangoAttrInt *)attr)->value); break; case PANGO_ATTR_STRETCH: g_string_append_printf (string,"stretch %d\n", ((PangoAttrInt *)attr)->value); break; case PANGO_ATTR_SIZE: g_string_append_printf (string,"size %d\n", ((PangoAttrSize *)attr)->size); break; case PANGO_ATTR_FONT_DESC: g_string_append_printf (string,"font %s\n", pango_font_description_to_string (((PangoAttrFontDesc *)attr)->desc)); break; case PANGO_ATTR_FOREGROUND: g_string_append_printf (string,"foreground %s\n", pango_color_to_string (&((PangoAttrColor *)attr)->color)); break; case PANGO_ATTR_BACKGROUND: g_string_append_printf (string,"background %s\n", pango_color_to_string (&((PangoAttrColor *)attr)->color)); break; case PANGO_ATTR_UNDERLINE: g_string_append_printf (string,"underline %d\n", ((PangoAttrInt *)attr)->value); break; case PANGO_ATTR_STRIKETHROUGH: g_string_append_printf (string,"strikethrough %d\n", ((PangoAttrInt *)attr)->value); break; case PANGO_ATTR_RISE: g_string_append_printf (string,"rise %d\n", ((PangoAttrInt *)attr)->value); break; case PANGO_ATTR_SHAPE: g_string_append_printf (string,"shape\n"); break; case PANGO_ATTR_SCALE: g_string_append_printf (string,"scale %f\n", ((PangoAttrFloat *)attr)->value); break; case PANGO_ATTR_FALLBACK: g_string_append_printf (string,"fallback %d\n", ((PangoAttrInt *)attr)->value); break; case PANGO_ATTR_LETTER_SPACING: g_string_append_printf (string,"letter-spacing %d\n", ((PangoAttrInt *)attr)->value); break; case PANGO_ATTR_UNDERLINE_COLOR: g_string_append_printf (string,"underline-color %s\n", pango_color_to_string (&((PangoAttrColor *)attr)->color)); break; case PANGO_ATTR_STRIKETHROUGH_COLOR: g_string_append_printf (string,"strikethrough-color %s\n", pango_color_to_string (&((PangoAttrColor *)attr)->color)); break; case PANGO_ATTR_ABSOLUTE_SIZE: g_string_append_printf (string,"absolute-size %d\n", ((PangoAttrSize *)attr)->size); break; case PANGO_ATTR_GRAVITY: g_string_append_printf (string,"gravity %d\n", ((PangoAttrInt *)attr)->value); break; case PANGO_ATTR_GRAVITY_HINT: g_string_append_printf (string,"gravity-hint %d\n", ((PangoAttrInt *)attr)->value); break; default: g_assert_not_reached (); break; } }