本文整理汇总了C++中Canvas::GetHeight方法的典型用法代码示例。如果您正苦于以下问题:C++ Canvas::GetHeight方法的具体用法?C++ Canvas::GetHeight怎么用?C++ Canvas::GetHeight使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Canvas
的用法示例。
在下文中一共展示了Canvas::GetHeight方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: pen
void
ButtonWindow::OnPaint(Canvas &canvas)
{
const bool focused = HasCursorKeys() ? HasFocus() : down;
if (focused) {
Pen pen(Layout::Scale(1), COLOR_BLACK);
canvas.Select(pen);
canvas.SelectHollowBrush();
canvas.Rectangle(-1, -1, canvas.GetWidth(), canvas.GetHeight());
}
PixelRect rc(2, 2, canvas.GetWidth() - 4, canvas.GetHeight() - 4);
if (down) {
rc.left += Layout::FastScale(1);
rc.top += Layout::FastScale(1);
}
canvas.DrawButton(GetClientRect(), down);
canvas.SetTextColor(IsEnabled()
? (IsDithered() && down ? COLOR_WHITE : COLOR_BLACK)
: COLOR_GRAY);
canvas.SetBackgroundTransparent();
unsigned style = GetTextStyle();
if (IsDithered())
style |= DT_UNDERLINE;
canvas.DrawFormattedText(&rc, text.c_str(), style);
}
示例2: if
void
CheckBoxControl::OnPaint(Canvas &canvas)
{
const auto &cb_look = look->check_box;
const bool focused = HasCursorKeys() && HasFocus();
if (focused)
canvas.Clear(cb_look.focus_background_brush);
else if (HaveClipping())
canvas.Clear(look->background_brush);
const auto &state_look = IsEnabled()
? (pressed
? cb_look.pressed
: (focused
? cb_look.focused
: cb_look.standard))
: cb_look.disabled;
unsigned size = canvas.GetHeight() - 4;
canvas.Select(state_look.box_brush);
canvas.Select(state_look.box_pen);
canvas.Rectangle(2, 2, size, size);
if (checked) {
canvas.Select(state_look.check_brush);
canvas.SelectNullPen();
BulkPixelPoint check_mark[] = {
{-8, -2},
{-3, 6},
{7, -9},
{8, -5},
{-3, 9},
{-9, 2},
};
unsigned top = canvas.GetHeight() / 2;
for (unsigned i = 0; i < ARRAY_SIZE(check_mark); ++i) {
check_mark[i].x = (check_mark[i].x * (int)size) / 24 + top;
check_mark[i].y = (check_mark[i].y * (int)size) / 24 + top;
}
canvas.DrawPolygon(check_mark, ARRAY_SIZE(check_mark));
}
canvas.Select(*cb_look.font);
canvas.SetTextColor(state_look.text_color);
canvas.SetBackgroundTransparent();
canvas.DrawText(canvas.GetHeight() + 2, 2, caption.c_str());
}
示例3: sun_azimuth
void
TerrainPreviewWindow::OnPaint(Canvas &canvas)
{
const GlueMapWindow *map = UIGlobals::GetMap();
if (map == nullptr)
return;
MapWindowProjection projection = map->VisibleProjection();
if (!projection.IsValid()) {
/* TODO: initialise projection to middle of map instead of bailing
out */
canvas.ClearWhite();
return;
}
projection.SetScreenSize(canvas.GetSize());
projection.SetScreenOrigin(canvas.GetWidth() / 2, canvas.GetHeight() / 2);
Angle sun_azimuth(Angle::Degrees(-45));
if (renderer.GetSettings().slope_shading == SlopeShading::SUN &&
CommonInterface::Calculated().sun_data_available)
sun_azimuth = CommonInterface::Calculated().sun_azimuth;
renderer.Generate(projection, sun_azimuth);
#ifdef ENABLE_OPENGL
/* enable clipping because the OpenGL terrain renderer uses a large
texture that exceeds the window dimensions */
GLCanvasScissor scissor(canvas);
#endif
renderer.Draw(canvas, projection);
}
示例4: int
gcc_pure
static bool
IsCircleVisible(const Canvas &canvas, PixelPoint center, unsigned radius)
{
return int(center.x + radius) >= 0 && center.x < int(canvas.GetWidth() + radius) &&
int(center.y + radius) >= 0 && center.y < int(canvas.GetHeight() + radius);
}
示例5: assert
void
BufferCanvas::Commit(Canvas &other)
{
assert(IsDefined());
assert(active);
assert(GetWidth() == other.GetWidth());
assert(GetHeight() == other.GetHeight());
if (frame_buffer != NULL) {
frame_buffer->Unbind();
/* restore the old viewport */
assert(OpenGL::translate == RasterPoint(0, 0));
OpenGL::SetupViewport(old_size);
OpenGL::translate = old_translate;
glPopMatrix();
/* copy frame buffer to screen */
CopyTo(other);
} else {
assert(offset == other.offset);
/* copy screen to texture */
CopyToTexture(*texture, GetRect());
}
active = false;
}
示例6: OnPaint
virtual void OnPaint(Canvas &canvas) override {
canvas.ClearWhite();
const GeoPoint a(Angle::Degrees(7.70722),
Angle::Degrees(51.052));
const GeoPoint b(Angle::Degrees(11.5228),
Angle::Degrees(50.3972));
WindowProjection projection;
projection.SetScreenOrigin(canvas.GetWidth() / 2, canvas.GetHeight() / 2);
projection.SetGeoLocation(a.Middle(b));
projection.SetScreenSize(canvas.GetSize());
projection.SetScaleFromRadius(fixed(400000));
projection.UpdateScreenBounds();
canvas.SelectBlackPen();
canvas.SelectHollowBrush();
RasterPoint pa = projection.GeoToScreen(a);
canvas.DrawCircle(pa.x, pa.y, 4);
RasterPoint pb = projection.GeoToScreen(b);
canvas.DrawCircle(pb.x, pb.y, 4);
RenderFAISector(canvas, projection, a, b, false, settings);
}
示例7: sub_canvas
void
WindowList::Paint(Canvas &canvas)
{
const auto &list = this->list;
auto begin = list.rbegin(), end = list.rend();
/* find the last full window which covers all the other windows
behind it */
for (auto i = begin; i != end; ++i) {
Window &child = **i;
if (IsFullWindow(child, canvas.GetWidth(), canvas.GetHeight()))
begin = i;
}
for (auto i = begin; i != end; ++i) {
Window &child = **i;
if (!child.IsVisible())
continue;
SubCanvas sub_canvas(canvas, { child.GetLeft(), child.GetTop() },
child.GetSize());
#ifdef USE_MEMORY_CANVAS
if (sub_canvas.GetWidth() == 0 || sub_canvas.GetHeight() == 0)
/* this child window is completely outside the physical
screen */
continue;
#endif
child.Setup(sub_canvas);
child.OnPaint(sub_canvas);
}
}
示例8: gettext
void
InfoBoxPreview::OnPaint(Canvas &canvas)
{
const unsigned i = this - previews;
const bool is_current = i == current_preview;
if (is_current)
canvas.Clear(COLOR_BLACK);
else
canvas.ClearWhite();
canvas.SelectHollowBrush();
canvas.SelectBlackPen();
canvas.Rectangle(0, 0, canvas.GetWidth() - 1, canvas.GetHeight() - 1);
InfoBoxFactory::Type type = data.contents[i];
const TCHAR *caption = type < InfoBoxFactory::NUM_TYPES
? InfoBoxFactory::GetCaption(type)
: NULL;
if (caption == NULL)
caption = _("Invalid");
else
caption = gettext(caption);
canvas.Select(*look->title.font);
canvas.SetBackgroundTransparent();
canvas.SetTextColor(is_current ? COLOR_WHITE : COLOR_BLACK);
canvas.DrawText(2, 2, caption);
}
示例9: rc
void
LargeTextWindow::OnPaint(Canvas &canvas)
{
canvas.ClearWhite();
PixelRect rc(0, 0, canvas.GetWidth() - 1, canvas.GetHeight() - 1);
canvas.DrawOutlineRectangle(rc.left, rc.top, rc.right, rc.bottom,
COLOR_BLACK);
if (value.empty())
return;
const PixelScalar padding = Layout::GetTextPadding();
rc.Grow(-padding);
canvas.SetBackgroundTransparent();
canvas.SetTextColor(COLOR_BLACK);
rc.top -= origin * GetFont().GetHeight();
#ifndef USE_GDI
canvas.Select(GetFont());
#endif
canvas.DrawFormattedText(&rc, value.c_str(), DT_LEFT | DT_WORDBREAK);
}
示例10: sub_canvas
void
WindowList::Paint(Canvas &canvas)
{
const auto &list = this->list;
auto begin = list.rbegin(), end = list.rend();
/* find the last full window which covers all the other windows
behind it */
for (auto i = begin; i != end; ++i) {
Window &child = **i;
if (IsFullWindow(child, canvas.GetWidth(), canvas.GetHeight()))
begin = i;
}
for (auto i = begin; i != end; ++i) {
Window &child = **i;
if (!child.IsVisible())
continue;
SubCanvas sub_canvas(canvas, { child.GetLeft(), child.GetTop() },
child.GetSize());
child.Setup(sub_canvas);
child.OnPaint(sub_canvas);
}
}
示例11: int
gcc_pure
static bool
IsCircleVisible(const Canvas &canvas, int x, int y, unsigned radius)
{
return int(x + radius) >= 0 && x < int(canvas.GetWidth() + radius) &&
int(y + radius) >= 0 && y < int(canvas.GetHeight() + radius);
}
示例12: gettext
void
InfoBoxPreview::OnPaint(Canvas &canvas)
{
const bool is_current = i == parent->GetCurrentInfoBox();
if (is_current)
canvas.Clear(COLOR_BLACK);
else
canvas.ClearWhite();
canvas.SelectHollowBrush();
canvas.SelectBlackPen();
canvas.Rectangle(0, 0, canvas.GetWidth() - 1, canvas.GetHeight() - 1);
InfoBoxFactory::Type type = parent->GetContents(i);
const TCHAR *caption = type < InfoBoxFactory::NUM_TYPES
? InfoBoxFactory::GetCaption(type)
: NULL;
if (caption == NULL)
caption = _("Invalid");
else
caption = gettext(caption);
canvas.Select(parent->GetInfoBoxLook().title_font);
canvas.SetBackgroundTransparent();
canvas.SetTextColor(is_current ? COLOR_WHITE : COLOR_BLACK);
canvas.DrawText(2, 2, caption);
}
示例13: assert
void
BufferCanvas::Commit(Canvas &other)
{
assert(IsDefined());
assert(active);
assert(GetWidth() == other.GetWidth());
assert(GetHeight() == other.GetHeight());
if (frame_buffer != nullptr) {
assert(OpenGL::translate.x == 0);
assert(OpenGL::translate.y == 0);
frame_buffer->Unbind();
/* restore the old viewport */
assert(OpenGL::translate == RasterPoint(0, 0));
#ifdef HAVE_GLES
/* there's no glPopAttrib() on GL/ES; emulate it */
glViewport(old_viewport[0], old_viewport[1],
old_viewport[2], old_viewport[3]);
#else
glPopAttrib();
#endif
#ifdef USE_GLSL
OpenGL::projection_matrix = old_projection_matrix;
OpenGL::UpdateShaderProjectionMatrix();
#else
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
#endif
OpenGL::translate = old_translate;
OpenGL::viewport_size = old_size;
#ifdef USE_GLSL
glVertexAttrib4f(OpenGL::Attribute::TRANSLATE,
OpenGL::translate.x, OpenGL::translate.y, 0, 0);
#endif
#ifdef SOFTWARE_ROTATE_DISPLAY
OpenGL::display_orientation = old_orientation;
#endif
/* copy frame buffer to screen */
CopyTo(other);
} else {
assert(offset == other.offset);
/* copy screen to texture */
CopyToTexture(*texture, GetRect());
}
active = false;
}
示例14: scissor
void
ListControl::DrawItems(Canvas &canvas, unsigned start, unsigned end) const
{
PixelRect rc = item_rect(start);
canvas.SetBackgroundColor(look.list.background_color);
canvas.SetBackgroundTransparent();
canvas.Select(*look.list.font);
#ifdef ENABLE_OPENGL
/* enable clipping */
GLScissor scissor(OpenGL::translate.x,
OpenGL::screen_height - OpenGL::translate.y - canvas.GetHeight() - 1,
scroll_bar.GetLeft(GetSize()), canvas.GetHeight());
#endif
unsigned last_item = std::min(length, end);
const bool focused = HasFocus();
for (unsigned i = start; i < last_item; i++) {
const bool selected = i == cursor;
const bool pressed = selected && drag_mode == DragMode::CURSOR;
canvas.DrawFilledRectangle(rc,
look.list.GetBackgroundColor(selected,
focused,
pressed));
canvas.SetTextColor(look.list.GetTextColor(selected, focused, pressed));
if (item_renderer != nullptr)
item_renderer->OnPaintItem(canvas, rc, i);
if (focused && selected)
canvas.DrawFocusRectangle(rc);
rc.Offset(0, rc.bottom - rc.top);
}
/* paint the bottom part below the last item */
rc.bottom = canvas.GetHeight();
if (rc.bottom > rc.top)
canvas.DrawFilledRectangle(rc, look.list.background_color);
}
示例15:
void
WaypointDetailsWidget::OnImagePaint(Canvas &canvas, const PixelRect &rc)
{
canvas.ClearWhite();
if (page >= 3 && page < 3 + (int)images.size()) {
Bitmap &img = images[page-3];
static constexpr int zoom_factors[] = { 1, 2, 4, 8, 16, 32 };
RasterPoint img_pos, screen_pos;
PixelSize screen_size;
PixelSize img_size = img.GetSize();
fixed scale = std::min((fixed)canvas.GetWidth() / (fixed)img_size.cx,
(fixed)canvas.GetHeight() / (fixed)img_size.cy) *
zoom_factors[zoom];
// centered image and optionally zoomed into the center of the image
fixed scaled_size = img_size.cx * scale;
if (scaled_size <= (fixed)canvas.GetWidth()) {
img_pos.x = 0;
screen_pos.x = (int) (((fixed)canvas.GetWidth() - scaled_size) / 2);
screen_size.cx = (int) scaled_size;
} else {
scaled_size = (fixed)canvas.GetWidth() / scale;
img_pos.x = (int) (((fixed)img_size.cx - scaled_size) / 2);
img_size.cx = (int) scaled_size;
screen_pos.x = 0;
screen_size.cx = canvas.GetWidth();
}
scaled_size = img_size.cy * scale;
if (scaled_size <= (fixed)canvas.GetHeight()) {
img_pos.y = 0;
screen_pos.y = (int) (((fixed)canvas.GetHeight() - scaled_size) / 2);
screen_size.cy = (int) scaled_size;
} else {
scaled_size = (fixed)canvas.GetHeight() / scale;
img_pos.y = (int) (((fixed)img_size.cy - scaled_size) / 2);
img_size.cy = (int) scaled_size;
screen_pos.y = 0;
screen_size.cy = canvas.GetHeight();
}
canvas.Stretch(screen_pos.x, screen_pos.y, screen_size.cx, screen_size.cy,
img, img_pos.x, img_pos.y, img_size.cx, img_size.cy);
}
}