void WndForm::OnPaint(Canvas &canvas) { ContainerWindow::OnPaint(canvas); // Get window coordinates PixelRect rcClient = get_client_rect(); // Draw the borders canvas.DrawRaisedEdge(rcClient); if (!caption.empty()) { // Set the colors canvas.SetTextColor(COLOR_WHITE); // Set the titlebar font and font-size canvas.Select(*look.caption.font); // JMW todo add here icons? #ifdef EYE_CANDY canvas.SetBackgroundTransparent(); canvas.stretch(title_rect.left, title_rect.top, title_rect.right - title_rect.left, title_rect.bottom - title_rect.top, look.caption.background_bitmap); // Draw titlebar text canvas.text(title_rect.left + Layout::FastScale(2), title_rect.top, caption.c_str()); #else canvas.SetBackgroundColor(main_window.IsTopDialog(*this) ? look.caption.background_color : look.caption.inactive_background_color); canvas.text_opaque(title_rect.left + Layout::FastScale(2), title_rect.top, title_rect, caption.c_str()); #endif } }
//------------------------------------------------------------------------------ int main(int argc, char *argv[]) { QApplication app(argc, argv); Canvas c; Pen(Pen::SOLID, 1, Color(0, 0, 0)); { c.Select(Brush(Color(128, 128, 0, Color::TRANSPARENT))); c.DrawKeyhole(200, 100, 50, 100, Angle::Degrees(-20), Angle::Degrees(20)); c.DrawKeyhole(400, 100, 50, 100, Angle::Degrees(70), Angle::Degrees(110)); c.DrawKeyhole(200, 300, 50, 100, Angle::Degrees(160), Angle::Degrees(200)); c.DrawKeyhole(400, 300, 50, 100, Angle::Degrees(-110), Angle::Degrees(-70)); c.show(); app.exec(); } { c.Clear(); c.DrawKeyhole(200, 100, 50, 100, Angle::Degrees(35), Angle::Degrees(55)); c.DrawKeyhole(400, 100, 50, 100, Angle::Degrees(125), Angle::Degrees(145)); c.DrawKeyhole(200, 300, 50, 100, Angle::Degrees(215), Angle::Degrees(235)); c.DrawKeyhole(400, 300, 50, 100, Angle::Degrees(305), Angle::Degrees(325)); c.show(); app.exec(); } { c.Clear(); c.DrawFilledRectangle(0, 0, 100, 100, Color(128, 128, 128, Color::TRANSPARENT)); c.DrawFilledRectangle(100, 100, 200, 200, Color(128, 0, 0, Color::TRANSPARENT)); c.DrawFilledRectangle(150, 150, 250, 250, Color(0, 128, 0, Color::TRANSPARENT)); c.DrawFilledRectangle(200, 200, 300, 300, Color(0, 0, 128, Color::TRANSPARENT)); c.DrawTransparentText(0, 0, "0"); c.DrawTransparentText(0, 100, "100"); c.DrawTransparentText(0, 200, "200"); c.DrawTransparentText(0, 300, "300"); c.DrawTransparentText(0, 400, "400"); c.DrawTransparentText(0, 500, "500"); c.DrawTransparentText(100, c.GetFontHeight(), "100"); c.DrawTransparentText(200, c.GetFontHeight(), "200"); c.DrawTransparentText(300, c.GetFontHeight(), "300"); c.DrawTransparentText(400, c.GetFontHeight(), "400"); c.DrawTransparentText(500, c.GetFontHeight(), "500"); c.show(); app.exec(); } { c.Clear(); c.DrawOutlineRectangle(100, 100, 200, 200, Color(255, 0, 0)); c.show(); app.exec(); } { c.Clear(); c.DrawRoundRectangle(100, 100, 200, 200, 10, 10); c.DrawRoundRectangle(200, 200, 300, 300, 100, 100); c.DrawRoundRectangle(300, 300, 400, 400, 50, 50); c.show(); app.exec(); } { c.Clear(); PixelRect rc; rc.left = 100; rc.top = 100; rc.right = 200; rc.bottom = 200; c.DrawRaisedEdge(rc); c.show(); app.exec(); } { c.Clear(); RasterPoint rp[4]; rp[0] = {100, 100}; rp[1] = {200, 200}; rp[2] = {200, 300}; rp[3] = {300, 400}; c.DrawPolyline(rp, 4); c.show(); app.exec(); } { c.Clear(); RasterPoint rp[6]; rp[0] = {100, 100}; rp[1] = {150, 50}; rp[2] = {200, 100}; rp[3] = {200, 200}; rp[4] = {150, 200}; rp[5] = {100, 100}; c.DrawPolygon(rp, 6); c.show(); app.exec(); } { c.Clear(); RasterPoint rp[4]; rp[0] = {100, 100}; rp[1] = {200, 50}; rp[2] = {200, 150}; rp[3] = {150, 200}; c.DrawTriangleFan(rp, 4); c.show(); app.exec(); } { c.Clear(); c.DrawHLine(100, 200, 100, Color(255, 0, 0)); c.DrawHLine(100, 200, 200, Color(0, 255, 0)); c.DrawHLine(100, 200, 300, Color(0, 0, 255)); c.show(); app.exec(); } { c.Clear(); c.DrawLine(100, 100, 200, 200); c.DrawCircle(250, 250, 50); c.DrawSegment(100, 250, 50, Angle::Degrees(10), Angle::Degrees(30), false); c.show(); app.exec(); } { c.Clear(); c.DrawAnnulus(100, 100, 50, 100, Angle::Degrees(10), Angle::Degrees(60)); c.DrawAnnulus(300, 100, 50, 100, Angle::Degrees(0), Angle::Degrees(360)); c.DrawAnnulus(100, 300, 50, 100, Angle::Degrees(0), Angle::Degrees(0)); c.show(); app.exec(); } { PixelSize rc = c.CalcTextSize("Hello"); std::cout << "Size of \"Hello\": " << rc.cx << ", " << rc.cy << std::endl; c.DrawClippedText(100, 100, rc.cx / 2, "Hello"); c.show(); app.exec(); } { std::cout << "Height of font: " << c.GetFontHeight() << std::endl; } { c.Clear(); c.DrawText(0, 50, "50"); c.Clear(); c.show(); return app.exec(); } }
void WndForm::OnPaint(Canvas &canvas) { const SingleWindow &main_window = GetMainWindow(); gcc_unused const bool is_active = main_window.IsTopDialog(*this); #ifdef ENABLE_OPENGL if (!IsDithered() && !IsMaximised() && is_active) { /* draw a shade around the current dialog to emphasise it */ const ScopeAlphaBlend alpha_blend; const PixelRect rc = GetClientRect(); const PixelScalar size = Layout::VptScale(4); const RasterPoint vertices[8] = { { rc.left, rc.top }, { rc.right, rc.top }, { rc.right, rc.bottom }, { rc.left, rc.bottom }, { rc.left - size, rc.top - size }, { rc.right + size, rc.top - size }, { rc.right + size, rc.bottom + size }, { rc.left - size, rc.bottom + size }, }; const ScopeVertexPointer vp(vertices); static constexpr Color inner_color = COLOR_BLACK.WithAlpha(192); static constexpr Color outer_color = COLOR_BLACK.WithAlpha(16); static constexpr Color colors[8] = { inner_color, inner_color, inner_color, inner_color, outer_color, outer_color, outer_color, outer_color, }; const ScopeColorPointer cp(colors); static constexpr GLubyte indices[] = { 0, 4, 1, 4, 5, 1, 1, 5, 2, 5, 6, 2, 2, 6, 3, 6, 7, 3, 3, 7, 0, 7, 4, 0, }; glDrawElements(GL_TRIANGLES, ARRAY_SIZE(indices), GL_UNSIGNED_BYTE, indices); } #endif ContainerWindow::OnPaint(canvas); // Get window coordinates PixelRect rcClient = GetClientRect(); // Draw the borders if (!IsMaximised()) { #ifndef USE_GDI if (IsDithered()) canvas.DrawOutlineRectangle(rcClient.left, rcClient.top, rcClient.right - 1, rcClient.bottom - 1, COLOR_BLACK); else #endif canvas.DrawRaisedEdge(rcClient); } if (!caption.empty()) { // Set the colors canvas.SetTextColor(COLOR_WHITE); // Set the titlebar font and font-size canvas.Select(*look.caption.font); // JMW todo add here icons? #ifdef EYE_CANDY if (!IsDithered() && is_active) { canvas.SetBackgroundTransparent(); canvas.Stretch(title_rect.left, title_rect.top, title_rect.right - title_rect.left, title_rect.bottom - title_rect.top, look.caption.background_bitmap); // Draw titlebar text canvas.DrawText(title_rect.left + Layout::GetTextPadding(), title_rect.top, caption.c_str()); } else { #endif canvas.SetBackgroundColor(is_active ? look.caption.background_color : look.caption.inactive_background_color); canvas.DrawOpaqueText(title_rect.left + Layout::GetTextPadding(), title_rect.top, title_rect, caption.c_str()); #ifdef EYE_CANDY } #endif } if (dragging) { #ifdef ENABLE_OPENGL const ScopeAlphaBlend alpha_blend; canvas.DrawFilledRectangle(0, 0, canvas.GetWidth(), canvas.GetHeight(), COLOR_YELLOW.WithAlpha(80)); #elif defined(USE_GDI) canvas.InvertRectangle(title_rect); #else canvas.InvertRectangle(GetClientRect()); #endif } }
void WndForm::OnPaint(Canvas &canvas) { const SingleWindow &main_window = GetMainWindow(); gcc_unused const bool is_active = main_window.IsTopDialog(*this); #ifdef ENABLE_OPENGL if (!IsMaximised() && is_active) { /* draw a shade around the current dialog to emphasise it */ GLEnable blend(GL_BLEND); glEnableClientState(GL_COLOR_ARRAY); const PixelRect rc = GetClientRect(); const PixelScalar size = Layout::SmallScale(4); const RasterPoint vertices[8] = { { rc.left, rc.top }, { rc.right, rc.top }, { rc.right, rc.bottom }, { rc.left, rc.bottom }, { rc.left - size, rc.top - size }, { rc.right + size, rc.top - size }, { rc.right + size, rc.bottom + size }, { rc.left - size, rc.bottom + size }, }; glVertexPointer(2, GL_VALUE, 0, vertices); static constexpr Color inner_color = COLOR_BLACK.WithAlpha(192); static constexpr Color outer_color = COLOR_BLACK.WithAlpha(16); static constexpr Color colors[8] = { inner_color, inner_color, inner_color, inner_color, outer_color, outer_color, outer_color, outer_color, }; #ifdef HAVE_GLES glColorPointer(4, GL_FIXED, 0, colors); #else glColorPointer(4, GL_UNSIGNED_BYTE, 0, colors); #endif static constexpr GLubyte indices[] = { 0, 4, 1, 4, 5, 1, 1, 5, 2, 5, 6, 2, 2, 6, 3, 6, 7, 3, 3, 7, 0, 7, 4, 0, }; glDrawElements(GL_TRIANGLES, ARRAY_SIZE(indices), GL_UNSIGNED_BYTE, indices); glDisableClientState(GL_COLOR_ARRAY); } #endif ContainerWindow::OnPaint(canvas); // Get window coordinates PixelRect rcClient = GetClientRect(); // Draw the borders canvas.DrawRaisedEdge(rcClient); if (!caption.empty()) { // Set the colors canvas.SetTextColor(COLOR_WHITE); // Set the titlebar font and font-size canvas.Select(*look.caption.font); // JMW todo add here icons? #ifdef EYE_CANDY canvas.SetBackgroundTransparent(); canvas.Stretch(title_rect.left, title_rect.top, title_rect.right - title_rect.left, title_rect.bottom - title_rect.top, look.caption.background_bitmap); // Draw titlebar text canvas.DrawText(title_rect.left + Layout::FastScale(2), title_rect.top, caption.c_str()); #else canvas.SetBackgroundColor(is_active ? look.caption.background_color : look.caption.inactive_background_color); canvas.DrawOpaqueText(title_rect.left + Layout::FastScale(2), title_rect.top, title_rect, caption.c_str()); #endif } if (dragging) { #ifdef ENABLE_OPENGL GLEnable blend(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); canvas.DrawFilledRectangle(0, 0, canvas.GetWidth(), canvas.GetHeight(), COLOR_YELLOW.WithAlpha(80)); #elif defined(USE_GDI) ::InvertRect(canvas, &title_rect); #endif } }