本文整理汇总了C++中LKSurface::Rectangle方法的典型用法代码示例。如果您正苦于以下问题:C++ LKSurface::Rectangle方法的具体用法?C++ LKSurface::Rectangle怎么用?C++ LKSurface::Rectangle使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类LKSurface
的用法示例。
在下文中一共展示了LKSurface::Rectangle方法的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: OnAirspacePaintListItem
static void OnAirspacePaintListItem(WindowControl * Sender, LKSurface& Surface){
TCHAR label[40];
(void)Sender;
if (DrawListIndex < AIRSPACECLASSCOUNT){
int i = DrawListIndex;
LK_tcsncpy(label, CAirspaceManager::Instance().GetAirspaceTypeText(i), 39);
int w0, w1, w2, x0;
if (ScreenLandscape) {
w0 = 202*ScreenScale;
} else {
w0 = 225*ScreenScale;
}
// LKTOKEN [email protected]_ = "Warn"
w1 = Surface.GetTextWidth(MsgToken(789))+ScreenScale*10;
// LKTOKEN [email protected]_ = "Display"
w2 = Surface.GetTextWidth(MsgToken(241))+ScreenScale*10;
x0 = w0-w1-w2;
Surface.SetTextColor(RGB_BLACK);
Surface.DrawTextClip(2*ScreenScale, 2*ScreenScale,
label, x0-ScreenScale*10);
if (colormode) {
Surface.SelectObject(LK_WHITE_PEN);
Surface.SelectObject(LKBrush_White);
Surface.Rectangle(x0, 2*ScreenScale,w0, 22*ScreenScale);
Surface.SetTextColor(MapWindow::GetAirspaceColourByClass(i));
Surface.SetBkColor(LKColor(0xFF, 0xFF, 0xFF));
Surface.SelectObject(MapWindow::GetAirspaceBrushByClass(i));
Surface.Rectangle(x0, 2*ScreenScale,w0, 22*ScreenScale);
} else {
bool iswarn;
bool isdisplay;
iswarn = (MapWindow::iAirspaceMode[i]>=2);
isdisplay = ((MapWindow::iAirspaceMode[i]%2)>0);
if (iswarn) {
// LKTOKEN [email protected]_ = "Warn"
_tcscpy(label, MsgToken(789));
Surface.DrawText(w0-w1-w2, 2*ScreenScale, label);
}
if (isdisplay) {
// LKTOKEN [email protected]_ = "Display"
_tcscpy(label, MsgToken(241));
Surface.DrawText(w0-w2, 2*ScreenScale, label);
}
}
}
}
示例2: DrawBarChart
void Statistics::DrawBarChart(LKSurface& Surface, const RECT& rc, LeastSquares* lsdata) {
int i;
LKColor Col;
if (unscaled_x || unscaled_y) {
return;
}
if(INVERTCOLORS)
Col = RGB_GREEN.ChangeBrightness(0.5);
else
Col = RGB_WHITE;
LKPen hpBar(PEN_SOLID, IBLSCALE(1), Col);
LKBrush hbBar(Col);
const auto oldpen = Surface.SelectObject(hpBar);
const auto oldbrush = Surface.SelectObject(hbBar);
int xmin, ymin, xmax, ymax;
for (i= 0; i<lsdata->sum_n; i++) {
xmin = (int)((i+1+0.2)*xscale)+rc.left+BORDER_X;
ymin = (int)((y_max-y_min)*yscale)+rc.top;
xmax = (int)((i+1+0.8)*xscale)+rc.left+BORDER_X;
ymax = (int)((y_max-lsdata->ystore[i])*yscale)+rc.top;
Surface.Rectangle(xmin, ymin, xmax, ymax);
}
Surface.SelectObject(oldpen);
Surface.SelectObject(oldbrush);
}
示例3: OnPaintAirspacePicto
static void OnPaintAirspacePicto(WindowControl * Sender, LKSurface& Surface){
(void)Sender;
WndFrame *wPicto = ((WndFrame *)wf->FindByName(TEXT("frmAirspacePicto")));
LKASSERT(wPicto!=NULL);
const RECT rc = wPicto->GetClientRect();
Surface.SelectObject(LKPen_Petrol_C2);
Surface.SelectObject(LKBrush_Petrol);
Surface.Rectangle(rc.left,rc.top,rc.right,rc.bottom);
Surface.SetBkColor(RGB_LIGHTGREY);
/****************************************************************
* for drawing the airspace pictorial, we need the original data.
* copy contain only base class property, not geo data,
* original data are shared ressources !
* for that we need to grant all called methods are thread safe
****************************************************************/
{
CCriticalSection::CGuard guard(CAirspaceManager::Instance().MutexRef());
CAirspace* airspace = CAirspaceManager::Instance().GetAirspacesForDetails();
if(airspace) {
airspace->DrawPicto(Surface, rc);
}
}
}
示例4: LKWriteBoxedText
//
// Box black, text white, or inverted.
// Clip region is normally MapRect for forcing writing on any part of the screen.
// Or DrawRect for the current terrain area.
// Or, of course, anything else.
// A note about DrawRect: in main moving map, DrawRect is the part of screen excluding BottomBar,
// when the bottom bar is opaque. So choose carefully.
//
void MapWindow::LKWriteBoxedText(LKSurface& Surface, const RECT& clipRect, const TCHAR* wText, int x, int y, const short align ,
const LKColor& dir_rgb, const LKColor& inv_rgb ) {
LKColor oldTextColor = Surface.SetTextColor(INVERTCOLORS?dir_rgb:inv_rgb);
SIZE tsize;
Surface.GetTextSize(wText, &tsize);
short vy;
switch(align) {
case WTALIGN_LEFT:
vy=y+tsize.cy+NIBLSCALE(2)+1;
if (vy>=clipRect.bottom) return;
Surface.Rectangle(x, y, x+tsize.cx+NIBLSCALE(8), vy);
x += NIBLSCALE(4);
break;
case WTALIGN_RIGHT:
vy=y+tsize.cy+NIBLSCALE(2)+1;
if (vy>=clipRect.bottom) return;
Surface.Rectangle(x-tsize.cx-NIBLSCALE(8), y, x, vy);
x -= (tsize.cx+NIBLSCALE(4));
break;
case WTALIGN_CENTER:
vy=y+(tsize.cy/2)+NIBLSCALE(1)+1;
if (vy>=clipRect.bottom) return;
Surface.Rectangle(x-(tsize.cx/2)-NIBLSCALE(4),
y-(tsize.cy/2)-NIBLSCALE(1)-1,
x+(tsize.cx/2)+NIBLSCALE(4),
vy);
x -= (tsize.cx/2);
// just a trick to avoid calculating:
// y -= ((tsize.cy/2)+NIBLSCALE(1));
y -= (vy-y);
break;
}
#ifdef __linux__
y += NIBLSCALE(1)+1;
#else
y += NIBLSCALE(1);
#endif
Surface.DrawText(x, y, wText);
//SetTextColor(hDC,RGB_BLACK); THIS WAS FORCED BLACk SO FAR 121005
Surface.SetTextColor(oldTextColor);
}
示例5: OnAirspacePatternsPaintListItem
static void OnAirspacePatternsPaintListItem(WindowControl * Sender, LKSurface& Surface) {
(void) Sender;
if ((DrawListIndex < NUMAIRSPACEBRUSHES) &&(DrawListIndex >= 0)) {
int i = DrawListIndex;
Surface.SelectObject(LKBrush_White);
Surface.SelectObject(LK_BLACK_PEN);
Surface.SetBkColor(LKColor(0xFF, 0xFF, 0xFF));
Surface.SelectObject(MapWindow::GetAirspaceBrush(i));
Surface.SetTextColor(LKColor(0x00, 0x00, 0x00));
Surface.Rectangle(100 * ScreenScale, 2 * ScreenScale, 180 * ScreenScale, 22 * ScreenScale);
}
}
示例6: OnProgressPaint
static void OnProgressPaint(WindowControl * Sender, LKSurface& Surface) {
RECT PrintAreaR = Sender->GetClientRect();
const auto oldFont = Surface.SelectObject(MapWindowBoldFont);
Surface.FillRect(&PrintAreaR, LKBrush_Petrol);
// Create text area
// we cannot use LKPen here because they are not still initialised for startup menu. no problem
LKPen hP(PEN_SOLID,NIBLSCALE(1),RGB_GREEN);
auto ohP = Surface.SelectObject(hP);
const auto ohB = Surface.SelectObject(LKBrush_Petrol);
Surface.Rectangle(PrintAreaR.left,PrintAreaR.top,PrintAreaR.right,PrintAreaR.bottom);
Surface.SelectObject(ohP);
hP.Release();
hP.Create(PEN_SOLID,NIBLSCALE(1),RGB_BLACK);
ohP = Surface.SelectObject(hP);
Surface.SelectObject(LK_HOLLOW_BRUSH);
InflateRect(&PrintAreaR, -NIBLSCALE(2), -NIBLSCALE(2));
Surface.Rectangle(PrintAreaR.left,PrintAreaR.top,PrintAreaR.right,PrintAreaR.bottom);
Surface.SetTextColor(RGB_WHITE);
Surface.SetBackgroundTransparent();
InflateRect(&PrintAreaR, -NIBLSCALE(2), -NIBLSCALE(2));
const TCHAR* text = Sender->GetCaption();
Surface.DrawText(text, &PrintAreaR, DT_VCENTER|DT_SINGLELINE);
Surface.SelectObject(ohB);
Surface.SelectObject(ohP);
Surface.SelectObject(oldFont);
}
示例7: OnAirspaceColoursPaintListItem
static void OnAirspaceColoursPaintListItem(WindowControl * Sender, LKSurface& Surface){
(void)Sender;
if ((DrawListIndex < NUMAIRSPACECOLORS) &&(DrawListIndex>=0)) {
int i = DrawListIndex;
Surface.SelectObject(LKBrush_White);
Surface.SelectObject(LK_BLACK_PEN);
Surface.SetBkColor(LKColor(0xFF, 0xFF, 0xFF));
Surface.SelectObject(MapWindow::GetAirspaceSldBrush(i)); // this is the solid brush
Surface.SetTextColor(MapWindow::GetAirspaceColour(i));
Surface.Rectangle(
100*ScreenScale,
2*ScreenScale,
180*ScreenScale,
22*ScreenScale);
}
}
示例8: VGTextInBox
void MapWindow::VGTextInBox(LKSurface& Surface, unsigned short nslot, short numlines, const TCHAR* wText1, const TCHAR* wText2, const TCHAR *wText3, int x, int y, const LKColor& trgb, const LKBrush& bbrush) {
#if BUGSTOP
LKASSERT(wText1 != NULL);
#endif
if (!wText1) return;
LKColor oldTextColor = Surface.SetTextColor(trgb);
SIZE tsize;
int tx, ty;
Sideview_VGBox_Number++;
Surface.SelectObject(line1Font);
Surface.GetTextSize(wText1, &tsize);
int line1fontYsize = tsize.cy;
short vy = y + (boxSizeY / 2);
Surface.SelectObject(bbrush);
Surface.Rectangle(
x - (boxSizeX / 2),
y - (boxSizeY / 2)-1,
x + (boxSizeX / 2),
vy-1);
Sideview_VGBox[nslot].top = y - (boxSizeY / 2);
Sideview_VGBox[nslot].left = x - (boxSizeX / 2);
Sideview_VGBox[nslot].bottom = vy;
Sideview_VGBox[nslot].right = x + (boxSizeX / 2);
PixelRect ClipRect(Sideview_VGBox[nslot]);
ClipRect.Grow(-1*NIBLSCALE(2), 0); // text padding
//
// LINE 1
//
tx = max<PixelScalar>(ClipRect.left, x - (tsize.cx / 2));
ty = y - (vy - y);
Surface.DrawText(tx, ty, wText1, &ClipRect);
if (numlines == 1) goto _end;
#if BUGSTOP
LKASSERT(wText2 != NULL);
#endif
if (!wText2) goto _end;
//
// LINE 2
//
Surface.SetTextColor(RGB_BLACK);
Surface.SelectObject(line2Font);
Surface.GetTextSize(wText2, &tsize);
tx = x - (tsize.cx / 2);
ty += line1fontYsize - NIBLSCALE(2);
Surface.DrawText(tx, ty, wText2);
if (numlines == 2) goto _end;
#if BUGSTOP
LKASSERT(wText3 != NULL);
#endif
if (!wText3) goto _end;
//
// LINE 3
//
Surface.SetTextColor(RGB_BLACK);
Surface.GetTextSize(wText3, &tsize);
tx = x - (tsize.cx / 2);
ty += tsize.cy - NIBLSCALE(2);
Surface.DrawText(tx, ty, wText3);
_end:
Surface.SetTextColor(oldTextColor);
return;
}
示例9: LKDrawFLARMTraffic
// This is painting traffic icons on the screen.
void MapWindow::LKDrawFLARMTraffic(LKSurface& Surface, const RECT& rc, const ScreenProjection& _Proj, const POINT& Orig_Aircraft) {
if (!EnableFLARMMap) return;
if (!DrawInfo.FLARM_Available) return;
// init scaled coords for traffic icon
static int iCircleSize = 7;
static int iRectangleSize = 4;
static short tscaler=0;
if (DoInit[MDI_DRAWFLARMTRAFFIC]) {
switch (ScreenSize) {
case ss480x640:
case ss480x800:
case ss800x480:
case ss640x480:
iCircleSize = 9;
iRectangleSize = 5;
tscaler=NIBLSCALE(7)-2;
break;
case ss240x320:
case ss272x480:
case ss320x240:
case ss480x272:
case ss480x234:
case ss400x240:
iCircleSize = 7;
iRectangleSize = 4;
tscaler=NIBLSCALE(13)-2;
break;
default:
iCircleSize = 7;
iRectangleSize = 4;
tscaler=NIBLSCALE(7);
break;
}
DoInit[MDI_DRAWFLARMTRAFFIC]=false;
}
POINT Arrow[5];
TCHAR lbuffer[50];
const auto hpold = Surface.SelectObject(LKPen_Black_N1);
int i;
int painted=0;
// double dX, dY;
TextInBoxMode_t displaymode = {0};
displaymode.NoSetFont = 1;
#if 0
double screenrange = GetApproxScreenRange();
double scalefact = screenrange/6000.0; // FIX 100820
#endif
const auto oldfont = Surface.SelectObject(LK8MapFont);
for (i=0,painted=0; i<FLARM_MAX_TRAFFIC; i++) {
// limit to 10 icons map traffic
if (painted>=10) {
i=FLARM_MAX_TRAFFIC;
continue;
}
if ( (DrawInfo.FLARM_Traffic[i].ID !=0) && (DrawInfo.FLARM_Traffic[i].Status != LKT_ZOMBIE) ) {
painted++;
double target_lon;
double target_lat;
target_lon = DrawInfo.FLARM_Traffic[i].Longitude;
target_lat = DrawInfo.FLARM_Traffic[i].Latitude;
#if (0) // No scaling, wrong
if ((EnableFLARMMap==2)&&(scalefact>1.0)) {
double distance;
double bearing;
DistanceBearing(DrawInfo.Latitude, DrawInfo.Longitude, target_lat, target_lon, &distance, &bearing);
FindLatitudeLongitude(DrawInfo.Latitude, DrawInfo.Longitude, bearing, distance*scalefact, &target_lat, &target_lon);
}
#endif
POINT sc, sc_name, sc_av;
sc = _Proj.LonLat2Screen(target_lon, target_lat);
sc_name = sc;
//.........这里部分代码省略.........
示例10: RenderMapWindowBg
//.........这里部分代码省略.........
if (IsMultimapOverlaysText()) {
DrawLook8000(Surface, rc);
}
if (bDrawGauges) {
if (LKVarioBar) {
LKDrawVario(Surface, rc);
}
DrawFinalGlide(Surface, rc);
}
} else {
// Not in map painting environment
// ex. nearest pages, but also MAPRADAR..
}
//
DrawBottomBar(Surface, rc);
#ifdef DRAWDEBUG
DrawDebug(hdc, rc);
#endif
// no need to do SelectObject as at the bottom of function
return;
}
// When no terrain is painted, set a background0
// Remember that in this case we have plenty of cpu time to spend for best result
if (!IsMultimapTerrain() || !DerivedDrawInfo.TerrainValid || !RasterTerrain::isTerrainLoaded()) {
// display border and fill background..
Surface.SelectObject(hInvBackgroundBrush[BgMapColor]);
Surface.SelectObject(LK_WHITE_PEN);
Surface.Rectangle(rc.left, rc.top, rc.right, rc.bottom);
// We force LK painting black values on screen depending on the background color in use
// TODO make it an array once settled
// blackscreen would force everything to be painted white, instead
LKTextBlack = BgMapColorTextBlack[BgMapColor];
if (BgMapColor > 6) BlackScreen = true;
else BlackScreen = false;
} else {
LKTextBlack = false;
BlackScreen = false;
}
// Logic of DONTDRAWTHEMAP is the following:
// We are rendering the screen page here. If we are here, we passed Checkpoint Charlie.
// So we were, at charlie, in MSM_MAP: preparing the main map stuff.
// If we detect that MapSpace has CHANGED while we were doing our job here,
// it means that the user has clicked meanwhile. He desires another page, so let's
// reset our intentions and go back to beginning, or nearby..
// We have a new job to do, for another MapSpace, no more MAP.
if (DONTDRAWTHEMAP) {
goto QuickRedraw;
}
bool terrainpainted = false;
if ((IsMultimapTerrain() && (DerivedDrawInfo.TerrainValid)
&& RasterTerrain::isTerrainLoaded())
) {
// sunelevation is never used, it is still a todo in Terrain
double sunelevation = 40.0;
double sunazimuth = GetAzimuth();
LockTerrainDataGraphics();
示例11: LKDrawVario
//.........这里部分代码省略.........
mc_value = MACCREADY;
} else {
switch (LKVarioVal) {
default:
case vValVarioNetto:
vario_value = DerivedDrawInfo.NettoVario;
// simple hack for avoid to used polar curve : glider_sink_rate = Vario - NettoVario;
mc_value = MACCREADY + (DerivedDrawInfo.Vario - DerivedDrawInfo.NettoVario);
break;
case vValVarioSoll:
double ias;
if (DrawInfo.AirspeedAvailable && DrawInfo.VarioAvailable)
ias = DrawInfo.IndicatedAirspeed;
else
ias = DerivedDrawInfo.IndicatedAirspeedEstimated;
// m/s 0-nnn autolimit to 20m/s full scale (72kmh diff)
vario_value = clamp(DerivedDrawInfo.VOpt - ias, -20., 20.);
vario_value /= 3.3333; // 0-20 -> 0-6
vario_value *= -1; // if up, push down
break;
}
}
// Backup selected Brush & Pen
LKSurface::OldPen oldPen = Surface.SelectObject(LK_NULL_PEN);
LKSurface::OldBrush oldBrush = Surface.SelectObject(LKBrush_Hollow);
// draw Vario box ( only if not transparent )
if (LKVarioBar <= vBarVarioGR) {
Surface.SelectObject(borderPen);
Surface.SelectObject(hInvBackgroundBrush[BgMapColor]);
Surface.Rectangle(vrc.left, vrc.top, vrc.right, vrc.bottom);
}
// draw middle separator for 0 scale indicator
Surface.FillRect(&hrc, forgroundBrush);
Surface.SelectObject(borderPen);
if (dogaugeinit) {
// this is causing problems on emulators and condor and most of the times when the gps has no valid date
// so we don't use seconds, but loop counter
if (startInitCounter++ > 2) {
dogaugeinit = false;
}
// Demo show all bricks
for (unsigned i = 0; i < positive_brick_count; ++i) {
const RECT& brc = positiveBricks[i];
Surface.SelectObject(positiveBrush[i]);
Surface.Rectangle(brc.left, brc.top, brc.right, brc.bottom);
}
for (unsigned i = 0; i < negative_brick_count; ++i) {
const RECT& brc = negativeBricks[i];
Surface.SelectObject(negativeBrush[i]);
Surface.Rectangle(brc.left, brc.top, brc.right, brc.bottom);
}
} else {
// Draw Real Vario Data
// Draw Positive Brick
for (unsigned i = 0; i < positive_brick_count && vario_value >= positive_vario_step[i]; ++i) {
const RECT& brc = positiveBricks[i];
示例12: DrawMapSpace
//
// Called by LKDrawLook8000, this is what happens when we change mapspace mode, advancing through types.
// We paint infopages, nearest, tri, etc.etc.
// Normally there is plenty of cpu available because the map is not even calculated.
// This is why we bring to the Draw thread, in the nearest pages case, also calculations.
//
void MapWindow::DrawMapSpace(LKSurface& Surface, const RECT& rc) {
BrushReference hB;
TextInBoxMode_t TextDisplayMode = {0};
TCHAR Buffer[LKSIZEBUFFERLARGE*2];
#ifdef DRAWLKSTATUS
bool dodrawlkstatus=false;
#endif
#ifndef DITHER
if (MapSpaceMode==MSM_WELCOME) {
if (INVERTCOLORS)
hB=LKBrush_Petrol;
else
hB=LKBrush_Mlight;
} else {
if (INVERTCOLORS)
hB=LKBrush_Mdark;
else
hB=LKBrush_Mlight;
}
#else
if (INVERTCOLORS)
hB=LKBrush_Black;
else
hB=LKBrush_White;
#endif
const auto oldfont = Surface.SelectObject(LKINFOFONT); // save font
if (MapSpaceMode==MSM_WELCOME) {
LKBitmap WelcomeBitmap = LoadSplash(_T("LKPROFILE"));
if(WelcomeBitmap) {
DrawSplash(Surface, WelcomeBitmap);
}
} else {
Surface.FillRect(&rc, hB);
}
// Paint borders in green, but only in nearest pages and welcome, and not in DITHER mode
// In case we want it in dithered mode, some changes are ready to be used.
#ifndef DITHER
if (MapSpaceMode==MSM_WELCOME || (!IsMultiMap() && MapSpaceMode!=MSM_MAP) )
{
#ifdef DITHER
LKPen BorderPen(PEN_SOLID, ScreenThinSize, INVERTCOLORS?RGB_WHITE:RGB_BLACK);
#else
LKPen BorderPen(PEN_SOLID, ScreenThinSize, INVERTCOLORS?RGB_GREEN:RGB_DARKGREEN);
#endif
auto OldPen = Surface.SelectObject(BorderPen);
auto OldBrush = Surface.SelectObject(LK_HOLLOW_BRUSH);
Surface.Rectangle(rc.left, rc.top, rc.right, rc.bottom - BottomSize);
Surface.SelectObject(OldPen);
Surface.SelectObject(OldBrush);
}
#endif
#ifdef DRAWLKSTATUS
if (LKevent==LKEVENT_NEWRUN) dodrawlkstatus=true;
#endif
// We are entering mapspacemodes with no initial check on configured subpages.
// Thus we need to ensure that the page is really available, or find the first valid.
// However, this will prevent direct customkey access to pages!
// Instead, we do it when we call next page from InfoPageChange
// if (!ConfIP[ModeIndex][CURTYPE]) NextModeType();
switch (MapSpaceMode) {
case MSM_WELCOME:
#if 0
SetModeType(LKMODE_MAP,MP_MOVING);
RefreshMap();
break;
#endif
#if (1)
if (!DrawInfo.NAVWarning) {
static double firsttime=DrawInfo.Time;
// delayed automatic exit from welcome mode
if ( DrawInfo.Time > (firsttime+3.0) ) {
SetModeType(LKMODE_MAP,MP_MOVING);
LKevent=LKEVENT_NONE;
LKSound(_T("LK_BEEP1.WAV"));
RefreshMap();
break;
}
}
#endif
if(GlobalModelType==MODELTYPE_PNA_MINIMAP)
{
SetModeType(LKMODE_MAP,MP_MOVING);
//.........这里部分代码省略.........
示例13: RenderAirspaceTerrain
//.........这里部分代码省略.........
_TCHAR text [80];
LKASSERT(Sideview_iNoHandeldSpaces < MAX_NO_SIDE_AS);
for (int m = 0; m < Sideview_iNoHandeldSpaces; m++) {
int iSizeIdx = iSizeLookupTable[m];
#if BUGSTOP
LKASSERT(iSizeIdx < MAX_NO_SIDE_AS && iSizeIdx >= 0);
#endif
if (iSizeIdx >= MAX_NO_SIDE_AS) iSizeIdx = MAX_NO_SIDE_AS - 1;
int type = Sideview_pHandeled[iSizeIdx].iType;
RECT rcd = Sideview_pHandeled[iSizeIdx].rc;
LKColor FrameColor;
double fFrameColFact;
if (Sideview_pHandeled[iSizeIdx].bEnabled) {
Surface.SelectObject(MapWindow::GetAirspaceBrushByClass(type));
Surface.SetTextColor(MapWindow::GetAirspaceColourByClass(type));
fFrameColFact = 0.8;
FrameColor = MapWindow::GetAirspaceColourByClass(type);
} else {
Surface.SelectObject(LKBrush_Hollow);
Surface.SetTextColor(RGB_GGREY);
FrameColor = RGB_GGREY;
fFrameColFact = 1.2;
}
if (INVERTCOLORS)
fFrameColFact *= 0.8;
else
fFrameColFact *= 1.2;
LKColor Color = FrameColor.ChangeBrightness(fFrameColFact);
LKPen mpen2(PEN_SOLID, FRAMEWIDTH, Color);
const auto oldpen2 = Surface.SelectObject(mpen2);
if (Sideview_pHandeled[iSizeIdx].bRectAllowed == true)
Surface.Rectangle(rcd.left + 1, rcd.top, rcd.right, rcd.bottom);
else
Surface.Polygon(Sideview_pHandeled[iSizeIdx].apPolygon, Sideview_pHandeled[iSizeIdx].iNoPolyPts);
Surface.SelectObject(oldpen2);
if (Sideview_pHandeled[iSizeIdx].bEnabled)
Surface.SetTextColor(Sideview_TextColor); // RGB_MENUTITLEFG
else
Surface.SetTextColor(RGB_GGREY);
/***********************************************
* build view overlap for centering text
***********************************************/
rcd.bottom = min(rcd.bottom, Sideview_pHandeled[iSizeIdx].iMaxBase);
rcd.top = max(rcd.top, Sideview_pHandeled[iSizeIdx].iMinTop);
rcd.left = max(rcd.left, rc.left);
rcd.right = min(rcd.right, rc.right);
rcd.bottom = min(rcd.bottom, rc.bottom);
rcd.top = max(rcd.top, rc.top);
SIZE textsize;
SIZE aispacesize = {rcd.right - rcd.left, rcd.bottom - rcd.top};
LK_tcsncpy(text, Sideview_pHandeled[iSizeIdx].szAS_Name, NAME_SIZE - 1/* sizeof(text)/sizeof(text[0])*/);
Surface.GetTextSize(text, &textsize);
int x = rcd.left + aispacesize.cx / 2;
;
int y = rcd.top + aispacesize.cy / 2;
// int iTextheight = tsize.cy;
int iOffset = 0;
BOOL blongtext = false;