Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-cw
Commits
13578c86
Commit
13578c86
authored
Apr 16, 2005
by
Krzysztof Foltman
Committed by
Alexandre Julliard
Apr 16, 2005
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
- removed trailing spaces from some files
- tab support - indent support
parent
1f7d6ccc
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
150 additions
and
55 deletions
+150
-55
caret.c
dlls/riched20/caret.c
+25
-5
editor.c
dlls/riched20/editor.c
+36
-2
editor.h
dlls/riched20/editor.h
+3
-3
editstr.h
dlls/riched20/editstr.h
+7
-0
paint.c
dlls/riched20/paint.c
+5
-5
para.c
dlls/riched20/para.c
+31
-2
run.c
dlls/riched20/run.c
+0
-0
style.c
dlls/riched20/style.c
+1
-0
wrap.c
dlls/riched20/wrap.c
+42
-38
No files found.
dlls/riched20/caret.c
View file @
13578c86
...
...
@@ -104,11 +104,11 @@ void ME_MoveCaret(ME_TextEditor *editor)
{
row
=
ME_FindItemBack
(
tmp
,
diStartRow
);
pSizeRun
=
run
=
tmp
;
sz
=
ME_GetRunSize
(
&
c
,
&
run
->
member
.
run
,
ME_StrLen
(
run
->
member
.
run
.
strText
));
sz
=
ME_GetRunSize
(
&
c
,
&
para
->
member
.
para
,
&
run
->
member
.
run
,
ME_StrLen
(
run
->
member
.
run
.
strText
));
}
}
if
(
pCursor
->
nOffset
&&
!
(
run
->
member
.
run
.
nFlags
&
MERF_SKIPPED
))
{
sz
=
ME_GetRunSize
(
&
c
,
&
run
->
member
.
run
,
pCursor
->
nOffset
);
sz
=
ME_GetRunSize
(
&
c
,
&
para
->
member
.
para
,
&
run
->
member
.
run
,
pCursor
->
nOffset
);
}
CreateCaret
(
editor
->
hWnd
,
NULL
,
0
,
pSizeRun
->
member
.
run
.
nAscent
+
pSizeRun
->
member
.
run
.
nDescent
);
SetCaretPos
(
run
->
member
.
run
.
pt
.
x
+
sz
.
cx
,
...
...
@@ -311,10 +311,30 @@ void ME_InsertTextFromCursor(ME_TextEditor *editor, int nCursor,
len
=
lstrlenW
(
str
);
pos
=
str
;
/* FIXME this sucks - no respect for unicode (what else can be a line separator in unicode?) */
while
(
pos
-
str
<
len
&&
*
pos
!=
'\r'
&&
*
pos
!=
'\n'
)
while
(
pos
-
str
<
len
&&
*
pos
!=
'\r'
&&
*
pos
!=
'\n'
&&
*
pos
!=
'\t'
)
pos
++
;
/* handle EOLs */
if
(
pos
-
str
<
len
)
{
if
(
pos
-
str
<
len
&&
*
pos
==
'\t'
)
{
/* handle tabs */
ME_DisplayItem
*
pNewRun
=
NULL
;
WCHAR
tab
=
'\t'
;
if
(
pos
!=
str
)
ME_InsertTextFromCursor
(
editor
,
nCursor
,
str
,
pos
-
str
,
style
);
p
=
&
editor
->
pCursors
[
nCursor
];
assert
(
style
);
assert
(
p
->
pRun
->
type
==
diRun
);
pNewRun
=
ME_MakeRun
(
style
,
ME_MakeStringN
(
&
tab
,
1
),
MERF_TAB
);
/* addrefs style */
ME_InsertRun
(
editor
,
ME_CharOfsFromRunOfs
(
editor
,
p
->
pRun
,
p
->
nOffset
),
pNewRun
);
ME_DestroyDisplayItem
(
pNewRun
);
ME_ReleaseStyle
(
style
);
pos
++
;
if
(
pos
-
str
<
len
)
{
ME_InsertTextFromCursor
(
editor
,
nCursor
,
pos
,
len
-
(
pos
-
str
),
style
);
}
return
;
}
if
(
pos
-
str
<
len
)
{
/* handle EOLs */
ME_DisplayItem
*
tp
,
*
end_run
;
ME_Paragraph
*
para
;
ME_Style
*
tmp_style
;
...
...
dlls/riched20/editor.c
View file @
13578c86
...
...
@@ -356,6 +356,8 @@ void ME_RTFCharAttrHook(RTF_Info *info)
}
}
/* FIXME this function doesn't get any information about context of the RTF tag, which is very bad,
the same tags mean different things in different contexts */
void
ME_RTFParAttrHook
(
RTF_Info
*
info
)
{
PARAFORMAT2
fmt
;
...
...
@@ -365,8 +367,30 @@ void ME_RTFParAttrHook(RTF_Info *info)
switch
(
info
->
rtfMinor
)
{
case
rtfParDef
:
/* I'm not 100% sure what does it do, but I guess it restores default paragraph attributes */
fmt
.
dwMask
=
PFM_ALIGNMENT
;
fmt
.
dwMask
=
PFM_ALIGNMENT
|
PFM_TABSTOPS
|
PFM_OFFSET
|
PFM_STARTINDENT
;
fmt
.
wAlignment
=
PFA_LEFT
;
fmt
.
cTabCount
=
0
;
fmt
.
dxOffset
=
fmt
.
dxStartIndent
=
0
;
break
;
case
rtfFirstIndent
:
ME_GetSelectionParaFormat
(
info
->
editor
,
&
fmt
);
fmt
.
dwMask
=
PFM_STARTINDENT
;
fmt
.
dxStartIndent
=
info
->
rtfParam
+
fmt
.
dxOffset
;
break
;
case
rtfLeftIndent
:
{
int
first
,
left
;
ME_GetSelectionParaFormat
(
info
->
editor
,
&
fmt
);
first
=
fmt
.
dxStartIndent
;
left
=
info
->
rtfParam
;
fmt
.
dwMask
=
PFM_STARTINDENT
|
PFM_OFFSET
;
fmt
.
dxStartIndent
=
first
+
left
;
fmt
.
dxOffset
=
-
first
;
break
;
}
case
rtfRightIndent
:
fmt
.
dwMask
=
PFM_RIGHTINDENT
;
fmt
.
dxRightIndent
=
info
->
rtfParam
;
break
;
case
rtfQuadLeft
:
case
rtfQuadJust
:
...
...
@@ -381,6 +405,16 @@ void ME_RTFParAttrHook(RTF_Info *info)
fmt
.
dwMask
=
PFM_ALIGNMENT
;
fmt
.
wAlignment
=
PFA_CENTER
;
break
;
case
rtfTabPos
:
ME_GetSelectionParaFormat
(
info
->
editor
,
&
fmt
);
if
(
!
(
fmt
.
dwMask
&
PFM_TABSTOPS
))
{
fmt
.
dwMask
|=
PFM_TABSTOPS
;
fmt
.
cTabCount
=
0
;
}
if
(
fmt
.
cTabCount
<
MAX_TAB_STOPS
)
fmt
.
rgxTabs
[
fmt
.
cTabCount
++
]
=
info
->
rtfParam
;
break
;
}
if
(
fmt
.
dwMask
)
{
RTFFlushOutputBuffer
(
info
);
...
...
@@ -1160,7 +1194,7 @@ LRESULT WINAPI RichEditANSIWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lP
return
0
;
/* FIXME really 0 ? */
}
wstr
=
LOWORD
(
wParam
);
if
(((
unsigned
)
wstr
)
>=
' '
||
wstr
==
'\r'
)
{
if
(((
unsigned
)
wstr
)
>=
' '
||
wstr
==
'\r'
||
wstr
==
'\t'
)
{
/* FIXME maybe it would make sense to call EM_REPLACESEL instead ? */
ME_Style
*
style
=
ME_GetInsertStyle
(
editor
,
0
);
ME_SaveTempStyle
(
editor
);
...
...
dlls/riched20/editor.h
View file @
13578c86
...
...
@@ -108,7 +108,7 @@ ME_DisplayItem *ME_InsertRun(ME_TextEditor *editor, int nCharOfs, ME_DisplayItem
void
ME_CheckCharOffsets
(
ME_TextEditor
*
editor
);
void
ME_PropagateCharOffset
(
ME_DisplayItem
*
p
,
int
shift
);
void
ME_GetGraphicsSize
(
ME_TextEditor
*
editor
,
ME_Run
*
run
,
SIZE
*
pSize
);
int
ME_CharFromPoint
(
ME_TextEditor
*
editor
,
int
cx
,
ME_Run
*
run
);
int
ME_CharFromPoint
(
ME_TextEditor
*
editor
,
int
cx
,
ME_
Paragraph
*
para
,
ME_
Run
*
run
);
/* this one accounts for 1/2 char tolerance */
int
ME_CharFromPointCursor
(
ME_TextEditor
*
editor
,
int
cx
,
ME_Run
*
run
);
int
ME_PointFromChar
(
ME_TextEditor
*
editor
,
ME_Run
*
pRun
,
int
nOffset
);
...
...
@@ -120,8 +120,8 @@ ME_DisplayItem *ME_SplitRunSimple(ME_TextEditor *editor, ME_DisplayItem *item, i
int
ME_FindSplitPoint
(
ME_Context
*
c
,
POINT
*
pt
,
ME_Run
*
run
,
int
desperate
);
void
ME_UpdateRunFlags
(
ME_TextEditor
*
editor
,
ME_Run
*
run
);
ME_DisplayItem
*
ME_SplitFurther
(
ME_TextEditor
*
editor
,
ME_DisplayItem
*
run
);
void
ME_CalcRunExtent
(
ME_Context
*
c
,
ME_Run
*
run
);
SIZE
ME_GetRunSize
(
ME_Context
*
c
,
ME_Run
*
run
,
int
nLen
);
void
ME_CalcRunExtent
(
ME_Context
*
c
,
ME_
Paragraph
*
para
,
ME_
Run
*
run
);
SIZE
ME_GetRunSize
(
ME_Context
*
c
,
ME_
Paragraph
*
para
,
ME_
Run
*
run
,
int
nLen
);
void
ME_CursorFromCharOfs
(
ME_TextEditor
*
editor
,
int
nCharOfs
,
ME_Cursor
*
pCursor
);
void
ME_RunOfsFromCharOfs
(
ME_TextEditor
*
editor
,
int
nCharOfs
,
ME_DisplayItem
**
ppRun
,
int
*
pOfs
);
int
ME_CharOfsFromRunOfs
(
ME_TextEditor
*
editor
,
ME_DisplayItem
*
pRun
,
int
nOfs
);
...
...
dlls/riched20/editstr.h
View file @
13578c86
...
...
@@ -86,6 +86,8 @@ typedef enum {
#define MERF_STYLEFLAGS 0x0FFF
/* run contains non-text content, which has its own rules for wrapping, sizing etc */
#define MERF_GRAPHICS 1
/* run is a tab (or, in future, any kind of content whose size is dependent on run position) */
#define MERF_TAB 2
/* run is splittable (contains white spaces in the middle or end) */
#define MERF_SPLITTABLE 0x001000
...
...
@@ -102,6 +104,11 @@ typedef enum {
/* the "end of paragraph" run, contains 1 character */
#define MERF_ENDPARA 0x100000
/* runs with any of these flags set cannot be joined */
#define MERF_NOJOIN (MERF_GRAPHICS|MERF_TAB|MERF_ENDPARA)
/* runs that don't contain real text */
#define MERF_NOTEXT (MERF_GRAPHICS|MERF_TAB|MERF_ENDPARA)
/* those flags are kept when the row is split */
#define MERF_SPLITMASK (~(0))
...
...
dlls/riched20/paint.c
View file @
13578c86
...
...
@@ -251,7 +251,7 @@ void ME_DrawRun(ME_Context *c, int x, int y, ME_DisplayItem *rundi, ME_Paragraph
int
runofs
=
run
->
nCharOfs
+
para
->
nCharOfs
;
/* you can always comment it out if you need visible paragraph marks */
if
(
run
->
nFlags
&
MERF_ENDPARA
)
if
(
run
->
nFlags
&
(
MERF_ENDPARA
|
MERF_TAB
)
)
return
;
if
(
run
->
nFlags
&
MERF_GRAPHICS
)
{
int
blfrom
,
blto
;
...
...
@@ -311,19 +311,19 @@ void ME_DrawParagraph(ME_Context *c, ME_DisplayItem *paragraph) {
visible
=
RectVisible
(
c
->
hDC
,
&
rcPara
);
if
(
visible
)
{
HBRUSH
hbr
;
hbr
=
CreateSolidBrush
(
ME_GetBackColor
(
c
->
editor
));
/* left margin */
rc
.
left
=
c
->
rcView
.
left
;
rc
.
right
=
c
->
rcView
.
left
+
nMargWidth
;
rc
.
top
=
y
;
rc
.
bottom
=
y
+
p
->
member
.
row
.
nHeight
;
FillRect
(
c
->
hDC
,
&
rc
,
c
->
hbrMargin
);
FillRect
(
c
->
hDC
,
&
rc
,
hbr
/* c->hbrMargin */
);
/* right margin */
rc
.
left
=
xe
;
rc
.
right
=
c
->
rcView
.
right
;
FillRect
(
c
->
hDC
,
&
rc
,
c
->
hbrMargin
);
rc
.
left
=
c
->
rcView
.
left
+
para
->
nLeftMargin
;
FillRect
(
c
->
hDC
,
&
rc
,
hbr
/* c->hbrMargin */
);
rc
.
left
=
c
->
rcView
.
left
+
nMargWidth
;
rc
.
right
=
xe
;
hbr
=
CreateSolidBrush
(
ME_GetBackColor
(
c
->
editor
));
FillRect
(
c
->
hDC
,
&
rc
,
hbr
);
DeleteObject
(
hbr
);
}
...
...
dlls/riched20/para.c
View file @
13578c86
...
...
@@ -57,7 +57,7 @@ void ME_MakeFirstParagraph(HDC hDC, ME_TextBuffer *text)
ZeroMemory
(
&
fmt
,
sizeof
(
fmt
));
fmt
.
cbSize
=
sizeof
(
fmt
);
fmt
.
dwMask
=
PFM_ALIGNMENT
|
PFM_OFFSET
|
PFM_STARTINDENT
|
PFM_RIGHTINDENT
;
fmt
.
dwMask
=
PFM_ALIGNMENT
|
PFM_OFFSET
|
PFM_STARTINDENT
|
PFM_RIGHTINDENT
|
PFM_TABSTOPS
;
CopyMemory
(
para
->
member
.
para
.
pFmt
,
&
fmt
,
sizeof
(
PARAFORMAT2
));
...
...
@@ -282,6 +282,18 @@ void ME_SetParaFormat(ME_TextEditor *editor, ME_DisplayItem *para, PARAFORMAT2 *
if
(
pFmt
->
dwMask
&
PFM_ALIGNMENT
)
para
->
member
.
para
.
pFmt
->
wAlignment
=
pFmt
->
wAlignment
;
if
(
pFmt
->
dwMask
&
PFM_STARTINDENT
)
para
->
member
.
para
.
pFmt
->
dxStartIndent
=
pFmt
->
dxStartIndent
;
if
(
pFmt
->
dwMask
&
PFM_OFFSET
)
para
->
member
.
para
.
pFmt
->
dxOffset
=
pFmt
->
dxOffset
;
if
(
pFmt
->
dwMask
&
PFM_OFFSETINDENT
)
para
->
member
.
para
.
pFmt
->
dxStartIndent
+=
pFmt
->
dxStartIndent
;
if
(
pFmt
->
dwMask
&
PFM_TABSTOPS
)
{
para
->
member
.
para
.
pFmt
->
cTabCount
=
pFmt
->
cTabCount
;
memcpy
(
para
->
member
.
para
.
pFmt
->
rgxTabs
,
pFmt
->
rgxTabs
,
pFmt
->
cTabCount
*
sizeof
(
int
));
}
/* FIXME to be continued (indents, bulleting and such) */
...
...
@@ -345,11 +357,28 @@ void ME_GetSelectionParaFormat(ME_TextEditor *editor, PARAFORMAT2 *pFmt)
ZeroMemory
(
&
tmp
,
sizeof
(
tmp
));
tmp
.
cbSize
=
sizeof
(
tmp
);
ME_GetParaFormat
(
editor
,
para
,
&
tmp
);
assert
(
tmp
.
dwMask
&
PFM_ALIGNMENT
);
assert
(
tmp
.
dwMask
&
PFM_ALIGNMENT
);
if
(
pFmt
->
wAlignment
!=
tmp
.
wAlignment
)
pFmt
->
dwMask
&=
~
PFM_ALIGNMENT
;
assert
(
tmp
.
dwMask
&
PFM_STARTINDENT
);
if
(
pFmt
->
dxStartIndent
!=
tmp
.
dxStartIndent
)
pFmt
->
dwMask
&=
~
PFM_STARTINDENT
;
assert
(
tmp
.
dwMask
&
PFM_OFFSET
);
if
(
pFmt
->
dxOffset
!=
tmp
.
dxOffset
)
pFmt
->
dwMask
&=
~
PFM_OFFSET
;
assert
(
tmp
.
dwMask
&
PFM_TABSTOPS
);
if
(
pFmt
->
dwMask
&
PFM_TABSTOPS
)
{
if
(
pFmt
->
cTabCount
!=
tmp
.
cTabCount
)
pFmt
->
dwMask
&=
~
PFM_TABSTOPS
;
else
if
(
memcmp
(
pFmt
->
rgxTabs
,
tmp
.
rgxTabs
,
tmp
.
cTabCount
*
sizeof
(
int
)))
pFmt
->
dwMask
&=
~
PFM_TABSTOPS
;
}
if
(
para
==
para_end
)
return
;
para
=
para
->
member
.
para
.
next_para
;
...
...
dlls/riched20/run.c
View file @
13578c86
This diff is collapsed.
Click to expand it.
dlls/riched20/style.c
View file @
13578c86
...
...
@@ -124,6 +124,7 @@ ME_Style *ME_MakeStyle(CHARFORMAT2W *style) {
s
->
nSequence
=
-
2
;
s
->
nRefs
=
1
;
s
->
hFont
=
NULL
;
s
->
tm
.
tmAscent
=
-
1
;
all_refs
++
;
return
s
;
}
...
...
dlls/riched20/wrap.c
View file @
13578c86
...
...
@@ -26,16 +26,16 @@ WINE_DEFAULT_DEBUG_CHANNEL(richedit);
/*
* Unsolved problems:
*
*
* - center and right align in WordPad omits all spaces at the start, we don't
* - objects/images are not handled yet
* - no tabs
*/
* - no tabs
*/
ME_DisplayItem
*
ME_MakeRow
(
int
height
,
int
baseline
,
int
width
)
{
ME_DisplayItem
*
item
=
ME_MakeDI
(
diStartRow
);
item
->
member
.
row
.
nHeight
=
height
;
item
->
member
.
row
.
nBaseline
=
baseline
;
item
->
member
.
row
.
nWidth
=
width
;
...
...
@@ -49,7 +49,7 @@ void ME_BeginRow(ME_WrapContext *wc)
wc
->
pLastSplittableRun
=
NULL
;
wc
->
nAvailWidth
=
wc
->
nTotalWidth
-
(
wc
->
nRow
?
wc
->
nLeftMargin
:
wc
->
nFirstMargin
)
-
wc
->
nRightMargin
;
wc
->
pt
.
x
=
0
;
}
}
void
ME_InsertRowStart
(
ME_WrapContext
*
wc
,
ME_DisplayItem
*
pEnd
)
{
...
...
@@ -95,7 +95,7 @@ void ME_WrapEndParagraph(ME_WrapContext *wc, ME_DisplayItem *p)
{
if
(
wc
->
pRowStart
)
ME_InsertRowStart
(
wc
,
p
->
next
);
/*
p = p->member.para.prev_para->next;
while(p) {
...
...
@@ -109,15 +109,15 @@ void ME_WrapEndParagraph(ME_WrapContext *wc, ME_DisplayItem *p)
p = p->next;
}
*/
}
}
void
ME_WrapSizeRun
(
ME_WrapContext
*
wc
,
ME_DisplayItem
*
p
)
{
/* FIXME compose style (out of character and paragraph styles) here */
ME_UpdateRunFlags
(
wc
->
context
->
editor
,
&
p
->
member
.
run
);
ME_CalcRunExtent
(
wc
->
context
,
&
p
->
member
.
run
);
ME_CalcRunExtent
(
wc
->
context
,
&
ME_GetParagraph
(
p
)
->
member
.
para
,
&
p
->
member
.
run
);
}
ME_DisplayItem
*
ME_MaximizeSplit
(
ME_WrapContext
*
wc
,
ME_DisplayItem
*
p
,
int
i
)
...
...
@@ -139,7 +139,7 @@ ME_DisplayItem *ME_MaximizeSplit(ME_WrapContext *wc, ME_DisplayItem *p, int i)
while
(
piter
!=
wc
->
pRowStart
)
{
piter
=
ME_FindItemBack
(
piter
,
diRun
);
if
(
piter
->
member
.
run
.
nFlags
&
MERF_WHITESPACE
)
if
(
piter
->
member
.
run
.
nFlags
&
MERF_WHITESPACE
)
{
pp
=
piter
;
continue
;
...
...
@@ -167,8 +167,8 @@ ME_DisplayItem *ME_SplitByBacktracking(ME_WrapContext *wc, ME_DisplayItem *p, in
ME_DisplayItem
*
piter
=
p
,
*
pp
;
int
i
,
idesp
,
len
;
ME_Run
*
run
=
&
p
->
member
.
run
;
idesp
=
i
=
ME_CharFromPoint
(
wc
->
context
->
editor
,
loc
,
run
);
idesp
=
i
=
ME_CharFromPoint
(
wc
->
context
->
editor
,
loc
,
&
ME_GetParagraph
(
p
)
->
member
.
para
,
run
);
len
=
ME_StrVLen
(
run
->
strText
);
assert
(
len
>
0
);
assert
(
i
<
len
);
...
...
@@ -182,7 +182,7 @@ ME_DisplayItem *ME_SplitByBacktracking(ME_WrapContext *wc, ME_DisplayItem *p, in
TRACE
(
"Must backtrack to split at: %s
\n
"
,
debugstr_w
(
p
->
member
.
run
.
strText
->
szData
));
if
(
wc
->
pLastSplittableRun
)
{
if
(
wc
->
pLastSplittableRun
->
member
.
run
.
nFlags
&
MERF_GRAPHICS
)
if
(
wc
->
pLastSplittableRun
->
member
.
run
.
nFlags
&
(
MERF_GRAPHICS
|
MERF_TAB
)
)
{
wc
->
pt
=
wc
->
ptLastSplittableRun
;
return
wc
->
pLastSplittableRun
;
...
...
@@ -193,7 +193,7 @@ ME_DisplayItem *ME_SplitByBacktracking(ME_WrapContext *wc, ME_DisplayItem *p, in
they serve no other purpose */
ME_UpdateRunFlags
(
wc
->
context
->
editor
,
run
);
assert
((
wc
->
pLastSplittableRun
->
member
.
run
.
nFlags
&
MERF_SPLITTABLE
));
piter
=
wc
->
pLastSplittableRun
;
run
=
&
piter
->
member
.
run
;
len
=
ME_StrVLen
(
run
->
strText
);
...
...
@@ -201,7 +201,7 @@ ME_DisplayItem *ME_SplitByBacktracking(ME_WrapContext *wc, ME_DisplayItem *p, in
i
=
ME_ReverseFindWhitespaceV
(
run
->
strText
,
len
);
if
(
i
==
len
)
i
=
ME_ReverseFindNonWhitespaceV
(
run
->
strText
,
len
);
if
(
i
)
{
if
(
i
)
{
ME_DisplayItem
*
piter2
=
ME_SplitRun
(
wc
->
context
,
piter
,
i
);
wc
->
pt
=
piter2
->
member
.
run
.
pt
;
return
piter2
;
...
...
@@ -239,7 +239,7 @@ ME_DisplayItem *ME_SplitByBacktracking(ME_WrapContext *wc, ME_DisplayItem *p, in
}
/* the run is one char, can't split it */
return
piter
;
}
}
}
ME_DisplayItem
*
ME_WrapHandleRun
(
ME_WrapContext
*
wc
,
ME_DisplayItem
*
p
)
...
...
@@ -248,24 +248,24 @@ ME_DisplayItem *ME_WrapHandleRun(ME_WrapContext *wc, ME_DisplayItem *p)
ME_Run
*
run
;
int
len
;
assert
(
p
->
type
==
diRun
);
assert
(
p
->
type
==
diRun
);
if
(
!
wc
->
pRowStart
)
wc
->
pRowStart
=
p
;
ME_WrapSizeRun
(
wc
,
p
);
run
=
&
p
->
member
.
run
;
run
->
pt
.
x
=
wc
->
pt
.
x
;
run
->
pt
.
y
=
wc
->
pt
.
y
;
len
=
ME_StrVLen
(
run
->
strText
);
ME_WrapSizeRun
(
wc
,
p
);
len
=
ME_StrVLen
(
run
->
strText
);
if
(
wc
->
bOverflown
)
/* just skipping final whitespaces */
{
if
(
run
->
nFlags
&
MERF_WHITESPACE
)
{
{
if
(
run
->
nFlags
&
(
MERF_WHITESPACE
|
MERF_TAB
)
)
{
p
->
member
.
run
.
nFlags
|=
MERF_SKIPPED
;
/* wc->pt.x += run->nWidth; */
/* skip runs consisting of only whitespaces */
return
p
->
next
;
}
if
(
run
->
nFlags
&
MERF_STARTWHITE
)
{
/* try to split the run at the first non-white char */
int
black
;
...
...
@@ -286,15 +286,15 @@ ME_DisplayItem *ME_WrapHandleRun(ME_WrapContext *wc, ME_DisplayItem *p)
/* will current run fit? */
if
(
wc
->
pt
.
x
+
run
->
nWidth
>
wc
->
nAvailWidth
)
{
int
loc
=
wc
->
nAvailWidth
-
wc
->
pt
.
x
;
int
loc
=
wc
->
nAvailWidth
-
wc
->
pt
.
x
;
/* total white run ? */
if
(
run
->
nFlags
&
MERF_WHITESPACE
)
{
/* let the overflow logic handle it */
wc
->
bOverflown
=
TRUE
;
return
p
;
}
/* graphics - we can split before */
if
(
run
->
nFlags
&
MERF_GRAPHICS
)
{
/* graphics
or TAB
- we can split before */
if
(
run
->
nFlags
&
(
MERF_GRAPHICS
|
MERF_TAB
)
)
{
wc
->
bOverflown
=
TRUE
;
return
p
;
}
...
...
@@ -326,8 +326,8 @@ ME_DisplayItem *ME_WrapHandleRun(ME_WrapContext *wc, ME_DisplayItem *p)
ERR
(
"failure!
\n
"
);
/* not found anything - writing over margins is the only option left */
}
if
((
run
->
nFlags
&
(
MERF_SPLITTABLE
|
MERF_STARTWHITE
))
||
((
run
->
nFlags
&
MERF_GRAPHICS
)
&&
(
p
!=
wc
->
pRowStart
)))
if
((
run
->
nFlags
&
(
MERF_SPLITTABLE
|
MERF_STARTWHITE
))
||
((
run
->
nFlags
&
(
MERF_GRAPHICS
|
MERF_TAB
)
)
&&
(
p
!=
wc
->
pRowStart
)))
{
wc
->
pLastSplittableRun
=
p
;
wc
->
ptLastSplittableRun
=
wc
->
pt
;
...
...
@@ -335,20 +335,24 @@ ME_DisplayItem *ME_WrapHandleRun(ME_WrapContext *wc, ME_DisplayItem *p)
wc
->
pt
.
x
+=
run
->
nWidth
;
return
p
->
next
;
}
void
ME_WrapTextParagraph
(
ME_Context
*
c
,
ME_DisplayItem
*
tp
)
{
ME_DisplayItem
*
p
;
ME_WrapContext
wc
;
int
dpi
=
GetDeviceCaps
(
c
->
hDC
,
LOGPIXELSX
);
assert
(
tp
->
type
==
diParagraph
);
assert
(
tp
->
type
==
diParagraph
);
if
(
!
(
tp
->
member
.
para
.
nFlags
&
MEPF_REWRAP
))
{
return
;
}
ME_PrepareParagraphForWrapping
(
c
,
tp
);
wc
.
context
=
c
;
/* wc.para_style = tp->member.para.style; */
wc
.
style
=
NULL
;
tp
->
member
.
para
.
nRightMargin
=
tp
->
member
.
para
.
pFmt
->
dxRightIndent
*
dpi
/
1440
;
tp
->
member
.
para
.
nFirstMargin
=
tp
->
member
.
para
.
pFmt
->
dxStartIndent
*
dpi
/
1440
;
tp
->
member
.
para
.
nLeftMargin
=
(
tp
->
member
.
para
.
pFmt
->
dxStartIndent
+
tp
->
member
.
para
.
pFmt
->
dxOffset
)
*
dpi
/
1440
;
wc
.
nFirstMargin
=
tp
->
member
.
para
.
nFirstMargin
;
wc
.
nLeftMargin
=
tp
->
member
.
para
.
nLeftMargin
;
wc
.
nRightMargin
=
tp
->
member
.
para
.
nRightMargin
;
...
...
@@ -358,7 +362,7 @@ void ME_WrapTextParagraph(ME_Context *c, ME_DisplayItem *tp) {
wc
.
nTotalWidth
=
c
->
rcView
.
right
-
c
->
rcView
.
left
;
wc
.
nAvailWidth
=
wc
.
nTotalWidth
-
wc
.
nFirstMargin
-
wc
.
nRightMargin
;
wc
.
pRowStart
=
NULL
;
ME_BeginRow
(
&
wc
);
for
(
p
=
tp
->
next
;
p
!=
tp
->
member
.
para
.
next_para
;
)
{
assert
(
p
->
type
!=
diStartRow
);
...
...
@@ -415,20 +419,20 @@ BOOL ME_WrapMarkedParagraphs(ME_TextEditor *editor) {
ME_DisplayItem
*
item
;
ME_Context
c
;
BOOL
bModified
=
FALSE
;
ME_InitContext
(
&
c
,
editor
,
hDC
);
c
.
pt
.
x
=
0
;
c
.
pt
.
y
=
0
;
item
=
editor
->
pBuffer
->
pFirst
->
next
;
while
(
item
!=
editor
->
pBuffer
->
pLast
)
{
BOOL
bRedraw
=
FALSE
;
assert
(
item
->
type
==
diParagraph
);
if
((
item
->
member
.
para
.
nFlags
&
MEPF_REWRAP
)
||
(
item
->
member
.
para
.
nYPos
!=
c
.
pt
.
y
))
bRedraw
=
TRUE
;
item
->
member
.
para
.
nYPos
=
c
.
pt
.
y
;
ME_WrapTextParagraph
(
&
c
,
item
);
if
(
bRedraw
)
...
...
@@ -442,7 +446,7 @@ BOOL ME_WrapMarkedParagraphs(ME_TextEditor *editor) {
editor
->
sizeWindow
.
cx
=
c
.
rcView
.
right
-
c
.
rcView
.
left
;
editor
->
sizeWindow
.
cy
=
c
.
rcView
.
bottom
-
c
.
rcView
.
top
;
editor
->
nTotalLength
=
c
.
pt
.
y
;
ME_DestroyContext
(
&
c
);
ReleaseDC
(
hWnd
,
hDC
);
return
bModified
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment