/* * Class: org_jsfml_graphics_Text * Method: nativeSetExPtr * Signature: ()V */ JNIEXPORT void JNICALL Java_org_jsfml_graphics_Text_nativeSetExPtr (JNIEnv *env, jobject obj) { JSFML::NativeObject::SetExPointer(env, obj, org_jsfml_internal_ExPtr_DRAWABLE, dynamic_cast<sf::Drawable*>(THIS(sf::Text))); JSFML::NativeObject::SetExPointer(env, obj, org_jsfml_internal_ExPtr_TRANSFORMABLE, dynamic_cast<sf::Transformable*>(THIS(sf::Text))); }
/* * Class: sfml_graphics_RectangleShape * Method: nativeSetExPtr * Signature: ()V */ JNIEXPORT void JNICALL Java_sfml_graphics_RectangleShape_nativeSetExPtr (JNIEnv *env, jobject obj) { JSFML::NativeObject::SetExPointer(env, obj, sfml_internal_ExPtr_DRAWABLE, dynamic_cast<sf::Drawable*>(THIS(sf::RectangleShape))); JSFML::NativeObject::SetExPointer(env, obj, sfml_internal_ExPtr_TRANSFORMABLE, dynamic_cast<sf::Transformable*>(THIS(sf::RectangleShape))); JSFML::NativeObject::SetExPointer(env, obj, sfml_internal_ExPtr_SHAPE, dynamic_cast<sf::Shape*>(THIS(sf::RectangleShape))); }
/* * Class: org_jsfml_graphics_RenderTexture * Method: nativeMapCoordsToPixel * Signature: (JLorg/jsfml/graphics/ConstView;)J */ JNIEXPORT jlong JNICALL Java_org_jsfml_graphics_RenderTexture_nativeMapCoordsToPixel (JNIEnv *env, jobject obj, jlong point, jobject view) { return JSFML::Intercom::encodeVector2i(THIS(sf::RenderTexture)->mapCoordsToPixel( JSFML::Intercom::decodeVector2f(point), *JSFML::NativeObject::GetPointer<sf::View>(env, view))); }
/** * Wrapper API to make StringEnumeration look like UEnumeration. */ static const char* U_CALLCONV ustrenum_next(UEnumeration* en, int32_t* resultLength, UErrorCode* ec) { return THIS(en)->next(resultLength, *ec); }
static OSStatus rdpsnd_ios_monitor_cb( void *inRefCon, AudioUnitRenderActionFlags *ioActionFlags, const AudioTimeStamp *inTimeStamp, UInt32 inBusNumber, UInt32 inNumberFrames, AudioBufferList *ioData ) { rdpsndIOSPlugin *p = THIS(inRefCon); //if ( *ioActionFlags == kAudioUnitRenderAction_PostRender ) if ( *ioActionFlags == kAudioUnitRenderAction_PostRender ) { /* printf("postRender Bus: %d inTimeStamp: %llu flags(%d) Frames: %d Buffers: %d\n", (unsigned int)inBusNumber, inTimeStamp->mHostTime, (unsigned int)inTimeStamp->mFlags, (unsigned int)inNumberFrames, (unsigned int)ioData->mNumberBuffers); */ //printf("Played %d frames ", p->frameCnt); rdpsnd_count_frames(p); } return noErr; }
void setCgsFont(XtermWidget xw, VTwin *cgsWin, CgsEnum cgsId, XTermFonts * font) { CgsCache *me; if ((me = myCache(xw, cgsWin, cgsId)) != 0) { if (!HaveFont(font)) { if (cgsId != gcNorm) (void) getCgsGC(xw, cgsWin, gcNorm); #ifndef NO_ACTIVE_ICON if (cgsWin == &(TScreenOf(xw)->iconVwin)) font = &(TScreenOf(xw)->fnt_icon); else #endif font = &(TScreenOf(xw)->fnts[fNorm]); } if (HaveFont(font) && okFont(font->fs)) { TRACE2(("setCgsFont next: %s for %s slot %p, gc %#x\n", traceFont(font), traceCgsEnum(cgsId), me, (unsigned) THIS(gc))); TRACE2(("...next font was %s\n", traceFont(NEXT(font)))); NEXT(font) = font; me->mask |= GCFont; } else { /* EMPTY */ TRACE2(("...NOT updated font for %s\n", traceCgsEnum(cgsId))); } } }
/* * Class: sfml_audio_SoundBuffer * Method: nativeGetSamples * Signature: (ILjava/nio/Buffer;)V */ JNIEXPORT void JNICALL Java_sfml_audio_SoundBuffer_nativeGetSamples (JNIEnv *env, jobject obj, jint num, jobject buffer) { const sf::Int16 *samples = THIS(sf::SoundBuffer)->getSamples(); jshort *jsamples = (jshort*)env->GetDirectBufferAddress(buffer); memcpy(jsamples, samples, 2 * num); }
/* * Class: sfml_audio_SoundBuffer * Method: nativeSaveToFile * Signature: (Ljava/lang/String;)Z */ JNIEXPORT jboolean JNICALL Java_sfml_audio_SoundBuffer_nativeSaveToFile (JNIEnv *env, jobject obj, jstring fileName) { const char *utf8 = env->GetStringUTFChars(fileName, NULL); jboolean result = THIS(sf::SoundBuffer)->saveToFile(std::string(utf8)); env->ReleaseStringUTFChars(fileName, utf8); return result; }
/* * Copy the parameters (except GC of course) from one cache record to another. */ void copyCgs(XtermWidget xw, VTwin *cgsWin, CgsEnum dstCgsId, CgsEnum srcCgsId) { if (dstCgsId != srcCgsId) { CgsCache *me; if ((me = myCache(xw, cgsWin, srcCgsId)) != 0) { TRACE(("copyCgs from %s to %s\n", traceCgsEnum(srcCgsId), traceCgsEnum(dstCgsId))); TRACE2(("copyCgs from %s (me %p, fg %s, bg %s, cset %s) to %s {{\n", traceCgsEnum(srcCgsId), me, tracePixel(xw, THIS(fg)), tracePixel(xw, THIS(bg)), traceCSet(THIS(cset)), traceCgsEnum(dstCgsId))); setCgsCSet(xw, cgsWin, dstCgsId, THIS(cset)); setCgsFore(xw, cgsWin, dstCgsId, THIS(fg)); setCgsBack(xw, cgsWin, dstCgsId, THIS(bg)); setCgsFont(xw, cgsWin, dstCgsId, THIS(font)); TRACE2(("...copyCgs }}\n")); } } }
/* * Return the font for the given GC. */ XTermFonts * getCgsFont(XtermWidget xw, VTwin *cgsWin, GC gc) { int n; XTermFonts *result = 0; for_each_gc(n) { CgsCache *me; if ((me = myCache(xw, cgsWin, (CgsEnum) n)) != 0) { if (THIS(gc) == gc) { result = THIS(font); break; } } } return result; }
/* * Return the background color for the given GC. */ Pixel getCgsBack(XtermWidget xw, VTwin *cgsWin, GC gc) { int n; Pixel result = 0; for_each_gc(n) { CgsCache *me; if ((me = myCache(xw, cgsWin, (CgsEnum) n)) != 0) { if (THIS(gc) == gc) { result = THIS(bg); break; } } } return result; }
/* * Class: sfml_audio_SoundSource * Method: nativeGetData * Signature: (Ljava/nio/Buffer;)V */ JNIEXPORT void JNICALL Java_sfml_audio_Sound_nativeGetData (JNIEnv *env, jobject obj, jobject buffer) { sf::Sound *sound = THIS(sf::Sound); void *data = env->GetDirectBufferAddress(buffer); ((jbyte*)data)[0] = sound->getLoop() ? 1 : 0; ((jlong*)data)[1] = (jlong)sound->getPlayingOffset().asMicroseconds(); }
/* * Class: sfml_audio_SoundBuffer * Method: nativeLoadFromMemory * Signature: ([B)Z */ JNIEXPORT jboolean JNICALL Java_sfml_audio_SoundBuffer_nativeLoadFromMemory (JNIEnv *env, jobject obj, jbyteArray arr) { std::size_t n = (std::size_t)env->GetArrayLength(arr); jbyte* mem = env->GetByteArrayElements(arr, 0); jboolean result = THIS(sf::SoundBuffer)->loadFromMemory(mem, n); env->ReleaseByteArrayElements(arr, mem, JNI_ABORT); return result; }
QWidget *ItemTableDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const{ if(index.column()==0){ QComboBox* combo=new QComboBox(parent); int j=0; for(int i=0;i<256;i++){ QString name(res->itemDictionary.entries[i].speciesName); if(name.length()){ combo->addItem(QString("%1(%2)"). arg(i). arg(name), QVariant(i)); combo->setItemData(j,res->itemBackground[KfMap::itemCatagory[i]],Qt::BackgroundRole); combo->setItemData(j,res->itemImages.images[i].small,Qt::DecorationRole); j++; } } //issue#22, bad imp, TODO ItemTableDelegate* THIS(const_cast<ItemTableDelegate*>(this)); connect(combo,&QComboBox::currentTextChanged,[THIS,combo](){ emit THIS->commitData(combo); emit THIS->closeEditor(combo); }); return combo; }else if(index.column()==1){ QComboBox* combo=new QComboBox(parent); int species=pMainWindow->map.itemAt(index.row()).basic.species(); for(int p:res->itemDictionary.entries[species].behaviorName.keys()){ combo->addItem(QString("%1(%2)"). arg(p). arg(res->itemDictionary.entries[species].behaviorName[p]), QVariant(p)); } //issue#22, bad imp, TODO ItemTableDelegate* THIS(const_cast<ItemTableDelegate*>(this)); connect(combo,&QComboBox::currentTextChanged,[THIS,combo](){ emit THIS->commitData(combo); emit THIS->closeEditor(combo); }); return combo; } else return QStyledItemDelegate::createEditor(parent,option,index); }
/* * Class: sfml_audio_SoundBuffer * Method: nativeGetData * Signature: (Ljava/nio/Buffer;)V */ JNIEXPORT void JNICALL Java_sfml_audio_SoundBuffer_nativeGetData (JNIEnv *env, jobject obj, jobject buffer) { sf::SoundBuffer *soundBuffer = THIS(sf::SoundBuffer); void *data = env->GetDirectBufferAddress(buffer); ((jint*)data)[0] = (jint)soundBuffer->getSampleCount(); ((jint*)data)[1] = (jint)soundBuffer->getSampleRate(); ((jint*)data)[2] = (jint)soundBuffer->getChannelCount(); ((jlong*)data)[3] = (jlong)soundBuffer->getDuration().asMicroseconds(); }
U_NAMESPACE_END // C wrapper --------------------------------------------------------------- *** #define THIS(en) ((icu::StringEnumeration*)(en->context)) U_CDECL_BEGIN /** * Wrapper API to make StringEnumeration look like UEnumeration. */ static void U_CALLCONV ustrenum_close(UEnumeration* en) { delete THIS(en); uprv_free(en); }
/* * Return the font for the given GC. */ CgsEnum getCgsId(XtermWidget xw, VTwin *cgsWin, GC gc) { int n; CgsEnum result = gcNorm; for_each_gc(n) { CgsCache *me; if ((me = myCache(xw, cgsWin, (CgsEnum) n)) != 0) { if (THIS(gc) == gc) { result = (CgsEnum) n; break; } } } return result; }
static OSStatus rdpsnd_ios_render_cb( void *inRefCon, AudioUnitRenderActionFlags __unused *ioActionFlags, const AudioTimeStamp __unused *inTimeStamp, UInt32 inBusNumber, UInt32 __unused inNumberFrames, AudioBufferList *ioData ) { unsigned int i; if (inBusNumber != 0) { return noErr; } rdpsndIOSPlugin *p = THIS(inRefCon); for (i = 0; i < ioData->mNumberBuffers; i++) { AudioBuffer* target_buffer = &ioData->mBuffers[i]; int32_t available_bytes = 0; const void *buffer = TPCircularBufferTail(&p->buffer, &available_bytes); if (buffer != NULL && available_bytes > 0) { const int bytes_to_copy = MIN((int32_t)target_buffer->mDataByteSize, available_bytes); memcpy(target_buffer->mData, buffer, bytes_to_copy); target_buffer->mDataByteSize = bytes_to_copy; TPCircularBufferConsume(&p->buffer, bytes_to_copy); } else { target_buffer->mDataByteSize = 0; AudioOutputUnitStop(p->audio_unit); p->is_playing = 0; } } return noErr; }
/* * Class: sfml_graphics_RectangleShape * Method: nativeSetSize * Signature: (FF)V */ JNIEXPORT void JNICALL Java_sfml_graphics_RectangleShape_nativeSetSize (JNIEnv *env, jobject obj, jfloat w, jfloat h) { THIS(sf::RectangleShape)->setSize(sf::Vector2f(w, h)); }
/* * Class: sfml_audio_SoundBuffer * Method: nativeCopy * Signature: ()J */ JNIEXPORT jlong JNICALL Java_sfml_audio_SoundBuffer_nativeCopy (JNIEnv *env, jobject obj) { return (jlong)new sf::SoundBuffer(*THIS(sf::SoundBuffer)); }
/* * Class: sfml_audio_SoundBuffer * Method: nativeDelete * Signature: ()V */ JNIEXPORT void JNICALL Java_sfml_audio_SoundBuffer_nativeDelete (JNIEnv *env, jobject obj) { delete THIS(sf::SoundBuffer); }
/* * Return a GC associated with the given id, allocating if needed. */ GC getCgsGC(XtermWidget xw, VTwin *cgsWin, CgsEnum cgsId) { CgsCache *me; GC result = 0; int j, k; unsigned used = 0; if ((me = myCache(xw, cgsWin, cgsId)) != 0) { TRACE2(("getCgsGC(%s, %s)\n", traceVTwin(xw, cgsWin), traceCgsEnum(cgsId))); if (me->mask != 0) { /* fill in the unchanged fields */ if (!(me->mask & GC_CSet)) NEXT(cset) = 0; /* OPT_DEC_CHRSET */ if (!(me->mask & GCFont)) NEXT(font) = THIS(font); if (!(me->mask & GCForeground)) NEXT(fg) = THIS(fg); if (!(me->mask & GCBackground)) NEXT(bg) = THIS(bg); if (NEXT(font) == 0) { setCgsFont(xw, cgsWin, cgsId, 0); } TRACE2(("...Cgs new data fg=%s, bg=%s, font=%s cset %s\n", tracePixel(xw, NEXT(fg)), tracePixel(xw, NEXT(bg)), traceFont(NEXT(font)), traceCSet(NEXT(cset)))); /* try to find the given data in an already-created GC */ for (j = 0; j < DEPTH; ++j) { if (LIST(j).gc != 0 && SameFont(LIST(j).font, NEXT(font)) && SameCSet(LIST(j).cset, NEXT(cset)) && SameColor(LIST(j).fg, NEXT(fg)) && SameColor(LIST(j).bg, NEXT(bg))) { LINK(j); result = THIS(gc); TRACE2(("getCgsGC existing %p(%d)\n", result, ITEM())); break; } } if (result == 0) { /* try to find an empty slot, to create a new GC */ used = 0; for (j = 0; j < DEPTH; ++j) { if (LIST(j).gc == 0) { LINK(j); result = newCache(xw, cgsWin, cgsId, me); break; } if (used < LIST(j).used) used = LIST(j).used; } } if (result == 0) { /* if none were empty, pick the least-used slot, to modify */ for (j = 0, k = -1; j < DEPTH; ++j) { if (used >= LIST(j).used) { used = LIST(j).used; k = j; } } LINK(k); TRACE2(("...getCgsGC least-used(%d) was %d\n", k, THIS(used))); result = chgCache(xw, cgsId, me, True); } me->next = *(me->data); } else { result = THIS(gc); } me->mask = 0; THIS(used) += 1; TRACE2(("...getCgsGC(%s, %s) gc %p(%d), used %d\n", traceVTwin(xw, cgsWin), traceCgsEnum(cgsId), result, ITEM(), THIS(used))); } return result; }
/* * Class: org_jsfml_audio_SoundRecorder * Method: nativeDelete * Signature: ()V */ JNIEXPORT void JNICALL Java_org_jsfml_audio_SoundRecorder_nativeDelete (JNIEnv *env, jobject obj) { delete THIS(JSFML::SoundRecorder); }
static GC chgCache(XtermWidget xw, CgsEnum cgsId GCC_UNUSED, CgsCache * me, Bool both) { XGCValues xgcv; XtGCMask mask = (GCForeground | GCBackground | GCFont); memset(&xgcv, 0, sizeof(xgcv)); TRACE2(("chgCache(%s) old data fg=%s, bg=%s, font=%s cset %s\n", traceCgsEnum(cgsId), tracePixel(xw, THIS(fg)), tracePixel(xw, THIS(bg)), traceFont(THIS(font)), traceCSet(THIS(cset)))); #if OPT_TRACE > 1 if (!SameFont(THIS(font), NEXT(font))) TRACE2(("...chgCache new font=%s\n", traceFont(NEXT(font)))); if (!SameCSet(THIS(cset), NEXT(cset))) TRACE2(("...chgCache new cset=%s\n", traceCSet(NEXT(cset)))); if (!SameColor(THIS(fg), NEXT(fg))) TRACE2(("...chgCache new fg=%s\n", tracePixel(xw, NEXT(fg)))); if (!SameColor(THIS(bg), NEXT(bg))) TRACE2(("...chgCache new bg=%s\n", tracePixel(xw, NEXT(bg)))); #endif if (both) { THIS(font) = NEXT(font); THIS(cset) = NEXT(cset); } THIS(fg) = NEXT(fg); THIS(bg) = NEXT(bg); xgcv.font = THIS(font)->fs->fid; xgcv.foreground = THIS(fg); xgcv.background = THIS(bg); XChangeGC(myDisplay(xw), THIS(gc), mask, &xgcv); TRACE2(("...chgCache(%s) updated gc %p(%d)\n", traceCgsEnum(cgsId), THIS(gc), ITEM())); THIS(used) = 0; return THIS(gc); }
static GC newCache(XtermWidget xw, VTwin *cgsWin, CgsEnum cgsId, CgsCache * me) { XGCValues xgcv; XtGCMask mask; THIS(font) = NEXT(font); THIS(cset) = NEXT(cset); THIS(fg) = NEXT(fg); THIS(bg) = NEXT(bg); memset(&xgcv, 0, sizeof(xgcv)); xgcv.font = NEXT(font)->fs->fid; mask = (GCForeground | GCBackground | GCFont); switch (cgsId) { case gcNorm: case gcBold: case gcNormReverse: case gcBoldReverse: #if OPT_WIDE_CHARS case gcWide: case gcWBold: case gcWideReverse: case gcWBoldReverse: #endif mask |= (GCGraphicsExposures | GCFunction); xgcv.graphics_exposures = True; /* default */ xgcv.function = GXcopy; break; #if OPT_BOX_CHARS case gcLine: mask |= (GCGraphicsExposures | GCFunction); xgcv.graphics_exposures = True; /* default */ xgcv.function = GXcopy; break; case gcDots: xgcv.fill_style = FillTiled; xgcv.tile = XmuCreateStippledPixmap(XtScreen((Widget) xw), THIS(fg), THIS(bg), xw->core.depth); THIS(tile) = xgcv.tile; mask = (GCForeground | GCBackground); mask |= (GCGraphicsExposures | GCFunction | GCTile | GCFillStyle); xgcv.graphics_exposures = True; /* default */ xgcv.function = GXcopy; break; #endif #if OPT_DEC_CHRSET case gcCNorm: case gcCBold: break; #endif case gcVTcursNormal: /* FALLTHRU */ case gcVTcursFilled: /* FALLTHRU */ case gcVTcursReverse: /* FALLTHRU */ case gcVTcursOutline: /* FALLTHRU */ break; #if OPT_TEK4014 case gcTKcurs: /* FALLTHRU */ /* FIXME */ #endif case gcMAX: /* should not happen */ return 0; } xgcv.foreground = NEXT(fg); xgcv.background = NEXT(bg); THIS(gc) = XCreateGC(myDisplay(xw), myDrawable(xw, cgsWin), mask, &xgcv); TRACE(("getCgsGC(%s) created gc %p(%d)\n", traceCgsEnum(cgsId), (void *) THIS(gc), ITEM())); THIS(used) = 0; return THIS(gc); }
//This callback is used to feed the AU buffers static OSStatus rdpsnd_ios_render_cb( void *inRefCon, AudioUnitRenderActionFlags *ioActionFlags, const AudioTimeStamp *inTimeStamp, UInt32 inBusNumber, UInt32 inNumberFrames, AudioBufferList *ioData ) { unsigned int i; if (inBusNumber != 0) { return noErr; } rdpsndIOSPlugin *p = THIS(inRefCon); //printf("Playing %d frames... ", (unsigned int)inNumberFrames); //pthread_mutex_lock(&p->bMutex); for (i = 0; i < ioData->mNumberBuffers; i++) { //printf("buf%d ", i); /*printf("buf size = %d (%lums) ", (unsigned int)ioData->mBuffers[i].mDataByteSize, (ioData->mBuffers[i].mDataByteSize * 1000) / p->bpsAvg); */ AudioBuffer* target_buffer = &ioData->mBuffers[i]; int32_t available_bytes = 0; const void *buffer = TPCircularBufferTail(&p->buffer, &available_bytes); if (buffer != NULL && available_bytes > 0) { const int bytes_to_copy = MIN((int32_t)target_buffer->mDataByteSize, available_bytes); memcpy(target_buffer->mData, buffer, bytes_to_copy); target_buffer->mDataByteSize = bytes_to_copy; TPCircularBufferConsume(&p->buffer, bytes_to_copy); p->frameCnt += inNumberFrames; } else { *ioActionFlags = *ioActionFlags | kAudioUnitRenderAction_OutputIsSilence; //FIXME: force sending of any remaining items in queue if (Queue_Count(p->waveQ) > 0) { p->frameCnt += 1000000; } //in case we didnt get a post render callback first (observed) rdpsnd_count_frames(p); target_buffer->mDataByteSize = 0; AudioOutputUnitStop(p->audio_unit); //p->is_playing = 0; rdpsnd_set_isPlaying(p, FALSE); printf("Buffer is empty with frameCnt:%d(uderrun)\n", p->frameCnt); } } //pthread_mutex_unlock(&p->bMutex); return noErr; }
/* * Class: sfml_audio_SoundBuffer * Method: nativeLoadFromSamples * Signature: (Ljava/nio/Buffer;III)Z */ JNIEXPORT jboolean JNICALL Java_sfml_audio_SoundBuffer_nativeLoadFromSamples (JNIEnv *env, jobject obj, jobject buffer, jint sampleCount, jint channelCount, jint sampleRate) { sf::Int16 *samples = (sf::Int16*)env->GetDirectBufferAddress(buffer); return THIS(sf::SoundBuffer)->loadFromSamples(samples, sampleCount, channelCount, sampleRate); }
/** * Wrapper API to make StringEnumeration look like UEnumeration. */ static void U_CALLCONV ustrenum_reset(UEnumeration* en, UErrorCode* ec) { THIS(en)->reset(*ec); }
/* * Class: org_jsfml_audio_SoundRecorder * Method: nativeSetExPtr * Signature: ()V */ JNIEXPORT void JNICALL Java_org_jsfml_audio_SoundRecorder_nativeSetExPtr (JNIEnv *env, jobject obj) { JSFML::NativeObject::SetExPointer(env, obj, org_jsfml_internal_ExPtr_SOUND_RECORDER, dynamic_cast<sf::SoundRecorder*>(THIS(JSFML::SoundRecorder))); }
/** * Wrapper API to make StringEnumeration look like UEnumeration. */ static int32_t U_CALLCONV ustrenum_count(UEnumeration* en, UErrorCode* ec) { return THIS(en)->count(*ec); }