#ifndef TITLE_H
#define TITLE_H
+#define USE_STROKER
+
+#define KW_NUDGE _("nudge")
+#define KW_COLOR _("color")
+#define KW_ALPHA _("alpha")
+#define KW_FONT _("font")
+#define KW_SIZE _("size")
+#define KW_BOLD _("bold")
+#define KW_ITALIC _("italic")
+#define KW_CAPS _("caps")
+#define KW_UL _("ul")
+#define KW_BLINK _("blink")
+#define KW_FIXED _("fixed")
+#define KW_SUP _("sup")
+#define KW_PNG _("png")
class TitleConfig;
class TitleGlyph;
#include "indexable.inc"
#include "loadbalance.h"
#include "mutex.h"
-#include "overlayframe.inc"
+#include "overlayframe.h"
#include "pluginvclient.h"
#include "renderengine.inc"
#include "titlerwindow.h"
#include <ft2build.h>
#include FT_FREETYPE_H
#include <sys/types.h>
+#include <wchar.h>
+#include <wctype.h>
// Motion strategy
#define TOTAL_PATHS 5
double fade_in, fade_out;
float pixels_per_second; // Speed of motion
// Text to display
- wchar_t wtext[BCTEXTLEN];
+ wchar_t wtext[3*BCTEXTLEN];
int wlen;
// Position in frame relative to top left
float title_x, title_y;
int pass;
};
-
-// Overlay text mask with fractional translation
-// We don't use OverlayFrame to enable alpha blending on non alpha
-// output.
-class TitleTranslatePackage : public LoadPackage
-{
-public:
- TitleTranslatePackage();
- int y1, y2;
-};
-
-typedef struct {
- int in_x1;
- float in_fraction1;
- int in_x2; // Might be same as in_x1 for boundary
- float in_fraction2;
- float output_fraction;
-} transfer_table_f;
-
-class TitleTranslateUnit : public LoadClient
-{
-public:
- TitleTranslateUnit(TitleMain *plugin, TitleTranslate *server);
-
- static void translation_array_f(transfer_table_f* &table,
- float out_x1, float out_x2, int out_total,
- float in_x1, float in_x2, int in_total,
- int &x1_out, int &x2_out);
- void process_package(LoadPackage *package);
- TitleMain *plugin;
-};
-
-class TitleTranslate : public LoadServer
-{
-public:
- TitleTranslate(TitleMain *plugin, int cpus);
- ~TitleTranslate();
- void init_packages();
- void run_packages();
- LoadClient* new_client();
- LoadPackage* new_package();
- TitleMain *plugin;
- transfer_table_f *y_table;
- transfer_table_f *x_table;
- VFrame *xlat_mask;
- int out_x1, out_x2;
- int out_y1, out_y2;
-};
-
template<class typ> class TitleStack : public ArrayList<typ>
{
typ &last() { return ArrayList<typ>::last(); }
int wcur() { return eof() ? -1 : *out; }
int wnext() { return eof() ? -1 : *out++; }
int wget(wchar_t &wch);
+ int tget(wchar_t &wch);
+ wchar_t wid[BCSTRLEN], wtxt[BCTEXTLEN];
char id[BCSTRLEN], text[BCTEXTLEN];
int set_attributes(int ret);
};
+// Overlay text mask with fractional translation
+// We don't use OverlayFrame to enable alpha blending on non alpha
+// output.
+class TitleTranslatePackage : public LoadPackage
+{
+public:
+ TitleTranslatePackage();
+ int y1, y2;
+};
+
+class TitleTranslateUnit : public LoadClient
+{
+public:
+ TitleTranslateUnit(TitleMain *plugin, TitleTranslate *server);
+
+ void process_package(LoadPackage *package);
+ TitleMain *plugin;
+};
+
+class TitleTranslate : public LoadServer
+{
+public:
+ TitleTranslate(TitleMain *plugin, int cpus);
+ ~TitleTranslate();
+
+ TitleMain *plugin;
+ VFrame *input;
+ float in_w, in_h, out_w, out_h;
+ float ix1, iy1, ix2, iy2;
+ float ox1, oy1, ox2, oy2;
+
+ void copy(VFrame *input);
+ LoadClient* new_client();
+ LoadPackage* new_package();
+ void init_packages();
+};
+
+
class TitleMain : public PluginVClient
{
public:
void update_gui();
void save_data(KeyFrame *keyframe);
void read_data(KeyFrame *keyframe);
- void insert_text(const char *txt, int pos);
+ void insert_text(const wchar_t *wtxt, int pos);
void build_previews(TitleWindow *gui);
void reset_render();
Indexable *open_background(const char *filename);
int read_background(VFrame *frame, int64_t position, int color_model);
void draw_background();
- BC_FontEntry* get_font(const char *font_name, int style);
+ static BC_FontEntry* get_font(const char *font_name, int style);
BC_FontEntry* config_font();
TitleGlyph *get_glyph(FT_ULong char_code, BC_FontEntry *font, int size, int style);
int get_width(TitleGlyph *cur, TitleGlyph *nxt);
int window_w, window_h;
int fuzz, fuzz1, fuzz2;
- int title_x, title_y, title_w, title_h;
+ float title_x, title_y;
+ int title_w, title_h;
float text_x, text_y, text_w, text_h;
float text_x1, text_y1, text_x2, text_y2;