本文整理汇总了C++中wxMax函数的典型用法代码示例。如果您正苦于以下问题:C++ wxMax函数的具体用法?C++ wxMax怎么用?C++ wxMax使用的例子?那么, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了wxMax函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: wxRect
void ViewPort::SetBoxes( void )
{
// In the case where canvas rotation is applied, we need to define a larger "virtual" pixel window size to ensure that
// enough chart data is fatched and available to fill the rotated screen.
rv_rect = wxRect( 0, 0, pix_width, pix_height );
// Specify the minimum required rectangle in unrotated screen space which will supply full screen data after specified rotation
if( ( g_bskew_comp && ( fabs( skew ) > .001 ) ) || ( fabs( rotation ) > .001 ) ) {
double rotator = rotation;
if(g_bskew_comp)
rotator -= skew;
int dy = wxRound(
fabs( pix_height * cos( rotator ) ) + fabs( pix_width * sin( rotator ) ) );
int dx = wxRound(
fabs( pix_width * cos( rotator ) ) + fabs( pix_height * sin( rotator ) ) );
// It is important for MSW build that viewport pixel dimensions be multiples of 4.....
if( dy % 4 ) dy += 4 - ( dy % 4 );
if( dx % 4 ) dx += 4 - ( dx % 4 );
int inflate_x = wxMax(( dx - pix_width ) / 2, 0);
int inflate_y = wxMax(( dy - pix_height ) / 2, 0);
// Grow the source rectangle appropriately
if( fabs( rotator ) > .001 )
rv_rect.Inflate( inflate_x, inflate_y );
}
// Compute Viewport lat/lon reference points for co-ordinate hit testing
// This must be done in unrotated space with respect to full unrotated screen space calculated above
double rotation_save = rotation;
SetRotationAngle( 0. );
wxPoint ul( rv_rect.x, rv_rect.y ), lr( rv_rect.x + rv_rect.width, rv_rect.y + rv_rect.height );
double dlat_min, dlat_max, dlon_min, dlon_max;
bool hourglass = false;
switch(m_projection_type) {
case PROJECTION_TRANSVERSE_MERCATOR:
case PROJECTION_STEREOGRAPHIC:
case PROJECTION_GNOMONIC:
hourglass = true;
case PROJECTION_POLYCONIC:
case PROJECTION_POLAR:
case PROJECTION_ORTHOGRAPHIC:
{
double d;
if( clat > 0 ) { // north polar
wxPoint u( rv_rect.x + rv_rect.width/2, rv_rect.y );
wxPoint ur( rv_rect.x + rv_rect.width, rv_rect.y );
GetLLFromPix( ul, &d, &dlon_min );
GetLLFromPix( ur, &d, &dlon_max );
GetLLFromPix( lr, &dlat_min, &d );
GetLLFromPix( u, &dlat_max, &d );
if(fabs(fabs(d - clon) - 180) < 1) { // the pole is onscreen
dlat_max = 90;
dlon_min = -180;
dlon_max = 180;
} else if(wxIsNaN(dlat_max))
dlat_max = 90;
if(hourglass) {
// near equator, center may be less
wxPoint l( rv_rect.x + rv_rect.width/2, rv_rect.y + rv_rect.height );
double dlat_min2;
GetLLFromPix( l, &dlat_min2, &d );
dlat_min = wxMin(dlat_min, dlat_min2);
}
if(wxIsNaN(dlat_min)) // world is off-screen
dlat_min = clat - 90;
} else { // south polar
wxPoint l( rv_rect.x + rv_rect.width/2, rv_rect.y + rv_rect.height );
wxPoint ll( rv_rect.x, rv_rect.y + rv_rect.height );
GetLLFromPix( ul, &dlat_max, &d );
GetLLFromPix( lr, &d, &dlon_max );
GetLLFromPix( ll, &d, &dlon_min );
GetLLFromPix( l, &dlat_min, &d );
if(fabs(fabs(d - clon) - 180) < 1) { // the pole is onscreen
dlat_min = -90;
dlon_min = -180;
dlon_max = 180;
} else if(wxIsNaN(dlat_min))
dlat_min = -90;
if(hourglass) {
// near equator, center may be less
wxPoint u( rv_rect.x + rv_rect.width/2, rv_rect.y );
double dlat_max2;
GetLLFromPix( u, &dlat_max2, &d );
dlat_max = wxMax(dlat_max, dlat_max2);
}
//.........这里部分代码省略.........
示例2: wxDialog
VampEffectDialog::VampEffectDialog(VampEffect *effect,
wxWindow *parent,
Vamp::Plugin *plugin) :
wxDialog(parent, -1, effect->GetEffectName(),
wxDefaultPosition, wxDefaultSize,
wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER),
mEffect(effect),
mPlugin(plugin)
{
Vamp::Plugin::ProgramList programs = plugin->getPrograms();
mParameters = plugin->getParameterDescriptors();
#ifdef __WXMSW__
// On Windows, for some reason, wxWindows calls OnTextCtrl during creation
// of the text control, and VampEffectDialog::OnTextCtrl calls HandleText,
// which assumes all the fields have been initialized.
// This can give us a bad pointer crash, so manipulate inSlider to
// no-op HandleText during creation.
inSlider = true;
#else
inSlider = false;
#endif
inText = false;
int count = mParameters.size();
toggles = new wxCheckBox*[count];
sliders = new wxSlider*[count];
fields = new wxTextCtrl*[count];
labels = new wxStaticText*[count];
combos = new wxComboBox*[count];
wxControl *item;
wxBoxSizer *vSizer = new wxBoxSizer(wxVERTICAL);
item = new wxStaticText(this, 0,
LAT1CTOWX(plugin->getName().c_str()) +
wxString(_(" - Vamp audio analysis plugin")));
vSizer->Add(item, 0, wxALL, 5);
item = new wxStaticText(this, 0,
LAT1CTOWX(plugin->getDescription().c_str()));
vSizer->Add(item, 0, wxALL, 5);
item = new wxStaticText(this, 0,
wxString(_("Author: "))
+ LAT1CTOWX(plugin->getMaker().c_str()));
vSizer->Add(item, 0, wxALL, 5);
item = new wxStaticText(this, 0,
LAT1CTOWX(plugin->getCopyright().c_str()));
vSizer->Add(item, 0, wxALL, 5);
wxScrolledWindow *w = new wxScrolledWindow(this,
wxID_ANY,
wxDefaultPosition,
wxDefaultSize,
wxVSCROLL | wxTAB_TRAVERSAL);
// Try to give the window a sensible default/minimum size
w->SetMinSize(wxSize(
wxMax(400, parent->GetSize().GetWidth() / 2),
parent->GetSize().GetHeight() / 2));
w->SetScrollRate(0, 20);
vSizer->Add(w, 1, wxEXPAND|wxALL, 5);
vSizer->Add(CreateStdButtonSizer(this, eCancelButton|eOkButton), 0, wxEXPAND);
SetSizer(vSizer);
wxSizer *paramSizer =
new wxStaticBoxSizer(wxVERTICAL, w, _("Plugin Settings"));
wxFlexGridSizer *gridSizer = new wxFlexGridSizer(5, 0, 0);
gridSizer->AddGrowableCol(3);
programCombo = 0;
if (!programs.empty()) {
wxArrayString choices;
wxString currentProgram =
wxString(mPlugin->getCurrentProgram().c_str(), wxConvISO8859_1);
for (size_t i = 0; i < programs.size(); ++i) {
wxString choice = wxString(programs[i].c_str(), wxConvISO8859_1);
choices.Add(choice);
}
gridSizer->Add(new wxStaticText(w, 0, _("Program")),
0, wxALIGN_CENTER_VERTICAL | wxALL, 5);
programCombo = new wxComboBox(w, 9999, currentProgram,
wxDefaultPosition, wxDefaultSize,
//.........这里部分代码省略.........
示例3: wxMax
bool wxRibbonButtonBar::TryCollapseLayout(wxRibbonButtonBarLayout* original,
size_t first_btn, size_t* last_button)
{
size_t btn_count = m_buttons.Count();
size_t btn_i;
int used_height = 0;
int used_width = 0;
int available_width = 0;
int available_height = 0;
for(btn_i = first_btn + 1; btn_i > 0; /* decrement is inside loop */)
{
--btn_i;
wxRibbonButtonBarButtonBase* button = m_buttons.Item(btn_i);
wxRibbonButtonBarButtonState large_size_class = button->GetLargestSize();
wxSize large_size = button->sizes[large_size_class].size;
int t_available_height = wxMax(available_height,
large_size.GetHeight());
int t_available_width = available_width + large_size.GetWidth();
wxRibbonButtonBarButtonState small_size_class = large_size_class;
if(!button->GetSmallerSize(&small_size_class))
{
return false;
}
wxSize small_size = button->sizes[small_size_class].size;
int t_used_height = used_height + small_size.GetHeight();
int t_used_width = wxMax(used_width, small_size.GetWidth());
if(t_used_height > t_available_height)
{
++btn_i;
break;
}
else
{
used_height = t_used_height;
used_width = t_used_width;
available_width = t_available_width;
available_height = t_available_height;
}
}
if(btn_i >= first_btn || used_width >= available_width)
{
return false;
}
if(last_button != NULL)
{
*last_button = btn_i;
}
wxRibbonButtonBarLayout* layout = new wxRibbonButtonBarLayout;
WX_APPEND_ARRAY(layout->buttons, original->buttons);
wxPoint cursor(layout->buttons.Item(btn_i).position);
bool preserve_height = false;
if(btn_i == 0)
{
// If height isn't preserved (i.e. it is reduced), then the minimum
// size for the button bar will decrease, preventing the original
// layout from being used (in some cases).
// It may be a good idea to always preserve the height, but for now
// it is only done when the first button is involved in a collapse.
preserve_height = true;
}
for(; btn_i <= first_btn; ++btn_i)
{
wxRibbonButtonBarButtonInstance& instance = layout->buttons.Item(btn_i);
instance.base->GetSmallerSize(&instance.size);
instance.position = cursor;
cursor.y += instance.base->sizes[instance.size].size.GetHeight();
}
int x_adjust = available_width - used_width;
for(; btn_i < btn_count; ++btn_i)
{
wxRibbonButtonBarButtonInstance& instance = layout->buttons.Item(btn_i);
instance.position.x -= x_adjust;
}
layout->CalculateOverallSize();
// Sanity check
if(layout->overall_size.GetWidth() >= original->overall_size.GetWidth() ||
layout->overall_size.GetHeight() > original->overall_size.GetHeight())
{
delete layout;
wxFAIL_MSG("Layout collapse resulted in increased size");
return false;
}
if(preserve_height)
{
layout->overall_size.SetHeight(original->overall_size.GetHeight());
}
m_layouts.Add(layout);
return true;
}
示例4: wxMax
//*********************************************************************************
// draw pressure scale
//*********************************************************************************
void DashboardInstrument_BaroHistory::DrawWindSpeedScale(wxGCDC* dc)
{
wxString label1,label2,label3,label4,label5;
wxColour cl;
int width, height;
cl=wxColour(61,61,204,255);
dc->SetTextForeground(cl);
dc->SetFont(*g_pFontSmall);
//round m_MaxPress up to the next hpa ...
if (m_MaxPress > 1100)
m_MaxPress=1100;
if (m_TotalMinPress < 930)
m_TotalMinPress=930;
m_MaxPressScale= (int)((m_MaxPress+15)-(m_TotalMinPress-15));
if(!m_IsRunning) {
label1=_T("-- hPa");
label2=_T("-- hPa");
label3=_T("-- hPa");
label4=_T("-- hPa");
label5=_T("-- hPa");
}
else {
/*
The goal is to draw the legend with decimals only, if we really have them !
*/
// top legend for max press
label1.Printf(_T("%.0f hPa"), m_MaxPressScale +(m_TotalMinPress-18) );
// 3/4 legend
label2.Printf(_T("%.0f hPa"), m_MaxPressScale *3./4 + (m_TotalMinPress-18) );
// center legend
label3.Printf(_T("%.0f hPa"), m_MaxPressScale /2 +(m_TotalMinPress-18));
// 1/4 legend
label4.Printf(_T("%.0f hPa"), m_MaxPressScale /4 +(m_TotalMinPress-18) );
//bottom legend for min wind
label5.Printf(_T("%.0f hPa"), (m_TotalMinPress-18));
}
dc->GetTextExtent(label1, &m_LeftLegend, &height, 0, 0, g_pFontSmall);
dc->DrawText(label1, 4, (int)(m_TopLineHeight-height/2));
dc->GetTextExtent(label2, &width, &height, 0, 0, g_pFontSmall);
dc->DrawText(label2, 4, (int)(m_TopLineHeight+m_DrawAreaRect.height/4-height/2));
m_LeftLegend = wxMax(width,m_LeftLegend);
dc->GetTextExtent(label3, &width, &height, 0, 0, g_pFontSmall);
dc->DrawText(label3, 4, (int)(m_TopLineHeight+m_DrawAreaRect.height/2-height/2));
m_LeftLegend = wxMax(width,m_LeftLegend);
dc->GetTextExtent(label4, &width, &height, 0, 0, g_pFontSmall);
dc->DrawText(label4, 4, (int)(m_TopLineHeight+m_DrawAreaRect.height*0.75-height/2));
m_LeftLegend = wxMax(width,m_LeftLegend);
dc->GetTextExtent(label5, &width, &height, 0, 0, g_pFontSmall);
dc->DrawText(label5, 4, (int)(m_TopLineHeight+m_DrawAreaRect.height-height/2));
m_LeftLegend = wxMax(width,m_LeftLegend);
m_LeftLegend+=4;
}
示例5: borders
void HexEditorCtrl::OnResize( wxSizeEvent &event ){
int x = event.GetSize().GetX();
int y = event.GetSize().GetY();
int charx = hex_ctrl->GetCharSize().GetX();
int chartx = text_ctrl->GetCharSize().GetX();
int offset_x = offset_ctrl->GetCharSize().GetX()*offset_ctrl->GetLineSize();// + 4;
offset_x = offset_ctrl->IsShown() ? offset_x : 0;
x -= offset_x; //Remove Offset Control box X because its changeable
x -= offset_scroll_real->GetSize().GetX(); //Remove Offset scroll size
x -= 4*2; //+x 4 pixel external borders (dark ones, 2 pix each size)
x = wxMax(0,x); //Avoid X being negative
y -= m_static_byteview->GetSize().GetY(); //Remove Head Text Y
//AutoFill:
bool custom_hex_format;
wxConfig::Get()->Read( wxT("UseCustomHexFormat"), &custom_hex_format, false );
wxString fmt(wxT("xx "));
if( custom_hex_format )
wxConfig::Get()->Read( wxT("CustomHexFormat"), &fmt, wxT("xx "));
// TODO (death#1#): Move style engine somewhere else to speedy resizing.
hex_ctrl->SetFormat( fmt );
int cnt_chr=0; //Counted character at current format
for( unsigned i = 0 ; i < fmt.Len() ; i++ ){
if( fmt[i]!=' ' )
cnt_chr++;
}
cnt_chr/=2; // divide 2 for find byte per hex representation.
int hexchr=0,textchr = 0;
//Recalculate available area due hidden panels.
hexchr+=hex_ctrl->IsShown() ? fmt.Len() : 0;
textchr+=text_ctrl->IsShown() ? cnt_chr : 0;
int available_space=0;
available_space=x/(hexchr*charx+textchr*chartx/(GetCharToHexSize()/2));
//Limiting Bytes Per Line
bool use_BytesPerLineLimit;
wxConfig::Get()->Read( wxT("UseBytesPerLineLimit"), &use_BytesPerLineLimit, false );
if( use_BytesPerLineLimit ){
int BytesPerLineLimit;
wxConfig::Get()->Read( wxT("BytesPerLineLimit"), reinterpret_cast<int*>(&BytesPerLineLimit), 16);
//Downsizing is available
if( available_space*cnt_chr > BytesPerLineLimit )
available_space = BytesPerLineLimit/cnt_chr;
}
//Calculation of available area for Hex and Text panels.
int text_x = chartx*available_space*cnt_chr/(GetCharToHexSize()/2) +2 +4;
int hex_x = charx*available_space*fmt.Len() +2 +4 - charx ; //no need for last gap;
int ByteShownPerLine=available_space*cnt_chr;
text_x = text_ctrl->IsShown() ? text_x : 0;
hex_x = hex_ctrl->IsShown() ? hex_x : 0;
#ifdef _DEBUG_SIZE_
std::cout<< "HexEditorCtrl::OnResize()" << std::endl
<< "HexEditorCtrl SizeEvent ReSize Command=(" << event.GetSize().GetX() << ',' << event.GetSize().GetY() << ")\n"
<< "Offset Scrll: \t(" << offset_scroll->GetSize().GetX() << ',' << event.GetSize().GetY() <<")\n"
<< "Offset Ctrl: \t(" << offset_ctrl->GetSize().GetX() << ',' << event.GetSize().GetY() <<")\n"
<< "Hex Ctrl: \t(" << hex_x << ',' << event.GetSize().GetY() << ")\n"
<< "Text Ctrl: \t(" << text_x << ',' << event.GetSize().GetY() << ")\n"
<< "Hex Char: \t" << charx << std::endl
<< "ByteShownPerLine: \t" << ByteShownPerLine << std::endl;
#endif
offset_ctrl->SetMinSize( wxSize( offset_x , y ) );
// offset_ctrl->SetSize( wxSize( offset_x , y ) ); //Not needed, Layout() Makes the job well.
m_static_offset->SetMinSize( wxSize(offset_x, m_static_offset->GetSize().GetY()) );
hex_ctrl->SetMinSize( wxSize( hex_x, y ));
// hex_ctrl->SetSize( wxSize( hex_x, y ));
m_static_address->SetMinSize( wxSize(hex_x, m_static_offset->GetSize().GetY()) ) ;
text_ctrl->SetMinSize( wxSize( text_x, y ));
// text_ctrl->SetSize( wxSize( text_x, y ));
m_static_byteview->SetMinSize( wxSize( text_x, m_static_offset->GetSize().GetY()) );
// Destroy the sizer created by the form builder before adding the windows
// managed by it to another sizer, otherwise we would crash later when
// destroying the sizer as it wouldn't know about the windows it contains.
SetSizer(NULL);
//Preparing Sizer
wxFlexGridSizer* fgSizer1 = new wxFlexGridSizer( 2, 4, 0, 0 );
#if 1
fgSizer1->Add( m_static_offset, 0, wxALIGN_CENTER|wxLEFT, 5 );
fgSizer1->Add( m_static_address, 0, wxALIGN_LEFT|wxALIGN_CENTER_VERTICAL|wxLEFT, 2 );
fgSizer1->Add( m_static_byteview, 0, wxALIGN_CENTER|wxALL, 0 );
fgSizer1->Add( m_static_null, 0, wxALIGN_CENTER, 3 );
fgSizer1->Add( offset_ctrl, 0, wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND, 0 );
fgSizer1->Add( hex_ctrl, 0, wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND, 0 );
fgSizer1->Add( text_ctrl, 0, wxALIGN_CENTER_VERTICAL|wxALL|wxEXPAND, 0 );
fgSizer1->Add( offset_scroll_real, 0, wxEXPAND, 0 );
#else
fgSizer1->Add( m_static_offset, 0, wxALIGN_CENTER|wxLEFT, 0 );
//.........这里部分代码省略.........
示例6: RecalculateSize
//.........这里部分代码省略.........
m_ptextctrl = new wxTextCtrl( this, -1, _T(""), wxPoint( sx * 3 / 100, 6 ),
texc_size ,
wxTE_MULTILINE | wxTE_READONLY | wxTE_DONTWRAP);
int bsx, bsy, bpx, bpy;
PR_button->GetSize( &bsx, &bsy );
PR_button->GetPosition( &bpx, &bpy );
NX_button = new wxButton( this, ID_TCWIN_NX, _( "Next" ), wxPoint( bpx + bsx + 5, sy - (m_tsy + 10) ),
wxSize( -1, -1 ) );
m_TCWinPopupTimer.SetOwner( this, TCWININF_TIMER );
wxScreenDC dc;
int text_height;
dc.GetTextExtent(_T("W"), NULL, &text_height);
m_button_height = m_tsy; //text_height + 20;
// Build graphics tools
wxFont *dlg_font = FontMgr::Get().GetFont( _("Dialog") );
int dlg_font_size = dlg_font->GetPointSize();
pSFont = FontMgr::Get().FindOrCreateFont( dlg_font_size-2, wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL,
wxFONTWEIGHT_NORMAL, FALSE, wxString( _T ( "Arial" ) ) );
pSMFont = FontMgr::Get().FindOrCreateFont( dlg_font_size-1, wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL,
wxFONTWEIGHT_NORMAL, FALSE, wxString( _T ( "Arial" ) ) );
pMFont = FontMgr::Get().FindOrCreateFont( dlg_font_size, wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD,
FALSE, wxString( _T ( "Arial" ) ) );
pLFont = FontMgr::Get().FindOrCreateFont( dlg_font_size+1, wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD,
FALSE, wxString( _T ( "Arial" ) ) );
pblack_1 = wxThePenList->FindOrCreatePen( GetGlobalColor( _T ( "UINFD" ) ), wxMax(1,(int)(m_tcwin_scaler+0.5)),
wxPENSTYLE_SOLID );
pblack_2 = wxThePenList->FindOrCreatePen( GetGlobalColor( _T ( "UINFD" ) ), wxMax(2,(int)(2*m_tcwin_scaler+0.5)),
wxPENSTYLE_SOLID );
pblack_3 = wxThePenList->FindOrCreatePen( GetGlobalColor( _T ( "UWHIT" ) ), wxMax(1,(int)(m_tcwin_scaler+0.5)),
wxPENSTYLE_SOLID );
pred_2 = wxThePenList->FindOrCreatePen( GetGlobalColor( _T ( "UINFR" ) ), wxMax(4,(int)(4*m_tcwin_scaler+0.5)),
wxPENSTYLE_SOLID );
pltgray = wxTheBrushList->FindOrCreateBrush( GetGlobalColor( _T ( "UIBCK" ) ),
wxBRUSHSTYLE_SOLID );
pltgray2 = wxTheBrushList->FindOrCreateBrush( GetGlobalColor( _T ( "DILG1" ) ),
wxBRUSHSTYLE_SOLID );
DimeControl( this );
// Fill in some static text control information
// Tidi station information
m_ptextctrl->Clear();
wxString locn( pIDX->IDX_station_name, wxConvUTF8 );
wxString locna, locnb;
if( locn.Contains( wxString( _T ( "," ) ) ) ) {
locna = locn.BeforeFirst( ',' );
locnb = locn.AfterFirst( ',' );
} else {
locna = locn;
locnb.Empty();
}
// write the first line
wxTextAttr style;
style.SetFont( *pLFont );
示例7: endCallback
void __CALL_CONVENTION endCallback(void)
{
// Create a TriPrim
char buf[40];
if(s_nvcall > s_nvmax) // keep track of largest number of triangle vertices
s_nvmax = s_nvcall;
switch(s_gltri_type)
{
case GL_TRIANGLE_FAN:
case GL_TRIANGLE_STRIP:
case GL_TRIANGLES:
{
TriPrim *pTPG = new TriPrim;
if(NULL == s_pTPG_Last)
{
s_pTPG_Head = pTPG;
s_pTPG_Last = pTPG;
}
else
{
s_pTPG_Last->p_next = pTPG;
s_pTPG_Last = pTPG;
}
pTPG->p_next = NULL;
pTPG->type = s_gltri_type;
pTPG->nVert = s_nvcall;
// Calculate bounding box
float sxmax = -1000; // this poly BBox
float sxmin = 1000;
float symax = -90;
float symin = 90;
GLdouble *pvr = s_pwork_buf;
for(int iv=0 ; iv < s_nvcall ; iv++)
{
GLdouble xd, yd;
xd = *pvr++;
yd = *pvr++;
if(s_bmerc_transform)
{
double valx = ( xd * s_transform_x_rate ) + s_transform_x_origin;
double valy = ( yd * s_transform_y_rate ) + s_transform_y_origin;
// Convert to lat/lon
double lat = ( 2.0 * atan ( exp ( valy/CM93_semimajor_axis_meters ) ) - PI/2. ) / DEGREE;
double lon = ( valx / ( DEGREE * CM93_semimajor_axis_meters ) );
sxmax = wxMax(lon, sxmax);
sxmin = wxMin(lon, sxmin);
symax = wxMax(lat, symax);
symin = wxMin(lat, symin);
}
else
{
sxmax = wxMax(xd, sxmax);
sxmin = wxMin(xd, sxmin);
symax = wxMax(yd, symax);
symin = wxMin(yd, symin);
}
}
pTPG->tri_box.Set(symin, sxmin, symax, sxmax);
// Transcribe this geometry to TriPrim, converting to SM if called for
if(s_bSENC_SM)
{
GLdouble *pds = s_pwork_buf;
pTPG->p_vertex = (double *)malloc(s_nvcall * 2 * sizeof(double));
GLdouble *pdd = (GLdouble*)pTPG->p_vertex;
for(int ip = 0 ; ip < s_nvcall ; ip++)
{
double dlon = *pds++;
double dlat = *pds++;
double easting, northing;
toSM(dlat, dlon, s_ref_lat, s_ref_lon, &easting, &northing);
*pdd++ = easting;
*pdd++ = northing;
}
}
else
{
pTPG->p_vertex = (double *)malloc(s_nvcall * 2 * sizeof(double));
memcpy(pTPG->p_vertex, s_pwork_buf, s_nvcall * 2 * sizeof(double));
}
break;
}
default:
{
sprintf(buf, "....begin Callback unknown\n");
//.........这里部分代码省略.........
示例8: WXUNUSED
LV2EffectDialog::LV2EffectDialog(LV2Effect *effect,
wxWindow *parent,
const LilvPlugin *data,
int sampleRate,
double length,
double WXUNUSED(noteLength),
unsigned char WXUNUSED(noteVelocity),
unsigned char WXUNUSED(noteKey))
: wxDialog(parent, wxID_ANY,
mEffect->GetString(lilv_plugin_get_name(data)),
wxDefaultPosition, wxSize(500, -1),
wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER),
mEffect(effect),
mData(data),
mControls(effect->GetControls()),
mSampleRate(sampleRate),
mLength(length)
{
#if defined(__WXMSW__)
// On Windows, for some reason, wxWindows calls OnTextCtrl during creation
// of the text control, and LV2EffectDialog::OnTextCtrl calls HandleText,
// which assumes all the mFields have been initialized.
// This can give us a bad pointer crash, so manipulate inSlider to
// no-op HandleText during creation.
inSlider = true;
#else
inSlider = false;
#endif
inText = false;
inText = true;
// Allocate memory for the user parameter controls
int ctrlcnt = (int) mControls.GetCount();
mToggles = new wxCheckBox*[ctrlcnt];
mSliders = new wxSlider*[ctrlcnt];
mFields = new wxTextCtrl*[ctrlcnt];
mLabels = new wxStaticText*[ctrlcnt];
mEnums = new wxChoice*[ctrlcnt];
wxControl *item;
wxBoxSizer *vSizer = new wxBoxSizer(wxVERTICAL);
// Add information about the plugin
LilvNode *tmpValue = lilv_plugin_get_author_name(data);
if (tmpValue)
{
wxString author(_("Author: ") + mEffect->GetString(tmpValue));
item = new wxStaticText(this, wxID_ANY, author);
vSizer->Add(item, 0, wxALL, 5);
lilv_node_free(tmpValue);
}
wxScrolledWindow *w = new wxScrolledWindow(this,
wxID_ANY,
wxDefaultPosition,
wxDefaultSize,
wxVSCROLL | wxTAB_TRAVERSAL);
// Try to give the window a sensible default/minimum size
w->SetMinSize(wxSize(
wxMax(600, parent->GetSize().GetWidth() * 2/3),
parent->GetSize().GetHeight() / 2));
w->SetScrollRate(0, 20);
vSizer->Add(w, 1, wxEXPAND|wxALL, 5);
// Preview, OK, & Cancel buttons
vSizer->Add(CreateStdButtonSizer(this, ePreviewButton|eCancelButton|eOkButton), 0, wxEXPAND);
SetSizer(vSizer);
wxSizer *paramSizer =
new wxStaticBoxSizer(wxVERTICAL, w, _("Effect Settings"));
wxFlexGridSizer *gridSizer =
new wxFlexGridSizer(5, 0, 0);
gridSizer->AddGrowableCol(3);
// Now add the length control
if (mEffect->GetEffectFlags() & INSERT_EFFECT)
{
item = new wxStaticText(w, 0, _("Length (seconds)"));
gridSizer->Add(item, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5);
mSeconds = new wxTextCtrl(w, LADSPA_SECONDS_ID, Internat::ToDisplayString(length));
mSeconds->SetName(_("Length (seconds)"));
gridSizer->Add(mSeconds, 0, wxALIGN_CENTER_VERTICAL | wxALL, 5);
gridSizer->Add(1, 1, 0);
gridSizer->Add(1, 1, 0);
gridSizer->Add(1, 1, 0);
ConnectFocus(mSeconds);
}
// The note controls if the plugin is a synth
if (mEffect->IsSynth())
{
// Note length control
item = new wxStaticText(w, wxID_ANY, _("Note length (seconds)"));
gridSizer->Add(item, 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxALL, 5);
//.........这里部分代码省略.........
示例9: GetSize
void wxRadioBox::DoSetSize(int x, int y, int width, int height, int sizeFlags)
{
int i;
wxRadioButton *current;
// define the position
int x_current, y_current;
int x_offset, y_offset;
int widthOld, heightOld;
GetSize( &widthOld, &heightOld );
GetPosition( &x_current, &y_current );
x_offset = x;
y_offset = y;
if (!(sizeFlags & wxSIZE_ALLOW_MINUS_ONE))
{
if (x == wxDefaultCoord)
x_offset = x_current;
if (y == wxDefaultCoord)
y_offset = y_current;
}
// define size
int charWidth, charHeight;
int maxWidth, maxHeight;
int eachWidth[128], eachHeight[128];
int totWidth, totHeight;
GetTextExtent(
wxT("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"),
&charWidth, &charHeight );
charWidth /= 52;
maxWidth = -1;
maxHeight = -1;
wxSize bestSizeRadio ;
if ( m_radioButtonCycle )
bestSizeRadio = m_radioButtonCycle->GetBestSize();
for (unsigned int i = 0 ; i < m_noItems; i++)
{
GetTextExtent(GetString(i), &eachWidth[i], &eachHeight[i] );
eachWidth[i] = eachWidth[i] + RADIO_SIZE;
eachHeight[i] = wxMax( eachHeight[i], bestSizeRadio.y );
if (maxWidth < eachWidth[i])
maxWidth = eachWidth[i];
if (maxHeight < eachHeight[i])
maxHeight = eachHeight[i];
}
// according to HIG (official space - 3 Pixels Diff between Frame and Layout size)
int space = 3;
if ( GetWindowVariant() == wxWINDOW_VARIANT_MINI )
space = 2;
totHeight = GetRowCount() * maxHeight + (GetRowCount() - 1) * space;
totWidth = GetColumnCount() * (maxWidth + charWidth);
wxSize sz = DoGetSizeFromClientSize( wxSize( totWidth, totHeight ) ) ;
// change the width / height only when specified
if ( width == wxDefaultCoord )
{
if ( sizeFlags & wxSIZE_AUTO_WIDTH )
width = sz.x;
else
width = widthOld;
}
if ( height == wxDefaultCoord )
{
if ( sizeFlags & wxSIZE_AUTO_HEIGHT )
height = sz.y;
else
height = heightOld;
}
wxControl::DoSetSize( x_offset, y_offset, width, height, wxSIZE_AUTO );
// arrange radio buttons
int x_start, y_start;
x_start = ( width - sz.x ) / 2;
y_start = ( height - sz.y ) / 2;
x_offset = x_start;
y_offset = y_start;
current = m_radioButtonCycle;
for (i = 0 ; i < (int)m_noItems; i++)
{
// not to do for the zero button!
if ((i > 0) && ((i % GetMajorDim()) == 0))
{
if (m_windowStyle & wxRA_SPECIFY_ROWS)
{
//.........这里部分代码省略.........
示例10: wxASSERT
void GutterCtrl::OnMouseLeftDown(wxMouseEvent& event) {
//wxLogDebug("OnMouseLeftDown");
//wxASSERT(m_editorCtrl);
wxASSERT(m_currentSel == -1);
Lines& lines = m_editorCtrl.GetLines();
// Get Mouse location
const int x = event.GetX();
const int y = event.GetY() + m_editorCtrl.GetYScrollPos();
// Handle bookmarks
if (m_showBookmarks && x < (int)m_numberX) {
// Find out which line was clicked on
if ((int)y < lines.GetHeight()) {
const unsigned int line_id = lines.GetLineFromYPos(y);
m_editorCtrl.AddBookmark(line_id, true /*toggle*/);
DrawGutter(); // Redraw gutter to show bookmarks
return;
}
}
// Handle folding
if (m_showFolds && x > (int)m_foldStartX) {
ClickOnFold(y);
return;
}
bool hasSelection = false;
interval sel(0, 0);
if (event.ShiftDown() && lines.IsSelected()) {
sel = lines.GetSelections()[lines.GetLastSelection()];
hasSelection = true;
}
// If not multiselecting or extending, remove previous selections
if (!event.ControlDown()) {
lines.RemoveAllSelections();
}
// Find out which line was clicked on
if (y < lines.GetHeight()) {
const unsigned int line_id = lines.GetLineFromYPos(y);
// Select the line
if (!lines.isLineVirtual(line_id)) {
int startpos = lines.GetLineStartpos(line_id);
int endpos = lines.GetLineEndpos(line_id, false);
if (hasSelection) {
startpos = wxMin(startpos, (int)sel.start);
endpos = wxMax(endpos, (int)sel.end);
}
m_currentSel = lines.AddSelection(startpos, endpos);
lines.SetPos(endpos);
m_editorCtrl.SetFocus();
m_sel_startline = m_sel_endline = line_id;
}
m_sel_startoutside = false;
}
else {
const unsigned int linecount = lines.GetLineCount();
m_sel_startline = m_sel_endline = linecount ? linecount-1 : 0;
m_sel_startoutside = true;
if (hasSelection) {
m_currentSel = lines.AddSelection(sel.start, lines.GetLength());
lines.SetPos(lines.GetLength());
m_editorCtrl.SetFocus();
}
}
// Make sure we capure all mouse events
// this is released in OnMouseLeftUp()
CaptureMouse();
// Redraw the editCtrl to show new selection
m_editorCtrl.DrawLayout();
}
示例11: if
void GutterCtrl::OnMouseMotion(wxMouseEvent& event) {
Lines& lines = m_editorCtrl.GetLines();
// Get Mouse location
const int y = event.GetY() + m_editorCtrl.GetYScrollPos();
if (event.LeftIsDown() && HasCapture()) {
// Find out what is under mouse
unsigned int line_id;
if (y < 0) line_id = 0;
else if (y < lines.GetHeight()) {
line_id = lines.GetLineFromYPos(y);
}
else {
if (m_sel_startoutside && m_currentSel != -1) {
// Make sure we remove current selection
m_currentSel = lines.UpdateSelection(m_currentSel, 0, 0);
lines.SetPos(lines.GetLength());
m_editorCtrl.DrawLayout();
return;
}
const unsigned int linecount = lines.GetLineCount();
line_id = linecount ? linecount-1 : 0;
}
// Select the lines
if (line_id != m_sel_endline) {
m_sel_endline = line_id;
int sel_start = lines.GetLineStartpos(wxMin(m_sel_startline, m_sel_endline));
int sel_end = lines.GetLineEndpos(wxMax(m_sel_startline, m_sel_endline), false);
if (sel_start == sel_end) {
lines.RemoveAllSelections();
m_currentSel = -1;
}
else {
// Update the lines selection info
if (m_currentSel == -1) {
m_currentSel = lines.AddSelection(sel_start, sel_end);
}
else {
m_currentSel = lines.UpdateSelection(m_currentSel, sel_start, sel_end);
}
lines.SetPos(m_sel_endline < m_sel_startline ? sel_start : sel_end);
}
m_editorCtrl.MakeCaretVisible(); // also ensures scrolling if outside window
m_editorCtrl.DrawLayout();
}
}
else if (event.GetX() > (int)m_foldStartX && 0 <=y && y < lines.GetHeight()) {
const unsigned int line_id = lines.GetLineFromYPos(y);
vector<cxFold*> foldStack = m_editorCtrl.GetFoldStack(line_id);
if (!foldStack.empty()) {
m_currentFold = foldStack.back();
DrawGutter(); // Redraw gutter to show highlights
return;
}
}
if (m_currentFold) {
m_currentFold = NULL;
DrawGutter(); // Redraw gutter to remove highlights
}
}
示例12: bmp
// Build the calibration "step" graph which will appear on the lefthand side of the panels
wxBitmap CalReviewDialog::CreateGraph(bool AO)
{
wxMemoryDC memDC;
wxBitmap bmp(CALREVIEW_BITMAP_SIZE, CALREVIEW_BITMAP_SIZE, -1);
wxPen axisPen("GREY", 3, wxCROSS_HATCH);
wxColour raColor = pFrame->pGraphLog->GetRaOrDxColor();
wxColour decColor = pFrame->pGraphLog->GetDecOrDyColor();
wxPen raPen(raColor, 3, wxSOLID);
wxPen decPen(decColor, 3, wxSOLID);
wxBrush raBrush(raColor, wxSOLID);
wxBrush decBrush(decColor, wxSOLID);
CalibrationDetails calDetails;
double scaleFactor;
int ptRadius;
if (!pSecondaryMount)
{
pMount->GetCalibrationDetails(&calDetails); // Normal case, no AO
}
else
{
if (AO)
{
pMount->GetCalibrationDetails(&calDetails); // AO tab, use AO details
}
else
{
pSecondaryMount->GetCalibrationDetails(&calDetails); // Mount tab, use mount details
}
}
// Find the max excursion from the origin in order to scale the points to fit the bitmap
double biggestVal = -100.0;
for (std::vector<wxRealPoint>::const_iterator it = calDetails.raSteps.begin(); it != calDetails.raSteps.end(); ++it)
{
biggestVal = wxMax(biggestVal, fabs(it->x));
biggestVal = wxMax(biggestVal, fabs(it->y));
}
for (std::vector<wxRealPoint>::const_iterator it = calDetails.decSteps.begin(); it != calDetails.decSteps.end(); ++it)
{
biggestVal = wxMax(biggestVal, fabs(it->x));
biggestVal = wxMax(biggestVal, fabs(it->y));
}
if (biggestVal > 0.0)
scaleFactor = ((CALREVIEW_BITMAP_SIZE - 5) / 2) / biggestVal; // Leave room for circular point
else
scaleFactor = 1.0;
memDC.SelectObject(bmp);
memDC.SetBackground(*wxBLACK_BRUSH);
memDC.Clear();
memDC.SetPen(axisPen);
// Draw the axes
memDC.SetDeviceOrigin(wxCoord(CALREVIEW_BITMAP_SIZE / 2), wxCoord(CALREVIEW_BITMAP_SIZE / 2));
memDC.DrawLine(-CALREVIEW_BITMAP_SIZE / 2, 0, CALREVIEW_BITMAP_SIZE / 2, 0); // x
memDC.DrawLine(0, -CALREVIEW_BITMAP_SIZE / 2, 0, CALREVIEW_BITMAP_SIZE / 2); // y
if (calDetails.raStepCount > 0)
{
// Draw the RA data
memDC.SetPen(raPen);
memDC.SetBrush(raBrush);
ptRadius = 2;
// Scale the points, then plot them individually
for (int i = 0; i < (int) calDetails.raSteps.size(); i++)
{
if (i == calDetails.raStepCount + 2) // Valid even for "single-step" calibration
{
memDC.SetPen(wxPen(raColor, 1)); // 1-pixel-thick outline
memDC.SetBrush(wxNullBrush); // Outline only for "return" data points
ptRadius = 3;
}
memDC.DrawCircle(IntPoint(calDetails.raSteps.at(i), scaleFactor), ptRadius);
}
// Show the line PHD2 will use for the rate
memDC.SetPen(raPen);
if ((int)calDetails.raSteps.size() > calDetails.raStepCount) // New calib, includes return values
memDC.DrawLine(IntPoint(calDetails.raSteps.at(0), scaleFactor), IntPoint(calDetails.raSteps.at(calDetails.raStepCount), scaleFactor));
else
memDC.DrawLine(IntPoint(calDetails.raSteps.at(0), scaleFactor), IntPoint(calDetails.raSteps.at(calDetails.raStepCount - 1), scaleFactor));
}
// Handle the Dec data
memDC.SetPen(decPen);
memDC.SetBrush(decBrush);
ptRadius = 2;
if (calDetails.decStepCount > 0)
{
for (int i = 0; i < (int) calDetails.decSteps.size(); i++)
{
if (i == calDetails.decStepCount + 2)
{
memDC.SetPen(wxPen(decColor, 1)); // 1-pixel-thick outline
memDC.SetBrush(wxNullBrush); // Outline only for "return" data points
ptRadius = 3;
}
//.........这里部分代码省略.........
示例13: wxColour
//*********************************************************************************
// draw wind speed scale
//*********************************************************************************
void TacticsInstrument_WindDirHistory::DrawWindSpeedScale(wxGCDC* dc)
{
wxString label1, label2, label3, label4, label5;
wxColour cl;
int width, height;
double val1;
double WindSpdScale;
cl = wxColour(61, 61, 204, 255);
dc->SetTextForeground(cl);
dc->SetFont(*g_pFontSmall);
//round maxWindSpd up to the next full knot; nicer view ...
m_MaxWindSpdScale = (int)m_MaxWindSpd + 1;
if (!m_IsRunning) {
label1.Printf(_T("--- %s"), m_WindSpeedUnit.c_str());
label2 = label1;
label3 = label1;
label4 = label1;
label5 = label1;
}
else {
/*we round the speed up to the next full knot ==> the top and bottom line have full numbers as legend (e.g. 23 kn -- 0 kn)
but the intermediate lines may have decimal values (e.g. center line : 23/2=11.5 or quarter line 23/4=5.75), so in worst case
we end up with 23 - 17.25 - 11.5 - 5.75 - 0
The goal is to draw the legend with decimals only, if we really have them !
*/
// top legend for max wind
label1.Printf(_T("%.0f %s"), toUsrSpeed_Plugin(m_MaxWindSpdScale, g_iDashWindSpeedUnit), m_WindSpeedUnit.c_str());
// 3/4 legend
WindSpdScale = m_MaxWindSpdScale*3. / 4.;
// do we need a decimal ?
val1 = (int)((WindSpdScale - (int)WindSpdScale) * 100);
if (val1 == 25 || val1 == 75) // it's a .25 or a .75
label2.Printf(_T("%.2f %s"), toUsrSpeed_Plugin(WindSpdScale, g_iDashWindSpeedUnit), m_WindSpeedUnit.c_str());
else if (val1 == 50)
label2.Printf(_T("%.1f %s"), toUsrSpeed_Plugin(WindSpdScale, g_iDashWindSpeedUnit), m_WindSpeedUnit.c_str());
else
label2.Printf(_T("%.0f %s"), toUsrSpeed_Plugin(WindSpdScale, g_iDashWindSpeedUnit), m_WindSpeedUnit.c_str());
// center legend
WindSpdScale = m_MaxWindSpdScale / 2.;
// center line can either have a .0 or .5 value !
if ((int)(WindSpdScale * 10) % 10 == 5)
label3.Printf(_T("%.1f %s"), toUsrSpeed_Plugin(WindSpdScale, g_iDashWindSpeedUnit), m_WindSpeedUnit.c_str());
else
label3.Printf(_T("%.0f %s"), toUsrSpeed_Plugin(WindSpdScale, g_iDashWindSpeedUnit), m_WindSpeedUnit.c_str());
// 1/4 legend
WindSpdScale = m_MaxWindSpdScale / 4.;
// do we need a decimal ?
val1 = (int)((WindSpdScale - (int)WindSpdScale) * 100);
if (val1 == 25 || val1 == 75)
label4.Printf(_T("%.2f %s"), toUsrSpeed_Plugin(WindSpdScale, g_iDashWindSpeedUnit), m_WindSpeedUnit.c_str());
else if (val1 == 50)
label4.Printf(_T("%.1f %s"), toUsrSpeed_Plugin(WindSpdScale, g_iDashWindSpeedUnit), m_WindSpeedUnit.c_str());
else
label4.Printf(_T("%.0f %s"), toUsrSpeed_Plugin(WindSpdScale, g_iDashWindSpeedUnit), m_WindSpeedUnit.c_str());
//bottom legend for min wind, always 0
label5.Printf(_T("%.0f %s"), 0.0, m_WindSpeedUnit.c_str());
}
dc->GetTextExtent(label1, &m_LeftLegend, &height, 0, 0, g_pFontSmall);
dc->DrawText(label1, 4, (int)(m_TopLineHeight - height / 2));
dc->GetTextExtent(label2, &width, &height, 0, 0, g_pFontSmall);
dc->DrawText(label2, 4, (int)(m_TopLineHeight + m_DrawAreaRect.height / 4 - height / 2));
m_LeftLegend = wxMax(width, m_LeftLegend);
dc->GetTextExtent(label3, &width, &height, 0, 0, g_pFontSmall);
dc->DrawText(label3, 4, (int)(m_TopLineHeight + m_DrawAreaRect.height / 2 - height / 2));
m_LeftLegend = wxMax(width, m_LeftLegend);
dc->GetTextExtent(label4, &width, &height, 0, 0, g_pFontSmall);
dc->DrawText(label4, 4, (int)(m_TopLineHeight + m_DrawAreaRect.height*0.75 - height / 2));
m_LeftLegend = wxMax(width, m_LeftLegend);
dc->GetTextExtent(label5, &width, &height, 0, 0, g_pFontSmall);
dc->DrawText(label5, 4, (int)(m_TopLineHeight + m_DrawAreaRect.height - height / 2));
m_LeftLegend = wxMax(width, m_LeftLegend);
m_LeftLegend += 4;
}
示例14: wxMax
void Styler_SearchHL::Style(StyleRun& sr) {
const unsigned int rstart = sr.GetRunStart();
const unsigned int rend = sr.GetRunEnd();
// Style the run with search ranges
for (vector<interval>::const_iterator r = m_searchRanges.begin(); r != m_searchRanges.end(); ++r) {
if (r->end > rstart && r->start < rend) {
unsigned int start = wxMax(rstart, r->start);
unsigned int end = wxMin(rend, r->end);
sr.SetBackgroundColor(start, end, m_rangeColor);
}
}
// No need for more styling if no search text
if (m_text.empty()) return;
// Extend stylerun start/end to get better search results (round up to whole EXTSIZEs)
unsigned int sr_start = rstart> 100 ? rstart - 100 : 0;
const unsigned int ext_end = ((rend/EXTSIZE) * EXTSIZE) + EXTSIZE;
unsigned int sr_end = ext_end < m_lines.GetLength() ? ext_end : m_lines.GetLength();
// Make sure the extended positions are valid
cxLOCKDOC_READ(m_doc)
sr_start = doc.GetValidCharPos(sr_start);
if (sr_end != m_lines.GetLength()) sr_end = doc.GetValidCharPos(sr_end);
cxENDLOCK
//wxLogDebug("Style %u %u", rstart, rend);
//wxLogDebug(" %u %u - %u %u", sr_start, sr_end, m_search_start, m_search_end);
// Check if we need to do a new search
if (sr_start < m_search_start || m_search_end < sr_end) {
// Check if there is overlap so we can just extend the search area
if (sr_end > m_search_start && sr_start < m_search_end) {
sr_start = wxMin(sr_start, m_search_start);
sr_end = wxMax(sr_end, m_search_end);
}
else {
// Else we have to move it
m_matches.clear();
m_search_start = 0;
m_search_end = 0;
}
// Do the search
if (sr_start < m_search_start) {
// Search from top
DoSearch(sr_start, sr_end);
}
else if (sr_end > m_search_end) {
// Search from bottom
DoSearch(sr_start, sr_end, true);
}
else wxASSERT(false);
m_search_start = sr_start;
m_search_end = sr_end;
}
// Style the run with matches
for (vector<interval>::iterator p = m_matches.begin(); p != m_matches.end(); ++p) {
if (p->start > rend) break;
// Check for overlap (or zero-length sel at start-of-line)
if ((p->end > rstart && p->start < rend) || (p->start == p->end && p->end == rstart)) {
unsigned int start = wxMax(rstart, p->start);
unsigned int end = wxMin(rend, p->end);
// Only draw it if it is in range
if (!m_searchRanges.empty()) {
bool inRange = false;
for (vector<interval>::const_iterator s = m_searchRanges.begin(); s != m_searchRanges.end(); ++s) {
if (start >= s->start && start < s->end) {
inRange = true;
break;
}
}
if (!inRange) continue;
}
ApplyStyle(sr, start, end);
}
}
}
示例15: rect
//.........这里部分代码省略.........
topMargin = sashWindow->GetExtraBorderSize();
bottomMargin = sashWindow->GetExtraBorderSize();
if (sashWindow->GetSashVisible(wxSASH_LEFT))
leftMargin += sashWindow->GetDefaultBorderSize();
if (sashWindow->GetSashVisible(wxSASH_RIGHT))
rightMargin += sashWindow->GetDefaultBorderSize();
if (sashWindow->GetSashVisible(wxSASH_TOP))
topMargin += sashWindow->GetDefaultBorderSize();
if (sashWindow->GetSashVisible(wxSASH_BOTTOM))
bottomMargin += sashWindow->GetDefaultBorderSize();
}
#endif // wxUSE_SASH
int cw, ch;
parent->GetClientSize(& cw, & ch);
wxRect rect(leftMargin, topMargin, cw - leftMargin - rightMargin, ch - topMargin - bottomMargin);
wxCalculateLayoutEvent event;
event.SetRect(rect);
// Find the last layout-aware window, so we can make it fill all remaining
// space.
wxWindow *lastAwareWindow = NULL;
wxWindowList::compatibility_iterator node = parent->GetChildren().GetFirst();
while (node)
{
wxWindow* win = node->GetData();
if (win->IsShown())
{
wxCalculateLayoutEvent tempEvent(win->GetId());
tempEvent.SetEventObject(win);
tempEvent.SetFlags(wxLAYOUT_QUERY);
tempEvent.SetRect(event.GetRect());
if (win->GetEventHandler()->ProcessEvent(tempEvent))
lastAwareWindow = win;
}
node = node->GetNext();
}
// Now do a dummy run to see if we have any space left for the final window (fail if not)
node = parent->GetChildren().GetFirst();
while (node)
{
wxWindow* win = node->GetData();
// If mainWindow is NULL and we're at the last window,
// skip this, because we'll simply make it fit the remaining space.
if (win->IsShown() && (win != mainWindow) && (mainWindow != NULL || win != lastAwareWindow))
{
event.SetId(win->GetId());
event.SetEventObject(win);
event.SetFlags(wxLAYOUT_QUERY);
win->GetEventHandler()->ProcessEvent(event);
}
node = node->GetNext();
}
if (event.GetRect().GetWidth() < 0 || event.GetRect().GetHeight() < 0)
return false;
event.SetRect(rect);
node = parent->GetChildren().GetFirst();
while (node)
{
wxWindow* win = node->GetData();
// If mainWindow is NULL and we're at the last window,
// skip this, because we'll simply make it fit the remaining space.
if (win->IsShown() && (win != mainWindow) && (mainWindow != NULL || win != lastAwareWindow))
{
event.SetId(win->GetId());
event.SetEventObject(win);
event.SetFlags(0); // ??
win->GetEventHandler()->ProcessEvent(event);
}
node = node->GetNext();
}
rect = event.GetRect();
if (mainWindow)
mainWindow->SetSize(rect.x, rect.y, wxMax(0, rect.width), wxMax(0, rect.height));
else if (lastAwareWindow)
{
// Fit the remaining space
lastAwareWindow->SetSize(rect.x, rect.y, wxMax(0, rect.width), wxMax(0, rect.height));
}
return true;
}