bool ListPage::Draw() { TRACE("Drawing page\n"); if (!m_bWidthsCalculated) CalcRealColumnWidths(); TRACE("Got column widths\n"); DrawFrame(PageRect()); TRACE("Drawn Frames\n"); if (m_dwFlags & LF_SHOW_HEADER) DrawHeader(); TRACE("Drawn Header\n"); DrawVisibleItems(); TRACE("Drawn Items\n"); DrawFooterAndScrollBar(); TRACE("Drawn footer/scroll bar\n"); TAP_Osd_Copy(m_osdRegionIndex, GetTAPScreenRegion(), 0, 0, m_rcList.w, m_rcList.h, m_rcList.x, m_rcList.y, false); TRACE("Copied memory image to screen\n"); return true; }
void CCalendarCtrl::OnPaint() { CPaintDC dc(this); CRect rc; GetClientRect(&rc); CDC MemDC; MemDC.CreateCompatibleDC(&dc); CBitmap MemBitmap; MemBitmap.CreateCompatibleBitmap(&dc, rc.Width(), rc.Height()); CBitmap *pOldBitmap = MemDC.SelectObject(&MemBitmap); CBrush brBkGnd; brBkGnd.CreateSolidBrush(RGB(252,255,255)); MemDC.FillRect(&rc ,&brBkGnd); MemDC.SetBkMode(TRANSPARENT); // Draw calendar elements DrawHeader(&MemDC); DrawCells(&MemDC); DrawGrid(&MemDC); // Render dc.BitBlt(rc.left, rc.top, rc.Width(), rc.Height(), &MemDC, 0, 0, SRCCOPY); MemDC.SelectObject(pOldBitmap); }
void Draw_CheatsMenu_Selection(int menuSel, u32 rgba) { int c = 0, w = 0, h = 0; DrawHeader(menu_textures[header_ico_cht_png_index], 0, "Cheats", selected_entry.name, 0x000000ff, rgba, 0); DrawCheatsList(menuSel, selected_entry, (u8)rgba); }
void Draw_UserCheatsMenu(int menuSel, u8 alpha) { int c = 0, w = 0, h = 0; DrawHeader(menu_textures[header_ico_cht_png_index], 0, "Cheats", "User List", 0x000000ff, 0xffffff00 | alpha, 0); DrawGameList(menuSel, user_game_list, user_game_count, alpha); }
void CPrintDlg::DrawTable(int cx, int cy) { m_mdcTable.FillSolidRect(0, 0, cx, cy, TABLE_BK_COLOR); //提示内容 CFont font, *preFt; font.CreatePointFont(120,_T("Arial")); int preColor = m_mdcTable.SetTextColor(RGB(255,0,0)); preFt = m_mdcTable.SelectObject(&font); m_mdcTable.SetBkMode(TRANSPARENT); m_mdcTable.TextOutW(0,10,_T("注意:医疗、死伤、财产是四舍五入后的结果,与后面合计的值会在某些时候出现不一致")); m_mdcTable.SelectObject(preFt); m_mdcTable.SetTextColor(preColor); m_mdcTable.SelectStockObject(BLACK_PEN); ///////////////////画表////////////////////////// //第一张表起点坐标 int x = 0; int y = TABLE_GAP; //获取保险公司链表 list<CCompany *> &listcom = m_pCase->GetListCompany(); list<CCompany *>::iterator com_Iter = listcom.begin(); for( ; com_Iter!=listcom.end(); com_Iter++) { CCompany *pCom = *com_Iter; //画表头 DrawHeader(x, y, pCom); //画表项 //设置首行右上角起点 int rx = x; int ry = y + HEAD_HEIGHT; //获取每个保险公司对象的分配链表 list<CAssignItem *> &listAssign = pCom->GetListAssign(); list<CAssignItem *>::iterator asgn_Iter = listAssign.begin(); for(int i=0; asgn_Iter != listAssign.end(); asgn_Iter++, i++) { CAssignItem *pItem = *asgn_Iter; //画表项 DrawItem(rx, ry, pItem); //更新下一行的右上角坐标(rx不变,ry递增一行) ry += ROW_HEIGHT; } //画垂直分隔线,直线起点:x1,y1 终点:x2,y2 int x1 = x + COL_WIDTH; int y1 = y + HEAD_HEIGHT/2; int x2 = x1; int y2 = ry; for(int i=0;i<COL_NUM-1;i++) { m_mdcTable.MoveTo(x1, y1); m_mdcTable.LineTo(x2, y2); x1 += COL_WIDTH; x2 += COL_WIDTH; } //更新下一张表的右上角坐标 y = ry + TABLE_GAP; } }
void MultiTabs::Draw(const Point2i &mousePosition) { if (tabs.empty()) return; // Draw the header DrawHeader(mousePosition); // Draw the current tab tabs[current_tab].box->Draw(mousePosition); }
void Draw_CheatsMenu_Options(void) { int c = 0, w = 0, h = 0; //------------ Backgrounds Draw_CheatsMenu_Selection(menu_old_sel[5], 0xD0D0D0FF); DrawTexture(menu_textures[edit_shadow_png_index], MENU_SPLIT_OFF - (menu_textures[edit_shadow_png_index].texture.width * 1) + 1, -marginVertical, 0, menu_textures[edit_shadow_png_index].texture.width, 512 + (marginVertical * 2), 0x000000FF); DrawHeader(menu_textures[header_ico_opt_png_index], MENU_SPLIT_OFF, "Cheat Option", selected_centry.name, 0x000000ff, 0xffffffff, 1); DrawOptions(selected_centry.options[option_index], 0xFF, 20, menu_sel); DrawScrollBar(menu_sel, selected_centry.options[option_index].size, 20, 800, 0xFF); }
void Draw_CheatsMenu_View(void) { int c = 0, w = 0, h = 0; //------------ Backgrounds Draw_CheatsMenu_Selection(menu_old_sel[5], 0xD0D0D0FF); DrawTexture(menu_textures[edit_shadow_png_index], MENU_SPLIT_OFF - (menu_textures[edit_shadow_png_index].texture.width * 1) + 1, -marginVertical, 0, menu_textures[edit_shadow_png_index].texture.width, 512 + (marginVertical * 2), 0x000000FF); DrawHeader(menu_textures[header_ico_opt_png_index], MENU_SPLIT_OFF, "Cheat View", selected_centry.name, 0x000000ff, 0xffffffff, 1); int nlines = DrawCodes(selected_centry, 0xFF, 20, MENU_SPLIT_OFF, menu_sel); //DrawScrollBar2(menu_sel, nlines, 18, 700, 0xFF); DrawScrollBar(menu_sel, nlines, 20, 800, 0xFF); }
void CBCGPPlannerViewMulti::OnDrawHeaderResource (CDC* pDC, const CRect& rectHeader) { ASSERT_VALID (pDC); const int nDays = GetViewDuration (); DWORD dwFlags = GetPlanner ()->GetDrawFlags (); BOOL bBold = (dwFlags & BCGP_PLANNER_DRAW_VIEW_CAPTION_DAY_BOLD) == BCGP_PLANNER_DRAW_VIEW_CAPTION_DAY_BOLD; HFONT hOldFont = NULL; if (bBold) { hOldFont = SetCurrFont (pDC, bBold); } for (int nDay = 0; nDay < nDays; nDay ++) { CRect rectCaption (rectHeader); rectCaption.left = m_ViewRects[nDay].left; rectCaption.right = m_ViewRects[nDay].right; DrawHeader (pDC, rectCaption, m_Resources [0].m_Rects[nDay].Width ()); CRect rectResCaption (rectCaption); for (int i = 0; i < m_Resources.GetSize (); i++) { XResource& res = m_Resources[i]; rectResCaption.left = res.m_Rects[nDay].left; rectResCaption.right = res.m_Rects[nDay].right; visualManager->PreparePlannerCaptionBackItem (TRUE); COLORREF clrText = OnFillPlannerCaption ( pDC, rectResCaption, FALSE, FALSE, FALSE); DrawCaptionText (pDC, rectResCaption, res.m_Description, clrText, res.m_bToolTipNeeded ? DT_LEFT : DT_CENTER); } } if (hOldFont != NULL) { ::SelectObject (pDC->GetSafeHdc (), hOldFont); } }
void Draw_CheatsMenu_Options_Ani_Exit(void) { int c = 0, w = 0, h = 0; int div = 12, max = MENU_ANI_MAX, ani = 0, left = MENU_SPLIT_OFF; for (ani = max - 1; ani >= 0; ani--) { tiny3d_Clear(0xff000000, TINY3D_CLEAR_ALL); tiny3d_AlphaTest(1, 0x0, TINY3D_ALPHA_FUNC_GEQUAL); tiny3d_BlendFunc(1, TINY3D_BLEND_FUNC_SRC_RGB_SRC_ALPHA | TINY3D_BLEND_FUNC_SRC_ALPHA_SRC_ALPHA, 0x00000303 | 0x00000000, TINY3D_BLEND_RGB_FUNC_ADD | TINY3D_BLEND_ALPHA_FUNC_ADD); tiny3d_Project2D(); u8 icon_a = (u8)((int)(((848 - left) / 848.0) * 255.0)); left = MENU_SPLIT_OFF + ((max - ani) * div * 3); if (left > 848) left = 848; u8 rgbVal = 0xFF; rgbVal -= (u8)((848 - left) / div); if (rgbVal < 0xD0) rgbVal = 0xD0; Draw_CheatsMenu_Selection(menu_old_sel[5], (rgbVal << 24) | (rgbVal << 16) | (rgbVal << 8) | 0xFF); DrawTexture(menu_textures[edit_shadow_png_index], left - (menu_textures[edit_shadow_png_index].texture.width * 1) + 1, -marginVertical, 0, menu_textures[edit_shadow_png_index].texture.width, 512 + (marginVertical * 2), icon_a); DrawHeader(menu_textures[header_ico_opt_png_index], left, "Cheat Option", selected_centry.name, 0x00000000 | icon_a, 0xffffffff, 1); int _game_a = (int)(icon_a - (max / 2)) * 2; if (_game_a > 0xFF) _game_a = 0xFF; u8 game_a = (u8)(_game_a < 0 ? 0 : _game_a); //DrawOptions(selected_centry.options[option_index], game_a, 18, menu_old_sel[7]); //DrawScrollBar2(menu_old_sel[7], selected_centry.options[option_index].size, 18, 700, game_a); tiny3d_Flip(); if (left == 848) return; } }
void Draw_CheatsMenu_View_Ani(void) { int c = 0, w = 0, h = 0; int div = 12, max = MENU_ANI_MAX, ani = 0, left = MENU_SPLIT_OFF; for (ani = 0; ani < max; ani++) { tiny3d_Clear(0xff000000, TINY3D_CLEAR_ALL); tiny3d_AlphaTest(1, 0x0, TINY3D_ALPHA_FUNC_GEQUAL); tiny3d_BlendFunc(1, TINY3D_BLEND_FUNC_SRC_RGB_SRC_ALPHA | TINY3D_BLEND_FUNC_SRC_ALPHA_SRC_ALPHA, 0x00000303 | 0x00000000, TINY3D_BLEND_RGB_FUNC_ADD | TINY3D_BLEND_ALPHA_FUNC_ADD); tiny3d_Project2D(); u8 icon_a = (u8)(((ani * 4 + 0x40) > 0xFF) ? 0xFF : (ani * 4 + 0x40)); left = 848 - (ani * div * 3); if (left < MENU_SPLIT_OFF) left = MENU_SPLIT_OFF; u8 rgbVal = 0xFF; rgbVal -= (u8)((848 - left) / div); if (rgbVal < 0xD0) rgbVal = 0xD0; Draw_CheatsMenu_Selection(menu_sel, (rgbVal << 24) | (rgbVal << 16) | (rgbVal << 8) | 0xFF); DrawTexture(menu_textures[edit_shadow_png_index], left - (menu_textures[edit_shadow_png_index].texture.width * 1) + 1, -marginVertical, 0, menu_textures[edit_shadow_png_index].texture.width, 512 + (marginVertical * 2), icon_a); DrawHeader(menu_textures[header_ico_opt_png_index], left, "Cheat View", selected_centry.name, 0x00000000 | icon_a, 0xffffffff, 1); u8 game_a = (u8)(icon_a < 0x8F ? 0 : icon_a); int nlines = DrawCodes(selected_centry, game_a, 20, left, menu_old_sel[6]); DrawScrollBar(menu_old_sel[6], nlines, 20, 800, game_a); tiny3d_Flip(); if ((848 - (ani * div * 3)) < (MENU_SPLIT_OFF / 2)) return; } }
void MultiTabs::Update(const Point2i &mousePosition, const Point2i &lastMousePosition) { Rectanglei header(position.x, position.y, next_tab_bt->GetPositionX() + next_tab_bt->GetSizeX() - position.x, prev_tab_bt->GetSizeY()); if (need_redrawing) { Widget::Update(mousePosition, lastMousePosition); } else if ((header.Contains(mousePosition) && mousePosition != lastMousePosition) || (header.Contains(lastMousePosition) && !header.Contains(mousePosition))) { RedrawBackground(header); DrawHeader(mousePosition); RedrawForeground(); } if (!tabs.empty()) tabs[current_tab].box->Update(mousePosition, lastMousePosition); need_redrawing = false; }
///////////////////////////////////////////////////////////////////////////// // CMiniCalendarCtrl message handlers // void CMiniCalendarCtrl::OnPaint() { CPaintDC dc(this); // device context for painting CMemDC dcDraw(&dc); if (!m_bSizeComputed) ComputeSize(); CRect rcClient; GetClientRect(rcClient); dcDraw.FillSolidRect(0, 0, rcClient.Width(), rcClient.Height(), m_cBackColor); int iY = 0; int iMonth = m_iCurrentMonth; int iYear = m_iCurrentYear; // draw each row individually for (int iRow = 1; iRow <= m_iRows; iRow++) { int iCurrentX = 0; int iCurrentY = iY; iCurrentY += DrawHeader(dcDraw, iCurrentY, iCurrentX, iRow, iMonth, iYear); iCurrentY += DrawDaysOfWeek(dcDraw, iCurrentY, iCurrentX, iRow); iCurrentY += DrawDays(dcDraw, iCurrentY, iCurrentX, iRow, iMonth, iYear); iCurrentX += m_szMonthSize.cx; iMonth++; if (iMonth > 12) { iMonth = 1; iYear++; } iY += m_szMonthSize.cy; } }
/*------------------------------------------------------------------------* * GINPUT Touch Driver Calibrator. * *------------------------------------------------------------------------*/ int main(void) { GSourceHandle gs; GEventMouse *pem; bool_t isFirstTime; bool_t isCalibrated; bool_t isTouch; bool_t isFinger; const char * isFingerText; const char * deviceText; GMouse * m; GMouseVMT * vmt; GMouseJitter * pjit; uint32_t calerr; gfxInit(); // Initialize the display // Get the display dimensions swidth = gdispGetWidth(); sheight = gdispGetHeight(); // Create our title font = gdispOpenFont("UI2"); gwinSetDefaultFont(font); bWidth = gdispGetStringWidth("Next", font); bHeight = gdispGetStringWidth("Prev", font); if (bHeight > bWidth) bWidth = bHeight; bWidth += 4; bWidth2 = gdispGetStringWidth("+", font)*2; bHeight = gdispGetStringWidth("-", font)*2; if (bHeight > bWidth2) bWidth2 = bHeight; bWidth2 += 4; bHeight = gdispGetFontMetric(font, fontHeight)*2+2; // Create our main display window { GWindowInit wi; gwinClearInit(&wi); wi.show = TRUE; wi.x = 0; wi.y = bHeight; wi.width = swidth; wi.height = sheight-bHeight; ghc = gwinConsoleCreate(&gc, &wi); } // Initialize the listener geventListenerInit(&gl); // Copy the current mouse's VMT so we can play with it. m = (GMouse *)gdriverGetInstance(GDRIVER_TYPE_MOUSE, 0); if (!m) gfxHalt("No mouse instance 0"); vmt = gfxAlloc(sizeof(GMouseVMT)); if (!vmt) gfxHalt("Could not allocate memory for mouse VMT"); memcpy(vmt, m->d.vmt, sizeof(GMouseVMT)); // Swap VMT's on the current mouse to our RAM copy m->d.vmt = (const GDriverVMT *)vmt; // Listen for events gs = ginputGetMouse(0); geventAttachSource(&gl, gs, GLISTEN_MOUSEDOWNMOVES|GLISTEN_MOUSEMETA); // Get initial display settings for buttons isFirstTime = TRUE; isCalibrated = (vmt->d.flags & GMOUSE_VFLG_CALIBRATE) ? FALSE : TRUE; calerr = 0; /* * Test: Device Type */ StepDeviceType: DrawHeader("1. Device Type", isCalibrated, isCalibrated && !isFirstTime, isCalibrated); // Get the type of device and the current mode isTouch = (vmt->d.flags & GMOUSE_VFLG_TOUCH) ? TRUE : FALSE; isFinger = (m->flags & GMOUSE_FLG_FINGERMODE) ? TRUE : FALSE; pjit = isFinger ? &vmt->finger_jitter : &vmt->pen_jitter; isFingerText = isFinger ? "finger" : "pen"; deviceText = isTouch ? isFingerText : "mouse"; gwinPrintf(ghc, "This is detected as a %s device\n\n", isTouch ? "TOUCH" : "MOUSE"); gwinPrintf(ghc, "It is currently in %s mode\n\n", isFinger ? "FINGER" : "PEN"); if (!isCalibrated) gwinPrintf(ghc, "Press and release your %s to move on to the next test.\n", deviceText); else { gwinPrintf(ghc, "Press + for pen or - for finger.\n"); if (isFirstTime) gwinPrintf(ghc, "Press Next to continue.\n"); else gwinPrintf(ghc, "Press Next or Back to continue.\n"); } while(1) { pem = (GEventMouse *)geventEventWait(&gl, TIME_INFINITE); if (isCalibrated) { switch (CheckButtons(pem)) { case BTN_NEXT: break; case BTN_PREV: if (!isFirstTime) goto StepDrawing; continue; case BTN_PLUS: m->flags &= ~GMOUSE_FLG_FINGERMODE; goto StepDeviceType; case BTN_MINUS: m->flags |= GMOUSE_FLG_FINGERMODE; goto StepDeviceType; default: continue; } break; } if ((pem->buttons & GMETA_MOUSE_UP)) break; } /* * Test: Mouse raw reading */ StepRawReading: DrawHeader("2. Raw Mouse Output", FALSE, FALSE, FALSE); if (isTouch) gwinPrintf(ghc, "Press and hold on the surface.\n\n"); else gwinPrintf(ghc, "Press and hold the mouse button.\n\n"); gwinPrintf(ghc, "The raw values coming from your mouse driver will display.\n\n"); gwinPrintf(ghc, "Make sure the x and y values change as you move.\n\n"); gwinPrintf(ghc, "Release your %s to move on to the next test.\n", deviceText); // Make sure we are in uncalibrated mode m->flags &= ~(GMOUSE_FLG_CALIBRATE|GMOUSE_FLG_CLIP); // For this test turn on ALL mouse movement events geventAttachSource(&gl, gs, GLISTEN_MOUSEDOWNMOVES|GLISTEN_MOUSEUPMOVES|GLISTEN_MOUSEMETA|GLISTEN_MOUSENOFILTER); while(1) { // Always sleep a bit first to enable other events. We actually don't // mind missing events for this test. gfxSleepMilliseconds(100); pem = (GEventMouse *)geventEventWait(&gl, TIME_INFINITE); gwinPrintf(ghc, "%u, %u z=%u b=0x%04x\n", pem->x, pem->y, pem->z, pem->buttons & ~GINPUT_MISSED_MOUSE_EVENT); if ((pem->buttons & GMETA_MOUSE_UP)) break; } // Reset to calibrated condition if (isCalibrated) { m->flags |= GMOUSE_FLG_CLIP; if ((vmt->d.flags & GMOUSE_VFLG_CALIBRATE)) m->flags |= GMOUSE_FLG_CALIBRATE; } // Reset to just changed movements. geventAttachSource(&gl, gs, GLISTEN_MOUSEDOWNMOVES|GLISTEN_MOUSEMETA); /* * Test: Calibration */ StepCalibrate: DrawHeader("3. Calibration Jitter", isCalibrated, isCalibrated, isCalibrated); if ((vmt->d.flags & GMOUSE_VFLG_CALIBRATE)) { gwinPrintf(ghc, "You will be presented with a number of points to touch.\nPress them in turn.\n\n" "If the calibration repeatedly fails, increase the jitter for %s calibration and try again.\n\n", isFingerText); gwinPrintf(ghc, "Pressing the surface for longer gives more accurate results.\n\n"); if (calerr) gwinPrintf(ghc, "Last calibration error ^ 2 = %u\n", calerr); gwinPrintf(ghc, "Calibration jitter (%s) = %u\n", isFingerText, pjit->calibrate); if (isCalibrated) gwinPrintf(ghc, "Press + or - to adjust.\n"); } else { gwinPrintf(ghc, "This device does not need calibration.\n\n"); } if (isCalibrated) gwinPrintf(ghc, "Press Next or Back to continue.\n"); else gwinPrintf(ghc, "Press and release your %s to move on to start calibration.\n", deviceText); while(1) { pem = (GEventMouse *)geventEventWait(&gl, TIME_INFINITE); if (isCalibrated) { switch (CheckButtons(pem)) { case BTN_NEXT: break; case BTN_PREV: goto StepRawReading; case BTN_PLUS: gwinPrintf(ghc, "Calibration jitter (%s) = %u", isFingerText, ++pjit->calibrate); continue; case BTN_MINUS: gwinPrintf(ghc, "Calibration jitter (%s) = %u", isFingerText, --pjit->calibrate); continue; default: continue; } break; } if ((pem->buttons & GMETA_MOUSE_UP)) break; } // Calibrate if ((vmt->d.flags & GMOUSE_VFLG_CALIBRATE)) { calerr = ginputCalibrateMouse(0); if (calerr) goto StepCalibrate; isCalibrated = TRUE; } /* * Test: Mouse coords */ StepMouseCoords: DrawHeader("4. Show Mouse Coordinates", TRUE, TRUE, TRUE); if (isTouch) gwinPrintf(ghc, "Press and hold on the surface.\n\n"); else gwinPrintf(ghc, "Press and hold the mouse button.\n\n"); gwinPrintf(ghc, "Check the coordinates against where it should be on the screen.\n\n"); gwinPrintf(ghc, "X should be 0 to %u\nY should be 0 to %u\n\n", swidth-1, sheight-1); gwinPrintf(ghc, "Press + to retry using extremes or - for normal calibration.\n"); gwinPrintf(ghc, "Press Next or Back to continue.\n"); // For this test normal mouse movement events geventAttachSource(&gl, gs, GLISTEN_MOUSEDOWNMOVES|GLISTEN_MOUSEMETA); while(1) { // Always sleep a bit first to enable other events. We actually don't // mind missing events for this test. gfxSleepMilliseconds(100); pem = (GEventMouse *)geventEventWait(&gl, TIME_INFINITE); switch (CheckButtons(pem)) { case BTN_NEXT: break; case BTN_PREV: goto StepCalibrate; case BTN_PLUS: vmt->d.flags |= GMOUSE_VFLG_CAL_EXTREMES; goto StepCalibrate; case BTN_MINUS: vmt->d.flags &= ~GMOUSE_VFLG_CAL_EXTREMES; goto StepCalibrate; default: gwinPrintf(ghc, "%u, %u\n", pem->x, pem->y); continue; } break; } // Reset to just changed movements. geventAttachSource(&gl, gs, GLISTEN_MOUSEDOWNMOVES|GLISTEN_MOUSEMETA); /* * Test: Mouse movement jitter */ StepMovementJitter: DrawHeader("5. Movement Jitter", TRUE, TRUE, TRUE); if (isTouch) gwinPrintf(ghc, "Press firmly on the surface and move around as if to draw.\n\n"); else gwinPrintf(ghc, "Press and hold the mouse button and move around as if to draw.\n\n"); gwinPrintf(ghc, "Dots will display in this window. Ensure that when you stop moving your %s that " "new dots stop displaying.\nNew dots should only display when your %s is moving.\n\n" "Adjust %s movement jitter to the smallest value that this reliably works for.\n\n", deviceText, deviceText, isFingerText); gwinPrintf(ghc, "Movement jitter (%s) = %u\n", isFingerText, pjit->move); gwinPrintf(ghc, "Press + or - to adjust.\n"); gwinPrintf(ghc, "Press Next or Back to continue.\n\n"); while(1) { pem = (GEventMouse *)geventEventWait(&gl, TIME_INFINITE); switch (CheckButtons(pem)) { case BTN_NEXT: break; case BTN_PREV: goto StepMouseCoords; case BTN_PLUS: gwinPrintf(ghc, "Movement jitter (%s) = %u", isFingerText, ++pjit->move); continue; case BTN_MINUS: gwinPrintf(ghc, "Movement jitter (%s) = %u", isFingerText, --pjit->move); continue; default: if ((pem->buttons & GINPUT_MOUSE_BTN_LEFT)) gwinPrintf(ghc, "."); continue; } break; } /* * Test: Click Jitter */ StepClickJitter: gwinClear(ghc); gwinSetColor(ghc, Yellow); gwinPrintf(ghc, "\n6. Click Jitter\n\n"); gwinSetColor(ghc, White); if (isTouch) gwinPrintf(ghc, "Press and release the touch surface to \"click\".\nTry both short and long presses.\n"); else gwinPrintf(ghc, "Click the mouse with the left and right buttons.\n\n"); gwinPrintf(ghc, "A yellow dash is a left (or short) click.\n" "A red x is a right (or long) click.\n\n" "Adjust %s click jitter to the smallest value that this reliably works for.\n" "Note: moving your %s during a click cancels it.\n\n", isFingerText, deviceText); gwinPrintf(ghc, "Click jitter (%s) = %u\n", isFingerText, pjit->click); gwinPrintf(ghc, "Press + or - to adjust.\n"); gwinPrintf(ghc, "Press Next or Back to continue.\n\n"); while(1) { pem = (GEventMouse *)geventEventWait(&gl, TIME_INFINITE); switch (CheckButtons(pem)) { case BTN_NEXT: break; case BTN_PREV: goto StepMovementJitter; case BTN_PLUS: gwinPrintf(ghc, "Click jitter (%s) = %u", isFingerText, ++pjit->click); continue; case BTN_MINUS: gwinPrintf(ghc, "Click jitter (%s) = %u", isFingerText, --pjit->click); continue; default: if ((pem->buttons & GMETA_MOUSE_CLICK)) { gwinSetColor(ghc, Yellow); gwinPrintf(ghc, "-"); } if ((pem->buttons & GMETA_MOUSE_CXTCLICK)) { gwinSetColor(ghc, uRed); gwinPrintf(ghc, "x"); } continue; } break; } /* * Test: Polling frequency */ StepDrawing: gwinClear(ghc); gwinSetColor(ghc, Yellow); gwinPrintf(ghc, "\n7. Drawing\n\n"); gwinSetColor(ghc, White); gwinPrintf(ghc, "Press firmly on the surface (or press and hold the mouse button) and move around as if to draw.\n\n"); gwinPrintf(ghc, "A green line will follow your %s.\n\n", deviceText); gwinPrintf(ghc, "Pressing Next will start the tests again but with the option of changing pen/finger mode.\n\n"); gwinPrintf(ghc, "Press Next or Back to continue.\n\n"); while(1) { pem = (GEventMouse *)geventEventWait(&gl, TIME_INFINITE); if (pem->y < bHeight && pem->x >= swidth-2*bWidth) { if ((pem->buttons & GMETA_MOUSE_UP)) { if (pem->x >= swidth-bWidth) break; goto StepClickJitter; } } gdispDrawPixel(pem->x, pem->y, uGreen); } // Can't let this really exit isFirstTime = FALSE; goto StepDeviceType; }
void TeletextScreen::Pulse(void) { if (!InitialiseFont() || !m_displaying) return; if (m_player && m_player->GetVideoOutput()) { static const float kTextPadding = 0.96f; QRect oldsafe = m_safeArea; m_safeArea = m_player->GetVideoOutput()->GetSafeRect(); m_colWidth = (int)((float)m_safeArea.width() / (float)kTeletextColumns); m_rowHeight = (int)((float)m_safeArea.height() / (float)kTeletextRows); if (oldsafe != m_safeArea) { m_teletextReader->SetPageChanged(true); int max_width = (int)((float)m_colWidth * kTextPadding); m_fontHeight = (int)((float)m_rowHeight * kTextPadding); if (max_width > (m_colWidth - 2)) max_width = m_colWidth -2; if (m_fontHeight > (m_rowHeight - 2)) m_fontHeight = m_rowHeight - 2; gTTFont->GetFace()->setPixelSize(m_fontHeight); m_fontStretch = 200; bool ok = false; while (!ok && m_fontStretch > 50) { gTTFont->GetFace()->setStretch(m_fontStretch); QFontMetrics font(*(gTTFont->GetFace())); if (font.averageCharWidth() <= max_width || m_fontStretch < 50) ok = true; else m_fontStretch -= 10; } } } else { return; } if (!m_teletextReader->PageChanged()) return; ClearScreen(); const TeletextSubPage *ttpage = m_teletextReader->FindSubPage(); if (!ttpage) { // no page selected so show the header and a list of available pages DrawHeader(NULL, 0); m_teletextReader->SetPageChanged(false); OptimiseDisplayedArea(); return; } m_teletextReader->SetSubPage(ttpage->subpagenum); int a = 0; if ((ttpage->subtitle) || (ttpage->flags & (TP_SUPPRESS_HEADER | TP_NEWSFLASH | TP_SUBTITLE))) { a = 1; // when showing subtitles we don't want to see the teletext // header line, so we skip that line... m_teletextReader->SetShowHeader(false); m_teletextReader->SetIsSubtitle(true); } else { m_teletextReader->SetShowHeader(true); m_teletextReader->SetIsSubtitle(false); DrawHeader(m_teletextReader->GetHeader(), ttpage->lang); m_teletextReader->SetHeaderChanged(false); } for (int y = kTeletextRows - a; y >= 2; y--) DrawLine(ttpage->data[y-1], y, ttpage->lang); m_teletextReader->SetPageChanged(false); OptimiseDisplayedArea(); }
// Draw the client area void CBalloonHelp::DrawClientArea(CDC* pDC) { CSize sizeHeader = DrawHeader(pDC); DrawContent(pDC, sizeHeader.cy+nTIP_MARGIN); }
static LRESULT CALLBACK HeaderProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) { switch (Message) { case WM_CREATE: return 0; case WM_VSCROLL: SendMessage(GetParent(hwnd), Message, wParam, lParam); return 0; case WM_PAINT: { HDC hdc; PAINTSTRUCT ps; TCHAR pszText[32]; RECT rc; ep_settings *eps = (ep_settings*) GetWindowLongPtr(hwnd, GWLP_USERDATA); GetWindowText(GetParent(hwnd), pszText, sizeof(pszText)); hdc = BeginPaint(hwnd, &ps); GetClientRect(hwnd, &rc); FillRect(hdc, &rc, GetStockBrush(WHITE_BRUSH)); if (eps->bHot) { DrawItemSelection(hdc, &rc, TRUE, FALSE, 130); } DrawHeader(hdc, pszText, 0, rc.right - rc.left); EndPaint(hwnd, &ps); return 0; } case WM_MOUSEWHEEL: SendMessage(GetParent(hwnd), Message, wParam, lParam); return 0; case WM_COMMAND: { ep_settings *eps = (ep_settings*) GetWindowLongPtr(hwnd, GWLP_USERDATA); switch (HIWORD(wParam)) { case BN_CLICKED: { switch (eps->ExpandState) { case EP_CLOSED: eps->ExpandState = EP_OPENING; SetTimer(GetParent(hwnd), 0, 20, NULL); eps->SlideSpeed = 0.0; break; case EP_OPEN: eps->ExpandState = EP_CLOSING; SetTimer(GetParent(hwnd), 0, 20, NULL); eps->SlideSpeed = 0.0; break; case EP_OPENING: eps->ExpandState = EP_CLOSING; break; case EP_CLOSING: eps->ExpandState = EP_OPENING; break; } RECT rc; GetClientRect(hwnd, &rc); //InvalidateRect(hwnd, NULL, TRUE); //InvalidateRect(GetParent(hwnd), NULL, TRUE); return 0; } } return 0; } default: return DefWindowProc(hwnd, Message, wParam, lParam); } }
void GroupedIconView::paintEvent(QPaintEvent* e) { // This code was adapted from QListView::paintEvent(), changed to use the // visualRect() of items, and to draw headers. QStyleOptionViewItemV4 option(viewOptions()); if (isWrapping()) option.features = QStyleOptionViewItemV2::WrapText; option.locale = locale(); option.locale.setNumberOptions(QLocale::OmitGroupSeparator); option.widget = this; QPainter painter(viewport()); const QRect viewport_rect(e->rect().translated(horizontalOffset(), verticalOffset())); QVector<QModelIndex> toBeRendered = IntersectingItems(viewport_rect); const QModelIndex current = currentIndex(); const QAbstractItemModel *itemModel = model(); const QItemSelectionModel *selections = selectionModel(); const bool focus = (hasFocus() || viewport()->hasFocus()) && current.isValid(); const QStyle::State state = option.state; const QAbstractItemView::State viewState = this->state(); const bool enabled = (state & QStyle::State_Enabled) != 0; int maxSize = (flow() == TopToBottom) ? viewport()->size().width() - 2 * spacing() : viewport()->size().height() - 2 * spacing(); QVector<QModelIndex>::const_iterator end = toBeRendered.constEnd(); for (QVector<QModelIndex>::const_iterator it = toBeRendered.constBegin(); it != end; ++it) { if (!it->isValid()) { continue; } option.rect = visualRect(*it); if (flow() == TopToBottom) option.rect.setWidth(qMin(maxSize, option.rect.width())); else option.rect.setHeight(qMin(maxSize, option.rect.height())); option.state = state; if (selections && selections->isSelected(*it)) option.state |= QStyle::State_Selected; if (enabled) { QPalette::ColorGroup cg; if ((itemModel->flags(*it) & Qt::ItemIsEnabled) == 0) { option.state &= ~QStyle::State_Enabled; cg = QPalette::Disabled; } else { cg = QPalette::Normal; } option.palette.setCurrentColorGroup(cg); } if (focus && current == *it) { option.state |= QStyle::State_HasFocus; if (viewState == EditingState) option.state |= QStyle::State_Editing; } itemDelegate()->paint(&painter, option, *it); } // Draw headers foreach (const Header& header, headers_) { const QRect header_rect = QRect( header_indent_, header.y, viewport()->width() - header_indent_ * 2, header_height()); // Is this header contained in the area we're drawing? if (!header_rect.intersects(viewport_rect)) { continue; } // Draw the header DrawHeader(model()->index(header.first_row, 0), header_rect.translated(-horizontalOffset(), -verticalOffset()), &painter); } }
void CBCGPPlannerPrintMonth::OnDrawHeader (CDC* pDC, const CRect& rectHeader) { ASSERT_VALID (pDC); const int dxColumn = m_ViewRects [0].Width (); CRect rectDayCaption (rectHeader); DrawHeader (pDC, rectDayCaption, dxColumn); rectDayCaption.right = rectDayCaption.left + dxColumn; COleDateTime day ( GetFirstWeekDay2 (m_Date, CBCGPPlannerManagerCtrl::GetFirstDayOfWeek () + 1) ); const int nEnd = m_bCompressWeekend ? 6 : 7; CStringArray sa; sa.SetSize (nEnd); int iColumn = 0; for (iColumn = 0; iColumn < nEnd; iColumn++) { CString strDate; if (IsCompressWeekend () && day.GetDayOfWeek () == 7) { for (int i = 0; i < 2; i++) { CString strTemp; strTemp.GetBuffer (_MAX_PATH); SYSTEMTIME st; day.GetAsSystemTime (st); ::GetDateFormat (LOCALE_USER_DEFAULT, 0, &st, _T("ddd"), (LPTSTR)(LPCTSTR)strTemp, _MAX_PATH); strTemp.ReleaseBuffer (); strDate += strTemp; if (i == 0) { strDate += _T("/"); } day += COleDateTimeSpan (1, 0, 0, 0); } } else { strDate.GetBuffer (_MAX_PATH); SYSTEMTIME st; day.GetAsSystemTime (st); ::GetDateFormat (LOCALE_USER_DEFAULT, 0, &st, m_strCaptionFormat, (LPTSTR)(LPCTSTR)strDate, _MAX_PATH); strDate.ReleaseBuffer (); day += COleDateTimeSpan (1, 0, 0, 0); } sa.SetAt (iColumn, strDate); } for (iColumn = 0; iColumn < nEnd; iColumn++) { DrawCaption (pDC, rectDayCaption, sa[iColumn], TRUE, TRUE, m_brGray); rectDayCaption.OffsetRect (dxColumn + m_OnePoint.cx, 0); } }
void CTBHeaderCtrl::OnPaint() { CPaintDC dcPaint(this); // device context for painting DrawHeader(&dcPaint); }