print overlap gone, mouse/cursor handling
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@2852 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
d3a9f4afd9
commit
a2c5528a9e
@ -11,6 +11,7 @@ BUGS
|
|||||||
TODO
|
TODO
|
||||||
=====================================================================
|
=====================================================================
|
||||||
|
|
||||||
|
- use printsetup margins
|
||||||
|
|
||||||
- merge RecalulateXXX and Layout() into one
|
- merge RecalulateXXX and Layout() into one
|
||||||
|
|
||||||
|
@ -240,7 +240,7 @@ MyFrame::Clear(void)
|
|||||||
{
|
{
|
||||||
wxColour colBg(0, 255, 255);
|
wxColour colBg(0, 255, 255);
|
||||||
|
|
||||||
m_lwin->Clear(wxROMAN,16,wxNORMAL,wxNORMAL, false, wxGREEN, &colBg);
|
m_lwin->Clear(wxROMAN,16,wxNORMAL,wxNORMAL, false, wxRED, &colBg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -332,7 +332,7 @@ void MyFrame::OnCommand( wxCommandEvent &event )
|
|||||||
{
|
{
|
||||||
wxString line;
|
wxString line;
|
||||||
wxLayoutList *llist = m_lwin->GetLayoutList();
|
wxLayoutList *llist = m_lwin->GetLayoutList();
|
||||||
for(int i = 1; i < 5000; i++)
|
for(int i = 1; i < 300; i++)
|
||||||
{
|
{
|
||||||
line.Printf("This is line number %d.", i);
|
line.Printf("This is line number %d.", i);
|
||||||
llist->Insert(line);
|
llist->Insert(line);
|
||||||
|
@ -2345,17 +2345,19 @@ wxLayoutList::Draw(wxDC &dc,
|
|||||||
{
|
{
|
||||||
// only draw if between top and bottom:
|
// only draw if between top and bottom:
|
||||||
if((top == -1 ||
|
if((top == -1 ||
|
||||||
line->GetPosition().y + line->GetHeight() >= top))
|
line->GetPosition().y + line->GetHeight() > top))
|
||||||
{
|
{
|
||||||
// if(! style_set)
|
// if(! style_set)
|
||||||
{
|
{
|
||||||
ApplyStyle(line->GetStyleInfo(), dc);
|
ApplyStyle(line->GetStyleInfo(), dc);
|
||||||
style_set = true;
|
style_set = true;
|
||||||
}
|
}
|
||||||
|
// little condition to speed up redrawing:
|
||||||
|
if(bottom != -1
|
||||||
|
&& line->GetPosition().y+line->GetHeight() >= bottom)
|
||||||
|
break;
|
||||||
line->Draw(dc, this, offset);
|
line->Draw(dc, this, offset);
|
||||||
}
|
}
|
||||||
// little condition to speed up redrawing:
|
|
||||||
if(bottom != -1 && line->GetPosition().y > bottom) break;
|
|
||||||
line = line->GetNextLine();
|
line = line->GetNextLine();
|
||||||
}
|
}
|
||||||
InvalidateUpdateRect();
|
InvalidateUpdateRect();
|
||||||
@ -2372,7 +2374,9 @@ wxLayoutList::FindObjectScreen(wxDC &dc, wxPoint const pos,
|
|||||||
bool *found)
|
bool *found)
|
||||||
{
|
{
|
||||||
// First, find the right line:
|
// First, find the right line:
|
||||||
wxLayoutLine *line = m_FirstLine;
|
wxLayoutLine
|
||||||
|
*line = m_FirstLine,
|
||||||
|
*lastline = m_FirstLine;
|
||||||
wxPoint p;
|
wxPoint p;
|
||||||
|
|
||||||
ApplyStyle(m_DefaultStyleInfo, dc);
|
ApplyStyle(m_DefaultStyleInfo, dc);
|
||||||
@ -2381,16 +2385,7 @@ wxLayoutList::FindObjectScreen(wxDC &dc, wxPoint const pos,
|
|||||||
p = line->GetPosition();
|
p = line->GetPosition();
|
||||||
if(p.y <= pos.y && p.y+line->GetHeight() >= pos.y)
|
if(p.y <= pos.y && p.y+line->GetHeight() >= pos.y)
|
||||||
break;
|
break;
|
||||||
#if 0
|
lastline = line;
|
||||||
// we need to run a layout here to get font sizes right :-(
|
|
||||||
|
|
||||||
// VZ: we can't call Layout() from here because it marks the line as
|
|
||||||
// clean and it is not refreshed when it's called from wxLayoutList::
|
|
||||||
// Layout() - if we really need to do this, we should introduce an
|
|
||||||
// extra argument to Layout() to prevent the line from MarkClean()ing
|
|
||||||
// itself here
|
|
||||||
line->Layout(dc, this);
|
|
||||||
#endif
|
|
||||||
line = line->GetNextLine();
|
line = line->GetNextLine();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2398,18 +2393,21 @@ wxLayoutList::FindObjectScreen(wxDC &dc, wxPoint const pos,
|
|||||||
{
|
{
|
||||||
if ( found )
|
if ( found )
|
||||||
*found = false;
|
*found = false;
|
||||||
|
// use the last line:
|
||||||
return NULL; // not found
|
line = lastline;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( cursorPos )
|
if ( cursorPos )
|
||||||
cursorPos->y = line->GetLineNumber();
|
cursorPos->y = line->GetLineNumber();
|
||||||
|
|
||||||
|
bool foundinline = true;
|
||||||
// Now, find the object in the line:
|
// Now, find the object in the line:
|
||||||
wxLOiterator i = line->FindObjectScreen(dc, this,
|
wxLOiterator i = line->FindObjectScreen(dc, this,
|
||||||
pos.x,
|
pos.x,
|
||||||
cursorPos ? &cursorPos->x : NULL,
|
cursorPos ? &cursorPos->x : NULL,
|
||||||
found);
|
&foundinline);
|
||||||
|
if(found)
|
||||||
|
*found = *found && foundinline;
|
||||||
return (i == NULLIT) ? NULL : *i;
|
return (i == NULLIT) ? NULL : *i;
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -2929,6 +2927,9 @@ bool wxLayoutPrintout::OnPrintPage(int page)
|
|||||||
int top, bottom;
|
int top, bottom;
|
||||||
top = (page - 1)*m_PrintoutHeight;
|
top = (page - 1)*m_PrintoutHeight;
|
||||||
bottom = top + m_PrintoutHeight;
|
bottom = top + m_PrintoutHeight;
|
||||||
|
|
||||||
|
WXLO_DEBUG(("OnPrintPage(%d) printing from %d to %d", page, top,
|
||||||
|
bottom));
|
||||||
// SetDeviceOrigin() doesn't work here, so we need to manually
|
// SetDeviceOrigin() doesn't work here, so we need to manually
|
||||||
// translate all coordinates.
|
// translate all coordinates.
|
||||||
wxPoint translate(m_Offset.x,m_Offset.y-top);
|
wxPoint translate(m_Offset.x,m_Offset.y-top);
|
||||||
@ -2953,13 +2954,21 @@ void wxLayoutPrintout::GetPageInfo(int *minPage, int *maxPage, int *selPageFrom,
|
|||||||
float scale = ScaleDC(&psdc);
|
float scale = ScaleDC(&psdc);
|
||||||
|
|
||||||
psdc.GetSize(&m_PageWidth, &m_PageHeight);
|
psdc.GetSize(&m_PageWidth, &m_PageHeight);
|
||||||
// This sets a left/top origin of 15% and 20%:
|
|
||||||
m_Offset = wxPoint((15*m_PageWidth)/100, m_PageHeight/20);
|
// This sets a left/top origin of 10% and 7%:
|
||||||
|
m_Offset = wxPoint((10*m_PageWidth)/100, (7*m_PageHeight)/100);
|
||||||
|
|
||||||
// This is the length of the printable area.
|
// This is the length of the printable area.
|
||||||
m_PrintoutHeight = m_PageHeight - (int) (m_PageHeight * 0.15);
|
m_PrintoutHeight = m_PageHeight - 2*m_Offset.y;
|
||||||
m_PrintoutHeight = (int)( m_PrintoutHeight / scale); // we want to use the real paper height
|
m_PrintoutHeight = (int)( m_PrintoutHeight / scale); // we want to use the real paper height
|
||||||
|
#if 0
|
||||||
|
// We should really use the margin settings of wxWindows somehow.
|
||||||
|
m_Offset = wxPoint(0,0);
|
||||||
|
// This is the length of the printable area.
|
||||||
|
m_PrintoutHeight = m_PageHeight;
|
||||||
|
m_PrintoutHeight = (int)( m_PrintoutHeight / scale); // we want to use the real paper height
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
m_NumOfPages = 1 +
|
m_NumOfPages = 1 +
|
||||||
(int)( m_llist->GetSize().y / (float)(m_PrintoutHeight));
|
(int)( m_llist->GetSize().y / (float)(m_PrintoutHeight));
|
||||||
|
@ -313,16 +313,16 @@ wxLayoutWindow::OnMouse(int eventId, wxMouseEvent& event)
|
|||||||
case WXLOWIN_MENU_LDOWN:
|
case WXLOWIN_MENU_LDOWN:
|
||||||
{
|
{
|
||||||
// always move cursor to mouse click:
|
// always move cursor to mouse click:
|
||||||
if ( obj )
|
// if ( obj )
|
||||||
{
|
{
|
||||||
// we have found the real position
|
// we have found the real position
|
||||||
m_llist->MoveCursorTo(cursorPos);
|
m_llist->MoveCursorTo(cursorPos);
|
||||||
}
|
}
|
||||||
else
|
// else
|
||||||
{
|
// {
|
||||||
// click beyond the end of the text
|
// // click beyond the end of the text
|
||||||
m_llist->MoveCursorToEnd();
|
// m_llist->MoveCursorToEnd();
|
||||||
}
|
// }
|
||||||
|
|
||||||
// clicking a mouse removes the selection
|
// clicking a mouse removes the selection
|
||||||
if ( m_llist->HasSelection() )
|
if ( m_llist->HasSelection() )
|
||||||
@ -385,7 +385,7 @@ wxLayoutWindow::OnMouse(int eventId, wxMouseEvent& event)
|
|||||||
m_llist->StartSelection();
|
m_llist->StartSelection();
|
||||||
m_llist->MoveCursorWord(1, false);
|
m_llist->MoveCursorWord(1, false);
|
||||||
m_llist->EndSelection();
|
m_llist->EndSelection();
|
||||||
|
m_Selecting = false;
|
||||||
DoPaint(); // TODO: we don't have to redraw everything!
|
DoPaint(); // TODO: we don't have to redraw everything!
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user