Update protocol

This commit is contained in:
vczh
2026-03-03 02:35:22 -08:00
parent 746a489379
commit 5b24f005f5
25 changed files with 3827 additions and 2950 deletions
+11 -10
View File
@@ -34,9 +34,9 @@ namespace gaclib_controls
const WString DomProp::PropertyName = WString::Unmanaged(L"DomID"); const WString DomProp::PropertyName = WString::Unmanaged(L"DomID");
/*********************************************************************** /***********************************************************************
Helper Functions Helper Functions
***********************************************************************/ ***********************************************************************/
Alignment GetAlignment(remoteprotocol::ElementHorizontalAlignment alignment) Alignment GetAlignment(remoteprotocol::ElementHorizontalAlignment alignment)
{ {
@@ -82,9 +82,9 @@ namespace gaclib_controls
return element; return element;
} }
/*********************************************************************** /***********************************************************************
GuiGraphicsParagraphWrapperElement GuiGraphicsParagraphWrapperElement
***********************************************************************/ ***********************************************************************/
class GuiGraphicsParagraphWrapperElement class GuiGraphicsParagraphWrapperElement
: public Object : public Object
@@ -191,6 +191,7 @@ namespace gaclib_controls
properties.size = inlineProp.size; properties.size = inlineProp.size;
properties.baseline = inlineProp.baseline; properties.baseline = inlineProp.baseline;
properties.breakCondition = inlineProp.breakCondition; properties.breakCondition = inlineProp.breakCondition;
properties.backgroundColor = inlineProp.backgroundColor;
properties.callbackId = inlineProp.callbackId; properties.callbackId = inlineProp.callbackId;
if (inlineProp.backgroundElementId != -1) if (inlineProp.backgroundElementId != -1)
{ {
@@ -207,7 +208,7 @@ namespace gaclib_controls
if (desc.caret) if (desc.caret)
{ {
auto& caret = desc.caret.Value(); auto& caret = desc.caret.Value();
paragraph->OpenCaret(caret.caret, caret.caretColor, caret.frontSide); paragraph->EnableCaret(caret.caret, caret.caretColor, caret.frontSide);
} }
} }
paragraph->Render(bounds); paragraph->Render(bounds);
@@ -475,9 +476,9 @@ namespace gaclib_controls
return focusComposition; return focusComposition;
} }
/*********************************************************************** /***********************************************************************
UnitTestSnapshotViewerAppWindow UnitTestSnapshotViewerAppWindow
***********************************************************************/ ***********************************************************************/
void UnitTestSnapshotViewerAppWindow::Highlight(GuiBoundsComposition*& target, remoteprotocol::RenderingDom& renderingDom, Color color) void UnitTestSnapshotViewerAppWindow::Highlight(GuiBoundsComposition*& target, remoteprotocol::RenderingDom& renderingDom, Color color)
{ {
+396 -126
View File
File diff suppressed because it is too large Load Diff
+5 -2
View File
@@ -724,6 +724,7 @@ DocumentParagraphState
double width; // Character width double width; // Character width
vint lineIndex; // Which line this character belongs to vint lineIndex; // Which line this character belongs to
vint height; // Character height (font size or inline object height) vint height; // Character height (font size or inline object height)
vint length; // Character length in text (1 for normal characters, more for inline objects)
vint baseline; // Distance from top to baseline (for alignment) vint baseline; // Distance from top to baseline (for alignment)
bool isInlineObject; // True if this position is part of an inline object bool isInlineObject; // True if this position is part of an inline object
}; };
@@ -749,7 +750,8 @@ DocumentParagraphState
elements::DocumentInlineObjectRunPropertyMap inlineObjectRuns; elements::DocumentInlineObjectRunPropertyMap inlineObjectRuns;
elements::DocumentRunPropertyMap mergedRuns; elements::DocumentRunPropertyMap mergedRuns;
collections::List<DocumentParagraphCharLayout> characterLayouts; collections::Dictionary<vint, DocumentParagraphCharLayout> caretLayouts;
collections::SortedList<vint> caretLayoutKeys;
collections::List<DocumentParagraphLineInfo> lines; collections::List<DocumentParagraphLineInfo> lines;
Size cachedSize; Size cachedSize;
collections::Dictionary<vint, Rect> cachedInlineObjectBounds; collections::Dictionary<vint, Rect> cachedInlineObjectBounds;
@@ -894,7 +896,7 @@ IGuiRemoteProtocolMessages (Elements - Document)
void Impl_DocumentParagraph_GetCaret(vint id, const remoteprotocol::GetCaretRequest& arguments); void Impl_DocumentParagraph_GetCaret(vint id, const remoteprotocol::GetCaretRequest& arguments);
void Impl_DocumentParagraph_GetCaretBounds(vint id, const remoteprotocol::GetCaretBoundsRequest& arguments); void Impl_DocumentParagraph_GetCaretBounds(vint id, const remoteprotocol::GetCaretBoundsRequest& arguments);
void Impl_DocumentParagraph_GetInlineObjectFromPoint(vint id, const remoteprotocol::GetInlineObjectFromPointRequest & arguments); void Impl_DocumentParagraph_GetInlineObjectFromPoint(vint id, const remoteprotocol::GetInlineObjectFromPointRequest & arguments);
void Impl_DocumentParagraph_GetNearestCaretFromTextPos(vint id, const remoteprotocol::GetCaretBoundsRequest& arguments); void Impl_DocumentParagraph_GetNearestCaretFromTextPos(vint id, const remoteprotocol::GetNearestCaretFromTextPosRequest& arguments);
void Impl_DocumentParagraph_IsValidCaret(vint id, const remoteprotocol::IsValidCaretRequest& arguments); void Impl_DocumentParagraph_IsValidCaret(vint id, const remoteprotocol::IsValidCaretRequest& arguments);
void Impl_DocumentParagraph_OpenCaret(const remoteprotocol::OpenCaretRequest& arguments); void Impl_DocumentParagraph_OpenCaret(const remoteprotocol::OpenCaretRequest& arguments);
void Impl_DocumentParagraph_CloseCaret(const vint& arguments); void Impl_DocumentParagraph_CloseCaret(const vint& arguments);
@@ -903,6 +905,7 @@ IGuiRemoteProtocolMessages (Elements - Document)
#endif #endif
/*********************************************************************** /***********************************************************************
.\GUIUNITTESTPROTOCOL.H .\GUIUNITTESTPROTOCOL.H
***********************************************************************/ ***********************************************************************/
+130 -96
View File
@@ -3074,7 +3074,7 @@ WindowsDirect2DElementInlineObject
} }
} }
Color color=rendererCallback->GetBackgroundColor(start); Color color = properties.backgroundColor;
if(color.a!=0) if(color.a!=0)
{ {
color.a/=2; color.a/=2;
@@ -3435,7 +3435,7 @@ WindowsDirect2DParagraph (Initialization)
~WindowsDirect2DParagraph() ~WindowsDirect2DParagraph()
{ {
CloseCaret(); DisableCaret();
for (auto color : usedColors) for (auto color : usedColors)
{ {
renderTarget->DestroyDirect2DBrush(color); renderTarget->DestroyDirect2DBrush(color);
@@ -3712,23 +3712,37 @@ WindowsDirect2DParagraph (IRenderingCallback)
WindowsDirect2DParagraph (Rendering) WindowsDirect2DParagraph (Rendering)
***********************************************************************/ ***********************************************************************/
bool OpenCaret(vint _caret, Color _color, bool _frontSide)override bool EnableCaret(vint _caret, Color _color, bool _frontSide)override
{ {
if(!IsValidCaret(_caret)) return false; if (!IsValidCaret(_caret)) return false;
if(caret!=-1) CloseCaret(); if (caret != -1) DisableCaret();
caret=_caret; caret = _caret;
caretColor=_color; caretColor = _color;
caretFrontSide=_frontSide; caretFrontSide = _frontSide;
caretBrush=renderTarget->CreateDirect2DBrush(caretColor); caretBrush = renderTarget->CreateDirect2DBrush(caretColor);
return true; return true;
} }
bool CloseCaret()override void DisableCaret()override
{ {
if(caret==-1) return false; if (caret == -1) return;
caret=-1; caret = -1;
renderTarget->DestroyDirect2DBrush(caretColor); renderTarget->DestroyDirect2DBrush(caretColor);
caretBrush=0; caretBrush = nullptr;
}
bool BlinkCaret()override
{
if (caret == -1) return false;
if (caretBrush)
{
renderTarget->DestroyDirect2DBrush(caretColor);
caretBrush = nullptr;
}
else
{
caretBrush = renderTarget->CreateDirect2DBrush(caretColor);
}
return true; return true;
} }
@@ -3841,7 +3855,7 @@ WindowsDirect2DParagraph (Rendering)
defaultTextColor, defaultTextColor,
D2D1_DRAW_TEXT_OPTIONS_NO_SNAP); D2D1_DRAW_TEXT_OPTIONS_NO_SNAP);
if (caret != -1) if (caret != -1 && caretBrush)
{ {
Rect caretBounds = GetCaretBounds(caret, caretFrontSide); Rect caretBounds = GetCaretBounds(caret, caretFrontSide);
vint x = caretBounds.x1 + bounds.x1; vint x = caretBounds.x1 + bounds.x1;
@@ -8502,7 +8516,7 @@ WindowsGDIParagraph
~WindowsGDIParagraph() ~WindowsGDIParagraph()
{ {
CloseCaret(); DisableCaret();
} }
IGuiGraphicsLayoutProvider* GetProvider()override IGuiGraphicsLayoutProvider* GetProvider()override
@@ -8672,23 +8686,37 @@ WindowsGDIParagraph
paragraph->bounds.Height()); paragraph->bounds.Height());
} }
bool OpenCaret(vint _caret, Color _color, bool _frontSide)override bool EnableCaret(vint _caret, Color _color, bool _frontSide)override
{ {
if(!IsValidCaret(_caret)) return false; if (!IsValidCaret(_caret)) return false;
if(caret!=-1) CloseCaret(); if (caret != -1) DisableCaret();
caret=_caret; caret = _caret;
caretColor=_color; caretColor = _color;
caretFrontSide=_frontSide; caretFrontSide = _frontSide;
caretPen=GetWindowsGDIResourceManager()->CreateGdiPen(caretColor); caretPen = GetWindowsGDIResourceManager()->CreateGdiPen(caretColor);
return true; return true;
} }
bool CloseCaret()override void DisableCaret()override
{ {
if(caret==-1) return false; if (caret == -1) return;
caret=-1; caret = -1;
GetWindowsGDIResourceManager()->DestroyGdiPen(caretColor); GetWindowsGDIResourceManager()->DestroyGdiPen(caretColor);
caretPen=0; caretPen = {};
}
bool BlinkCaret()override
{
if (caret == -1) return false;
if (caretPen)
{
GetWindowsGDIResourceManager()->DestroyGdiPen(caretColor);
caretPen = {};
}
else
{
caretPen = GetWindowsGDIResourceManager()->CreateGdiPen(caretColor);
}
return true; return true;
} }
@@ -8728,7 +8756,7 @@ WindowsGDIParagraph
paragraph->Render(this, false); paragraph->Render(this, false);
paragraphDC = 0; paragraphDC = 0;
if (caret != -1) if (caret != -1 && caretPen)
{ {
Rect caretBounds = GetCaretBounds(caret, caretFrontSide); Rect caretBounds = GetCaretBounds(caret, caretFrontSide);
vint x = caretBounds.x1 + bounds.x1; vint x = caretBounds.x1 + bounds.x1;
@@ -10522,7 +10550,10 @@ UniscribeEmbeddedObjectRun
vint UniscribeEmbeddedObjectRun::SumWidth(vint charStart, vint charLength) vint UniscribeEmbeddedObjectRun::SumWidth(vint charStart, vint charLength)
{ {
#define ERROR_MESSAGE_PREFIX L"vl::presentation::elements_windows_gdi::UniscribeEmbeddedObjectRun::SumWidth(...)#"
CHECK_ERROR(charStart == 0 && charLength == length, ERROR_MESSAGE_PREFIX L"Object can't split.");
return properties.size.x; return properties.size.x;
#undef ERROR_MESSAGE_PREFIX
} }
vint UniscribeEmbeddedObjectRun::SumHeight() vint UniscribeEmbeddedObjectRun::SumHeight()
@@ -10537,9 +10568,11 @@ UniscribeEmbeddedObjectRun
void UniscribeEmbeddedObjectRun::SearchForLineBreak(vint tempStart, bool wrapLine, vint maxWidth, bool firstRun, vint& charLength, vint& charAdvances) void UniscribeEmbeddedObjectRun::SearchForLineBreak(vint tempStart, bool wrapLine, vint maxWidth, bool firstRun, vint& charLength, vint& charAdvances)
{ {
#define ERROR_MESSAGE_PREFIX L"vl::presentation::elements_windows_gdi::UniscribeEmbeddedObjectRun::SearchForLineBreak(...)#"
CHECK_ERROR(tempStart == 0, ERROR_MESSAGE_PREFIX L"Object can't split.");
if (firstRun || !wrapLine || properties.size.x <= maxWidth) if (firstRun || !wrapLine || properties.size.x <= maxWidth)
{ {
charLength = length - tempStart; charLength = length;
charAdvances = properties.size.x; charAdvances = properties.size.x;
} }
else else
@@ -10547,6 +10580,7 @@ UniscribeEmbeddedObjectRun
charLength = 0; charLength = 0;
charAdvances = 0; charAdvances = 0;
} }
#undef ERROR_MESSAGE_PREFIX
} }
void UniscribeEmbeddedObjectRun::Render(IRendererCallback* callback, vint fragmentBoundsIndex, vint offsetX, vint offsetY, bool renderBackground) void UniscribeEmbeddedObjectRun::Render(IRendererCallback* callback, vint fragmentBoundsIndex, vint offsetX, vint offsetY, bool renderBackground)
@@ -10561,7 +10595,7 @@ UniscribeEmbeddedObjectRun
rect.right=(int)(fragment.bounds.Right()+offsetX)+2; rect.right=(int)(fragment.bounds.Right()+offsetX)+2;
rect.bottom=(int)(fragment.bounds.Bottom()+offsetY)+2; rect.bottom=(int)(fragment.bounds.Bottom()+offsetY)+2;
Color backgroundColor=documentFragment->colors.Values()[0].backgroundColor; Color backgroundColor = properties.backgroundColor;
if(backgroundColor.a>0) if(backgroundColor.a>0)
{ {
@@ -10824,62 +10858,65 @@ UniscribeLine
} }
// render this line into lines with auto line wrapping // render this line into lines with auto line wrapping
vint startRun = 0; vint beginRun = 0;
vint startRunOffset = 0; vint beginRunOffset = 0;
vint lastRun = 0; vint endRun = 0;
vint lastRunOffset = 0; vint endRunOffset = 0;
vint currentWidth = 0; vint currentWidth = 0;
while (startRun < scriptRuns.Count()) while (beginRun < scriptRuns.Count())
{ {
vint lastCompletedRunOffset = 0;
vint currentWidth = 0; vint currentWidth = 0;
bool firstRun = true; bool firstRun = true;
// search for a range to fit in the given width // search for a range to fit in the given width
for (vint i = startRun; i < scriptRuns.Count(); i++) while (endRun < scriptRuns.Count())
{ {
vint charLength = 0; vint charLength = 0;
vint charAdvances = 0; vint charAdvances = 0;
UniscribeRun* run = scriptRuns[i].Obj(); UniscribeRun* run = scriptRuns[endRun].Obj();
run->SearchForLineBreak(lastRunOffset, wrapLine, availableWidth - currentWidth, firstRun, charLength, charAdvances); run->SearchForLineBreak(endRunOffset, wrapLine, availableWidth - currentWidth, firstRun, charLength, charAdvances);
firstRun = false; firstRun = false;
if (charLength == run->length - lastRunOffset) if (charLength == run->length - endRunOffset)
{ {
lastCompletedRunOffset = lastRunOffset; if (endRun == scriptRuns.Count() - 1)
lastRun = i + 1;
lastRunOffset = 0;
currentWidth += charAdvances;
}
else
{
if (lastRunOffset == 0 && charLength == 0)
{ {
lastRun--; endRunOffset = run->length;
lastRunOffset = lastCompletedRunOffset; currentWidth += charAdvances;
break;
} }
else else
{ {
lastRun = i; endRun++;
lastRunOffset = lastRunOffset + charLength; endRunOffset = 0;
currentWidth += charAdvances;
}
}
else
{
if (endRunOffset == 0 && charLength == 0)
{
endRun--;
endRunOffset = scriptRuns[endRun]->length;
}
else
{
endRunOffset = endRunOffset + charLength;
currentWidth += charAdvances;
} }
break; break;
} }
} }
// if the range is empty, than this should be the end of line, ignore it // if the range is empty, than this should be the end of line, ignore it
if (startRun < lastRun || (startRun == lastRun && startRunOffset < lastRunOffset)) if (beginRun < endRun || (beginRun == endRun && beginRunOffset < endRunOffset))
{ {
// calculate the max line height in this range; // calculate the max line height in this range;
vint availableLastRun = lastRun < scriptRuns.Count() - 1 ? lastRun : scriptRuns.Count() - 1;
vint maxHeight = 0; vint maxHeight = 0;
vint maxTextHeight = 0; vint maxTextHeight = 0;
for (vint i = startRun; i <= availableLastRun; i++) for (vint i = beginRun; i <= endRun; i++)
{ {
if (i == lastRun && lastRunOffset == 0)
{
break;
}
{ {
vint size = scriptRuns[i]->SumHeight(); vint size = scriptRuns[i]->SumHeight();
if (maxHeight < size) maxHeight = size; if (maxHeight < size) maxHeight = size;
@@ -10891,40 +10928,37 @@ UniscribeLine
} }
// determine the rendering order for all runs inside this range // determine the rendering order for all runs inside this range
Array<BYTE> levels(availableLastRun - startRun + 1); Array<BYTE> levels(endRun - beginRun + 1);
Array<int> runVisualToLogical(levels.Count()); Array<int> runVisualToLogical(levels.Count());
Array<int> runLogicalToVisual(levels.Count()); Array<int> runLogicalToVisual(levels.Count());
for (vint i = startRun; i <= availableLastRun; i++) for (vint i = beginRun; i <= endRun; i++)
{ {
levels[i - startRun] = scriptRuns[i]->scriptItem->scriptItem.a.s.uBidiLevel; levels[i - beginRun] = scriptRuns[i]->scriptItem->scriptItem.a.s.uBidiLevel;
} }
ScriptLayout((int)levels.Count(), &levels[0], &runVisualToLogical[0], &runLogicalToVisual[0]); ScriptLayout((int)levels.Count(), &levels[0], &runVisualToLogical[0], &runLogicalToVisual[0]);
// render all runs inside this range // render all runs inside this range
vint startRunFragmentCount = -1; vint beginRunFirstFragment = scriptRuns[beginRun]->fragmentBounds.Count();
for (vint i = startRun; i <= availableLastRun; i++) for (vint i = 0; i < levels.Count(); i++)
{ {
vint runIndex = runVisualToLogical[i - startRun] + startRun; vint runIndex = runVisualToLogical[i] + beginRun;
UniscribeRun* run = scriptRuns[runIndex].Obj(); UniscribeRun* run = scriptRuns[runIndex].Obj();
vint start = runIndex == startRun ? startRunOffset : 0; vint start = runIndex == beginRun ? beginRunOffset : 0;
vint end = runIndex == lastRun ? lastRunOffset : run->length; vint end = runIndex == endRun ? endRunOffset : run->length;
vint length = end - start; vint length = end - start;
vint runWidth = run->SumWidth(start, length);
if (runIndex == startRun) vint runHeight = run->SumHeight();
{
startRunFragmentCount = run->fragmentBounds.Count();
}
UniscribeRun::RunFragmentBounds fragmentBounds; UniscribeRun::RunFragmentBounds fragmentBounds;
fragmentBounds.startFromRun = start; fragmentBounds.startFromRun = start;
fragmentBounds.length = length; fragmentBounds.length = length;
fragmentBounds.bounds = Rect( fragmentBounds.bounds = Rect(
Point(cx, cy + maxHeight - run->SumHeight()), Point(cx, cy + maxHeight - runHeight),
Size(run->SumWidth(start, length), run->SumHeight()) Size(runWidth, runHeight)
); );
run->fragmentBounds.Add(fragmentBounds); run->fragmentBounds.Add(fragmentBounds);
cx += run->SumWidth(start, length); cx += runWidth;
} }
// adjust alignment // adjust alignment
@@ -10942,10 +10976,10 @@ UniscribeLine
// shift all bounds using alignment // shift all bounds using alignment
if (cxOffset != 0) if (cxOffset != 0)
{ {
for (vint i = startRun; i <= availableLastRun; i++) for (vint i = beginRun; i <= endRun; i++)
{ {
UniscribeRun* run = scriptRuns[i].Obj(); UniscribeRun* run = scriptRuns[i].Obj();
for (vint j = (i == startRun ? startRunFragmentCount : 0); j < run->fragmentBounds.Count(); j++) for (vint j = (i == beginRun ? beginRunFirstFragment : 0); j < run->fragmentBounds.Count(); j++)
{ {
UniscribeRun::RunFragmentBounds& fragmentBounds = run->fragmentBounds[j]; UniscribeRun::RunFragmentBounds& fragmentBounds = run->fragmentBounds[j];
fragmentBounds.bounds.x1 += cxOffset; fragmentBounds.bounds.x1 += cxOffset;
@@ -10957,11 +10991,10 @@ UniscribeLine
// create a virtual line // create a virtual line
{ {
auto virtualLine = Ptr(new UniscribeVirtualLine); auto virtualLine = Ptr(new UniscribeVirtualLine);
virtualLine->firstRunIndex = startRun; virtualLine->firstRunIndex = beginRun;
virtualLine->firstRunBoundsIndex = startRunFragmentCount; virtualLine->firstRunBoundsIndex = beginRunFirstFragment;
virtualLine->lastRunIndex = availableLastRun; virtualLine->lastRunIndex = endRun;
virtualLine->lastRunBoundsIndex = scriptRuns[availableLastRun]->fragmentBounds.Count() - 1; virtualLine->lastRunBoundsIndex = scriptRuns[endRun]->fragmentBounds.Count() - 1;
UniscribeRun* firstRun = scriptRuns[virtualLine->firstRunIndex].Obj(); UniscribeRun* firstRun = scriptRuns[virtualLine->firstRunIndex].Obj();
UniscribeRun* lastRun = scriptRuns[virtualLine->lastRunIndex].Obj(); UniscribeRun* lastRun = scriptRuns[virtualLine->lastRunIndex].Obj();
UniscribeRun::RunFragmentBounds& firstBounds = firstRun->fragmentBounds[virtualLine->firstRunBoundsIndex]; UniscribeRun::RunFragmentBounds& firstBounds = firstRun->fragmentBounds[virtualLine->firstRunBoundsIndex];
@@ -10972,10 +11005,10 @@ UniscribeLine
virtualLine->runText = lineText.Buffer() + virtualLine->startFromLine; virtualLine->runText = lineText.Buffer() + virtualLine->startFromLine;
bool updateBounds = false; bool updateBounds = false;
for (vint i = startRun; i <= availableLastRun; i++) for (vint i = beginRun; i <= endRun; i++)
{ {
UniscribeRun* run = scriptRuns[i].Obj(); UniscribeRun* run = scriptRuns[i].Obj();
for (vint j = (i == startRun ? startRunFragmentCount : 0); j < run->fragmentBounds.Count(); j++) for (vint j = (i == beginRun ? beginRunFirstFragment : 0); j < run->fragmentBounds.Count(); j++)
{ {
UniscribeRun::RunFragmentBounds& fragmentBounds = run->fragmentBounds[j]; UniscribeRun::RunFragmentBounds& fragmentBounds = run->fragmentBounds[j];
if (updateBounds) if (updateBounds)
@@ -10999,8 +11032,14 @@ UniscribeLine
cy += (vint)(maxHeight + maxTextHeight * 0.5); cy += (vint)(maxHeight + maxTextHeight * 0.5);
} }
startRun = lastRun; // prepare for the next virtual line
startRunOffset = lastRunOffset; if (endRunOffset == scriptRuns[endRun]->length)
{
endRun++;
endRunOffset = 0;
}
beginRun = endRun;
beginRunOffset = endRunOffset;
} }
// calculate line bounds // calculate line bounds
@@ -11014,7 +11053,7 @@ UniscribeLine
{ {
Rect bounds = fragmentBounds.bounds; Rect bounds = fragmentBounds.bounds;
if (minX > bounds.Left()) minX = bounds.Left(); if (minX > bounds.Left()) minX = bounds.Left();
if (minY > bounds.Top()) minX = bounds.Top(); if (minY > bounds.Top()) minY = bounds.Top();
if (maxX < bounds.Right()) maxX = bounds.Right(); if (maxX < bounds.Right()) maxX = bounds.Right();
if (maxY < bounds.Bottom()) maxY = bounds.Bottom(); if (maxY < bounds.Bottom()) maxY = bounds.Bottom();
} }
@@ -11064,7 +11103,6 @@ UniscribeParagraph (Initialization)
fragment->fontObject=0; fragment->fontObject=0;
} }
lines.Clear(); lines.Clear();
lastAvailableWidth=-1;
} }
bool UniscribeParagraph::BuildUniscribeData(WinDC* dc) bool UniscribeParagraph::BuildUniscribeData(WinDC* dc)
@@ -11155,10 +11193,6 @@ UniscribeParagraph (Initialization)
void UniscribeParagraph::Layout(bool wrapLine, vint availableWidth, Alignment alignment) void UniscribeParagraph::Layout(bool wrapLine, vint availableWidth, Alignment alignment)
{ {
if (lastWrapLine == wrapLine && lastAvailableWidth == availableWidth && paragraphAlignment == alignment)
{
return;
}
lastWrapLine = wrapLine; lastWrapLine = wrapLine;
lastAvailableWidth = availableWidth; lastAvailableWidth = availableWidth;
paragraphAlignment = alignment; paragraphAlignment = alignment;
@@ -11183,7 +11217,7 @@ UniscribeParagraph (Initialization)
{ {
Rect bounds = line->bounds; Rect bounds = line->bounds;
if (minX > bounds.Left()) minX = bounds.Left(); if (minX > bounds.Left()) minX = bounds.Left();
if (minY > bounds.Top()) minX = bounds.Top(); if (minY > bounds.Top()) minY = bounds.Top();
if (maxX < bounds.Right()) maxX = bounds.Right(); if (maxX < bounds.Right()) maxX = bounds.Right();
if (maxY < bounds.Bottom()) maxY = bounds.Bottom(); if (maxY < bounds.Bottom()) maxY = bounds.Bottom();
} }
@@ -11345,11 +11379,11 @@ UniscribeParagraph (Formatting Helper)
f2=fe; f2=fe;
fe++; fe++;
vint length=fragmentEnd->text.Length(); vint length=fragmentEnd->text.Length();
Ptr<UniscribeFragment> leftFragment=fragmentStart->Copy(0, se); Ptr<UniscribeFragment> leftFragment= fragmentEnd->Copy(0, se);
Ptr<UniscribeFragment> rightFragment=fragmentEnd->Copy(se, length-se); Ptr<UniscribeFragment> rightFragment=fragmentEnd->Copy(se, length-se);
documentFragments.RemoveAt(fe); documentFragments.RemoveAt(fe-1);
documentFragments.Insert(fe, leftFragment); documentFragments.Insert(fe-1, leftFragment);
documentFragments.Insert(fe+1, rightFragment); documentFragments.Insert(fe, rightFragment);
} }
} }
return true; return true;
+3
View File
@@ -1314,6 +1314,9 @@ UniscribeParagraph
void Layout(bool wrapLine, vint availableWidth, Alignment alignment); void Layout(bool wrapLine, vint availableWidth, Alignment alignment);
void Render(UniscribeRun::IRendererCallback* callback, bool renderBackground); void Render(UniscribeRun::IRendererCallback* callback, bool renderBackground);
// fs, fe: range in fragment index
// ss, se: range in char index in each fragment
// f1, f2: after cutting, the range is complete fragments from f1 to f2
void SearchFragment(vint start, vint length, vint& fs, vint& ss, vint& fe, vint& se); void SearchFragment(vint start, vint length, vint& fs, vint& ss, vint& fe, vint& se);
bool CutFragment(vint fs, vint ss, vint fe, vint se, vint& f1, vint& f2); bool CutFragment(vint fs, vint ss, vint fe, vint se, vint& f1, vint& f2);
void CutFragmentColors(vint fs, vint ss, vint fe, vint se, Color UniscribeColor::* colorField, Color color); void CutFragmentColors(vint fs, vint ss, vint fe, vint se, Color UniscribeColor::* colorField, Color color);
+1109 -762
View File
File diff suppressed because it is too large Load Diff
+137 -57
View File
File diff suppressed because it is too large Load Diff
+3
View File
@@ -2579,6 +2579,8 @@ Type Declaration (Class)
CLASS_MEMBER_METHOD(Hide, NO_PARAMETER) CLASS_MEMBER_METHOD(Hide, NO_PARAMETER)
CLASS_MEMBER_METHOD(Close, NO_PARAMETER) CLASS_MEMBER_METHOD(Close, NO_PARAMETER)
CLASS_MEMBER_METHOD(GetOpening, NO_PARAMETER) CLASS_MEMBER_METHOD(GetOpening, NO_PARAMETER)
CLASS_MEMBER_METHOD(NotifyUpdateDisplayFont, NO_PARAMETER)
END_CLASS_MEMBER(GuiControlHost) END_CLASS_MEMBER(GuiControlHost)
BEGIN_CLASS_MEMBER(GuiWindow) BEGIN_CLASS_MEMBER(GuiWindow)
@@ -3364,6 +3366,7 @@ Type Declaration (Class)
CLASS_MEMBER_PROPERTY_FAST(CaretVisible) CLASS_MEMBER_PROPERTY_FAST(CaretVisible)
CLASS_MEMBER_PROPERTY_FAST(CaretColor) CLASS_MEMBER_PROPERTY_FAST(CaretColor)
CLASS_MEMBER_METHOD(BlinkCaret, NO_PARAMETER)
CLASS_MEMBER_METHOD(IsCaretEndPreferFrontSide, NO_PARAMETER) CLASS_MEMBER_METHOD(IsCaretEndPreferFrontSide, NO_PARAMETER)
CLASS_MEMBER_METHOD(SetCaret, {L"begin" _ L"end" _ L"frontSide"}) CLASS_MEMBER_METHOD(SetCaret, {L"begin" _ L"end" _ L"frontSide"})
CLASS_MEMBER_METHOD(CalculateCaret, {L"comparingCaret" _ L"position" _ L"preferFrontSide"}) CLASS_MEMBER_METHOD(CalculateCaret, {L"comparingCaret" _ L"position" _ L"preferFrontSide"})
+150 -131
View File
@@ -898,6 +898,22 @@
} }
}, },
"response": null "response": null
}, {
"$ast": "MessageDecl",
"attributes": [{
"$ast": "Attribute",
"cppType": "",
"name": "@DropRepeat"
}],
"name": "WindowNotifySetCaret",
"request": {
"$ast": "MessageRequest",
"type": {
"$ast": "ReferenceType",
"name": "NativePoint"
}
},
"response": null
}, { }, {
"$ast": "EventDecl", "$ast": "EventDecl",
"attributes": [{ "attributes": [{
@@ -1811,102 +1827,6 @@
} }
}], }],
"type": "Struct" "type": "Struct"
}, {
"$ast": "MessageDecl",
"attributes": [],
"name": "RendererUpdateElement_SolidBorder",
"request": {
"$ast": "MessageRequest",
"type": {
"$ast": "ReferenceType",
"name": "ElementDesc_SolidBorder"
}
},
"response": null
}, {
"$ast": "MessageDecl",
"attributes": [],
"name": "RendererUpdateElement_SinkBorder",
"request": {
"$ast": "MessageRequest",
"type": {
"$ast": "ReferenceType",
"name": "ElementDesc_SinkBorder"
}
},
"response": null
}, {
"$ast": "MessageDecl",
"attributes": [],
"name": "RendererUpdateElement_SinkSplitter",
"request": {
"$ast": "MessageRequest",
"type": {
"$ast": "ReferenceType",
"name": "ElementDesc_SinkSplitter"
}
},
"response": null
}, {
"$ast": "MessageDecl",
"attributes": [],
"name": "RendererUpdateElement_SolidBackground",
"request": {
"$ast": "MessageRequest",
"type": {
"$ast": "ReferenceType",
"name": "ElementDesc_SolidBackground"
}
},
"response": null
}, {
"$ast": "MessageDecl",
"attributes": [],
"name": "RendererUpdateElement_GradientBackground",
"request": {
"$ast": "MessageRequest",
"type": {
"$ast": "ReferenceType",
"name": "ElementDesc_GradientBackground"
}
},
"response": null
}, {
"$ast": "MessageDecl",
"attributes": [],
"name": "RendererUpdateElement_InnerShadow",
"request": {
"$ast": "MessageRequest",
"type": {
"$ast": "ReferenceType",
"name": "ElementDesc_InnerShadow"
}
},
"response": null
}, {
"$ast": "MessageDecl",
"attributes": [],
"name": "RendererUpdateElement_Polygon",
"request": {
"$ast": "MessageRequest",
"type": {
"$ast": "ReferenceType",
"name": "ElementDesc_Polygon"
}
},
"response": null
}, {
"$ast": "MessageDecl",
"attributes": [],
"name": "RendererUpdateElement_SolidLabel",
"request": {
"$ast": "MessageRequest",
"type": {
"$ast": "ReferenceType",
"name": "ElementDesc_SolidLabel"
}
},
"response": null
}, { }, {
"$ast": "EnumDecl", "$ast": "EnumDecl",
"attributes": [{ "attributes": [{
@@ -2112,18 +2032,6 @@
} }
}], }],
"type": "Struct" "type": "Struct"
}, {
"$ast": "MessageDecl",
"attributes": [],
"name": "RendererUpdateElement_ImageFrame",
"request": {
"$ast": "MessageRequest",
"type": {
"$ast": "ReferenceType",
"name": "ElementDesc_ImageFrame"
}
},
"response": null
}, { }, {
"$ast": "EnumDecl", "$ast": "EnumDecl",
"attributes": [{ "attributes": [{
@@ -2235,6 +2143,13 @@
"$ast": "ReferenceType", "$ast": "ReferenceType",
"name": "BreakCondition" "name": "BreakCondition"
} }
}, {
"$ast": "StructMember",
"name": "backgroundColor",
"type": {
"$ast": "PrimitiveType",
"type": "Color"
}
}, { }, {
"$ast": "StructMember", "$ast": "StructMember",
"name": "backgroundElementId", "name": "backgroundElementId",
@@ -2374,20 +2289,6 @@
"$ast": "ReferenceType", "$ast": "ReferenceType",
"name": "Size" "name": "Size"
} }
}, {
"$ast": "StructMember",
"name": "inlineObjectBounds",
"type": {
"$ast": "MapType",
"element": {
"$ast": "ReferenceType",
"name": "Rect"
},
"keyType": {
"$ast": "PrimitiveType",
"type": "Integer"
}
}
}], }],
"type": "Struct" "type": "Struct"
}, { }, {
@@ -2466,19 +2367,31 @@
"$ast": "PrimitiveType", "$ast": "PrimitiveType",
"type": "Integer" "type": "Integer"
} }
}, { }],
"type": "Struct"
}, {
"$ast": "StructDecl",
"attributes": [],
"name": "GetCaretBoundsResponse",
"members": [{
"$ast": "StructMember", "$ast": "StructMember",
"name": "caret", "name": "frontSideBounds",
"type": { "type": {
"$ast": "PrimitiveType", "$ast": "ArrayType",
"type": "Integer" "element": {
"$ast": "ReferenceType",
"name": "Rect"
}
} }
}, { }, {
"$ast": "StructMember", "$ast": "StructMember",
"name": "frontSide", "name": "backSideBounds",
"type": { "type": {
"$ast": "PrimitiveType", "$ast": "ArrayType",
"type": "Boolean" "element": {
"$ast": "ReferenceType",
"name": "Rect"
}
} }
}], }],
"type": "Struct" "type": "Struct"
@@ -2502,6 +2415,33 @@
} }
}], }],
"type": "Struct" "type": "Struct"
}, {
"$ast": "StructDecl",
"attributes": [],
"name": "GetNearestCaretFromTextPosRequest",
"members": [{
"$ast": "StructMember",
"name": "id",
"type": {
"$ast": "PrimitiveType",
"type": "Integer"
}
}, {
"$ast": "StructMember",
"name": "textPos",
"type": {
"$ast": "PrimitiveType",
"type": "Integer"
}
}, {
"$ast": "StructMember",
"name": "frontSide",
"type": {
"$ast": "PrimitiveType",
"type": "Boolean"
}
}],
"type": "Struct"
}, { }, {
"$ast": "StructDecl", "$ast": "StructDecl",
"attributes": [], "attributes": [],
@@ -2589,7 +2529,7 @@
"$ast": "MessageResponse", "$ast": "MessageResponse",
"type": { "type": {
"$ast": "ReferenceType", "$ast": "ReferenceType",
"name": "Rect" "name": "GetCaretBoundsResponse"
} }
} }
}, { }, {
@@ -2621,7 +2561,7 @@
"$ast": "MessageRequest", "$ast": "MessageRequest",
"type": { "type": {
"$ast": "ReferenceType", "$ast": "ReferenceType",
"name": "GetCaretBoundsRequest" "name": "GetNearestCaretFromTextPosRequest"
} }
}, },
"response": { "response": {
@@ -2784,6 +2724,38 @@
} }
}, },
"response": null "response": null
}, {
"$ast": "UnionDecl",
"attributes": [],
"name": "OrdinaryElementDescVariant",
"members": [{
"$ast": "UnionMember",
"name": "ElementDesc_SolidBorder"
}, {
"$ast": "UnionMember",
"name": "ElementDesc_SinkBorder"
}, {
"$ast": "UnionMember",
"name": "ElementDesc_SinkSplitter"
}, {
"$ast": "UnionMember",
"name": "ElementDesc_SolidBackground"
}, {
"$ast": "UnionMember",
"name": "ElementDesc_GradientBackground"
}, {
"$ast": "UnionMember",
"name": "ElementDesc_InnerShadow"
}, {
"$ast": "UnionMember",
"name": "ElementDesc_Polygon"
}, {
"$ast": "UnionMember",
"name": "ElementDesc_SolidLabel"
}, {
"$ast": "UnionMember",
"name": "ElementDesc_ImageFrame"
}]
}, { }, {
"$ast": "StructDecl", "$ast": "StructDecl",
"attributes": [], "attributes": [],
@@ -2795,6 +2767,16 @@
"$ast": "PrimitiveType", "$ast": "PrimitiveType",
"type": "Integer" "type": "Integer"
} }
}, {
"$ast": "StructMember",
"name": "updatedElements",
"type": {
"$ast": "ArrayType",
"element": {
"$ast": "ReferenceType",
"name": "OrdinaryElementDescVariant"
}
}
}], }],
"type": "Struct" "type": "Struct"
}, { }, {
@@ -2918,6 +2900,33 @@
} }
}], }],
"type": "Struct" "type": "Struct"
}, {
"$ast": "StructDecl",
"attributes": [],
"name": "ElementMeasuring_InlineObjectBounds",
"members": [{
"$ast": "StructMember",
"name": "elementId",
"type": {
"$ast": "PrimitiveType",
"type": "Integer"
}
}, {
"$ast": "StructMember",
"name": "callbackId",
"type": {
"$ast": "PrimitiveType",
"type": "Integer"
}
}, {
"$ast": "StructMember",
"name": "bounds",
"type": {
"$ast": "ReferenceType",
"name": "Rect"
}
}],
"type": "Struct"
}, { }, {
"$ast": "StructDecl", "$ast": "StructDecl",
"attributes": [], "attributes": [],
@@ -2952,6 +2961,16 @@
"name": "ImageMetadata" "name": "ImageMetadata"
} }
} }
}, {
"$ast": "StructMember",
"name": "inlineObjectBounds",
"type": {
"$ast": "ArrayType",
"element": {
"$ast": "ReferenceType",
"name": "ElementMeasuring_InlineObjectBounds"
}
}
}], }],
"type": "Struct" "type": "Struct"
}, { }, {
@@ -82,6 +82,7 @@ struct WindowShowing
[@DropRepeat] message WindowNotifyActivate {} [@DropRepeat] message WindowNotifyActivate {}
[@DropRepeat] message WindowNotifyShow { request: WindowShowing; } [@DropRepeat] message WindowNotifyShow { request: WindowShowing; }
[@DropRepeat] message WindowNotifyMinSize { request: NativeSize; } [@DropRepeat] message WindowNotifyMinSize { request: NativeSize; }
[@DropRepeat] message WindowNotifySetCaret { request: NativePoint; }
[@DropRepeat] event WindowBoundsUpdated { request: WindowSizingConfig; } [@DropRepeat] event WindowBoundsUpdated { request: WindowSizingConfig; }
[@DropRepeat] event WindowActivatedUpdated { request: bool; } [@DropRepeat] event WindowActivatedUpdated { request: bool; }
@@ -23,9 +23,23 @@ struct RendererCreation
message RendererCreated { request: RendererCreation[]; } message RendererCreated { request: RendererCreation[]; }
message RendererDestroyed { request: int[]; } message RendererDestroyed { request: int[]; }
union OrdinaryElementDescVariant
{
ElementDesc_SolidBorder,
ElementDesc_SinkBorder,
ElementDesc_SinkSplitter,
ElementDesc_SolidBackground,
ElementDesc_GradientBackground,
ElementDesc_InnerShadow,
ElementDesc_Polygon,
ElementDesc_SolidLabel,
ElementDesc_ImageFrame,
}
struct ElementBeginRendering struct ElementBeginRendering
{ {
var frameId : int; var frameId : int;
var updatedElements : OrdinaryElementDescVariant[];
} }
struct ElementRendering struct ElementRendering
@@ -57,15 +71,23 @@ struct ElementMeasuring_ElementMinSize
var minSize : Size; var minSize : Size;
} }
struct ElementMeasuring_InlineObjectBounds
{
var elementId : int;
var callbackId : int;
var bounds : Rect;
}
struct ElementMeasurings struct ElementMeasurings
{ {
var fontHeights : ElementMeasuring_FontHeight[]; var fontHeights : ElementMeasuring_FontHeight[];
var minSizes : ElementMeasuring_ElementMinSize[]; var minSizes : ElementMeasuring_ElementMinSize[];
var createdImages : ImageMetadata[]; var createdImages : ImageMetadata[];
var inlineObjectBounds : ElementMeasuring_InlineObjectBounds[];
} }
message RendererBeginRendering { request: ElementBeginRendering; } message RendererBeginRendering { request: ElementBeginRendering; }
message RendererBeginBoundary { request: ElementBoundary; } message RendererBeginBoundary { request: ElementBoundary; }
message RendererRenderElement { request: ElementRendering; } message RendererRenderElement { request: ElementRendering; }
message RendererEndBoundary {} message RendererEndBoundary {}
message RendererEndRendering { response: ElementMeasurings; } message RendererEndRendering { response: ElementMeasurings; }
@@ -122,11 +122,3 @@ struct ElementDesc_SolidLabel
var measuringRequest : ElementSolidLabelMeasuringRequest?; var measuringRequest : ElementSolidLabelMeasuringRequest?;
} }
message RendererUpdateElement_SolidBorder { request: ElementDesc_SolidBorder; }
message RendererUpdateElement_SinkBorder { request: ElementDesc_SinkBorder; }
message RendererUpdateElement_SinkSplitter { request: ElementDesc_SinkSplitter; }
message RendererUpdateElement_SolidBackground { request: ElementDesc_SolidBackground; }
message RendererUpdateElement_GradientBackground { request: ElementDesc_GradientBackground; }
message RendererUpdateElement_InnerShadow { request: ElementDesc_InnerShadow; }
message RendererUpdateElement_Polygon { request: ElementDesc_Polygon; }
message RendererUpdateElement_SolidLabel { request: ElementDesc_SolidLabel; }
@@ -33,6 +33,7 @@ struct DocumentInlineObjectRunProperty
var size : Size; var size : Size;
var baseline : int; var baseline : int;
var breakCondition : BreakCondition; var breakCondition : BreakCondition;
var backgroundColor : color;
var backgroundElementId : int; var backgroundElementId : int;
var callbackId : int; var callbackId : int;
} }
@@ -65,7 +66,6 @@ struct ElementDesc_DocumentParagraph
struct UpdateElement_DocumentParagraphResponse struct UpdateElement_DocumentParagraphResponse
{ {
var documentSize : Size; var documentSize : Size;
var inlineObjectBounds : Rect[int];
} }
message RendererUpdateElement_DocumentParagraph { request: ElementDesc_DocumentParagraph; response: UpdateElement_DocumentParagraphResponse; } message RendererUpdateElement_DocumentParagraph { request: ElementDesc_DocumentParagraph; response: UpdateElement_DocumentParagraphResponse; }
@@ -86,8 +86,12 @@ struct GetCaretResponse
struct GetCaretBoundsRequest struct GetCaretBoundsRequest
{ {
var id : int; var id : int;
var caret : int; }
var frontSide : bool;
struct GetCaretBoundsResponse
{
var frontSideBounds : Rect[];
var backSideBounds : Rect[];
} }
struct GetInlineObjectFromPointRequest struct GetInlineObjectFromPointRequest
@@ -96,6 +100,13 @@ struct GetInlineObjectFromPointRequest
var point : Point; var point : Point;
} }
struct GetNearestCaretFromTextPosRequest
{
var id : int;
var textPos : int;
var frontSide : bool;
}
struct IsValidCaretRequest struct IsValidCaretRequest
{ {
var id : int; var id : int;
@@ -111,9 +122,9 @@ struct OpenCaretRequest
} }
message DocumentParagraph_GetCaret { request: GetCaretRequest; response: GetCaretResponse; } message DocumentParagraph_GetCaret { request: GetCaretRequest; response: GetCaretResponse; }
message DocumentParagraph_GetCaretBounds { request: GetCaretBoundsRequest; response: Rect; } message DocumentParagraph_GetCaretBounds { request: GetCaretBoundsRequest; response: GetCaretBoundsResponse; }
message DocumentParagraph_GetInlineObjectFromPoint { request: GetInlineObjectFromPointRequest; response: DocumentRun?; } message DocumentParagraph_GetInlineObjectFromPoint { request: GetInlineObjectFromPointRequest; response: DocumentRun?; }
message DocumentParagraph_GetNearestCaretFromTextPos { request: GetCaretBoundsRequest; response: int; } message DocumentParagraph_GetNearestCaretFromTextPos { request: GetNearestCaretFromTextPosRequest; response: int; }
message DocumentParagraph_IsValidCaret { request: IsValidCaretRequest; response: bool; } message DocumentParagraph_IsValidCaret { request: IsValidCaretRequest; response: bool; }
message DocumentParagraph_OpenCaret { request: OpenCaretRequest; } message DocumentParagraph_OpenCaret { request: OpenCaretRequest; }
message DocumentParagraph_CloseCaret { request: int; } message DocumentParagraph_CloseCaret { request: int; }
@@ -46,4 +46,3 @@ struct ElementDesc_ImageFrame
var imageCreation : ImageCreation?; var imageCreation : ImageCreation?;
} }
message RendererUpdateElement_ImageFrame { request: ElementDesc_ImageFrame; }
+4 -3
View File
@@ -3349,11 +3349,12 @@ namespace vl
} }
} }
/// <summary>Remove a value associated to a specified key.</summary> /// <summary>
/// Remove a value associated to a specified key.
/// If this value is associated to the key for multiple times, only the first one will be removed.
/// </summary>
/// <returns> /// <returns>
/// Returns true if the value is removed. /// Returns true if the value is removed.
/// If this value is associated to the key for jultiple times, only the first one will be removed.
/// If this value is associated to the key for jultiple times, only the first one will be removed.
/// </returns> /// </returns>
/// <param name="key">The key to find.</param> /// <param name="key">The key to find.</param>
/// <param name="value">The value to remove.</param> /// <param name="value">The value to remove.</param>
Binary file not shown.
Binary file not shown.
@@ -186,13 +186,6 @@
var counter : int = 0; var counter : int = 0;
]]> ]]>
</ref.Members> </ref.Members>
<ref.Ctor>
<![CDATA[
{
self.AddAnimation(WaitingAnimation(animationBackground));
}
]]>
</ref.Ctor>
<TabPage ref.Name="self" Text="Animation"> <TabPage ref.Name="self" Text="Animation">
<Tab> <Tab>
<att.BoundsComposition-set AlignmentToParent="left:5 top:5 right:5 bottom:5"/> <att.BoundsComposition-set AlignmentToParent="left:5 top:5 right:5 bottom:5"/>
@@ -241,9 +234,31 @@
</TabPage> </TabPage>
<TabPage Text="Complex Animation"> <TabPage Text="Complex Animation">
<BoundsComposition ref.Name="animationBackground" AlignmentToParent="left:10 top:10 right:-1 bottom:-1" PreferredMinSize="x:200 y:200"> <Table AlignmentToParent="left:0 top:0 right:0 bottom:0" CellPadding="5" MinSizeLimitation="LimitToElementAndChildren">
<SolidBackground Color="#FFC929"/> <att.Rows>
</BoundsComposition> <_>composeType:MinSize</_>
<_>composeType:Percentage percentage:1.0</_>
</att.Rows>
<att.Columns>
<_>composeType:Percentage percentage:1.0</_>
</att.Columns>
<Cell Site="row:0 column:0">
<Button Text="Start Animation" ref.Name="buttonStartAnimation">
<ev.Clicked-eval>
<![CDATA[{
buttonStartAnimation.Enabled = false;
self.AddAnimation(AnimationTabPage::WaitingAnimation(animationBackground));
}]]></ev.Clicked-eval>
</Button>
</Cell>
<Cell Site="row:1 column:0">
<BoundsComposition ref.Name="animationBackground" AlignmentToParent="left:0 top:0 right:-1 bottom:-1" PreferredMinSize="x:200 y:200">
<SolidBackground Color="#FFC929"/>
</BoundsComposition>
</Cell>
</Table>
</TabPage> </TabPage>
</att.Pages> </att.Pages>
</Tab> </Tab>
File diff suppressed because it is too large Load Diff
@@ -27,7 +27,7 @@ namespace demo
{ {
class DocumentEditorRibbon : public ::demo::DocumentEditorBase, public ::demo::DocumentEditorRibbonConstructor, public ::vl::reflection::Description<DocumentEditorRibbon> class DocumentEditorRibbon : public ::demo::DocumentEditorBase, public ::demo::DocumentEditorRibbonConstructor, public ::vl::reflection::Description<DocumentEditorRibbon>
{ {
friend struct ::vl_workflow_global::__vwsnf222_Demo_demo_DocumentEditorRibbon___vwsn_instance_ctor__; friend struct ::vl_workflow_global::__vwsnf223_Demo_demo_DocumentEditorRibbon___vwsn_instance_ctor__;
friend class ::demo::DocumentEditorRibbonConstructor; friend class ::demo::DocumentEditorRibbonConstructor;
friend class ::vl_workflow_global::__vwsnc100_Demo_demo_DocumentEditorRibbonConstructor___vwsn_demo_DocumentEditorRibbon_Initialize__vl_reflection_description_IValueSubscription; friend class ::vl_workflow_global::__vwsnc100_Demo_demo_DocumentEditorRibbonConstructor___vwsn_demo_DocumentEditorRibbon_Initialize__vl_reflection_description_IValueSubscription;
friend class ::vl_workflow_global::__vwsnc101_Demo_demo_DocumentEditorRibbonConstructor___vwsn_demo_DocumentEditorRibbon_Initialize__vl_reflection_description_IValueSubscription; friend class ::vl_workflow_global::__vwsnc101_Demo_demo_DocumentEditorRibbonConstructor___vwsn_demo_DocumentEditorRibbon_Initialize__vl_reflection_description_IValueSubscription;
@@ -38,7 +38,6 @@ namespace demo
friend class ::vl_workflow_global::__vwsnc106_Demo_demo_DocumentEditorRibbonConstructor___vwsn_demo_DocumentEditorRibbon_Initialize__vl_reflection_description_IValueSubscription; friend class ::vl_workflow_global::__vwsnc106_Demo_demo_DocumentEditorRibbonConstructor___vwsn_demo_DocumentEditorRibbon_Initialize__vl_reflection_description_IValueSubscription;
friend class ::vl_workflow_global::__vwsnc98_Demo_demo_DocumentEditorRibbonConstructor___vwsn_demo_DocumentEditorRibbon_Initialize__vl_reflection_description_IValueSubscription; friend class ::vl_workflow_global::__vwsnc98_Demo_demo_DocumentEditorRibbonConstructor___vwsn_demo_DocumentEditorRibbon_Initialize__vl_reflection_description_IValueSubscription;
friend class ::vl_workflow_global::__vwsnc99_Demo_demo_DocumentEditorRibbonConstructor___vwsn_demo_DocumentEditorRibbon_Initialize__vl_reflection_description_IValueSubscription; friend class ::vl_workflow_global::__vwsnc99_Demo_demo_DocumentEditorRibbonConstructor___vwsn_demo_DocumentEditorRibbon_Initialize__vl_reflection_description_IValueSubscription;
friend struct ::vl_workflow_global::__vwsnf207_Demo_demo_DocumentEditorRibbonConstructor___vwsn_demo_DocumentEditorRibbon_Initialize_;
friend struct ::vl_workflow_global::__vwsnf208_Demo_demo_DocumentEditorRibbonConstructor___vwsn_demo_DocumentEditorRibbon_Initialize_; friend struct ::vl_workflow_global::__vwsnf208_Demo_demo_DocumentEditorRibbonConstructor___vwsn_demo_DocumentEditorRibbon_Initialize_;
friend struct ::vl_workflow_global::__vwsnf209_Demo_demo_DocumentEditorRibbonConstructor___vwsn_demo_DocumentEditorRibbon_Initialize_; friend struct ::vl_workflow_global::__vwsnf209_Demo_demo_DocumentEditorRibbonConstructor___vwsn_demo_DocumentEditorRibbon_Initialize_;
friend struct ::vl_workflow_global::__vwsnf210_Demo_demo_DocumentEditorRibbonConstructor___vwsn_demo_DocumentEditorRibbon_Initialize_; friend struct ::vl_workflow_global::__vwsnf210_Demo_demo_DocumentEditorRibbonConstructor___vwsn_demo_DocumentEditorRibbon_Initialize_;
@@ -53,6 +52,7 @@ namespace demo
friend struct ::vl_workflow_global::__vwsnf219_Demo_demo_DocumentEditorRibbonConstructor___vwsn_demo_DocumentEditorRibbon_Initialize_; friend struct ::vl_workflow_global::__vwsnf219_Demo_demo_DocumentEditorRibbonConstructor___vwsn_demo_DocumentEditorRibbon_Initialize_;
friend struct ::vl_workflow_global::__vwsnf220_Demo_demo_DocumentEditorRibbonConstructor___vwsn_demo_DocumentEditorRibbon_Initialize_; friend struct ::vl_workflow_global::__vwsnf220_Demo_demo_DocumentEditorRibbonConstructor___vwsn_demo_DocumentEditorRibbon_Initialize_;
friend struct ::vl_workflow_global::__vwsnf221_Demo_demo_DocumentEditorRibbonConstructor___vwsn_demo_DocumentEditorRibbon_Initialize_; friend struct ::vl_workflow_global::__vwsnf221_Demo_demo_DocumentEditorRibbonConstructor___vwsn_demo_DocumentEditorRibbon_Initialize_;
friend struct ::vl_workflow_global::__vwsnf222_Demo_demo_DocumentEditorRibbonConstructor___vwsn_demo_DocumentEditorRibbon_Initialize_;
#ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA #ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA
friend struct ::vl::reflection::description::CustomTypeDescriptorSelector<DocumentEditorRibbon>; friend struct ::vl::reflection::description::CustomTypeDescriptorSelector<DocumentEditorRibbon>;
#endif #endif
@@ -86,8 +86,8 @@ namespace demo
friend class ::demo::DocumentEditorToolstripConstructor; friend class ::demo::DocumentEditorToolstripConstructor;
friend class ::vl_workflow_global::__vwsnc110_Demo_demo_DocumentEditorToolstripConstructor___vwsn_demo_DocumentEditorToolstrip_Initialize__vl_reflection_description_IValueSubscription; friend class ::vl_workflow_global::__vwsnc110_Demo_demo_DocumentEditorToolstripConstructor___vwsn_demo_DocumentEditorToolstrip_Initialize__vl_reflection_description_IValueSubscription;
friend class ::vl_workflow_global::__vwsnc111_Demo_demo_DocumentEditorToolstripConstructor___vwsn_demo_DocumentEditorToolstrip_Initialize__vl_reflection_description_IValueSubscription; friend class ::vl_workflow_global::__vwsnc111_Demo_demo_DocumentEditorToolstripConstructor___vwsn_demo_DocumentEditorToolstrip_Initialize__vl_reflection_description_IValueSubscription;
friend struct ::vl_workflow_global::__vwsnf226_Demo_demo_DocumentEditorToolstripConstructor___vwsn_demo_DocumentEditorToolstrip_Initialize_;
friend struct ::vl_workflow_global::__vwsnf227_Demo_demo_DocumentEditorToolstripConstructor___vwsn_demo_DocumentEditorToolstrip_Initialize_; friend struct ::vl_workflow_global::__vwsnf227_Demo_demo_DocumentEditorToolstripConstructor___vwsn_demo_DocumentEditorToolstrip_Initialize_;
friend struct ::vl_workflow_global::__vwsnf228_Demo_demo_DocumentEditorToolstripConstructor___vwsn_demo_DocumentEditorToolstrip_Initialize_;
#ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA #ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA
friend struct ::vl::reflection::description::CustomTypeDescriptorSelector<DocumentEditorToolstrip>; friend struct ::vl::reflection::description::CustomTypeDescriptorSelector<DocumentEditorToolstrip>;
#endif #endif
@@ -155,7 +155,6 @@ namespace vl
CLASS_MEMBER_BASE(::vl::presentation::controls::GuiTabPage) CLASS_MEMBER_BASE(::vl::presentation::controls::GuiTabPage)
CLASS_MEMBER_BASE(::demo::AnimationTabPageConstructor) CLASS_MEMBER_BASE(::demo::AnimationTabPageConstructor)
CLASS_MEMBER_CONSTRUCTOR(::demo::AnimationTabPage*(), NO_PARAMETER) CLASS_MEMBER_CONSTRUCTOR(::demo::AnimationTabPage*(), NO_PARAMETER)
CLASS_MEMBER_METHOD(__vwsn_instance_ctor_, NO_PARAMETER)
CLASS_MEMBER_STATIC_METHOD(BallAnimation, { L"container" _ L"ball" }) CLASS_MEMBER_STATIC_METHOD(BallAnimation, { L"container" _ L"ball" })
CLASS_MEMBER_STATIC_METHOD(BallAnimationWithDelay, { L"container" _ L"ball" _ L"delay" }) CLASS_MEMBER_STATIC_METHOD(BallAnimationWithDelay, { L"container" _ L"ball" _ L"delay" })
CLASS_MEMBER_METHOD(PerformGradientAnimation, { L"target" }) CLASS_MEMBER_METHOD(PerformGradientAnimation, { L"target" })
@@ -182,6 +181,9 @@ namespace vl
CLASS_MEMBER_FIELD(__vwsn_precompile_18) CLASS_MEMBER_FIELD(__vwsn_precompile_18)
CLASS_MEMBER_FIELD(__vwsn_precompile_19) CLASS_MEMBER_FIELD(__vwsn_precompile_19)
CLASS_MEMBER_FIELD(__vwsn_precompile_2) CLASS_MEMBER_FIELD(__vwsn_precompile_2)
CLASS_MEMBER_FIELD(__vwsn_precompile_20)
CLASS_MEMBER_FIELD(__vwsn_precompile_21)
CLASS_MEMBER_FIELD(__vwsn_precompile_22)
CLASS_MEMBER_FIELD(__vwsn_precompile_3) CLASS_MEMBER_FIELD(__vwsn_precompile_3)
CLASS_MEMBER_FIELD(__vwsn_precompile_4) CLASS_MEMBER_FIELD(__vwsn_precompile_4)
CLASS_MEMBER_FIELD(__vwsn_precompile_5) CLASS_MEMBER_FIELD(__vwsn_precompile_5)
@@ -190,6 +192,7 @@ namespace vl
CLASS_MEMBER_FIELD(__vwsn_precompile_8) CLASS_MEMBER_FIELD(__vwsn_precompile_8)
CLASS_MEMBER_FIELD(__vwsn_precompile_9) CLASS_MEMBER_FIELD(__vwsn_precompile_9)
CLASS_MEMBER_FIELD(animationBackground) CLASS_MEMBER_FIELD(animationBackground)
CLASS_MEMBER_FIELD(buttonStartAnimation)
CLASS_MEMBER_FIELD(self) CLASS_MEMBER_FIELD(self)
END_CLASS_MEMBER(::demo::AnimationTabPageConstructor) END_CLASS_MEMBER(::demo::AnimationTabPageConstructor)
@@ -57,7 +57,6 @@ namespace demo
friend class ::vl_workflow_global::__vwsnc95_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize__vl_reflection_description_IValueSubscription; friend class ::vl_workflow_global::__vwsnc95_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize__vl_reflection_description_IValueSubscription;
friend class ::vl_workflow_global::__vwsnc96_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize__vl_reflection_description_IValueSubscription; friend class ::vl_workflow_global::__vwsnc96_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize__vl_reflection_description_IValueSubscription;
friend class ::vl_workflow_global::__vwsnc97_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize__vl_reflection_description_IValueSubscription; friend class ::vl_workflow_global::__vwsnc97_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize__vl_reflection_description_IValueSubscription;
friend struct ::vl_workflow_global::__vwsnf148_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize_;
friend struct ::vl_workflow_global::__vwsnf149_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize_; friend struct ::vl_workflow_global::__vwsnf149_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize_;
friend struct ::vl_workflow_global::__vwsnf150_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize_; friend struct ::vl_workflow_global::__vwsnf150_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize_;
friend struct ::vl_workflow_global::__vwsnf151_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize_; friend struct ::vl_workflow_global::__vwsnf151_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize_;
@@ -80,8 +79,8 @@ namespace demo
friend struct ::vl_workflow_global::__vwsnf168_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize_; friend struct ::vl_workflow_global::__vwsnf168_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize_;
friend struct ::vl_workflow_global::__vwsnf169_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize_; friend struct ::vl_workflow_global::__vwsnf169_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize_;
friend struct ::vl_workflow_global::__vwsnf170_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize_; friend struct ::vl_workflow_global::__vwsnf170_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize_;
friend struct ::vl_workflow_global::__vwsnf171_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize__; friend struct ::vl_workflow_global::__vwsnf171_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize_;
friend struct ::vl_workflow_global::__vwsnf172_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize_; friend struct ::vl_workflow_global::__vwsnf172_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize__;
friend struct ::vl_workflow_global::__vwsnf173_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize_; friend struct ::vl_workflow_global::__vwsnf173_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize_;
friend struct ::vl_workflow_global::__vwsnf174_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize_; friend struct ::vl_workflow_global::__vwsnf174_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize_;
friend struct ::vl_workflow_global::__vwsnf175_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize_; friend struct ::vl_workflow_global::__vwsnf175_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize_;
@@ -116,6 +115,7 @@ namespace demo
friend struct ::vl_workflow_global::__vwsnf204_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize_; friend struct ::vl_workflow_global::__vwsnf204_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize_;
friend struct ::vl_workflow_global::__vwsnf205_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize_; friend struct ::vl_workflow_global::__vwsnf205_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize_;
friend struct ::vl_workflow_global::__vwsnf206_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize_; friend struct ::vl_workflow_global::__vwsnf206_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize_;
friend struct ::vl_workflow_global::__vwsnf207_Demo_demo_DocumentEditorBaseConstructor___vwsn_demo_DocumentEditorBase_Initialize_;
#ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA #ifdef VCZH_DESCRIPTABLEOBJECT_WITH_METADATA
friend struct ::vl::reflection::description::CustomTypeDescriptorSelector<DocumentEditorBase>; friend struct ::vl::reflection::description::CustomTypeDescriptorSelector<DocumentEditorBase>;
#endif #endif
Binary file not shown.
Binary file not shown.