我試圖理解的例子在Tizen多點觸控。 我(每次調用此方法將我的手指在畫布上的一個像素或更多),其問題與以下部分:重繪帆布在C++ Tizen
result
MainForm::OnDraw(void)
{
__pCanvas->Show();
__pCanvas->
Canvas* pCanvas = GetCanvasN();
if (pCanvas)
{
pCanvas->Copy(Point(GetClientAreaBounds().x, GetClientAreaBounds().y),
*__pCanvas, GetClientAreaBounds());
delete pCanvas;
}
// Do not call Show(); it is called automatically after OnDraw() callback
return E_SUCCESS;
}
這裏是例子的觸摸方法:
void
MainForm::OnTouchMoved(const Control& source, const Point& currentPosition, const TouchEventInfo& touchInfo)
{
__pointCount++;
__strokes[__strokeCount].push_back(currentPosition);
DrawLine(__prevPosition, currentPosition, Color::GetColor(COLOR_ID_BLACK));
Tizen::Base::String string;
string.Append("...");
string.Append((int)__pointCount);
__pCanvas->DrawText(Point(50, 300), string);
__prevPosition = currentPosition;
Invalidate(false);
AppLog("OnTouchMoved");
}
而我的drawLine()方法:
void
MainForm::DrawLine(const Tizen::Graphics::Point& prevPoint, const Tizen::Graphics::Point& point, const Tizen::Graphics::Color& color)
{
if (__pCanvas)
{
__pCanvas->DrawLine(prevPoint, point);
}
}
我不明白,爲什麼在這裏創造了新的畫布(爲什麼老被複制到新的一個)。爲什麼舊的畫布在調用drawLine()後不會更新? 我們不能只是刷新舊的畫布?
UPDATE:
一些編輯後,我設法創建兩個畫布。 我想只能在__pCanvas範圍內繪製,但現在它們是「藍色」,我有問題將它們設置爲「紅色」。
這裏是我的代碼:
result
MainForm::OnInitializing(void)
{
(...)
AddTouchEventListener(*this);
SetMultipointTouchEnabled(false);
//SetMultipointTouchEnabled(true);
__pCanvas = new (std::nothrow) Canvas();
Rectangle rect = Rectangle(GetBounds().x, GetBounds().y, GetBounds().width, GetBounds().height);
result r = __pCanvas->Construct(rect);
__pInformationCanvas = new (std::nothrow) Canvas();
r = __pInformationCanvas->Construct(Rectangle(0, 0, GetBounds().width, verticalDivider));
if (r == E_SUCCESS)
{
__pCanvas->SetBackgroundColor(Color::GetColor(COLOR_ID_WHITE));
__pCanvas->Clear();
__pInformationCanvas->SetBackgroundColor(Color::GetColor(COLOR_ID_BLACK));
__pInformationCanvas->Clear();
Font font;
font.Construct(FONT_STYLE_PLAIN, FONT_SIZE);
__pCanvas->SetFont(font);
Invalidate(false);
}
return E_SUCCESS;
}
而且的onDraw方法:
result
MainForm::OnDraw(void)
{
Canvas* pCanvas = GetCanvasN();
if (pCanvas != null)
{
pCanvas->Clear();
pCanvas->Copy(Point(GetClientAreaBounds().x, GetClientAreaBounds().y),
*__pCanvas,
GetClientAreaBounds());
// Copy the second Canvas to the center of the Form's Canvas
pCanvas->Copy(Point(GetClientAreaBounds().x, GetClientAreaBounds().y),
*__pInformationCanvas,
__pInformationCanvas->GetBounds());
delete pCanvas;
}
// Do not call Show(). It will be called automatically after OnDraw() callback.
return E_SUCCESS;
}
所以你不要改變原來的畫布。 – 2013-06-27 00:33:55
但我想改變原來的...我不知道我怎麼可能...還有觸摸方法我改變原來的畫布,所以我真的不明白爲什麼我在onDraw方法中創建副本。我更新了代碼。 – Marek