Metadata display: support word-wrapped note
- Match layout from stamp buffer (note last so it can wrap) - Correct vertical spacing (didn't take decender into account) - Use U.pixelsize when setting font-size.
This commit is contained in:
@@ -2083,9 +2083,9 @@ static const char *meta_data_list[] =
|
|||||||
{
|
{
|
||||||
"File",
|
"File",
|
||||||
"Strip",
|
"Strip",
|
||||||
"Note",
|
|
||||||
"Date",
|
"Date",
|
||||||
"RenderTime",
|
"RenderTime",
|
||||||
|
"Note",
|
||||||
"Marker",
|
"Marker",
|
||||||
"Time",
|
"Time",
|
||||||
"Frame",
|
"Frame",
|
||||||
@@ -2106,7 +2106,15 @@ static void metadata_draw_imbuf(ImBuf *ibuf, const rctf *rect, int fontid, const
|
|||||||
short i;
|
short i;
|
||||||
int len;
|
int len;
|
||||||
const float height = BLF_height_max(fontid);
|
const float height = BLF_height_max(fontid);
|
||||||
const float vertical_offset = height + (0.1f * U.widget_unit);
|
const float margin = height / 8;
|
||||||
|
const float vertical_offset = (height + margin);
|
||||||
|
|
||||||
|
/* values taking margins into account */
|
||||||
|
const float descender = BLF_descender(fontid);
|
||||||
|
const float xmin = (rect->xmin + margin);
|
||||||
|
const float xmax = (rect->xmax - margin);
|
||||||
|
const float ymin = (rect->ymin + margin) - descender;
|
||||||
|
const float ymax = (rect->ymax - margin) - descender;
|
||||||
|
|
||||||
if (is_top) {
|
if (is_top) {
|
||||||
for (i = 0; i < 4; i++) {
|
for (i = 0; i < 4; i++) {
|
||||||
@@ -2115,8 +2123,7 @@ static void metadata_draw_imbuf(ImBuf *ibuf, const rctf *rect, int fontid, const
|
|||||||
bool do_newline = false;
|
bool do_newline = false;
|
||||||
len = BLI_snprintf_rlen(temp_str, MAX_METADATA_STR, "%s: ", meta_data_list[0]);
|
len = BLI_snprintf_rlen(temp_str, MAX_METADATA_STR, "%s: ", meta_data_list[0]);
|
||||||
if (metadata_is_valid(ibuf, temp_str, 0, len)) {
|
if (metadata_is_valid(ibuf, temp_str, 0, len)) {
|
||||||
BLF_position(fontid, rect->xmin + (0.2f * U.widget_unit),
|
BLF_position(fontid, xmin, ymax - vertical_offset, 0.0f);
|
||||||
rect->ymax - vertical_offset, 0.0f);
|
|
||||||
BLF_draw(fontid, temp_str, BLF_DRAW_STR_DUMMY_MAX);
|
BLF_draw(fontid, temp_str, BLF_DRAW_STR_DUMMY_MAX);
|
||||||
do_newline = true;
|
do_newline = true;
|
||||||
}
|
}
|
||||||
@@ -2124,30 +2131,40 @@ static void metadata_draw_imbuf(ImBuf *ibuf, const rctf *rect, int fontid, const
|
|||||||
len = BLI_snprintf_rlen(temp_str, MAX_METADATA_STR, "%s: ", meta_data_list[1]);
|
len = BLI_snprintf_rlen(temp_str, MAX_METADATA_STR, "%s: ", meta_data_list[1]);
|
||||||
if (metadata_is_valid(ibuf, temp_str, 1, len)) {
|
if (metadata_is_valid(ibuf, temp_str, 1, len)) {
|
||||||
line_width = BLF_width(fontid, temp_str, BLF_DRAW_STR_DUMMY_MAX);
|
line_width = BLF_width(fontid, temp_str, BLF_DRAW_STR_DUMMY_MAX);
|
||||||
BLF_position(fontid, rect->xmax - line_width - (0.2f * U.widget_unit),
|
BLF_position(fontid, xmax - line_width, ymax - vertical_offset, 0.0f);
|
||||||
rect->ymax - vertical_offset, 0.0f);
|
|
||||||
BLF_draw(fontid, temp_str, BLF_DRAW_STR_DUMMY_MAX);
|
BLF_draw(fontid, temp_str, BLF_DRAW_STR_DUMMY_MAX);
|
||||||
do_newline = true;
|
do_newline = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (do_newline)
|
if (do_newline)
|
||||||
ofs_y += vertical_offset;
|
ofs_y += vertical_offset;
|
||||||
}
|
} /* Strip */
|
||||||
else if (i == 1) {
|
else if (i == 1 || i == 2) {
|
||||||
len = BLI_snprintf_rlen(temp_str, MAX_METADATA_STR, "%s: ", meta_data_list[i + 1]);
|
len = BLI_snprintf_rlen(temp_str, MAX_METADATA_STR, "%s: ", meta_data_list[i + 1]);
|
||||||
if (metadata_is_valid(ibuf, temp_str, i + 1, len)) {
|
if (metadata_is_valid(ibuf, temp_str, i + 1, len)) {
|
||||||
BLF_position(fontid, rect->xmin + (0.2f * U.widget_unit),
|
BLF_position(fontid, xmin, ymax - vertical_offset - ofs_y, 0.0f);
|
||||||
rect->ymax - vertical_offset - ofs_y, 0.0f);
|
|
||||||
BLF_draw(fontid, temp_str, BLF_DRAW_STR_DUMMY_MAX);
|
BLF_draw(fontid, temp_str, BLF_DRAW_STR_DUMMY_MAX);
|
||||||
ofs_y += vertical_offset;
|
ofs_y += vertical_offset;
|
||||||
}
|
}
|
||||||
|
} /* Note (wrapped) */
|
||||||
|
else if (i == 3) {
|
||||||
|
len = BLI_snprintf_rlen(temp_str, MAX_METADATA_STR, "%s: ", meta_data_list[i + 1]);
|
||||||
|
if (metadata_is_valid(ibuf, temp_str, i + 1, len)) {
|
||||||
|
struct ResultBLF info;
|
||||||
|
BLF_enable(fontid, BLF_WORD_WRAP);
|
||||||
|
BLF_wordwrap(fontid, ibuf->x - (margin * 2));
|
||||||
|
BLF_position(fontid, xmin, ymax - vertical_offset - ofs_y, 0.0f);
|
||||||
|
BLF_draw_ex(fontid, temp_str, BLF_DRAW_STR_DUMMY_MAX, &info);
|
||||||
|
BLF_wordwrap(fontid, 0);
|
||||||
|
BLF_disable(fontid, BLF_WORD_WRAP);
|
||||||
|
ofs_y += vertical_offset * info.lines;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
len = BLI_snprintf_rlen(temp_str, MAX_METADATA_STR, "%s: ", meta_data_list[i + 1]);
|
len = BLI_snprintf_rlen(temp_str, MAX_METADATA_STR, "%s: ", meta_data_list[i + 1]);
|
||||||
if (metadata_is_valid(ibuf, temp_str, i + 1, len)) {
|
if (metadata_is_valid(ibuf, temp_str, i + 1, len)) {
|
||||||
line_width = BLF_width(fontid, temp_str, BLF_DRAW_STR_DUMMY_MAX);
|
line_width = BLF_width(fontid, temp_str, BLF_DRAW_STR_DUMMY_MAX);
|
||||||
BLF_position(fontid, rect->xmax - line_width - (0.2f * U.widget_unit),
|
BLF_position(fontid, xmax - line_width, ymax - vertical_offset - ofs_y, 0.0f);
|
||||||
rect->ymax - vertical_offset - ofs_y, 0.0f);
|
|
||||||
BLF_draw(fontid, temp_str, BLF_DRAW_STR_DUMMY_MAX);
|
BLF_draw(fontid, temp_str, BLF_DRAW_STR_DUMMY_MAX);
|
||||||
ofs_y += vertical_offset;
|
ofs_y += vertical_offset;
|
||||||
}
|
}
|
||||||
@@ -2159,8 +2176,7 @@ static void metadata_draw_imbuf(ImBuf *ibuf, const rctf *rect, int fontid, const
|
|||||||
for (i = 5; i < 10; i++) {
|
for (i = 5; i < 10; i++) {
|
||||||
len = BLI_snprintf_rlen(temp_str, MAX_METADATA_STR, "%s: ", meta_data_list[i]);
|
len = BLI_snprintf_rlen(temp_str, MAX_METADATA_STR, "%s: ", meta_data_list[i]);
|
||||||
if (metadata_is_valid(ibuf, temp_str, i, len)) {
|
if (metadata_is_valid(ibuf, temp_str, i, len)) {
|
||||||
BLF_position(fontid, rect->xmin + (0.2f * U.widget_unit) + ofs_x,
|
BLF_position(fontid, xmin + ofs_x, ymin, 0.0f);
|
||||||
rect->ymin + (0.3f * U.widget_unit), 0.0f);
|
|
||||||
BLF_draw(fontid, temp_str, BLF_DRAW_STR_DUMMY_MAX);
|
BLF_draw(fontid, temp_str, BLF_DRAW_STR_DUMMY_MAX);
|
||||||
|
|
||||||
ofs_x += BLF_width(fontid, temp_str, BLF_DRAW_STR_DUMMY_MAX) + UI_UNIT_X;
|
ofs_x += BLF_width(fontid, temp_str, BLF_DRAW_STR_DUMMY_MAX) + UI_UNIT_X;
|
||||||
@@ -2171,9 +2187,10 @@ static void metadata_draw_imbuf(ImBuf *ibuf, const rctf *rect, int fontid, const
|
|||||||
|
|
||||||
static float metadata_box_height_get(ImBuf *ibuf, int fontid, const bool is_top)
|
static float metadata_box_height_get(ImBuf *ibuf, int fontid, const bool is_top)
|
||||||
{
|
{
|
||||||
|
const float height = BLF_height_max(fontid);
|
||||||
|
const float margin = (height / 8);
|
||||||
char str[MAX_METADATA_STR] = "";
|
char str[MAX_METADATA_STR] = "";
|
||||||
short i, count = 0;
|
short i, count = 0;
|
||||||
const float height = BLF_height_max(fontid) + 0.1f * U.widget_unit;
|
|
||||||
|
|
||||||
if (is_top) {
|
if (is_top) {
|
||||||
if (metadata_is_valid(ibuf, str, 0, 0) || metadata_is_valid(ibuf, str, 1, 0)) {
|
if (metadata_is_valid(ibuf, str, 0, 0) || metadata_is_valid(ibuf, str, 1, 0)) {
|
||||||
@@ -2181,7 +2198,23 @@ static float metadata_box_height_get(ImBuf *ibuf, int fontid, const bool is_top)
|
|||||||
}
|
}
|
||||||
for (i = 2; i < 5; i++) {
|
for (i = 2; i < 5; i++) {
|
||||||
if (metadata_is_valid(ibuf, str, i, 0)) {
|
if (metadata_is_valid(ibuf, str, i, 0)) {
|
||||||
count++;
|
if (i == 4) {
|
||||||
|
struct {
|
||||||
|
struct ResultBLF info;
|
||||||
|
rctf rect;
|
||||||
|
} wrap;
|
||||||
|
|
||||||
|
BLF_enable(fontid, BLF_WORD_WRAP);
|
||||||
|
BLF_wordwrap(fontid, ibuf->x - (margin * 2));
|
||||||
|
BLF_boundbox_ex(fontid, str, sizeof(str), &wrap.rect, &wrap.info);
|
||||||
|
BLF_wordwrap(fontid, 0);
|
||||||
|
BLF_disable(fontid, BLF_WORD_WRAP);
|
||||||
|
|
||||||
|
count += wrap.info.lines;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
count++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2194,7 +2227,7 @@ static float metadata_box_height_get(ImBuf *ibuf, int fontid, const bool is_top)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (count) {
|
if (count) {
|
||||||
return (height * count + (0.1f * U.widget_unit));
|
return (height + margin) * count;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@@ -2218,7 +2251,7 @@ void ED_region_image_metadata_draw(int x, int y, ImBuf *ibuf, const rctf *frame,
|
|||||||
glTranslatef(x, y, 0.0f);
|
glTranslatef(x, y, 0.0f);
|
||||||
glScalef(zoomx, zoomy, 1.0f);
|
glScalef(zoomx, zoomy, 1.0f);
|
||||||
|
|
||||||
BLF_size(blf_mono_font, style->widgetlabel.points * 1.5f, U.dpi);
|
BLF_size(blf_mono_font, style->widgetlabel.points * 1.5f * U.pixelsize, U.dpi);
|
||||||
|
|
||||||
/* *** upper box*** */
|
/* *** upper box*** */
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user