00001 #include "gui_fontstring.hpp"
00002 #include "gui_layeredregion.hpp"
00003 #include "gui_out.hpp"
00004
00005 #include <luapp_function.hpp>
00006 #include <utils_string.hpp>
00007
00008 namespace gui
00009 {
00010 void font_string::register_glue(utils::wptr<lua::state> pLua)
00011 {
00012 pLua->reg<lua_font_string>();
00013 }
00014
00015 lua_font_string::lua_font_string(lua_State* pLua) : lua_layered_region(pLua)
00016 {
00017 pFontStringParent_ = dynamic_cast<font_string*>(pParent_);
00018 if (pParent_ && !pFontStringParent_)
00019 throw exception("lua_font_string", "Dynamic cast failed !");
00020 }
00021
00022 int lua_font_string::_get_font(lua_State* pLua)
00023 {
00024 if (!check_parent_())
00025 return 0;
00026
00027 lua::function mFunc("FontString:get_font", pLua, 1);
00028
00029 mFunc.push(pFontStringParent_->get_font_name());
00030
00031 return mFunc.on_return();
00032 }
00033
00034 int lua_font_string::_get_justify_h(lua_State* pLua)
00035 {
00036 if (!check_parent_())
00037 return 0;
00038
00039 lua::function mFunc("FontString:get_justify_h", pLua, 1);
00040
00041 text::alignment mAlignment = pFontStringParent_->get_justify_h();
00042 std::string sAligment;
00043
00044 switch (mAlignment)
00045 {
00046 case text::ALIGN_LEFT : sAligment = "LEFT"; break;
00047 case text::ALIGN_CENTER : sAligment = "CENTER"; break;
00048 case text::ALIGN_RIGHT : sAligment = "RIGHT"; break;
00049 }
00050
00051 mFunc.push(sAligment);
00052
00053 return mFunc.on_return();
00054 }
00055
00056 int lua_font_string::_get_justify_v(lua_State* pLua)
00057 {
00058 if (!check_parent_())
00059 return 0;
00060
00061 lua::function mFunc("FontString:get_justify_v", pLua, 1);
00062
00063 text::vertical_alignment mAlignment = pFontStringParent_->get_justify_v();
00064 std::string sAligment;
00065
00066 switch (mAlignment)
00067 {
00068 case text::ALIGN_TOP : sAligment = "TOP"; break;
00069 case text::ALIGN_MIDDLE : sAligment = "MIDDLE"; break;
00070 case text::ALIGN_BOTTOM : sAligment = "BOTTOM"; break;
00071 }
00072
00073 mFunc.push(sAligment);
00074
00075 return mFunc.on_return();
00076 }
00077
00078 int lua_font_string::_get_shadow_color(lua_State* pLua)
00079 {
00080 if (!check_parent_())
00081 return 0;
00082
00083 lua::function mFunc("FontString:get_shadow_color", pLua, 4);
00084
00085 const color& mShadowColor = pFontStringParent_->get_shadow_color();
00086
00087 mFunc.push(mShadowColor.r);
00088 mFunc.push(mShadowColor.g);
00089 mFunc.push(mShadowColor.b);
00090 mFunc.push(mShadowColor.a);
00091
00092 return mFunc.on_return();
00093 }
00094
00095 int lua_font_string::_get_shadow_offset(lua_State* pLua)
00096 {
00097 if (!check_parent_())
00098 return 0;
00099
00100 lua::function mFunc("FontString:get_shadow_offset", pLua, 2);
00101
00102 mFunc.push(pFontStringParent_->get_shadow_x_offset());
00103 mFunc.push(pFontStringParent_->get_shadow_y_offset());
00104
00105 return mFunc.on_return();
00106 }
00107
00108 int lua_font_string::_get_spacing(lua_State* pLua)
00109 {
00110 if (!check_parent_())
00111 return 0;
00112
00113 lua::function mFunc("FontString:get_spacing", pLua, 1);
00114
00115 mFunc.push(pFontStringParent_->get_spacing());
00116
00117 return mFunc.on_return();
00118 }
00119
00120 int lua_font_string::_get_text_color(lua_State* pLua)
00121 {
00122 if (!check_parent_())
00123 return 0;
00124
00125 lua::function mFunc("FontString:get_text_color", pLua, 4);
00126
00127 const color& mTextColor = pFontStringParent_->get_text_color();
00128
00129 mFunc.push(mTextColor.r);
00130 mFunc.push(mTextColor.g);
00131 mFunc.push(mTextColor.b);
00132 mFunc.push(mTextColor.a);
00133
00134 return mFunc.on_return();
00135 }
00136
00137 int lua_font_string::_set_font(lua_State* pLua)
00138 {
00139 if (!check_parent_())
00140 return 0;
00141
00142 lua::function mFunc("FontString:set_font", pLua);
00143 mFunc.add(0, "file", lua::TYPE_STRING);
00144 mFunc.add(1, "height", lua::TYPE_NUMBER);
00145 mFunc.add(3, "flags", lua::TYPE_STRING, true);
00146
00147 if (mFunc.check())
00148 {
00149 pFontStringParent_->set_font(mFunc.get(0)->get_string(), mFunc.get(1)->get_number());
00150 if (mFunc.is_provided(2))
00151 {
00152 std::string sFlags = mFunc.get(2)->get_string();
00153 if (sFlags.find("OUTLINE") || sFlags.find("THICKOUTLINE"))
00154 pFontStringParent_->set_outlined(true);
00155 else if (sFlags.empty())
00156 pFontStringParent_->set_outlined(false);
00157 else
00158 {
00159 gui::out << gui::warning << mFunc.get_name() << " : "
00160 << "Unknown flag list : \"" << sFlags <<"\"." << std::endl;
00161 }
00162 }
00163 else
00164 pFontStringParent_->set_outlined(false);
00165 }
00166
00167 return mFunc.on_return();
00168 }
00169
00170 int lua_font_string::_set_justify_h(lua_State* pLua)
00171 {
00172 if (!check_parent_())
00173 return 0;
00174
00175 lua::function mFunc("FontString:set_justify_h", pLua);
00176 mFunc.add(0, "justify horizontal", lua::TYPE_STRING);
00177
00178 if (mFunc.check())
00179 {
00180 std::string sJustifyH = mFunc.get(0)->get_string();
00181 if (sJustifyH == "LEFT")
00182 pFontStringParent_->set_justify_h(text::ALIGN_LEFT);
00183 else if (sJustifyH == "CENTER")
00184 pFontStringParent_->set_justify_h(text::ALIGN_CENTER);
00185 else if (sJustifyH == "RIGHT")
00186 pFontStringParent_->set_justify_h(text::ALIGN_RIGHT);
00187 else
00188 {
00189 gui::out << gui::warning << mFunc.get_name() << " : "
00190 << "Unknown justify behavior : \"" << sJustifyH << "\"." << std::endl;
00191 }
00192 }
00193
00194 return mFunc.on_return();
00195 }
00196
00197 int lua_font_string::_set_justify_v(lua_State* pLua)
00198 {
00199 if (!check_parent_())
00200 return 0;
00201
00202 lua::function mFunc("FontString:set_justify_v", pLua);
00203 mFunc.add(0, "justify vertical", lua::TYPE_STRING);
00204
00205 if (mFunc.check())
00206 {
00207 std::string sJustifyV = mFunc.get(0)->get_string();
00208 if (sJustifyV == "TOP")
00209 pFontStringParent_->set_justify_v(text::ALIGN_TOP);
00210 else if (sJustifyV == "MIDDLE")
00211 pFontStringParent_->set_justify_v(text::ALIGN_MIDDLE);
00212 else if (sJustifyV == "BOTTOM")
00213 pFontStringParent_->set_justify_v(text::ALIGN_BOTTOM);
00214 else
00215 {
00216 gui::out << gui::warning << mFunc.get_name() << " : "
00217 << "Unknown justify behavior : \"" << sJustifyV << "\"." << std::endl;
00218 }
00219 }
00220
00221 return mFunc.on_return();
00222 }
00223
00224 int lua_font_string::_set_shadow_color(lua_State* pLua)
00225 {
00226 if (!check_parent_())
00227 return 0;
00228
00229 lua::function mFunc("FontString:set_shadow_color", pLua);
00230 mFunc.add(0, "red", lua::TYPE_NUMBER);
00231 mFunc.add(1, "green", lua::TYPE_NUMBER);
00232 mFunc.add(2, "blue", lua::TYPE_NUMBER);
00233 mFunc.add(3, "alpha", lua::TYPE_NUMBER, true);
00234
00235 if (mFunc.check())
00236 {
00237 color mColor;
00238 if (mFunc.is_provided(3))
00239 {
00240 mColor = color(
00241 mFunc.get(0)->get_number(),
00242 mFunc.get(1)->get_number(),
00243 mFunc.get(2)->get_number(),
00244 mFunc.get(3)->get_number()
00245 );
00246 }
00247 else
00248 {
00249 mColor = color(
00250 mFunc.get(0)->get_number(),
00251 mFunc.get(1)->get_number(),
00252 mFunc.get(2)->get_number()
00253 );
00254 }
00255
00256 pFontStringParent_->set_shadow_color(mColor);
00257 }
00258
00259 return mFunc.on_return();
00260 }
00261
00262 int lua_font_string::_set_shadow_offset(lua_State* pLua)
00263 {
00264 if (!check_parent_())
00265 return 0;
00266
00267 lua::function mFunc("FontString:set_shadow_offset", pLua);
00268 mFunc.add(0, "x offset", lua::TYPE_NUMBER);
00269 mFunc.add(1, "y offset", lua::TYPE_NUMBER);
00270
00271 if (mFunc.check())
00272 {
00273 pFontStringParent_->set_shadow_offsets(
00274 int(mFunc.get(0)->get_number()),
00275 int(mFunc.get(1)->get_number())
00276 );
00277 }
00278
00279 return mFunc.on_return();
00280 }
00281
00282 int lua_font_string::_set_spacing(lua_State* pLua)
00283 {
00284 if (!check_parent_())
00285 return 0;
00286
00287 lua::function mFunc("FontString:set_spacing", pLua);
00288 mFunc.add(0, "spacing", lua::TYPE_NUMBER);
00289
00290 if (mFunc.check())
00291 {
00292 pFontStringParent_->set_spacing(mFunc.get(0)->get_number());
00293 }
00294
00295 return mFunc.on_return();
00296 }
00297
00298 int lua_font_string::_set_text_color(lua_State* pLua)
00299 {
00300 if (!check_parent_())
00301 return 0;
00302
00303 lua::function mFunc("FontString:set_text_color", pLua);
00304 mFunc.add(0, "red", lua::TYPE_NUMBER);
00305 mFunc.add(1, "green", lua::TYPE_NUMBER);
00306 mFunc.add(2, "blue", lua::TYPE_NUMBER);
00307 mFunc.add(3, "alpha", lua::TYPE_NUMBER, true);
00308
00309 if (mFunc.check())
00310 {
00311 color mColor;
00312 if (mFunc.is_provided(3))
00313 {
00314 mColor = color(
00315 mFunc.get(0)->get_number(),
00316 mFunc.get(1)->get_number(),
00317 mFunc.get(2)->get_number(),
00318 mFunc.get(3)->get_number()
00319 );
00320 }
00321 else
00322 {
00323 mColor = color(
00324 mFunc.get(0)->get_number(),
00325 mFunc.get(1)->get_number(),
00326 mFunc.get(2)->get_number()
00327 );
00328 }
00329
00330 pFontStringParent_->set_text_color(mColor);
00331 }
00332
00333 return mFunc.on_return();
00334 }
00335
00336 int lua_font_string::_can_non_space_wrap(lua_State* pLua)
00337 {
00338 if (!check_parent_())
00339 return 0;
00340
00341 lua::function mFunc("FontString:can_non_space_wrap", pLua, 1);
00342
00343 mFunc.push(pFontStringParent_->can_non_space_wrap());
00344
00345 return mFunc.on_return();
00346 }
00347
00348 int lua_font_string::_can_word_wrap(lua_State* pLua)
00349 {
00350 if (!check_parent_())
00351 return 0;
00352
00353 lua::function mFunc("FontString:can_word_wrap", pLua, 1);
00354
00355 mFunc.push(pFontStringParent_->can_word_wrap());
00356
00357 return mFunc.on_return();
00358 }
00359
00360 int lua_font_string::_enable_formatting(lua_State* pLua)
00361 {
00362 if (!check_parent_())
00363 return 0;
00364
00365 lua::function mFunc("FontString:enable_formatting", pLua);
00366 mFunc.add(0, "formatting", lua::TYPE_BOOLEAN);
00367
00368 if (mFunc.check())
00369 {
00370 pFontStringParent_->enable_formatting(mFunc.get(0)->get_bool());
00371 }
00372
00373 return mFunc.on_return();
00374 }
00375
00376 int lua_font_string::_get_string_height(lua_State* pLua)
00377 {
00378 if (!check_parent_())
00379 return 0;
00380
00381 lua::function mFunc("FontString:get_string_height", pLua, 1);
00382
00383 mFunc.push(pFontStringParent_->get_string_height());
00384
00385 return mFunc.on_return();
00386 }
00387
00388 int lua_font_string::_get_string_width(lua_State* pLua)
00389 {
00390 if (!check_parent_())
00391 return 0;
00392
00393 lua::function mFunc("FontString:get_string_width", pLua, 1);
00394
00395 mFunc.push(pFontStringParent_->get_string_width());
00396
00397 return mFunc.on_return();
00398 }
00399
00400 int lua_font_string::_get_text(lua_State* pLua)
00401 {
00402 if (!check_parent_())
00403 return 0;
00404
00405 lua::function mFunc("FontString:get_text", pLua, 1);
00406
00407 mFunc.push(pFontStringParent_->get_text());
00408
00409 return mFunc.on_return();
00410 }
00411
00412 int lua_font_string::_is_formatting_enabled(lua_State* pLua)
00413 {
00414 if (!check_parent_())
00415 return 0;
00416
00417 lua::function mFunc("FontString:is_formatting_enabled", pLua, 1);
00418
00419 mFunc.push(pFontStringParent_->is_formatting_enabled());
00420
00421 return mFunc.on_return();
00422 }
00423
00424 int lua_font_string::_set_non_space_wrap(lua_State* pLua)
00425 {
00426 if (!check_parent_())
00427 return 0;
00428
00429 lua::function mFunc("FontString:set_non_space_wrap", pLua);
00430 mFunc.add(0, "can non space wrap", lua::TYPE_BOOLEAN);
00431
00432 if (mFunc.check())
00433 {
00434 pFontStringParent_->set_non_space_wrap(mFunc.get(0)->get_bool());
00435 }
00436
00437 return mFunc.on_return();
00438 }
00439
00440 int lua_font_string::_set_word_wrap(lua_State* pLua)
00441 {
00442 if (!check_parent_())
00443 return 0;
00444
00445 lua::function mFunc("FontString:set_word_wrap", pLua);
00446 mFunc.add(0, "can word wrap", lua::TYPE_BOOLEAN);
00447 mFunc.add(1, "add ellipsis", lua::TYPE_BOOLEAN, true);
00448
00449 if (mFunc.check())
00450 {
00451 bool bEllipsis = true;
00452 if (mFunc.is_provided(1))
00453 bEllipsis = mFunc.get(1)->get_bool();
00454
00455 pFontStringParent_->set_word_wrap(mFunc.get(0)->get_bool(), bEllipsis);
00456 }
00457
00458 return mFunc.on_return();
00459 }
00460
00461 int lua_font_string::_set_text(lua_State* pLua)
00462 {
00463 if (!check_parent_())
00464 return 0;
00465
00466 lua::function mFunc("FontString:set_text", pLua);
00467 mFunc.add(0, "text", lua::TYPE_STRING);
00468 mFunc.add(0, "number", lua::TYPE_NUMBER);
00469 mFunc.add(0, "bool", lua::TYPE_BOOLEAN);
00470
00471 if (mFunc.check())
00472 {
00473 std::string sText;
00474 if (mFunc.get(0)->get_type() == lua::TYPE_STRING)
00475 sText = mFunc.get(0)->get_string();
00476 else if (mFunc.get(0)->get_type() == lua::TYPE_NUMBER)
00477 sText = utils::to_string(mFunc.get(0)->get_number());
00478 else if (mFunc.get(0)->get_type() == lua::TYPE_BOOLEAN)
00479 sText = utils::to_string(mFunc.get(0)->get_bool());
00480
00481 pFontStringParent_->set_text(sText);
00482 }
00483
00484 return mFunc.on_return();
00485 }
00486 }