1. === modified file 'src/libnrtype/font-lister.cpp'
  2. --- src/libnrtype/font-lister.cpp 2015-05-09 15:39:31 +0000
  3. +++ src/libnrtype/font-lister.cpp 2015-11-07 14:28:20 +0000
  4. @@ -4,7 +4,7 @@
  5. #include <gtkmm/liststore.h>
  6. #include <gtkmm/treemodel.h>
  7. -
  8. +#include "libnrtype/FontFactory.h"
  9. #include <libnrtype/font-instance.h>
  10. #include <libnrtype/TextWrapper.h>
  11. #include <libnrtype/one-glyph.h>
  12. @@ -59,8 +59,8 @@
  13. // Get sorted font families from Pango
  14. std::vector<PangoFontFamily *> familyVector;
  15. +
  16. font_factory::Default()->GetUIFamilies(familyVector);
  17. -
  18. // Traverse through the family names and set up the list store
  19. for (size_t i = 0; i < familyVector.size(); ++i) {
  20. const char* displayName = sp_font_family_get_name(familyVector[i]);
  21. @@ -122,10 +122,21 @@
  22. ++iter;
  23. }
  24. }
  25. -
  26. -FontLister *FontLister::get_instance()
  27. +//Añadimos un parametro a la función para que refresque/actualize la variable estatica (+- global) de la instancia de font lister
  28. +//Si no durante el transcurso de Inkscape, FontLister seria siempre igual
  29. +FontLister *FontLister::get_instance(bool refresh)
  30. {
  31. static Inkscape::FontLister *instance = new Inkscape::FontLister();
  32. + if(refresh){
  33. + //la sifuiente linea provoca que cuando llamemos despues a el constructor de
  34. + //font lister, este llame a font_factory::Default() generando un nuevo fontfactory
  35. + //con las nuevas fuentes. Estudiatelo para entender como funciona, tienes que seguir el hilo de los procesos
  36. + font_factory::lUsine = NULL;
  37. + //Creamos un nuevo valor de retorno para la variable instance
  38. + //que se queda guardado globalmente, asi que solo hay que llamar a get_instance(true) cuando
  39. + //queramos refrescar la lista de fuentes
  40. + instance = new Inkscape::FontLister();
  41. + }
  42. return instance;
  43. }
  44. === modified file 'src/libnrtype/font-lister.h'
  45. --- src/libnrtype/font-lister.h 2014-10-17 20:03:14 +0000
  46. +++ src/libnrtype/font-lister.h 2015-11-07 14:27:57 +0000
  47. @@ -150,7 +150,12 @@
  48. void update_font_list(SPDocument *document);
  49. public:
  50. - static Inkscape::FontLister *get_instance();
  51. + //a la cabecera de la función le hemos puesto un valor por defecto que en este caso
  52. + //hace que se pueda llamar a la función oviandolo, tal y como hacia inksape antes, es decir
  53. + //puedes llamarlo como originalmente get_instance() y actual normal, dandole el valor a refresh = false
  54. + //o puedes llamarlo get_instance(true)
  55. + //esto nos permite modificar la función y no tener que modificar todas las llamadas a esta dentro de inkscape
  56. + static Inkscape::FontLister *get_instance(bool refresh = false);
  57. /**
  58. * Takes a hand written font spec and returns a Pango generated one in
  59. === modified file 'src/widgets/text-toolbar.cpp'
  60. --- src/widgets/text-toolbar.cpp 2015-04-29 20:51:23 +0000
  61. +++ src/widgets/text-toolbar.cpp 2015-11-07 17:54:37 +0000
  62. @@ -113,6 +113,25 @@
  63. }
  64. #endif
  65. +//Función de callback
  66. +//Refresca la lista de fuentes
  67. +static void sp_refresh_combobox( Ink_ComboBoxEntry_Action *act )
  68. +{
  69. + //Conseguimos el widget del combo de fuentes
  70. + GtkComboBox *fontCombo = act->combobox;
  71. + //Creamos una instancia de fonlister con overwrite a true, lo explico en otro lado
  72. + Inkscape::FontLister* fontlister = Inkscape::FontLister::get_instance(true);
  73. + //Generamos el nuevo tree model con las todas, incluidas las nuevas tipografias
  74. + fontlister->update_font_list( SP_ACTIVE_DESKTOP->getDocument());
  75. + Glib::RefPtr<Gtk::ListStore> store = fontlister->get_font_list();
  76. + GtkListStore* model = store->gobj();
  77. + //actualizamos el model de la clase contenedora
  78. + act->model = GTK_TREE_MODEL(model);
  79. + //actualizamos el combo con el nuevo modelo
  80. + gtk_combo_box_set_model(fontCombo, GTK_TREE_MODEL(model));
  81. + ink_comboboxentry_action_set_active_text( act, fontlister->get_font_family().c_str(), fontlister->get_font_family_row() );
  82. + ink_comboboxentry_action_set_active_text( act, fontlister->get_font_style().c_str() );
  83. +}
  84. // Font family
  85. static void sp_text_fontfamily_value_changed( Ink_ComboBoxEntry_Action *act, GObject *tbl )
  86. @@ -122,7 +141,6 @@
  87. std::cout << "MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM" << std::endl;
  88. std::cout << "sp_text_fontfamily_value_changed: " << std::endl;
  89. #endif
  90. -
  91. // quit if run by the _changed callbacks
  92. if (g_object_get_data(G_OBJECT(tbl), "freeze")) {
  93. #ifdef DEBUG_TEXT
  94. @@ -855,6 +873,10 @@
  95. Ink_ComboBoxEntry_Action* fontStyleAction =
  96. INK_COMBOBOXENTRY_ACTION( g_object_get_data( tbl, "TextFontStyleAction" ) );
  97. + //esto esta ejecutado cada vez que la seleccion del texto cambia, no me parece el mejor sitio para ejeccutarlo
  98. + //seguramente lo mejor seria crear un boton de refresco de fuentes tanto en esta barra como en el Font Dialog.
  99. + //y llamarlo desde el callback
  100. + sp_refresh_combobox( fontFamilyAction );
  101. Inkscape::FontLister* fontlister = Inkscape::FontLister::get_instance();
  102. if (!subselection) {
  103. fontlister->update_font_list( SP_ACTIVE_DESKTOP->getDocument());
 
 

148

 

1163

Pasted Text #1005

-

PasteBin

Lines
113
Words
586
Tamaño
5,1 KB
Creado
Tipo
text/plain
Public Domain (PD)
Please log in to leave a comment!