//Read Parameters from pPropBag given by MSIE Bool CGPAXPlugin::ReadParamString(LPPROPERTYBAG pPropBag, LPERRORLOG pErrorLog, WCHAR *name, char *buf, int bufsize) { VARIANT v; HRESULT hr; Bool retval=0; v.vt = VT_EMPTY; v.bstrVal = NULL; hr = pPropBag->Read(name, &v, pErrorLog); if(SUCCEEDED(hr)) { if(v.vt==VT_BSTR && v.bstrVal) { // USES_CONVERSION; // lstrcpyn(buf,OLE2T(v.bstrVal),bufsize); const u16 *srcp = (const u16 *) v.bstrVal; u32 len = gf_utf8_wcstombs(buf, bufsize, &srcp); if (len>=0) { buf[len] = 0; retval=1; } } VariantClear(&v); } return retval; }
GF_EXPORT GF_Err gf_xml_sax_parse(GF_SAXParser *parser, const void *string) { GF_Err e; char *current; char *utf_conv = NULL; if (parser->unicode_type < 0) return GF_BAD_PARAM; if (parser->unicode_type>1) { const u16 *sptr = (const u16 *)string; u32 len = 2*gf_utf8_wcslen(sptr); utf_conv = (char *)gf_malloc(sizeof(char)*(len+1)); len = gf_utf8_wcstombs(utf_conv, len, &sptr); if (len==(u32) -1) { parser->sax_state = SAX_STATE_SYNTAX_ERROR; gf_free(utf_conv); return GF_CORRUPTED_DATA; } utf_conv[len] = 0; current = utf_conv; } else { current = (char *)string; } e = gf_xml_sax_parse_intern(parser, current); if (utf_conv) gf_free(utf_conv); return e; }
STDMETHODIMP CGPAXPlugin::put_src(BSTR url) { const u16 *srcp = (const u16 *)url; u32 len = gf_utf8_wcstombs(m_url, MAXLEN_URL, &srcp); m_url[len] = 0; UpdateURL(); return S_OK; }
STDMETHODIMP CGPAXPlugin::SetURL(BSTR _url) { if (m_term) { u16 *srcp; u32 len; char *url; srcp = (u16 *)_url; len = gf_utf8_wcstombs(NULL, 0, (const u16 **)&srcp); if (len) { url = (char *) gf_malloc(sizeof(char) * (len+1)); srcp = (u16 *)_url; len = gf_utf8_wcstombs(url, len, (const u16 **)&srcp); url[len] = 0; strcpy(m_url, url); gf_term_connect(m_term, url); gf_free(url); } } return S_OK; }
// ----------------------------------------------------------------------------- // Cosmo4AppUi::ConstructL() // Symbian 2nd phase constructor can leave. // ----------------------------------------------------------------------------- // void COsmo4AppUi::ConstructL() { // Initialise app UI with standard value. BaseConstructL(CAknAppUi::EAknEnableSkin); /*Create display*/ iAppView = COsmo4AppView::NewL( ClientRect() ); AddToStackL(iAppView); /*create playlist*/ #ifndef GPAC_GUI_ONLY iPlaylist = CPlaylist::NewL( ClientRect(), iAppView->GetUser() ); iPlaylist->MakeVisible(EFalse); #endif iAppView->MakeVisible(ETrue); view_mode = 0; m_title = NULL; //StatusPane ()->SwitchLayoutL ( R_AVKON_STATUS_PANE_LAYOUT_SMALL ); nb_keys = 0; CaptureKeys(1); CCommandLineArguments *args = CCommandLineArguments::NewL(); #ifndef GPAC_GUI_ONLY if (args->Count() > 1) { TPtrC url = args->Arg(1); #if defined(_UNICODE) char szURL[1024]; u16 szURLUTF16[1024]; size_t len; len = url.Size(); memcpy(szURLUTF16, url.Ptr(), sizeof(u8)*len); szURLUTF16[len/2] = 0; const u16 *sptr = szURLUTF16; len = gf_utf8_wcstombs(szURL, 512, &sptr); if (len != (size_t) -1) { szURL[len] = 0; iAppView->Connect((const char *)szURL); } #else iAppView->Connect((const char *)url.Ptr()); #endif } #endif delete args; }
static char* wcs_to_utf8(const wchar_t* str) { size_t source_len; char* result; if (str == 0) return 0; source_len = wcslen(str); result = gf_calloc(source_len + 1, UTF8_MAX_BYTES_PER_CHAR); if (!result) return 0; if (gf_utf8_wcstombs(result, source_len * UTF8_MAX_BYTES_PER_CHAR, &str) < 0) { gf_free(result); return 0; } return result; }
STDMETHODIMP CGPAXPlugin::Update(BSTR _mtype, BSTR _updates) { if (m_term) { u16 *srcp; u32 len; char mtype[1024], *updates; srcp = (u16 *) _mtype; len = gf_utf8_wcstombs(mtype, 1024, (const u16 **)&srcp); mtype[len] = 0; srcp = (u16 *)_updates; len = gf_utf8_wcstombs(NULL, 0, (const u16 **)&srcp); if (len) { updates = (char *) gf_malloc(sizeof(char) * (len+1)); srcp = (u16 *)_updates; len = gf_utf8_wcstombs(updates, len, (const u16 **)&srcp); updates[len] = 0; gf_term_scene_update(m_term, mtype, updates); gf_free(updates); } } return S_OK; }
void CPlaylist::GetSelectionName(char *szName) { CDesCArray* array = static_cast<CDesCArray*>(iListBox->Model()->ItemTextArray()); TInt idx = iListBox->CurrentItemIndex(); #ifndef GPAC_GUI_ONLY #if defined(_UNICODE) size_t len; /*handle terminating zero !!*/ u16 szNameUTF16[100]; len = (*array)[idx].Size(); memcpy(szNameUTF16, (*array)[idx].Ptr(), sizeof(u8)*len); szNameUTF16[len/2] = 0; const u16 *sptr = szNameUTF16; /*skip initial '\t'*/ #ifdef USE_SKIN sptr += 1; #endif len = gf_utf8_wcstombs(szName, 512, &sptr); szName[len] = 0; #else char *src = (*array)[idx]).Ptr(); /*skip initial '\t'*/ #ifdef USE_SKIN src += 1; #endif strcpy(szName, (const char *) src) ; #endif /*remove trailing "\t\t"*/ #ifdef USE_SKIN len = strlen(szName); szName[len-2] = 0; #endif #else szName[0] = 0; #endif }
void gf_term_string_input(GF_Terminal *term, u32 character) { u32 i; GF_BitStream *bs; GF_SLHeader slh; #ifndef GPAC_DISABLE_X3D X_StringSensor *n; #endif GF_Codec *cod; char *buf; u32 buf_size; if (!character || !term) return; if (!gf_list_count(term->input_streams) && !gf_list_count(term->x3d_sensors)) return; memset(&slh, 0, sizeof(GF_SLHeader)); slh.accessUnitStartFlag = slh.accessUnitEndFlag = 1; slh.compositionTimeStampFlag = 1; /*cf above*/ slh.compositionTimeStamp = 0; /*get all IS StringSensor decoders and send frame*/ i=0; while ((cod = (GF_Codec*)gf_list_enum(term->input_streams, &i))) { ISPriv *is = (ISPriv *)cod->decio->privateStack; if (is->type==IS_StringSensor) { // GF_Channel *ch = (GF_Channel *)gf_list_get(cod->inChannels, 0); is->enteredText[is->text_len] = character; is->text_len += 1; /*write empty DDF*/ bs = gf_bs_new(NULL, 0, GF_BITSTREAM_WRITE); gf_bs_write_int(bs, 0, 1); gf_bs_write_int(bs, 0, 1); gf_bs_align(bs); gf_bs_get_content(bs, &buf, &buf_size); gf_bs_del(bs); // gf_es_receive_sl_packet(ch->service, ch, buf, buf_size, &slh, GF_OK); IS_ProcessData((GF_SceneDecoder*)cod->decio, buf, buf_size, 0, 0, 0); gf_free(buf); } } #ifndef GPAC_DISABLE_X3D /*get all X3D StringSensors*/ i=0; while ((n = (X_StringSensor*)gf_list_enum(term->x3d_sensors, &i))) { StringSensorStack *st; char szStr[5000]; const unsigned short *ptr; u32 len; if (gf_node_get_tag((GF_Node*)n) != TAG_X3D_StringSensor) continue; if (!n->enabled) continue; st = (StringSensorStack *) gf_node_get_private((GF_Node *)n); if (character=='\b') { if (n->deletionAllowed && st->text_len) { st->text_len -= 1; st->enteredText[st->text_len] = 0; ptr = st->enteredText; len = gf_utf8_wcstombs(szStr, 10, &ptr); if (n->enteredText.buffer) gf_free(n->enteredText.buffer); szStr[len] = 0; n->enteredText.buffer = gf_strdup(szStr); gf_node_event_out_str((GF_Node *)n, "enteredText"); } } else if (character=='\r') { if (n->finalText.buffer) gf_free(n->finalText.buffer); n->finalText.buffer = n->enteredText.buffer; n->enteredText.buffer = gf_strdup(""); st->text_len = 0; gf_node_event_out_str((GF_Node *)n, "enteredText"); gf_node_event_out_str((GF_Node *)n, "finalText"); } else { st->enteredText[st->text_len] = character; st->text_len += 1; st->enteredText[st->text_len] = 0; ptr = st->enteredText; len = gf_utf8_wcstombs(szStr, 10, &ptr); if (n->enteredText.buffer) gf_free(n->enteredText.buffer); szStr[len] = 0; n->enteredText.buffer = gf_strdup(szStr); gf_node_event_out_str((GF_Node *)n, "enteredText"); } } #endif }
Bool gf_term_keyboard_input(GF_Terminal *term, u32 key_code, u32 hw_code, Bool isKeyUp) { u32 i; GF_BitStream *bs; GF_SLHeader slh; char *buf; #ifndef GPAC_DISABLE_X3D X_KeySensor *n; #endif u32 buf_size; u32 actionKey = 0; u32 shiftKeyDown, controlKeyDown, altKeyDown; GF_Codec *cod; s32 keyPressed, keyReleased, actionKeyPressed, actionKeyReleased; if (!term || (!gf_list_count(term->input_streams) && !gf_list_count(term->x3d_sensors)) ) return 0; memset(&slh, 0, sizeof(GF_SLHeader)); slh.accessUnitStartFlag = slh.accessUnitEndFlag = 1; slh.compositionTimeStampFlag = 1; /*cf above*/ slh.compositionTimeStamp = 0; bs = gf_bs_new(NULL, 0, GF_BITSTREAM_WRITE); shiftKeyDown = controlKeyDown = altKeyDown = 0; keyPressed = keyReleased = actionKeyPressed = actionKeyReleased = 0; /*key-sensor codes*/ switch (key_code) { case GF_KEY_F1: actionKey = 1; break; case GF_KEY_F2: actionKey = 2; break; case GF_KEY_F3: actionKey = 3; break; case GF_KEY_F4: actionKey = 4; break; case GF_KEY_F5: actionKey = 5; break; case GF_KEY_F6: actionKey = 6; break; case GF_KEY_F7: actionKey = 7; break; case GF_KEY_F8: actionKey = 8; break; case GF_KEY_F9: actionKey = 9; break; case GF_KEY_F10: actionKey = 10; break; case GF_KEY_F11: actionKey = 11; break; case GF_KEY_F12: actionKey = 12; break; case GF_KEY_HOME: actionKey = 13; break; case GF_KEY_END: actionKey = 14; break; case GF_KEY_PAGEUP: actionKey = 15; break; case GF_KEY_PAGEDOWN: actionKey = 16; break; case GF_KEY_UP: actionKey = 17; break; case GF_KEY_DOWN: actionKey = 18; break; case GF_KEY_LEFT: actionKey = 19; break; case GF_KEY_RIGHT: actionKey = 20; break; case GF_KEY_SHIFT: actionKey = 0; shiftKeyDown = isKeyUp ? 1 : 2; break; case GF_KEY_CONTROL: actionKey = 0; controlKeyDown = isKeyUp ? 1 : 2; break; case GF_KEY_ALT: actionKey = 0; altKeyDown = isKeyUp ? 1 : 2; break; default: actionKey = 0; break; } if (actionKey) { if (isKeyUp) actionKeyReleased = actionKey; else actionKeyPressed = actionKey; } else { /*handle numeric pad*/ if ((key_code>=GF_KEY_0) && (key_code<=GF_KEY_9) ) { key_code = key_code + 0x30 - GF_KEY_0; } else key_code = hw_code; if (isKeyUp) keyReleased = key_code; else keyPressed = key_code; } gf_bs_write_int(bs, keyPressed ? 1 : 0, 1); if (keyPressed) gf_bs_write_int(bs, keyPressed, 32); gf_bs_write_int(bs, keyReleased ? 1 : 0, 1); if (keyReleased) gf_bs_write_int(bs, keyReleased, 32); gf_bs_write_int(bs, actionKeyPressed ? 1 : 0, 1); if (actionKeyPressed) gf_bs_write_int(bs, actionKeyPressed, 32); gf_bs_write_int(bs, actionKeyReleased ? 1 : 0, 1); if (actionKeyReleased) gf_bs_write_int(bs, actionKeyReleased, 32); gf_bs_write_int(bs, shiftKeyDown ? 1 : 0 , 1); if (shiftKeyDown) gf_bs_write_int(bs, shiftKeyDown-1, 1); gf_bs_write_int(bs, controlKeyDown ? 1 : 0 , 1); if (controlKeyDown) gf_bs_write_int(bs, controlKeyDown-1, 1); gf_bs_write_int(bs, altKeyDown ? 1 : 0 , 1); if (altKeyDown) gf_bs_write_int(bs, altKeyDown, 1); gf_bs_align(bs); gf_bs_get_content(bs, &buf, &buf_size); gf_bs_del(bs); /*get all IS keySensor decoders and send frame*/ i=0; while ((cod = (GF_Codec*)gf_list_enum(term->input_streams, &i))) { ISPriv *is = (ISPriv *)cod->decio->privateStack; if (is->type==IS_KeySensor) { // GF_Channel *ch = gf_list_get(cod->inChannels, 0); // gf_es_receive_sl_packet(ch->service, ch, buf, buf_size, &slh, GF_OK); IS_ProcessData((GF_SceneDecoder*)cod->decio, buf, buf_size, 0, 0, 0); } } gf_free(buf); #ifndef GPAC_DISABLE_X3D i=0; while ((n = (X_KeySensor*)gf_list_enum(term->x3d_sensors, &i))) { u16 tc[2]; u32 len; char szStr[10]; const unsigned short *ptr; if (gf_node_get_tag((GF_Node*)n) != TAG_X3D_KeySensor) continue; if (!n->enabled) return 0; if (keyPressed) { if (n->keyPress.buffer) gf_free(n->keyPress.buffer); tc[0] = keyPressed; tc[1] = 0; ptr = tc; len = gf_utf8_wcstombs(szStr, 10, &ptr); n->keyPress.buffer = (char*)gf_malloc(sizeof(char) * (len+1)); memcpy(n->keyPress.buffer, szStr, sizeof(char) * len); n->keyPress.buffer[len] = 0; gf_node_event_out_str((GF_Node *)n, "keyPress"); } if (keyReleased) { if (n->keyRelease.buffer) gf_free(n->keyRelease.buffer); tc[0] = keyReleased; tc[1] = 0; ptr = tc; len = gf_utf8_wcstombs(szStr, 10, &ptr); n->keyRelease.buffer = (char*)gf_malloc(sizeof(char) * (len+1)); memcpy(n->keyRelease.buffer, szStr, sizeof(char) * len); n->keyRelease.buffer[len] = 0; gf_node_event_out_str((GF_Node *)n, "keyRelease"); } if (actionKeyPressed) { n->actionKeyPress = actionKeyPressed; gf_node_event_out_str((GF_Node *)n, "actionKeyPress"); } if (actionKeyReleased) { n->actionKeyRelease = actionKeyReleased; gf_node_event_out_str((GF_Node *)n, "actionKeyRelease"); } if (shiftKeyDown) { n->shiftKey = (shiftKeyDown-1) ? 1 : 0; gf_node_event_out_str((GF_Node *)n, "shiftKey"); } if (controlKeyDown) { n->controlKey = (controlKeyDown-1) ? 1 : 0; gf_node_event_out_str((GF_Node *)n, "controlKey"); } if (altKeyDown) { n->altKey= (altKeyDown-1) ? 1 : 0; gf_node_event_out_str((GF_Node *)n, "altKey"); } if (keyPressed || actionKeyPressed || (shiftKeyDown-1) || (controlKeyDown-1) || (altKeyDown-1)) { if (!n->isActive) { n->isActive = 1; gf_node_event_out_str((GF_Node *)n, "isActive"); } } else if (n->isActive) { n->isActive = 0; gf_node_event_out_str((GF_Node *)n, "isActive"); } } #endif /*with KeySensor, we don't know if the key will be consumed or not, assume it is*/ return 1; }
static GF_Err IS_ProcessData(GF_SceneDecoder *plug, const char *inBuffer, u32 inBufferLength, u16 ES_ID, u32 AU_time, u32 mmlevel) { u32 i, j, count; Double scene_time; GF_BitStream *bs; GF_FieldInfo *field; ISStack *st; ISPriv *priv = (ISPriv *)plug->privateStack; GF_Err e = GF_OK; /*decode data frame except if local stringSensor*/ bs = gf_bs_new(inBuffer, inBufferLength, GF_BITSTREAM_READ); i=0; while ((field = (GF_FieldInfo *)gf_list_enum(priv->ddf, &i))) { /*store present flag in eventIn for command skip - this is an ugly hack but it works since DDF don't have event types*/ field->eventType = gf_bs_read_int(bs, 1); /*parse val ourselves (we don't want to depend on bifs codec)*/ if (field->eventType) { switch (field->fieldType) { case GF_SG_VRML_SFBOOL: * ((SFBool *) field->far_ptr) = (SFBool) gf_bs_read_int(bs, 1); break; case GF_SG_VRML_SFFLOAT: *((SFFloat *)field->far_ptr) = FLT2FIX( gf_bs_read_float(bs) ); break; case GF_SG_VRML_SFINT32: *((SFInt32 *)field->far_ptr) = (s32) gf_bs_read_int(bs, 32); break; case GF_SG_VRML_SFTIME: *((SFTime *)field->far_ptr) = gf_bs_read_double(bs); break; case GF_SG_VRML_SFVEC2F: ((SFVec2f *)field->far_ptr)->x = FLT2FIX( gf_bs_read_float(bs) ); ((SFVec2f *)field->far_ptr)->y = FLT2FIX( gf_bs_read_float(bs) ); break; case GF_SG_VRML_SFVEC3F: ((SFVec3f *)field->far_ptr)->x = FLT2FIX( gf_bs_read_float(bs) ); ((SFVec3f *)field->far_ptr)->y = FLT2FIX( gf_bs_read_float(bs) ); ((SFVec3f *)field->far_ptr)->z = FLT2FIX( gf_bs_read_float(bs) ); break; case GF_SG_VRML_SFCOLOR: ((SFColor *)field->far_ptr)->red = FLT2FIX( gf_bs_read_float(bs) ); ((SFColor *)field->far_ptr)->green = FLT2FIX( gf_bs_read_float(bs) ); ((SFColor *)field->far_ptr)->blue = FLT2FIX( gf_bs_read_float(bs) ); break; case GF_SG_VRML_SFVEC4F: case GF_SG_VRML_SFROTATION: ((SFRotation *)field->far_ptr)->x = FLT2FIX( gf_bs_read_float(bs) ); ((SFRotation *)field->far_ptr)->y = FLT2FIX( gf_bs_read_float(bs) ); ((SFRotation *)field->far_ptr)->z = FLT2FIX( gf_bs_read_float(bs) ); ((SFRotation *)field->far_ptr)->q = FLT2FIX( gf_bs_read_float(bs) ); break; case GF_SG_VRML_SFSTRING: { u32 size, length; size = gf_bs_read_int(bs, 5); length = gf_bs_read_int(bs, size); if (gf_bs_available(bs) < length) return GF_NON_COMPLIANT_BITSTREAM; if ( ((SFString *)field->far_ptr)->buffer ) gf_free( ((SFString *)field->far_ptr)->buffer); ((SFString *)field->far_ptr)->buffer = (char*)gf_malloc(sizeof(char)*(length+1)); memset(((SFString *)field->far_ptr)->buffer , 0, length+1); for (j=0; j<length; j++) { ((SFString *)field->far_ptr)->buffer[j] = gf_bs_read_int(bs, 8); } } break; } } } gf_bs_del(bs); /*special case for StringSensor in local mode: lookup for special chars*/ if ((priv->type == IS_StringSensor) && priv->is_local) { char tmp_utf8[5000]; const unsigned short *ptr; u32 len; GF_FieldInfo *field1 = (GF_FieldInfo *)gf_list_get(priv->ddf, 0); GF_FieldInfo *field2 = (GF_FieldInfo *)gf_list_get(priv->ddf, 1); SFString *inText = (SFString *) field1->far_ptr; SFString *outText = (SFString *) field2->far_ptr; field1->eventType = field2->eventType = 0; priv->enteredText[priv->text_len] = (short) '\0'; len = gf_utf8_wcslen(priv->enteredText); if (len && (priv->enteredText[len-1] == priv->termChar)) { ptr = priv->enteredText; len = gf_utf8_wcstombs(tmp_utf8, 5000, &ptr); if (outText->buffer) gf_free(outText->buffer); outText->buffer = (char*)gf_malloc(sizeof(char) * (len)); memcpy(outText->buffer, tmp_utf8, sizeof(char) * len-1); outText->buffer[len-1] = 0; if (inText->buffer) gf_free(inText->buffer); inText->buffer = NULL; priv->text_len = 0; field1->eventType = field2->eventType = 1; } else { if (priv->delChar) { /*remove chars*/ if ((len>1) && (priv->enteredText[len-1] == priv->delChar)) { priv->enteredText[len-1] = (short) '\0'; len--; if (len) { priv->enteredText[len-1] = (short) '\0'; len--; } } } priv->text_len = len; ptr = priv->enteredText; len = gf_utf8_wcstombs(tmp_utf8, 5000, &ptr); if (inText->buffer) gf_free(inText->buffer); inText->buffer = (char*)gf_malloc(sizeof(char) * (len+1)); memcpy(inText->buffer, tmp_utf8, sizeof(char) * len); inText->buffer[len] = 0; field1->eventType = 1; } } gf_term_lock_compositor(priv->scene->root_od->term, 1); /*apply it*/ i=0; while ((st = (ISStack*)gf_list_enum(priv->is_nodes, &i))) { assert(st->is); assert(st->mo); if (!st->is->enabled) continue; count = gf_list_count(st->is->buffer.commandList); scene_time = gf_scene_get_time(priv->scene); for (j=0; j<count; j++) { GF_Command *com = (GF_Command *)gf_list_get(st->is->buffer.commandList, j); GF_FieldInfo *field = (GF_FieldInfo *)gf_list_get(priv->ddf, j); GF_CommandField *info = (GF_CommandField *)gf_list_get(com->command_fields, 0); if (info && field && field->eventType) { gf_sg_vrml_field_copy(info->field_ptr, field->far_ptr, field->fieldType); gf_sg_command_apply(priv->scene->graph, com, scene_time); } } } gf_term_lock_compositor(priv->scene->root_od->term, 0); return e; }
static GF_Err swf_svg_define_text(SWFReader *read, SWFText *text) { Bool use_text; u32 i; u32 j; SWFGlyphRec *gr; SWFFont *ft; use_text = (read->flags & GF_SM_SWF_NO_FONT) ? 1 : 0; swf_svg_print(read, "<defs>\n"); swf_svg_print(read, "<g id=\"S%d\" ", text->ID); swf_svg_print_matrix(read, &text->mat); swf_svg_print(read, ">\n"); i=0; while ((gr = (SWFGlyphRec*)gf_list_enum(text->text, &i))) { ft = NULL; if (use_text) { ft = swf_find_font(read, gr->fontID); if (!ft->glyph_codes) { use_text = 0; swf_report(read, GF_BAD_PARAM, "Font glyphs are not defined, cannot reference extern font - Forcing glyph embedding"); } } if (use_text) { /*restore back the font height in pixels (it's currently in SWF glyph design units)*/ swf_svg_print(read, "<text "); swf_svg_print(read, "x=\"%g \" ", FIX2FLT(gr->orig_x)); swf_svg_print(read, "y=\"%g \" ", FIX2FLT(gr->orig_y)); swf_svg_print(read, "font-size=\"%d\" ", (u32)(gr->fontSize * SWF_TWIP_SCALE)); if (ft->fontName) { swf_svg_print(read, "font-family=\"%s\" ", ft->fontName); } if (ft->is_italic) { swf_svg_print(read, "font-style=\"italic\" "); } if (ft->is_bold) { swf_svg_print(read, "font-weight=\"bold\" "); } swf_svg_print(read, ">"); /*convert to UTF-8*/ { size_t _len; u16 *str_w; u16 *widestr; char *str; str_w = (u16*)gf_malloc(sizeof(u16) * (gr->nbGlyphs+1)); for (j=0; j<gr->nbGlyphs; j++) { str_w[j] = ft->glyph_codes[gr->indexes[j]]; } str_w[j] = 0; str = (char*)gf_malloc(sizeof(char) * (gr->nbGlyphs+2)); widestr = str_w; _len = gf_utf8_wcstombs(str, sizeof(u8) * (gr->nbGlyphs+1), (const unsigned short **) &widestr); if (_len != (size_t) -1) { str[(u32) _len] = 0; swf_svg_print(read, "%s", str); } } swf_svg_print(read, "</text>\n"); } else { /*convert glyphs*/ Fixed dx; swf_svg_print(read, "<g tranform=\"scale(1,-1) "); swf_svg_print(read, "translate(%g, %g)\" >\n", FIX2FLT(gr->orig_x), FIX2FLT(gr->orig_y)); dx = 0; for (j=0; j<gr->nbGlyphs; j++) { swf_svg_print(read, "<use xlink:href=\"#Font%d_Glyph%d\" transform=\"translate(%g)\" />\n", gr->fontID, gr->indexes[j], FIX2FLT(gf_divfix(dx, FLT2FIX(gr->fontSize * SWF_TEXT_SCALE)))); dx += gr->dx[j]; } swf_svg_print(read, "</g>\n"); } } read->empty_frame = GF_FALSE; swf_svg_print(read, "</g>\n"); swf_svg_print(read, "</defs>\n"); return GF_OK; }
void CGPAXPlugin::LoadDATAUrl() { #ifndef _WIN32_WCE HRESULT hr; if (m_url[0]) return; /*get parent doc*/ CComPtr<IOleContainer> spContainer; if (m_spClientSite->GetContainer(&spContainer) != S_OK) return; CComPtr<IHTMLDocument2> spDoc = CComQIPtr<IHTMLDocument2>(spContainer); CComPtr<IHTMLElementCollection> spColl; if (spDoc->get_all(&spColl) != S_OK) return; /*get HTML <object> in the doc*/ CComPtr<IDispatch> spDisp; CComPtr<IHTMLElementCollection> sphtmlObjects; CComPtr<IDispatch> spDispObjects; if (spColl->tags(CComVariant("OBJECT"), &spDispObjects) != S_OK) return; CComPtr<IHTMLElementCollection> spObjs = CComQIPtr<IHTMLElementCollection>(spDispObjects); /*browse all objects and find us*/ long lCount = 0; spObjs->get_length(&lCount); for (long lCnt = 0; lCnt < lCount; lCnt++) { IDispatch *an_obj= NULL; CComVariant varEmpty; CComVariant varName; varName.vt = VT_I4; varName.lVal = lCnt; hr = spObjs->item(varName, varEmpty, &an_obj); varName.Clear(); varEmpty.Clear(); if (hr != S_OK) continue; /*get the IHTMLObject*/ IHTMLObjectElement* pObjectElem=NULL; an_obj->QueryInterface(IID_IHTMLObjectElement, (void**)&pObjectElem); if (!pObjectElem) continue; /*get its parent owner - it MUST be us*/ IDispatch *disp= NULL; pObjectElem->get_object(&disp); if (disp != this) continue; BSTR data = NULL; if ((pObjectElem->get_data(&data) == S_OK) && data) { const u16 *srcp = (const u16 *) data; u32 len = gf_utf8_wcstombs(m_url, MAXLEN_URL, &srcp); if (len>=0) m_url[len] = 0; } SysFreeString(data); break; } if (m_url) { UpdateURL(); } #endif }
static char *xml_translate_xml_string(char *str) { char *value; u32 size, i, j; if (!str || !strlen(str)) return NULL; value = (char *)gf_malloc(sizeof(char) * 500); size = 500; i = j = 0; while (str[i]) { if (j+20 >= size) { size += 500; value = (char *)gf_realloc(value, sizeof(char)*size); } if (str[i] == '&') { if (str[i+1]=='#') { char szChar[20], *end; u16 wchar[2]; u32 val; const unsigned short *srcp; strncpy(szChar, str+i, 10); end = strchr(szChar, ';'); if (!end) break; end[1] = 0; i+=strlen(szChar); wchar[1] = 0; if (szChar[2]=='x') sscanf(szChar, "&#x%x;", &val); else sscanf(szChar, "&#%u;", &val); wchar[0] = val; srcp = wchar; j += gf_utf8_wcstombs(&value[j], 20, &srcp); } else if (!strnicmp(&str[i], "&", sizeof(char)*5)) { value[j] = '&'; j++; i+= 5; } else if (!strnicmp(&str[i], "<", sizeof(char)*4)) { value[j] = '<'; j++; i+= 4; } else if (!strnicmp(&str[i], ">", sizeof(char)*4)) { value[j] = '>'; j++; i+= 4; } else if (!strnicmp(&str[i], "'", sizeof(char)*6)) { value[j] = '\''; j++; i+= 6; } else if (!strnicmp(&str[i], """, sizeof(char)*6)) { value[j] = '\"'; j++; i+= 6; } else { value[j] = str[i]; j++; i++; } } else { value[j] = str[i]; j++; i++; } } value[j] = 0; return value; }
static void TTD_NewTextChunk(TTDPriv *priv, GF_TextSampleDescriptor *tsd, M_Form *form, u16 *utf16_txt, TTDTextChunk *tc) { GF_Node *txt_model, *n2, *txt_material; M_Text *text; M_FontStyle *fs; char *fontName; char szStyle[1024]; u32 fontSize, styleFlags, color, i, start_char; if (!tc->srec) { fontName = TTD_FindFont(tsd, tsd->default_style.fontID); fontSize = tsd->default_style.font_size; styleFlags = tsd->default_style.style_flags; color = tsd->default_style.text_color; } else { fontName = TTD_FindFont(tsd, tc->srec->fontID); fontSize = tc->srec->font_size; styleFlags = tc->srec->style_flags; color = tc->srec->text_color; } /*create base model for text node. It will then be cloned for each text item*/ txt_model = ttd_create_node(priv, TAG_MPEG4_Shape, NULL); gf_node_register(txt_model, NULL); n2 = ttd_create_node(priv, TAG_MPEG4_Appearance, NULL); ((M_Shape *)txt_model)->appearance = n2; gf_node_register(n2, txt_model); txt_material = ttd_create_node(priv, TAG_MPEG4_Material2D, NULL); ((M_Appearance *)n2)->material = txt_material; gf_node_register(txt_material, n2); ((M_Material2D *)txt_material)->filled = 1; ((M_Material2D *)txt_material)->transparency = FIX_ONE - INT2FIX((color>>24) & 0xFF) / 255; ((M_Material2D *)txt_material)->emissiveColor.red = INT2FIX((color>>16) & 0xFF) / 255; ((M_Material2D *)txt_material)->emissiveColor.green = INT2FIX((color>>8) & 0xFF) / 255; ((M_Material2D *)txt_material)->emissiveColor.blue = INT2FIX((color) & 0xFF) / 255; /*force 0 lineWidth if blinking (the stupid MPEG-4 default values once again..)*/ if (tc->has_blink) { ((M_Material2D *)txt_material)->lineProps = ttd_create_node(priv, TAG_MPEG4_LineProperties, NULL); ((M_LineProperties *)((M_Material2D *)txt_material)->lineProps)->width = 0; gf_node_register(((M_Material2D *)txt_material)->lineProps, txt_material); } n2 = ttd_create_node(priv, TAG_MPEG4_Text, NULL); ((M_Shape *)txt_model)->geometry = n2; gf_node_register(n2, txt_model); text = (M_Text *) n2; fs = (M_FontStyle *) ttd_create_node(priv, TAG_MPEG4_FontStyle, NULL); gf_free(fs->family.vals[0]); /*translate default fonts to MPEG-4/VRML names*/ if (!stricmp(fontName, "Serif")) fs->family.vals[0] = gf_strdup("SERIF"); else if (!stricmp(fontName, "Sans-Serif")) fs->family.vals[0] = gf_strdup("SANS"); else if (!stricmp(fontName, "Monospace")) fs->family.vals[0] = gf_strdup("TYPEWRITER"); else fs->family.vals[0] = gf_strdup(fontName); fs->size = INT2FIX(fontSize); gf_free(fs->style.buffer); strcpy(szStyle, ""); if (styleFlags & GF_TXT_STYLE_BOLD) { if (styleFlags & GF_TXT_STYLE_ITALIC) strcpy(szStyle, "BOLDITALIC"); else strcpy(szStyle, "BOLD"); } else if (styleFlags & GF_TXT_STYLE_ITALIC) strcat(szStyle, "ITALIC"); if (!strlen(szStyle)) strcpy(szStyle, "PLAIN"); /*also underline for URLs*/ if ((styleFlags & GF_TXT_STYLE_UNDERLINED) || (tc->hlink && tc->hlink->URL)) strcat(szStyle, " UNDERLINED"); if (tc->is_hilight) { if (tc->hilight_col) { char szTxt[50]; sprintf(szTxt, " HIGHLIGHT#%x", tc->hilight_col); strcat(szStyle, szTxt); } else { strcat(szStyle, " HIGHLIGHT#RV"); } } /*a better way would be to draw the entire text box in a composite texture & bitmap but we can't really rely on text box size (in MP4Box, it actually defaults to the entire video area) and drawing a too large texture & bitmap could slow down rendering*/ if (priv->use_texture) strcat(szStyle, " TEXTURED"); if (priv->outline) strcat(szStyle, " OUTLINED"); fs->style.buffer = gf_strdup(szStyle); fs->horizontal = (tsd->displayFlags & GF_TXT_VERTICAL) ? 0 : 1; text->fontStyle = (GF_Node *) fs; gf_node_register((GF_Node *)fs, (GF_Node *)text); gf_sg_vrml_mf_reset(&text->string, GF_SG_VRML_MFSTRING); if (tc->hlink && tc->hlink->URL) { SFURL *s; M_Anchor *anc = (M_Anchor *) ttd_create_node(priv, TAG_MPEG4_Anchor, NULL); gf_sg_vrml_mf_append(&anc->url, GF_SG_VRML_MFURL, (void **) &s); s->OD_ID = 0; s->url = gf_strdup(tc->hlink->URL); if (tc->hlink->URL_hint) anc->description.buffer = gf_strdup(tc->hlink->URL_hint); gf_node_list_add_child(& anc->children, txt_model); gf_node_register(txt_model, (GF_Node *)anc); txt_model = (GF_Node *)anc; gf_node_register((GF_Node *)anc, NULL); } start_char = tc->start_char; for (i=tc->start_char; i<tc->end_char; i++) { Bool new_line = 0; if ((utf16_txt[i] == '\n') || (utf16_txt[i] == '\r') || (utf16_txt[i] == 0x85) || (utf16_txt[i] == 0x2028) || (utf16_txt[i] == 0x2029)) new_line = 1; if (new_line || (i+1==tc->end_char) ) { SFString *st; if (i+1==tc->end_char) i++; if (i!=start_char) { char szLine[5000]; u32 len; s16 wsChunk[5000], *sp; /*spliting lines, duplicate node*/ n2 = gf_node_clone(priv->sg, txt_model, NULL, "", 1); if (tc->hlink && tc->hlink->URL) { GF_Node *t = ((M_Anchor *)n2)->children->node; text = (M_Text *) ((M_Shape *)t)->geometry; txt_material = ((M_Appearance *) ((M_Shape *)t)->appearance)->material; } else { text = (M_Text *) ((M_Shape *)n2)->geometry; txt_material = ((M_Appearance *) ((M_Shape *)n2)->appearance)->material; } gf_sg_vrml_mf_reset(&text->string, GF_SG_VRML_MFSTRING); gf_node_list_add_child( &form->children, n2); gf_node_register(n2, (GF_Node *) form); ttd_add_item(form); /*clone node always register by default*/ gf_node_unregister(n2, NULL); if (tc->has_blink && txt_material) gf_list_add(priv->blink_nodes, txt_material); memcpy(wsChunk, &utf16_txt[start_char], sizeof(s16)*(i-start_char)); wsChunk[i-start_char] = 0; sp = &wsChunk[0]; len = gf_utf8_wcstombs(szLine, 5000, (const unsigned short **) &sp); szLine[len] = 0; gf_sg_vrml_mf_append(&text->string, GF_SG_VRML_MFSTRING, (void **) &st); st->buffer = gf_strdup(szLine); } start_char = i+1; if (new_line) { ttd_add_line(form); if ((utf16_txt[i]=='\r') && (utf16_txt[i+1]=='\n')) i++; } } } gf_node_unregister(txt_model, NULL); return; }