#include "edlsession.h"
#include "file.h"
#include "filesystem.h"
+#include "filexml.h"
#include "indexable.h"
#include "language.h"
#include "localsession.h"
if(client->window_x < 0) client->window_x = info.get_abs_cursor_x();
if(client->window_y < 0) client->window_y = info.get_abs_cursor_y();
if(!window)
- window = client->new_window();
+ window = (PluginClientWindow*)client->new_window();
if(window) {
window->lock_window("PluginClientThread::run");
window->create_objects();
+ VFrame *picon = client->server->get_picon();
+ if( picon ) window->set_icon(picon);
window->unlock_window();
/* Only set it here so tracking doesn't update it until everything is created. */
//printf("PluginClientThread::run %p %d\n", this, __LINE__);
window->hide_window(1);
window->unlock_window();
+ window->done_event(result);
// Can't save defaults in the destructor because it's not called immediately
// after closing.
/* if(client->defaults) */ client->save_defaults_xml();
PluginClientWindow::PluginClientWindow(PluginClient *client,
- int w,
- int h,
- int min_w,
- int min_h,
- int allow_resize)
+ int w, int h, int min_w, int min_h, int allow_resize)
: BC_Window(client->gui_string,
client->window_x /* - w / 2 */,
client->window_y /* - h / 2 */,
- w, h, min_w, min_h, allow_resize, 0, 1)
+ (int)(w*get_resources()->font_scale+0.5), (int)(h*get_resources()->font_scale+0.5),
+ (int)(min_w*get_resources()->font_scale+0.5), (int)(min_h*get_resources()->font_scale+0.5),
+ allow_resize, 0, 1)
{
this->client = client;
}
PluginClientWindow::PluginClientWindow(const char *title,
int x, int y, int w, int h, int min_w, int min_h, int allow_resize)
- : BC_Window(title, x, y, w, h, min_w, min_h, allow_resize, 0, 1)
+ : BC_Window(title, x, y,
+ (int)(w*get_resources()->font_scale+0.5), (int)(h*get_resources()->font_scale+0.5),
+ (int)(min_w*get_resources()->font_scale+0.5), (int)(min_h*get_resources()->font_scale+0.5),
+ allow_resize, 0, 1)
{
this->client = 0;
}
PluginClient::~PluginClient()
{
-// Delete the GUI thread. The GUI must be hidden with hide_gui first.
- delete thread;
+ if( thread ) {
+ hide_gui();
+ thread->join();
+ delete thread;
+ }
// Virtual functions don't work here.
if(defaults) delete defaults;
thread->window->set_done(0);
//printf("PluginClient::hide_gui %d thread->window=%p\n", __LINE__, thread->window);
thread->window->unlock_window();
-//printf("PluginClient::delete_thread %d\n", __LINE__);
}
}
thread->start();
thread->init_complete->lock("PluginClient::show_gui");
// Must wait before sending any hide_gui
- if(thread->window)
- {
- thread->window->init_wait();
- }
- else
- {
- return 1;
- }
+ if( !thread->window ) return 1;
+ thread->window->init_wait();
return 0;
}
//printf("PluginClient::load_defaults_xml %d %s\n", __LINE__, path);
KeyFrame temp_keyframe;
- FILE *fd = fopen(path, "r");
- if(fd)
- {
- char *data = temp_keyframe.get_data();
- int data_size = fread(data, 1, MESSAGESIZE-1, fd);
+ FILE *fp = fopen(path, "r");
+ if( fp ) {
+ struct stat st; int fd = fileno(fp);
+ int64_t sz = !fstat(fd, &st) ? st.st_size : BCTEXTLEN;
+ char *data = temp_keyframe.get_data(sz+1);
+ int data_size = fread(data, 1, sz, fp);
if( data_size < 0 ) data_size = 0;
- if( data_size > 0 )
- {
+ if( data_size > 0 ) {
+ data[data_size] = 0;
+ temp_keyframe.xbuf->oseek(data_size);
// Get window extents
- int state = 0;
- for(int i = 0; i < data_size - 8; i++)
- {
- if(data[i] == '<') break;
- if(isdigit(data[i]))
- {
- if(state == 0)
- {
- window_x = atoi(data + i);
- state++;
- }
- else
- {
- window_y = atoi(data + i);
- break;
- }
- while(i < data_size && isdigit(data[i])) i++;
+ int i = 0;
+ for( int state=0; i<(data_size-8) && state>=0; ++i ) {
+ if( !data[i] || data[i] == '<' ) break;
+ if( !isdigit(data[i]) ) continue;
+ if( !state ) {
+ window_x = atoi(data + i);
+ state = 1;
+ }
+ else {
+ window_y = atoi(data + i);
+ state = -1;
}
+ while( i<data_size && isdigit(data[i]) ) ++i;
}
- data[data_size] = 0;
+ temp_keyframe.xbuf->iseek(i);
read_data(&temp_keyframe);
}
- fclose(fd);
+ fclose(fp);
}
using_defaults = 0;
//printf("PluginClient::load_defaults_xml %d %s\n", __LINE__, path);
float PluginClient::get_red()
{
- if(server->mwindow)
- return server->mwindow->edl->local_session->red;
- else
- if(server->edl)
- return server->edl->local_session->red;
- else
- return 0;
+ EDL *edl = server->mwindow ? server->mwindow->edl : server->edl;
+ return !edl ? 0 : edl->local_session->use_max ?
+ edl->local_session->red_max :
+ edl->local_session->red;
}
float PluginClient::get_green()
{
- if(server->mwindow)
- return server->mwindow->edl->local_session->green;
- else
- if(server->edl)
- return server->edl->local_session->green;
- else
- return 0;
+ EDL *edl = server->mwindow ? server->mwindow->edl : server->edl;
+ return !edl ? 0 : edl->local_session->use_max ?
+ edl->local_session->green_max :
+ edl->local_session->green;
}
float PluginClient::get_blue()
{
- if(server->mwindow)
- return server->mwindow->edl->local_session->blue;
- else
- if(server->edl)
- return server->edl->local_session->blue;
- else
- return 0;
+ EDL *edl = server->mwindow ? server->mwindow->edl : server->edl;
+ return !edl ? 0 : edl->local_session->use_max ?
+ edl->local_session->blue_max :
+ edl->local_session->blue;
}
-
int64_t PluginClient::get_source_position()
{
return source_position;
server->mwindow->undo->update_undo_before(_("tweek"), this);
#ifdef USE_KEYFRAME_SPANNING
KeyFrame keyframe;
- keyframe.copy_from(server->get_keyframe());
save_data(&keyframe);
server->apply_keyframe(&keyframe);
#else