NS_IMETHODIMP nsImageLoader::OnStopFrame(imgIRequest *aRequest, PRUint32 aFrame) { if (!mFrame) return NS_ERROR_FAILURE; if (!mRequest) { // We're in the middle of a paint anyway return NS_OK; } // Take requested actions if (mActions & ACTION_REFLOW_ON_DECODE) { DoReflow(); } if (mActions & ACTION_REDRAW_ON_DECODE) { DoRedraw(nsnull); } return NS_OK; }
nsresult ImageLoader::OnFrameComplete(imgIRequest* aRequest) { if (!mDocument || mInClone) { return NS_OK; } FrameSet* frameSet = nullptr; if (!mRequestToFrameMap.Get(aRequest, &frameSet)) { return NS_OK; } NS_ASSERTION(frameSet, "This should never be null!"); // Since we just finished decoding a frame, we always want to paint, in case // we're now able to paint an image that we couldn't paint before (and hence // that we don't have retained data for). DoRedraw(frameSet, /* aForcePaint = */ true); return NS_OK; }
NS_IMETHODIMP nsImageLoader::FrameChanged(imgIRequest *aRequest, imgIContainer *aContainer, const nsIntRect *aDirtyRect) { if (!mFrame) return NS_ERROR_FAILURE; if (!mRequest) { // We're in the middle of a paint anyway return NS_OK; } NS_ASSERTION(aRequest == mRequest, "This is a neat trick."); nsRect r = aDirtyRect->IsEqualInterior(nsIntRect::GetMaxSizedIntRect()) ? nsRect(nsPoint(0, 0), mFrame->GetSize()) : aDirtyRect->ToAppUnits(nsPresContext::AppUnitsPerCSSPixel()); DoRedraw(&r); return NS_OK; }
void CGraphPanel::UpdateGraphWindow(LPCRECT rect) { if(!offscreen) { return; }; CRect r; if (rect==NULL) GetClientRect(&r); else r.CopyRect(rect); //do paint here CDC* dc = offscreen->GetDibCDC(); if (dc != NULL) { CRect rect_to_draw; GetClientRect(rect_to_draw); DrawToDC(dc, rect_to_draw); offscreen->SetReady(TRUE); }; CDC* cdc = GetDC(); DoRedraw(cdc, &r); ReleaseDC(cdc); }
void CGraphPanel::AddPoint(SGraphChange* sgc) { //get main view pointer if (sgc->main_wnd_ptr == NULL) return; SSinglePoint ssp; CGraphProps* sgp = sgc->main_wnd_ptr->GetGraph(sgc->graphnum); if (!sgp->IsVisible()) { //if graph is not visible - do not do anything here return; }; sgp->GetPoint(sgc->index, &ssp); BOOL bNeedRedraw = FALSE; if ((unsigned long)(m_grflags & GRAPH_AUTOSCALE)) { //if grafix is autoscaled - just recalc coordinates and redraw the window if (ssp.x<__min(GetX1(), GetX2())) { SetMinX(ssp.x, FALSE); bNeedRedraw = TRUE; }; if (ssp.x>__max(GetX1(), GetX2())) { SetMaxX(ssp.x, FALSE); bNeedRedraw = TRUE; }; if (ssp.y<__min(GetY1(), GetY2())) { SetMinY(ssp.y, FALSE); bNeedRedraw = TRUE; }; if (ssp.y>__max(GetY1(), GetY2())) { SetMaxY(ssp.y, FALSE); bNeedRedraw = TRUE; }; }; //draw new point if (bNeedRedraw) { if (sgc->bRedraw) { UpdateGraphWindow(NULL); }; return; }; if (!sgc->bRedraw || offscreen == NULL) return; //if point is inside the graph - we need invalidate the whole picture if (sgc->index!=0 && sgc->index!=sgp->GetSize()-1) { if (sgc->bRedraw) { UpdateGraphWindow(NULL); }; return; }; int x, y, x1, y1; x = (int)CurrentCoordsX->WtoX(ssp.x); y = (int)CurrentCoordsY->WtoX(ssp.y); CDC* dc = offscreen->GetDibCDC(); if (dc != NULL) { CDC* cdc = GetDC(); CPen* pen = sgp->GetPen(); CBrush* brush = sgp->GetBrush(); CPen* oldpen = (CPen*)dc->SelectObject(pen); CBrush* oldbrush = (CBrush*)dc->SelectObject(brush); if (sgp->GetSize()>1) { if (sgc->index == 0) sgp->GetPoint(1, &ssp); if (sgc->index == sgp->GetSize()-1) sgp->GetPoint(sgc->index-1, &ssp); x1 = (int)CurrentCoordsX->WtoX(ssp.x); y1 = (int)CurrentCoordsY->WtoX(ssp.y); if (x != x1 || y != y1) { if ((m_grflags & GRAPH_GRAPH_SCATTER) == 0) { dc->MoveTo(x, y); dc->LineTo(x1, y1); }; if ((m_grflags & GRAPH_SQUAREPOINTS) != 0) { DrawSquarePoint(dc, x, y); }; CRect update_rect(x, y, x1, y1); update_rect.NormalizeRect(); update_rect.InflateRect(GetSquareSide(dc) + 2, GetSquareSide(dc) + 2); DoRedraw(cdc, update_rect); }; } else { if ((m_grflags & GRAPH_SQUAREPOINTS) != 0) { DrawSquarePoint(dc, x, y); CRect update_rect(x, y, x, y); update_rect.NormalizeRect(); update_rect.InflateRect(GetSquareSide(dc) + 2, GetSquareSide(dc) + 2); DoRedraw(cdc, update_rect); }; }; dc->SelectObject(oldpen); dc->SelectObject(oldbrush); sgp->ReleasePen(pen); sgp->ReleaseBrush(brush); ReleaseDC(cdc); }; }
/* MAIN() * ================================================================ */ VOID main( VOID ) { WORD button; BOOLEAN done; OBJECT *tree; appl_init(); phys_handle = graf_handle( &gl_wchar, &gl_hchar, &gl_wbox, &gl_hbox ); open_vwork(); graf_mouse( ARROW, 0L ); rsrc_load( "DEMO.RSC" ); rsrc_gaddr( 0, MENUBAR, &ad_menubar ); rsrc_gaddr( 0, ATREE, &ad_tree ); rsrc_gaddr( 0, FONTTREE, &ad_fonts ); rsrc_gaddr( 0, STREE, &ad_style ); rsrc_gaddr( 0, POSTREE, &ad_position ); rsrc_gaddr( 0, CTREE, &ad_color ); rsrc_gaddr( 0, PTREE, &ad_pattern ); rsrc_gaddr( 0, MTREE, &ad_modem ); rsrc_gaddr( 0, BAUDRATE, &ad_baudrate ); rsrc_gaddr( 0, PARTREE, &ad_parity ); rsrc_gaddr( 0, BITTREE, &ad_bittree ); rsrc_gaddr( 0, STOPTREE, &ad_stoptree ); rsrc_gaddr( 0, PORTTREE, &ad_porttree ); rsrc_gaddr( 0, FLOWTREE, &ad_flowtree ); rsrc_gaddr( 0, LTREE, &ad_list ); rsrc_gaddr( 0, TOOLBOX, &ad_tools ); rsrc_gaddr( 0, BLANK, &ad_blank ); rsrc_gaddr( 0, TOOLBOX2, &ad_box2 ); rsrc_gaddr( 0, TOOLBAR, &ad_box3 ); rsrc_gaddr( 0, FONT2, &ad_font2 ); /* Attach all Submenus that are being attached */ AttachMenus(); /* CheckMark the Current Menu Items in their respective menus */ menu_icheck( ad_baudrate, CurBaudRate, 1 ); menu_icheck( ad_parity, CurParity, 1 ); menu_icheck( ad_bittree, CurBits, 1 ); menu_icheck( ad_stoptree, CurStopBits, 1 ); menu_icheck( ad_porttree, CurPort, 1 ); menu_icheck( ad_flowtree, CurFlow, 1 ); menu_icheck( ad_style, CurStyle, 1 ); menu_icheck( ad_position, CurPos, 1 ); menu_icheck( ad_fonts, CurFonts, 1 ); menu_icheck( ad_font2, CurFont2, 1 ); /* display menubar stuff here */ menu_bar( ad_menubar, TRUE ); /* initialize windows */ wind_get( 0, WF_FULLXYWH, &desk.g_x, &desk.g_y, &desk.g_w, &desk.g_h ); cur_tree = ad_tools; menu_flag = TRUE; /* Set Toggle Flags */ SubFlag = TRUE; ToolFlag = TRUE; CurRect.g_x = desk.g_x; CurRect.g_y = desk.g_y; CurRect.g_w = 320; CurRect.g_h = 200; InitObjects(); InitWindow(); menu_ienable( ad_menubar, FOPEN, 0 ); menu_ienable( ad_menubar, FCLOSE, 1 ); done = FALSE; do { evnt_mesag( msg ); wind_update( BEG_UPDATE ); if( msg[0] == MN_SELECTED ) { /* msg[7] is the parent of FQUIT - which the user can't know */ ptr = ( OBJECT **)&msg[5]; if( *ptr == ad_menubar ) { switch( msg[4] ) { case FQUIT: button = form_alert( 1, "[1][ | EXIT PROGRAM? ][OK|Cancel]"); if( button == 1 ) done = TRUE; break; case ABOUTX: execform( ad_tree, 0 ); break; case PHONE: do_modem(); break; case TABOUT: /* Enable, Disable About PLUS change TEXT */ menu_flag ^= 1; menu_ienable( ad_menubar, ABOUTX, menu_flag ); menu_text( ad_menubar, TABOUT, TextAbout[ menu_flag ] ); if( menu_flag ) menu_text( ad_menubar, ABOUTX, " About Demo... " ); else menu_text( ad_menubar, ABOUTX, " Disabled... " ); break; case TSUB: /* Enable/Disable all Submenus */ SubFlag ^= 1; menu_text( ad_menubar, TSUB, TextSubMenu[ SubFlag ] ); if( SubFlag ) AttachMenus(); else DetachMenus(); break; case SLISTS: DoList(); /* Do A Drop Down List Dialog */ break; case TOOLFLAG: /* Enable/Disable ToolBox */ ToolFlag ^= 1; menu_text( ad_menubar, TOOLFLAG, TextToolBox[ ToolFlag ] ); if( ToolFlag ) { *( (LONG *)&tree_data[0] ) = ( LONG )cur_tree; wind_set( wid, WF_TOOLBAR, tree_data[0], tree_data[1], dummy, dummy ); } else wind_set( wid, WF_TOOLBAR, 0, 0, dummy, dummy ); break; case SWITCH: /* Switch ToolBoxes */ if( cur_tree == ad_tools ) cur_tree = ad_box2; else if( cur_tree == ad_box2 ) { cur_tree = ad_box3; ActiveTree( ad_fonts ); textptr = ObString( CurFonts ); strncpy( &tbuff[0], &textptr[1], 28 ); ActiveTree( ad_box3 ); TedText( FBUTT1 ) = &tbuff[0]; } else cur_tree = ad_tools; *( (LONG *)&tree_data[0] ) = ( LONG )cur_tree; ToolFlag = TRUE; menu_text( ad_menubar, TOOLFLAG, TextToolBox[ ToolFlag ] ); wind_set( wid, WF_TOOLBAR, tree_data[0], tree_data[1], dummy, dummy ); break; case FCLOSE: /* close Window */ if( wid ) { wind_get( wid, WF_CURRXYWH, &CurRect.g_x, &CurRect.g_y, &CurRect.g_w, &CurRect.g_h ); wind_close( wid ); wind_delete( wid ); wid = 0; menu_ienable( ad_menubar, FCLOSE, 0 ); menu_ienable( ad_menubar, FOPEN, 1 ); } break; case FOPEN: /* open Window */ if( !wid ) { InitWindow(); menu_ienable( ad_menubar, FOPEN, 0 ); menu_ienable( ad_menubar, FCLOSE, 1 ); } break; default: break; } } /* MENU SELECTED -> Font Style Menu Clicked on as a SUBMENU from the Menubar*/ if( *ptr == ad_style ) { menu_icheck( ad_style, CurStyle, 0 ); /* Turn OFF Old Checkmark */ menu_icheck( ad_style, msg[4], 1 ); /* Turn ON New CheckMark */ CurStyle = msg[4]; /* Update Current Var */ menu_istart( 1, ad_style, ROOT, CurStyle ); /* Reset Starting Position*/ } /* MENU SELECTED -> Font Position Clicked on as a SUBMENU from the menubar */ if( *ptr == ad_position ) { menu_icheck( ad_position, CurPos, 0 ); menu_icheck( ad_position, msg[4], 1 ); CurPos = msg[4]; menu_istart( 1, ad_position, ROOT, CurPos ); } /* MENU SELECTED -> Fonts Menu Clicked on as a SUBMENU from the menubar */ if( *ptr == ad_fonts ) { menu_icheck( ad_fonts, CurFonts, 0 ); menu_icheck( ad_fonts, msg[4], 1 ); CurFonts = msg[4]; menu_istart( 1, ad_fonts, ROOT, CurFonts ); } menu_tnormal( ad_menubar, msg[3], TRUE ); } if( msg[0] != MN_SELECTED ) { switch( msg[0] ) { case WM_FULLED: DoFull( msg[3] ); break; case WM_REDRAW: DoRedraw( msg ); break; case WM_ARROWED: case WM_HSLID: case WM_VSLID: break; case WM_MOVED: if( msg[3] == wid ) { wind_set( wid, WF_CURRXYWH, msg[4], msg[5], msg[6], msg[7] ); } break; case WM_TOPPED: if( msg[3] == wid ) { wind_set( wid, WF_TOP ); } break; case WM_CLOSED: if( msg[3] == wid ) { wind_get( wid, WF_CURRXYWH, &CurRect.g_x, &CurRect.g_y, &CurRect.g_w, &CurRect.g_h ); wind_close( wid ); wind_delete( wid ); wid = 0; menu_ienable( ad_menubar, FCLOSE, 0 ); menu_ienable( ad_menubar, FOPEN, 1 ); } break; case WM_SIZED: DoSizer( msg ); break; case WM_TOOLBAR: if( msg[3] == wid ) { /* Button Handling for ToolBox #1 */ if( cur_tree == ad_tools ) { switch( msg[4] ) { case T1B1: button = B1B1; break; case T1B2: button = B1B2; break; case T1B3: button = B1B3; break; case T1B4: button = B1B4; break; case T1B5: button = B1B5; break; } } /* Button Handling for TOOLBOX 2 */ if( cur_tree == ad_box2 ) { switch( msg[4] ) { case T2I1: button = T2B1; break; case T2I2: button = T2B2; break; case T2I3: button = T2B3; break; case T2I4: button = T2B4; break; case T2I5: button = T2B5; break; } } /* Word Processing Tree */ if( cur_tree == ad_box3 ) { switch( msg[4] ) { case FBUTT1: case FBUTT2: DoFonts(); break; default: break; } } if( cur_tree != ad_box3 ) { if( cur_tree[ button ].ob_state & SELECTED ) cur_tree[ button ].ob_state &= ~SELECTED; else cur_tree[ button ].ob_state |= SELECTED; objc_offset( cur_tree, button, &r.g_x, &r.g_y ); r.g_x -= 2; r.g_y -= 2; r.g_w = cur_tree[ button ].ob_width + 4; r.g_h = cur_tree[ button ].ob_height + 4; do_redraw( cur_tree, button, &r ); } } /* end of msg[3] == wid */ break; case WM_ICONIFY: if( msg[3] == wid ) wind_set( msg[3], WF_ICONIFY, msg[4], msg[5], msg[6], msg[7] ); break; case WM_UNICONIFY: if( msg[3] == wid ) wind_set( msg[3], WF_UNICONIFY, msg[4], msg[5], msg[6], msg[7] ); break; default: break; } /* end of switch */ } wind_update( END_UPDATE ); }while( !done ); if( wid > 0 ) wind_delete( wid ); menu_bar( ad_menubar, FALSE ); graf_mouse( ARROW, 0L ); rsrc_free(); close_vwork(); appl_exit(); }