Qt: textRanges(). issue #35657

git-svn-id: trunk@61322 -
This commit is contained in:
zeljko 2019-06-05 13:15:36 +00:00
parent 4ec80d561c
commit 3f2cd1ae7e
6 changed files with 64 additions and 56 deletions

View File

@ -93,13 +93,12 @@ typedef struct {
} TQColor;
typedef TQColor *PQColor;
typedef struct {
int start;
int length;
QTextCharFormatH format;
} TQTextLayoutFormatRange;
typedef TQTextLayoutFormatRange *PQTextLayoutFormatRange;
} TTextRange;
typedef TTextRange *PTextRange;
#if defined DARWIN
typedef struct CGImage *CGImageRef;

View File

@ -306,43 +306,28 @@ void QTextLayout_clearFormats(QTextLayoutH handle)
((QTextLayout *)handle)->clearFormats();
}
void QTextLayout_formats(QTextLayoutH handle, PPtrIntArray retval)
int QTextLayout_formatsCount(QTextLayoutH handle)
{
QVector<QTextLayout::FormatRange> t_retval;
QVector<TQTextLayoutFormatRange> t_trans;
t_retval = ((QTextLayout *)handle)->formats();
int len = t_retval.size();
t_trans.resize(len);
setPtrIntArrayLength(retval, len);
if (len>0) {
PTRINT *array = (PTRINT *)getPtrIntArrayAddr(retval);
for (int i = 0; i < len; i++) {
t_trans[i].start = t_retval.at(i).start;
t_trans[i].length = t_retval.at(i).length;
t_trans[i].format = (const QTextCharFormatH) &t_retval.at(i).format;
array[i] = (PTRINT) (&t_trans.at(i));
}
}
return ((QTextLayout *)handle)->formats().size();
}
void QTextLayout_setFormats(QTextLayoutH handle, PPtrIntArray fmts)
int QTextLayout_textFormatsRanges(QTextLayoutH handle, PTextRange ranges, int maxCount)
{
QVector<QTextLayout::FormatRange> t_formats;
QVector<TQTextLayoutFormatRange*> t_trans;
QVector<QTextLayout::FormatRange> t_retval;
int res = 0;
int cnt = maxCount;
int sz;
int len = getPtrIntArrayLength(fmts);
t_formats.resize(len);
t_trans.resize(len);
if (len>0) {
PTRINT *array = (PTRINT *)getPtrIntArrayAddr(fmts);
for (int i = 0; i < len; i++) {
t_trans[i] = reinterpret_cast <TQTextLayoutFormatRange*>(array[i]);
t_formats[i].start = t_trans[i]->start;
t_formats[i].length = t_trans[i]->length;
t_formats[i].format = *(const QTextCharFormat*) t_trans[i]->format;
}
t_retval = ((QTextLayout *)handle)->formats();
sz = t_retval.size();
if (sz > cnt) cnt = sz;
for (int i=0; i<sz; i++)
{
ranges[i].start = t_retval.at(i).start;
ranges[i].length = t_retval.at(i).length;
}
((QTextLayout *)handle)->setFormats(t_formats);
return res;
}
QTextLineH QTextLine_Create()

View File

@ -72,8 +72,10 @@ C_EXPORT void QTextLayout_glyphRuns(QTextLayoutH handle, PPtrIntArray retval, in
C_EXPORT void QTextLayout_setFlags(QTextLayoutH handle, int flags);
C_EXPORT void QTextLayout_clearFormats(QTextLayoutH handle);
C_EXPORT void QTextLayout_formats(QTextLayoutH handle, PPtrIntArray retval);
C_EXPORT void QTextLayout_setFormats(QTextLayoutH handle, PPtrIntArray fmts);
/* utility function, there's no direct Qt mapping */
C_EXPORT int QTextLayout_formatsCount(QTextLayoutH handle);
/* utility function, there's no direct Qt mapping */
C_EXPORT int QTextLayout_formatsRanges(QTextLayoutH handle, PTextRange ranges, int maxCount);
C_EXPORT QTextLineH QTextLine_Create();
C_EXPORT void QTextLine_Destroy(QTextLineH handle);

View File

@ -245,25 +245,31 @@ int QTextBlock_fragmentIndex(QTextBlockH handle)
return (int) ((QTextBlock *)handle)->fragmentIndex();
}
void QTextBlock_textFormats(QTextBlockH handle, PPtrIntArray retval)
int QTextBlock_textFormatsCount(QTextBlockH handle)
{
return ((QTextBlock *)handle)->textFormats().size();
}
int QTextBlock_textFormatsRanges(QTextBlockH handle, PTextRange ranges, int maxCount)
{
QVector<QTextLayout::FormatRange> t_retval;
QVector<TQTextLayoutFormatRange> t_trans;
t_retval = ((QTextBlock *)handle)->textFormats();
int len = t_retval.size();
t_trans.resize(len);
setPtrIntArrayLength(retval, len);
if (len>0) {
PTRINT *array = (PTRINT *)getPtrIntArrayAddr(retval);
for (int i = 0; i < len; i++) {
t_trans[i].start = t_retval.at(i).start;
t_trans[i].length = t_retval.at(i).length;
t_trans[i].format = (const QTextCharFormatH) &t_retval.at(i).format;
array[i] = (PTRINT) (&t_trans.at(i));
}
}
int res = 0;
int cnt = maxCount;
int sz;
t_retval = ((QTextBlock *)handle)->textFormats();
sz = t_retval.size();
if (sz > cnt) cnt = sz;
for (int i=0; i<sz; i++)
{
ranges[i].start = t_retval.at(i).start;
ranges[i].length = t_retval.at(i).length;
}
return res;
}
QTextFragmentH QTextFragment_Create()
{
return (QTextFragmentH) new QTextFragment();

View File

@ -61,7 +61,12 @@ C_EXPORT int QTextBlock_lineCount(QTextBlockH handle);
C_EXPORT void QTextBlock_next(QTextBlockH handle, QTextBlockH retval);
C_EXPORT void QTextBlock_previous(QTextBlockH handle, QTextBlockH retval);
C_EXPORT int QTextBlock_fragmentIndex(QTextBlockH handle);
C_EXPORT void QTextBlock_textFormats(QTextBlockH handle, PPtrIntArray retval);
/* utility function, there's no direct Qt mapping */
C_EXPORT int QTextBlock_textFormatsCount(QTextBlockH handle);
/* utility function, there's no direct Qt mapping */
C_EXPORT int QTextBlock_textFormatsRanges(QTextBlockH handle, PTextRange ranges, int maxCount);
C_EXPORT QTextFragmentH QTextFragment_Create();
C_EXPORT void QTextFragment_Destroy(QTextFragmentH handle);
C_EXPORT QTextFragmentH QTextFragment_Create2(const QTextFragmentH o);

View File

@ -8747,6 +8747,15 @@ function QTextInlineObject_textPosition(handle: QTextInlineObjectH): Integer; cd
function QTextInlineObject_formatIndex(handle: QTextInlineObjectH): Integer; cdecl; external Qt5PasLib name 'QTextInlineObject_formatIndex';
procedure QTextInlineObject_format(handle: QTextInlineObjectH; retval: QTextFormatH); cdecl; external Qt5PasLib name 'QTextInlineObject_format';
type
TTextRange = packed record
start : longint;
length : longint;
end;
PTextRange = ^TTextRange;
TTextRangeArray = array[word] of TTextRange;
PTextRangeArray = ^TTextRangeArray;
function QTextLayout_Create(): QTextLayoutH; cdecl; external Qt5PasLib name 'QTextLayout_Create';
procedure QTextLayout_Destroy(handle: QTextLayoutH); cdecl; external Qt5PasLib name 'QTextLayout_Destroy';
function QTextLayout_Create(text: PWideString): QTextLayoutH; cdecl; external Qt5PasLib name 'QTextLayout_Create2';
@ -8789,8 +8798,8 @@ procedure QTextLayout_glyphRuns(handle: QTextLayoutH; retval: PPtrIntArray; from
procedure QTextLayout_setFlags(handle: QTextLayoutH; flags: Integer); cdecl; external Qt5PasLib name 'QTextLayout_setFlags';
procedure QTextLayout_clearFormats(handle: QTextLayoutH); cdecl; external Qt5PasLib name 'QTextLayout_clearFormats';
procedure QTextLayout_formats(handle: QTextLayoutH; retval: PPtrIntArray); cdecl; external Qt5PasLib name 'QTextLayout_formats';
procedure QTextLayout_setFormats(handle: QTextLayoutH; formats: PPtrIntArray); cdecl; external Qt5PasLib name 'QTextLayout_setFormats';
function QTextLayout_formatsCount(handle: QTextLayoutH): longint; cdecl; external Qt5PasLib name 'QTextLayout_formatsCount';
function QTextLayout_formatsRanges(handle: QTextLayoutH; ranges: PTextRangeArray; longint: integer): longint; cdecl; external Qt5PasLib name 'QTextLayout_formatsRanges';
function QTextLine_Create(): QTextLineH; cdecl; external Qt5PasLib name 'QTextLine_Create';
procedure QTextLine_Destroy(handle: QTextLineH); cdecl; external Qt5PasLib name 'QTextLine_Destroy';
@ -8871,7 +8880,9 @@ function QTextBlock_lineCount(handle: QTextBlockH): Integer; cdecl; external Qt5
procedure QTextBlock_next(handle: QTextBlockH; retval: QTextBlockH); cdecl; external Qt5PasLib name 'QTextBlock_next';
procedure QTextBlock_previous(handle: QTextBlockH; retval: QTextBlockH); cdecl; external Qt5PasLib name 'QTextBlock_previous';
function QTextBlock_fragmentIndex(handle: QTextBlockH): Integer; cdecl; external Qt5PasLib name 'QTextBlock_fragmentIndex';
procedure QTextBlock_textFormats(handle: QTextBlockH; retval: PPtrIntArray); cdecl; external Qt5PasLib name 'QTextBlock_textFormats';
function QTextBlock_textFormatsCount(handle: QTextBlockH): longint; cdecl; external Qt5PasLib name 'QTextBlock_textFormatsCount';
function QTextBlock_textFormatsRanges(handle: QTextBlockH; ranges: PTextRangeArray; longint: integer): longint; cdecl; external Qt5PasLib name 'QTextBlock_textFormatsRanges';
function QTextFragment_Create(): QTextFragmentH; cdecl; external Qt5PasLib name 'QTextFragment_Create';
procedure QTextFragment_Destroy(handle: QTextFragmentH); cdecl; external Qt5PasLib name 'QTextFragment_Destroy';