⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 graph.c

📁 ucgui的3.98版本的源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
      GUI_DEBUG_ERROROUT("GRAPH.c: Wrong handle type or Object not init'ed");
      return 0;
    }
  }
  return p;
}
#endif

/*********************************************************************
*
*       Exported routines:  Private functions
*
**********************************************************************
*/
/*********************************************************************
*
*       GRAPH__AddValue
*/
void GRAPH__AddValue(GRAPH_DATA_OBJ * pDataObj, void * pData, void * pValue, int Size) {
  if (pDataObj->PaintObj.hGraph) {
    if (pDataObj->NumItems == pDataObj->MaxNumItems) {
      memmove((U8 *)pData, (U8 *)pData + Size, Size * (pDataObj->MaxNumItems - 1));
      memmove((U8 *)pData + Size * (pDataObj->NumItems - 1), pValue, Size);
    } else {
      memmove((U8 *)pData + Size * pDataObj->NumItems++, pValue, Size);
    }
    _InvalidateGraph(pDataObj->PaintObj.hGraph);
  }
}

/*********************************************************************
*
*       Exported routines:  Callback
*
**********************************************************************
*/
/*********************************************************************
*
*       GRAPH_Callback
*/
void GRAPH_Callback (WM_MESSAGE * pMsg) {
  int Result, ManageScrollBars = 0;
  GRAPH_Handle hObj;
  GRAPH_OBJ  * pObj;
  hObj = pMsg->hWin;
  pObj = (GRAPH_OBJ *)GUI_ALLOC_h2p(hObj); /* Don't use use WIDGET_H2P because WIDGET_INIT_ID() has not be called at this point */
  /* Let widget handle the standard messages */
  if (pMsg->MsgId == WM_WIDGET_SET_EFFECT) {
    ManageScrollBars = 1;
  }
  Result = WIDGET_HandleActive(hObj, pMsg);
  if (ManageScrollBars) {
    _ManageScrollBars(pObj, hObj);
  }
  if (!Result) {
    return;
  }
  switch (pMsg->MsgId) {
  case WM_SIZE:
    _ManageScrollBars(pObj, hObj);
    break;
  case WM_PAINT:
    _OnPaint(pObj, hObj, (GUI_RECT *)pMsg->Data.p);
    return;
  case WM_DELETE:
    _OnDelete(pObj);
    return;
  case WM_NOTIFY_PARENT:
    switch (pMsg->Data.v) {
    case WM_NOTIFICATION_VALUE_CHANGED:
      if (pMsg->hWinSrc  == WM_GetScrollbarV(hObj)) {
        _OnScrollValueChanged(pObj, pMsg->hWin, pMsg->hWinSrc);
      } else if (pMsg->hWinSrc == WM_GetScrollbarH(hObj)) {
        _OnScrollValueChanged(pObj, pMsg->hWin, pMsg->hWinSrc);
      }
      break;
    case WM_NOTIFICATION_SCROLLBAR_ADDED:
      #if WIDGET_USE_PARENT_EFFECT
        WIDGET_SetEffect(pMsg->hWinSrc, pObj->Widget.pEffect);
      #endif
      break;
    }
  }
  WM_DefaultProc(pMsg);
}

/*********************************************************************
*
*       Exported routines:  Create
*
**********************************************************************
*/
/*********************************************************************
*
*       GRAPH_CreateEx
*/
GRAPH_Handle GRAPH_CreateEx(int x0, int y0, int xsize, int ysize, WM_HWIN hParent,
                            int WinFlags, int ExFlags, int Id)
{
  GRAPH_Handle hObj;
  WM_LOCK();
  hObj = WM_CreateWindowAsChild(x0, y0, xsize, ysize, hParent, WinFlags, GRAPH_Callback,
                                sizeof(GRAPH_OBJ) - sizeof(WM_Obj));
  if (hObj) {
    GRAPH_OBJ * pObj;
    pObj = (GRAPH_OBJ *)GUI_ALLOC_h2p(hObj); /* Don't use use WIDGET_H2P because WIDGET_INIT_ID() has not be called at this point */
    /* Init sub-classes */
    GUI_ARRAY_CREATE(&pObj->GraphArray);
    GUI_ARRAY_CREATE(&pObj->ScaleArray);
    /* Init widget specific variables */
    WIDGET__Init(&pObj->Widget, Id, 0);
    /* Init member variables */
    GRAPH_INIT_ID(pObj);
    pObj->Props = GRAPH__DefaultProps;
    pObj->Flags = ExFlags;
  }
  WM_UNLOCK();
  return hObj;
}

/*********************************************************************
*
*       GRAPH_AttachData
*/
void GRAPH_AttachData(GRAPH_Handle hObj, GRAPH_DATA_Handle hData) {
  if (hObj) {
    GRAPH_OBJ * pObj;
    GRAPH_DATA_OBJ * pDataObj;
    WM_LOCK();
    pObj = GRAPH_H2P(hObj);
    pDataObj = (GRAPH_DATA_OBJ *)GUI_ALLOC_h2p(hData);
    pDataObj->PaintObj.hGraph = hObj;
    GUI_ARRAY_AddItem(&pObj->GraphArray, &hData, sizeof(GRAPH_DATA_Handle));
    WM_InvalidateWindow(hObj);
    WM_UNLOCK();
  }
}

/*********************************************************************
*
*       GRAPH_AttachScale
*/
void GRAPH_AttachScale(GRAPH_Handle hObj, GRAPH_SCALE_Handle hScale) {
  if (hObj) {
    GRAPH_OBJ * pObj;
    GRAPH_SCALE_OBJ * pScaleObj;
    WM_LOCK();
    pObj = GRAPH_H2P(hObj);
    pScaleObj = (GRAPH_SCALE_OBJ *)GUI_ALLOC_h2p(hScale);
    pScaleObj->PaintObj.hGraph = hObj;
    GUI_ARRAY_AddItem(&pObj->ScaleArray, &hScale, sizeof(GRAPH_SCALE_Handle));
    WM_InvalidateWindow(hObj);
    WM_UNLOCK();
  }
}

/*********************************************************************
*
*       GRAPH_SetColor
*/
GUI_COLOR GRAPH_SetColor(GRAPH_Handle hObj, GUI_COLOR Color, unsigned Index) {
  GUI_COLOR OldColor = 0;
  if (hObj) {
    GRAPH_OBJ * pObj;
    WM_LOCK();
    pObj = GRAPH_H2P(hObj);
    if (Index < GUI_COUNTOF(pObj->Props.aColor)) {
      OldColor = pObj->Props.aColor[Index];
      if (pObj->Props.aColor[Index] != Color) {
        pObj->Props.aColor[Index] = Color;
        WM_InvalidateWindow(hObj);
      }
    }
    WM_UNLOCK();
  }
  return OldColor;
}

/*********************************************************************
*
*       GRAPH_SetGridVis
*/
unsigned GRAPH_SetGridVis(GRAPH_Handle hObj, unsigned OnOff) {
  unsigned OldValue = 0;
  if (hObj) {
    GRAPH_OBJ * pObj;
    WM_LOCK();
    pObj = GRAPH_H2P(hObj);
    OldValue = pObj->ShowGrid;
    if ((unsigned)pObj->ShowGrid != OnOff) {
      pObj->ShowGrid = OnOff ? 1 : 0;
      WM_InvalidateWindow(hObj);
    }
    WM_UNLOCK();
  }
  return OldValue;
}

/*********************************************************************
*
*       GRAPH_SetGridDistX
*/
unsigned GRAPH_SetGridDistX(GRAPH_Handle hObj, unsigned Value) {
  unsigned OldValue = 0;
  if (hObj) {
    GRAPH_OBJ * pObj;
    WM_LOCK();
    pObj = GRAPH_H2P(hObj);
    OldValue = pObj->Props.GridSpacingX;
    if (pObj->Props.GridSpacingX != Value) {
      pObj->Props.GridSpacingX = Value;
      WM_InvalidateWindow(hObj);
    }
    WM_UNLOCK();
  }
  return OldValue;
}

/*********************************************************************
*
*       GRAPH_SetGridDistY
*/
unsigned GRAPH_SetGridDistY(GRAPH_Handle hObj, unsigned Value) {
  unsigned OldValue = 0;
  if (hObj) {
    GRAPH_OBJ * pObj;
    WM_LOCK();
    pObj = GRAPH_H2P(hObj);
    OldValue = pObj->Props.GridSpacingY;
    if (pObj->Props.GridSpacingY != Value) {
      pObj->Props.GridSpacingY = Value;
      WM_InvalidateWindow(hObj);
    }
    WM_UNLOCK();
  }
  return OldValue;
}

/*********************************************************************
*
*       GRAPH_SetGridOffY
*/
unsigned GRAPH_SetGridOffY(GRAPH_Handle hObj, unsigned Value) {
  unsigned OldValue = 0;
  if (hObj) {
    WM_LOCK();
    OldValue = _SetGridOffY(GRAPH_H2P(hObj), hObj, Value);
    WM_UNLOCK();
  }
  return OldValue;
}

/*********************************************************************
*
*       GRAPH_SetBorder
*/
void GRAPH_SetBorder(GRAPH_Handle hObj, unsigned BorderL, unsigned BorderT, unsigned BorderR, unsigned BorderB) {
  if (hObj) {
    GRAPH_OBJ * pObj;
    WM_LOCK();
    pObj = GRAPH_H2P(hObj);
    pObj->Props.BorderL = BorderL;
    pObj->Props.BorderT = BorderT;
    pObj->Props.BorderR = BorderR;
    pObj->Props.BorderB = BorderB;
    _ManageScrollBars(pObj, hObj);
    WM_InvalidateWindow(hObj);
    WM_UNLOCK();
  }
}

/*********************************************************************
*
*       GRAPH_SetUserDraw
*/
void GRAPH_SetUserDraw(GRAPH_Handle hObj, void (* pUserDraw)(WM_HWIN hObj, int Stage)) {
  if (hObj) {
    GRAPH_OBJ * pObj;
    WM_LOCK();
    pObj = GRAPH_H2P(hObj);
    pObj->pUserDraw = pUserDraw;
    WM_InvalidateWindow(hObj);
    WM_UNLOCK();
  }
}

/*********************************************************************
*
*       GRAPH_SetVSizeX
*/
unsigned GRAPH_SetVSizeX(GRAPH_Handle hObj, unsigned Value) {
  unsigned OldValue = 0;
  if (hObj) {
    GRAPH_OBJ * pObj;
    WM_LOCK();
    pObj = GRAPH_H2P(hObj);
    OldValue = pObj->RangeX;
    if (pObj->RangeX != Value) {
      pObj->RangeX = Value;
      _ManageScrollBars(pObj, hObj);
      WM_InvalidateWindow(hObj);
    }
    WM_UNLOCK();
  }
  return OldValue;
}

/*********************************************************************
*
*       GRAPH_SetVSizeY
*/
unsigned GRAPH_SetVSizeY(GRAPH_Handle hObj, unsigned Value) {
  unsigned OldValue = 0;
  if (hObj) {
    GRAPH_OBJ * pObj;
    WM_LOCK();
    pObj = GRAPH_H2P(hObj);
    OldValue = pObj->RangeY;
    if (pObj->RangeY != Value) {
      pObj->RangeY = Value;
      _ManageScrollBars(pObj, hObj);
      WM_InvalidateWindow(hObj);
    }
    WM_UNLOCK();
  }
  return OldValue;
}

/*********************************************************************
*
*       GRAPH_SetGridFixedX
*/
unsigned GRAPH_SetGridFixedX(GRAPH_Handle hObj, unsigned OnOff) {
  unsigned OldValue = 0;
  if (hObj) {
    GRAPH_OBJ * pObj;
    WM_LOCK();
    pObj = GRAPH_H2P(hObj);
    OldValue = (pObj->Flags & GRAPH_CF_GRID_FIXED_X) ? 1 : 0;
    if (OldValue & !OnOff) {
      pObj->Flags &= ~GRAPH_CF_GRID_FIXED_X;
      WM_InvalidateWindow(hObj);
    } else if (!OldValue & OnOff) {
      pObj->Flags |= GRAPH_CF_GRID_FIXED_X;
      WM_InvalidateWindow(hObj);
    }
    WM_UNLOCK();
  }
  return OldValue;
}

/*********************************************************************
*
*       GRAPH_SetLineStyleH
*/
U8 GRAPH_SetLineStyleH(GRAPH_Handle hObj, U8 Value) {
  U8 OldValue = 0;
  if (hObj) {
    GRAPH_OBJ * pObj;
    WM_LOCK();
    pObj = GRAPH_H2P(hObj);
    OldValue = pObj->LineStyleH;
    if (OldValue != Value) {
      pObj->LineStyleH = Value;
      WM_InvalidateWindow(hObj);
    }
    WM_UNLOCK();
  }
  return OldValue;
}

/*********************************************************************
*
*       GRAPH_SetLineStyleV
*/
U8 GRAPH_SetLineStyleV(GRAPH_Handle hObj, U8 Value) {
  U8 OldValue = 0;
  if (hObj) {
    GRAPH_OBJ * pObj;
    WM_LOCK();
    pObj = GRAPH_H2P(hObj);
    OldValue = pObj->LineStyleV;
    if (OldValue != Value) {
      pObj->LineStyleV = Value;
      WM_InvalidateWindow(hObj);
    }
    WM_UNLOCK();
  }
  return OldValue;
}

/*********************************************************************
*
*       GRAPH_SetLineStyle
*/
void GRAPH_SetLineStyle(GRAPH_Handle hObj, U8 Value) {
  GRAPH_SetLineStyleV(hObj, Value);
  GRAPH_SetLineStyleH(hObj, Value);
}


#else                            /* Avoid problems with empty object modules */
  void GRAPH_C(void);
  void GRAPH_C(void) {}
#endif  /* #if GUI_WINSUPPORT */
	 	 			 		    	 				 	  			   	 	 	 	 	 	  	  	      	   		 	 	 		  		  	 		 	  	  			     			       	   	 			  		    	 	     	 				  	 					 	 			   	  	  			 				 		 	 	 			     			 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -