Panda3D
 All Classes Functions Variables Enumerations
config_text.cxx
00001 // Filename: config_text.cxx
00002 // Created by:  drose (02Mar00)
00003 //
00004 ////////////////////////////////////////////////////////////////////
00005 //
00006 // PANDA 3D SOFTWARE
00007 // Copyright (c) Carnegie Mellon University.  All rights reserved.
00008 //
00009 // All use of this software is subject to the terms of the revised BSD
00010 // license.  You should have received a copy of this license along
00011 // with this source code in a file named "LICENSE."
00012 //
00013 ////////////////////////////////////////////////////////////////////
00014 
00015 #include "config_text.h"
00016 #include "staticTextFont.h"
00017 #include "textFont.h"
00018 #include "textNode.h"
00019 #include "textProperties.h"
00020 #include "dynamicTextFont.h"
00021 #include "dynamicTextPage.h"
00022 #include "geomTextGlyph.h"
00023 #include "geomTextGlyph.h"
00024 #include "unicodeLatinMap.h"
00025 #include "pandaSystem.h"
00026 
00027 #include "dconfig.h"
00028 #include "config_express.h"
00029 
00030 Configure(config_text);
00031 NotifyCategoryDef(text, "");
00032 
00033 ConfigureFn(config_text) {
00034   init_libtext();
00035 }
00036 
00037 ConfigVariableBool text_flatten
00038 ("text-flatten", true,
00039  PRC_DESC("Set this true to flatten text when it is generated, or false to "
00040           "keep it as a deep hierarchy.  Usually it's a performance "
00041           "advantage to keep this true, but this also depends on the setting "
00042           "of text-dynamic-merge.  See TextNode::set_flatten_flags()."));
00043 
00044 ConfigVariableBool text_dynamic_merge
00045 ("text-dynamic-merge", true,
00046  PRC_DESC("Set this true to merge generated glyphs into the GeomVertexData "
00047           "as the text is assembled, or false to wait for the flatten "
00048           "operation.  Usually it's a performance "
00049           "advantage to keep this true.  See TextNode::set_flatten_flags()."));
00050 
00051 ConfigVariableInt text_anisotropic_degree
00052 ("text-anisotropic-degree", 1,
00053  PRC_DESC("This is the default anisotropic-degree that is set on dynamic "
00054           "font textures.  Setting this to a value greater than 1 can help "
00055           "smooth out the antialiasing for small letters."));
00056 
00057 ConfigVariableInt text_texture_margin
00058 ("text-texture-margin", 2,
00059  PRC_DESC("This is the number of texels of empty space reserved around each "
00060           "glyph in the texture.  Setting this value larger will decrease "
00061           "the tendency for adjacent glyphs to bleed into each other at "
00062           "small sizes, but it will increase amount of wasted texture "
00063           "memory."));
00064 
00065 ConfigVariableDouble text_poly_margin
00066 ("text-poly-margin", 0.0f,
00067  PRC_DESC("This is the amount by which to make each glyph polygon larger "
00068           "than strictly necessary, in screen units that are added to each "
00069           "margin.  Increasing this value will decrease the tendency for "
00070           "letters to get chopped off at the edges, but it will also "
00071           "increase the tendency for adjacent glyphs to bleed into each "
00072           "other (unless you also increase text-texture-margin)."));
00073 
00074 ConfigVariableInt text_page_size
00075 ("text-page-size", "256 256",
00076  PRC_DESC("This is the default size for new textures created for dynamic "
00077           "fonts."));
00078 
00079 ConfigVariableBool text_small_caps
00080 ("text-small-caps", false,
00081  PRC_DESC("This controls the default setting for "
00082           "TextNode::set_small_caps()."));
00083 
00084 ConfigVariableDouble text_small_caps_scale
00085 ("text-small-caps-scale", 0.8f,
00086  PRC_DESC("This controls the default setting for "
00087           "TextNode::set_small_caps_scale()."));
00088 
00089 ConfigVariableFilename text_default_font
00090 ("text-default-font", "",
00091  PRC_DESC("This names a filename that will be loaded at startup time as "
00092           "the default font for any TextNode that does not specify a font "
00093           "otherwise.  The default is to use a special font that is "
00094           "compiled into Panda, if available."));
00095 
00096 ConfigVariableDouble text_tab_width
00097 ("text-tab-width", 5.0f,
00098  PRC_DESC("This controls the default setting for "
00099           "TextNode::set_tab_width()."));
00100 
00101 ConfigVariableInt text_push_properties_key
00102 ("text-push-properties-key", 1,
00103  PRC_DESC("This is the decimal character number that, embedded in "
00104           "a string, is used to bracket the name of a TextProperties "
00105           "structure added to the TextPropertiesManager object, to "
00106           "control the appearance of subsequent text."));
00107 
00108 ConfigVariableInt text_pop_properties_key
00109 ("text-pop-properties-key", 2,
00110  PRC_DESC("This is the decimal character number that undoes the "
00111           "effect of a previous appearance of text_push_properties_key."));
00112 
00113 ConfigVariableInt text_soft_hyphen_key
00114 ("text-soft-hyphen-key", 3,
00115  PRC_DESC("This is the decimal character number that, embedded in a "
00116           "string, is identified as the soft-hyphen character."));
00117 
00118 ConfigVariableInt text_soft_break_key
00119 ("text-soft-break-key", 4,
00120  PRC_DESC("This is similar to text-soft-hyphen-key, except that "
00121           "when it is used as a break point, no character is "
00122           "introduced in its place."));
00123 
00124 ConfigVariableInt text_embed_graphic_key
00125 ("text-embed-graphic-key", 5,
00126  PRC_DESC("This is the decimal character number that, embedded in "
00127           "a string, is used to bracket the name of a model "
00128           "added to the TextPropertiesManager object, to "
00129           "embed an arbitrary graphic image within a paragraph."));
00130 
00131 wstring
00132 get_text_soft_hyphen_output() {
00133   static wstring *text_soft_hyphen_output = NULL;
00134   static ConfigVariableString 
00135     cv("text-soft-hyphen-output", "-",
00136        PRC_DESC("This is the string that is output, encoded in the default "
00137                 "encoding, to represent the hyphen character that is "
00138                 "introduced when the line is broken at a soft-hyphen key."));
00139 
00140   if (text_soft_hyphen_output == NULL) {
00141     TextEncoder encoder;
00142     text_soft_hyphen_output = new wstring(encoder.decode_text(cv));
00143   }
00144 
00145   return *text_soft_hyphen_output;
00146 }
00147 
00148 ConfigVariableDouble text_hyphen_ratio
00149 ("text-hyphen-ratio", 0.7,
00150  PRC_DESC("If the rightmost whitespace character falls before this "
00151           "fraction of the line, hyphenate a word to the right of that "
00152           "if possible."));
00153 
00154 wstring
00155 get_text_never_break_before() {
00156   static wstring *text_never_break_before = NULL;
00157   static ConfigVariableString 
00158     cv("text-never-break-before", ",.-:?!;",
00159        PRC_DESC("This string represents a list of individual characters "
00160                 "that should never appear at the beginning of a line "
00161                 "following a forced break.  Typically these will be "
00162                 "punctuation characters."));
00163 
00164   if (text_never_break_before == NULL) {
00165     TextEncoder encoder;
00166     text_never_break_before = new wstring(encoder.decode_text(cv));
00167   }
00168 
00169   return *text_never_break_before;
00170 }
00171 
00172 ConfigVariableInt text_max_never_break
00173 ("text-max-never-break", 3,
00174  PRC_DESC("If we have more than this number of text-never-break-before "
00175           "characters in a row, do not treat any of them as special and "
00176           "instead break the line wherever we can."));
00177 
00178 ConfigVariableDouble text_default_underscore_height
00179 ("text-default-underscore-height", -0.2,
00180  PRC_DESC("Specifies the default height of the underscore line, relative "
00181           "to the text baseline, when underscoring is enabled."));
00182 
00183 ConfigVariableEnum<Texture::FilterType> text_minfilter
00184 ("text-minfilter", Texture::FT_linear_mipmap_linear,
00185  PRC_DESC("The default texture minfilter type for dynamic text fonts"));
00186 ConfigVariableEnum<Texture::FilterType> text_magfilter
00187 ("text-magfilter", Texture::FT_linear,
00188  PRC_DESC("The default texture magfilter type for dynamic text fonts"));
00189 ConfigVariableEnum<Texture::WrapMode> text_wrap_mode
00190 ("text-wrap-mode", Texture::WM_border_color,
00191  PRC_DESC("The default wrap mode for dynamic text fonts"));
00192 ConfigVariableEnum<Texture::QualityLevel> text_quality_level
00193 ("text-quality-level", Texture::QL_best,
00194  PRC_DESC("The default quality level for dynamic text fonts; see Texture::set_quality_level()."));
00195 
00196 ConfigVariableEnum<TextFont::RenderMode> text_render_mode
00197 ("text-render-mode", TextFont::RM_texture,
00198  PRC_DESC("The default render mode for dynamic text fonts"));
00199 
00200 
00201 
00202 ////////////////////////////////////////////////////////////////////
00203 //     Function: init_libtext
00204 //  Description: Initializes the library.  This must be called at
00205 //               least once before any of the functions or classes in
00206 //               this library can be used.  Normally it will be
00207 //               called by the static initializers and need not be
00208 //               called explicitly, but special cases exist.
00209 ////////////////////////////////////////////////////////////////////
00210 void
00211 init_libtext() {
00212   static bool initialized = false;
00213   if (initialized) {
00214     return;
00215   }
00216   initialized = true;
00217 
00218   StaticTextFont::init_type();
00219   TextFont::init_type();
00220   TextNode::init_type();
00221   TextProperties::init_type();
00222 
00223 #ifdef HAVE_FREETYPE
00224   DynamicTextFont::init_type();
00225   DynamicTextPage::init_type();
00226   GeomTextGlyph::init_type();
00227   GeomTextGlyph::init_type();
00228 
00229   GeomTextGlyph::register_with_read_factory();
00230   GeomTextGlyph::register_with_read_factory();
00231 
00232   PandaSystem *ps = PandaSystem::get_global_ptr();
00233   ps->add_system("Freetype");
00234 #endif
00235 }
 All Classes Functions Variables Enumerations