コード例 #1
0
void GUI_DispStringInRect(const char GUI_FAR *s, GUI_RECT* pRect, int TextAlign) {
  #if (GUI_WINSUPPORT)
    const GUI_RECT *pClipRect_Old = NULL;
  #else
    GUI_RECT Rect_Old;
  #endif
  if (s) {
    GUI_LOCK();
    if (pRect) {
      #if (GUI_WINSUPPORT)
        pClipRect_Old = WM_SetUserClipRect(pRect);
      #else
        Rect_Old = GUI_Context.ClipRect;
        LCD_SetClipRectEx(pRect);
      #endif      
    }
    _DispStringInRect(s, pRect, TextAlign);
    #if (GUI_WINSUPPORT)
      WM_SetUserClipRect(pClipRect_Old);
    #else
      LCD_SetClipRectEx(&Rect_Old);
    #endif      
    GUI_UNLOCK();
  }
}
コード例 #2
0
ファイル: GUI_DispStringInRect.c プロジェクト: silview/C100A
void GUI_DispStringInRectMax(const char GUI_UNI_PTR *s, GUI_RECT* pRect, int TextAlign, int MaxLen) {
  GUI_RECT Rect_Old, r;
  if (s && pRect) {
    GUI_LOCK();
    Rect_Old = GUI_Context.ClipRect[GUI_Context.SelLayer];
    GUI__IntersectRects(&r, pRect, &Rect_Old);
    LCD_SetClipRectEx(&r);
    GUI__DispStringInRect(s, pRect, TextAlign, MaxLen);
    LCD_SetClipRectEx(&Rect_Old);
    GUI_UNLOCK();
  }
}
コード例 #3
0
ファイル: wm.c プロジェクト: uKingSky/KingSky
int  WM__GetNextIVR   (void) {
  #if GUI_SUPPORT_CURSOR
    static char _CursorHidden;
  #endif
  /* If WM is not active, we have no rectangles to return */
  if (WM_IsActive==0)
    return 0;
  if (ClipContext.EntranceCnt > 1) {
    ClipContext.EntranceCnt--;
    return 0;
  }
  #if GUI_SUPPORT_CURSOR
    if (_CursorHidden) {
      _CursorHidden = 0;
      (*GUI_CURSOR_pfTempUnhide)(&ClipContext.CurRect);
    }
  #endif
  ++ClipContext.Cnt;
  /* Find next rectangle and use it as ClipRect */
  if (!FindNext_IVR()) {
    ClipContext.EntranceCnt--;  /* This search is over ! */
    return 0;        /* Could not find an other one ! */
  }
  /* Hide cursor if necessary */
  LCD_SetClipRectEx(&ClipContext.CurRect);
  #if GUI_SUPPORT_CURSOR
    if (GUI_CURSOR_pfTempHide) {
      _CursorHidden = 1;
      (*GUI_CURSOR_pfTempHide) ( &ClipContext.CurRect);
    }
  #endif
  return 1;
}
コード例 #4
0
/*********************************************************************
*
*       GUI_DispStringInRectEx
*/
void GUI_DispStringInRectEx(const char GUI_UNI_PTR *s, GUI_RECT* pRect, int TextAlign, int MaxLen, const GUI_ROTATION * pLCD_Api) {
  const GUI_ROTATION * pLCD_ApiOld;
  if (pLCD_Api == GUI_ROTATE_0) {
    /* Do nothing else but calling GUI_DispStringInRectMax if pLCD_Api == GUI_ROTATE_0 */
    GUI_DispStringInRectMax(s, pRect, TextAlign, MaxLen);
  } else {
    #if (!GUI_WINSUPPORT)
      GUI_RECT Rect_Old;
    #else
      const GUI_RECT * pOldClipRect = NULL;
    #endif
    GUI_RECT rClip, rText = {0};
    GUI_LOCK();
    /* Set the clip rectangle */
    if (pRect) {
      rText = *pRect;
      GUI_RectDispString = rText;
      #if (GUI_WINSUPPORT)
        pOldClipRect = WM_SetUserClipRect(pRect);
        if (pOldClipRect) {
          GUI__IntersectRects(&rClip, pRect, pOldClipRect);
          WM_SetUserClipRect(&rClip);
        }
      #else
        Rect_Old = GUI_Context.ClipRect;
        GUI__IntersectRects(&rClip, pRect, &Rect_Old);
        LCD_SetClipRectEx(&rClip);
      #endif
    }
    pLCD_ApiOld = _SetRotation(pLCD_Api);                /* Set the new function pointer for rotating text */
    pLCD_Api->pfRect2TextRect(&rText);                   /* Calculate the text rectangle */
    GUI__DispStringInRect(s, &rText, TextAlign, MaxLen); /* Display the string */
    /* Restore old clipping rectangle */
    #if (GUI_WINSUPPORT)
      WM_SetUserClipRect(pOldClipRect);
    #else
      LCD_SetClipRectEx(&Rect_Old);
    #endif
    _SetRotation(pLCD_ApiOld);
    GUI_UNLOCK();
  }
}
コード例 #5
0
ファイル: WM_SetUserClipRect.c プロジェクト: byxob/calendar
const GUI_RECT* WM_SetUserClipRect(const GUI_RECT* pRect) {
  const GUI_RECT* pRectReturn;
  GUI_RECT r;
  WM_Obj* pAWin;
  WM_LOCK();
  pRectReturn = GUI_Context.WM__pUserClipRect;
  GUI_Context.WM__pUserClipRect = pRect;
/* Activate it ... */
  if (pRect) {
    r = *pRect;
    pAWin = WM_HANDLE2PTR(GUI_Context.hAWin);
    WM__Client2Screen(pAWin, &r);
    LCD_SetClipRectEx(&r);
  } else {
    WM_GetWindowRect(&r);
    LCD_SetClipRectEx(&r);
  }
  WM_UNLOCK();
  return pRectReturn;
}
コード例 #6
0
ファイル: wm.c プロジェクト: uKingSky/KingSky
void WM__SetMaxClipRect(const WM_Obj* pWin) {
  WM_LOCK();
  LCD_SetClipRectEx(&pWin->Rect);
  WM_UNLOCK();
}