//================================================================ void detach_free_draw_from_track(TrackSceneNode* t, int fdid) { if(!t) return; if(!is_free_draw_rectangle(fdid)) return; for( int i = 0; i < t->freedrawvec.size(); i++) { if( t->freedrawvec[i] == fdid) { t->freedrawvec[i] = -1; return; } } }
//================================================================ void detach_free_draw_from_scene(int scene, int fdid) { if(!is_track_scene(scene)) return; if(!is_free_draw_rectangle(fdid)) return; TrackScene* ts = trackscenevec[scene]; for( int i = 0; i < ts->freedrawvec.size(); i++) { if( ts->freedrawvec[i] == fdid) { ts->freedrawvec[i] = -1; i = ts->freedrawvec.size(); } } }
//================================================================ void attach_free_draw_to_track(TrackSceneNode* t, int fdid) { if(!t) return; if(!is_free_draw_rectangle(fdid)) return; for( int i = 0; i < t->freedrawvec.size(); i++) { if( t->freedrawvec[i] == -1) { t->freedrawvec[i] = fdid; return; } } t->freedrawvec.push_back(fdid); }
//================================================================ void attach_free_draw_to_scene(int fdid) { if(!is_scene_bound()) return; if(!is_track_scene(BoundScene)) return; if(!is_free_draw_rectangle(fdid)) return; TrackScene* ts = trackscenevec[BoundScene]; for( int i = 0; i < ts->freedrawvec.size(); i++) { if( ts->freedrawvec[i] == -1) { ts->freedrawvec[i] = fdid; return; } } trackscenevec[BoundScene]->freedrawvec.push_back(fdid); }
//========================================================================== void free_free_draw_rectangle(int fdid) { if(!is_free_draw_rectangle(fdid)) return; TrackSceneNode* tsn; CoreSection* cs; tsn = get_scene_track( freedrawvec[fdid]->track); cs = get_track_section( tsn, freedrawvec[fdid]->section ); if( cs ) detach_free_draw_from_section( cs, fdid ); else if( tsn ) detach_free_draw_from_track( tsn, fdid ); else detach_free_draw_from_scene( fdid ); delete freedrawvec[fdid]; freedrawvec[fdid] = NULL; }
//========================================================================== void set_free_draw_width(int fdid, float w) { if(!is_free_draw_rectangle(fdid)) return; freedrawvec[fdid]->w = w; }
//========================================================================== void render_free_draw(int fdid) { try { #ifdef DEBUG printf("render_free_draw called %%%%%%%%%%%\n"); #endif if( !is_free_draw_rectangle(fdid)) return; if( !is_free_draw_visible(fdid)) return; PluginFreeDrawRectangle *pfdr = freedrawvec[fdid]; #ifdef DEBUG printf("PFDR Data:\nPlugin %d\nX: %f\tY: %f\n", pfdr->plugin, pfdr->x, pfdr->y); printf("W: %f\tH: %f\n", pfdr->w, pfdr->h); #endif JNIEnv* jenv = get_current_jnienv(); if( !jenv ) return; #ifdef DEBUG else printf("JNIEnv Yay\n"); #endif jobject pmo = get_plugin_manager_object(); if( !pmo ) { printf("NULL PMO\n"); return; } #ifdef DEBUG else printf("PMO Yay %d\n", pmo); #endif jclass pmc = get_plugin_manager_class(); if( !pmc ) { return; } #ifdef DEBUG else printf("PMC Yay %d\n", pmc); #endif jmethodID pmm = get_plugin_manager_get_plugin(); if( !pmm ) { return; } #ifdef DEBUG else printf("PMM Yay %d\n", pmm); #endif jobject cpo = jenv->CallObjectMethod( pmo, pmm, pfdr->plugin); if( !cpo ) { return; } #ifdef DEBUG else printf("CPO Yay\n"); #endif jclass cpc = jenv->GetObjectClass(cpo); if( !cpc ) { return; } #ifdef DEBUG else printf("CPC Yay\n"); #endif jmethodID cpm = jenv->GetMethodID( cpc, "renderRectangle", "(IIIIFFFFF)V"); if( !cpm ) { return; } #ifdef DEBUG else printf("CPM Yay\n"); printf("Calling object method!!!\n"); fflush(stdout); #endif int cur_canvas = get_current_canvas(); // if the track id and section id != -1 then set the // width as the the width of the section image scaled for the // canvas CoreSection *cs = get_track_section(get_scene_track(pfdr->track), pfdr->section); jenv->CallObjectMethod( cpo, cpm, fdid, cur_canvas, pfdr->track, pfdr->section, pfdr->x, pfdr->y, pfdr->w, pfdr->h, get_canvas_height(cur_canvas) / get_canvas_orig_height(cur_canvas)); #ifdef DEBUG printf("Called Object Method!!!!\n"); #endif } catch( ... ) { printf("Something very strange!\n"); } }
//========================================================================== void set_free_draw_scale_independence( int fdid, bool flag ) { if( !is_free_draw_rectangle(fdid)) return; freedrawvec[fdid]->scale_independent = flag; }
//========================================================================== void set_free_draw_visibility( int fdid, bool flag) { if( !is_free_draw_rectangle(fdid)) return; freedrawvec[fdid]->visible = flag; }
//========================================================================== void set_free_draw_x(int fdid, float x) { if(!is_free_draw_rectangle(fdid)) return; freedrawvec[fdid]->x = x; }
//========================================================================== void set_free_draw_y(int fdid, float y) { if(!is_free_draw_rectangle(fdid)) return; freedrawvec[fdid]->y = y; }
//========================================================================== int get_free_draw_plugin(int fdid) { if( !is_free_draw_rectangle(fdid)) return -1; return freedrawvec[fdid]->plugin; }
//========================================================================== void set_free_draw_height(int fdid, float h) { if(!is_free_draw_rectangle(fdid)) return; freedrawvec[fdid]->h = h; }
//========================================================================== bool is_free_draw_visible(int fdid) { if(!is_free_draw_rectangle(fdid)) return false; return freedrawvec[fdid]->visible; }
//========================================================================== bool is_free_draw_scale_independent( int fdid ) { if( !is_free_draw_rectangle(fdid)) return false; return freedrawvec[fdid]->scale_independent; }
//========================================================================== float get_free_draw_y(int fdid) { if( !is_free_draw_rectangle(fdid)) return 0.0f; return freedrawvec[fdid]->y; }
//========================================================================== int get_free_draw_section(int fdid) { if( !is_free_draw_rectangle(fdid)) return -1; return freedrawvec[fdid]->section; }
//========================================================================== int get_free_draw_track(int fdid) { if( !is_free_draw_rectangle(fdid)) return -1; return freedrawvec[fdid]->track; }