コード例 #1
0
/*********************************************************************
*
*       FRAMEWIN_AddMenu
*/
void FRAMEWIN_AddMenu(FRAMEWIN_Handle hObj, WM_HWIN hMenu) {
    if (hObj) {
        FRAMEWIN_Obj* pObj;
        WM_LOCK();
        pObj = FRAMEWIN_H2P(hObj);
        if (pObj) {
            int TitleHeight, BorderSize, IBorderSize = 0;
            int x0, y0, xSize;
            TitleHeight = FRAMEWIN__CalcTitleHeight(pObj);
            BorderSize = pObj->Props.BorderSize;
            if (pObj->Widget.State & FRAMEWIN_SF_TITLEVIS) {
                IBorderSize = pObj->Props.IBorderSize;
            }
            x0     = BorderSize;
            y0     = BorderSize + TitleHeight + IBorderSize;
            xSize  = WM__GetWindowSizeX(&pObj->Widget.Win);
            xSize -= BorderSize * 2;
            pObj->hMenu = hMenu;
            if (pObj->cb) {
                MENU_SetOwner(hMenu, pObj->hClient);
            }
            MENU_Attach(hMenu, hObj, x0, y0, xSize, 0, 0);
            WM_SetAnchor(hMenu, WM_CF_ANCHOR_LEFT | WM_CF_ANCHOR_RIGHT);
            FRAMEWIN__UpdatePositions(pObj);
            FRAMEWIN_Invalidate(hObj);
        }
        WM_UNLOCK();
    }
}
コード例 #2
0
ファイル: framewin.c プロジェクト: stormbay/DragonVer1.0
/*********************************************************************
*
*       Client Callback
*/
static void FRAMEWIN__cbClient(WM_MESSAGE* pMsg) {
  WM_HWIN hWin    = pMsg->hWin;
  WM_HWIN hParent = WM_GetParent(pMsg->hWin);
  FRAMEWIN_Obj* pObj = FRAMEWIN_H2P(hParent);
  WM_CALLBACK* cb = pObj->cb;
  switch (pMsg->MsgId) {
    case WM_PAINT:
      GUI_SetBkColor(pObj->ClientColor);
      GUI_Clear();
      if (pObj->cb) {
	      WM_MESSAGE msg;
        msg.hWin   = hWin;
		    msg.MsgId  = WM_PAINT;
        (*pObj->cb)(&msg);
      }
      return;
    case WM_GET_FOCUSSED_CHILD:
      pMsg->Data.v = pObj->hFocussedChild;
      return;
    case WM_SET_FOCUS:
      if (pMsg->Data.v) {      /* Focus received */
        if (pObj->hFocussedChild) {
          WM_SendMessage(pObj->hFocussedChild, pMsg);
        } else {
          pObj->hFocussedChild = WM_SetFocusOnNextChild(hWin);
        }
      }
      return;
    case WM_KEY:
      if ( ((WM_KEY_INFO*)(pMsg->Data.p))->PressedCnt >0) {
        int Key = ((WM_KEY_INFO*)(pMsg->Data.p))->Key;
        switch (Key) {
          case GUI_KEY_TAB:
            pObj->hFocussedChild = WM_SetFocusOnNextChild(hWin);
            break;                    /* Send to parent by not doing anything */
        }
      }
      break;
    case WM_NOTIFY_CHILD_HAS_FOCUS:
      pObj->hFocussedChild = pMsg->hWinSrc;
      if (pMsg->Data.v) {
        pObj->Widget.State |= WIDGET_STATE_CHILD_HAS_FOCUS;
      } else {
        pObj->Widget.State &= ~WIDGET_STATE_CHILD_HAS_FOCUS;
      }
      WM_InvalidateWindow(hParent);
      break;
    case WM_GET_BKCOLOR:
      pMsg->Data.Color = pObj->ClientColor;
      return;                       /* Message handled */
    case WM_GETCLIENTRECT_ABS:      /* return client window in absolute (screen) coordinates */
    case WM_GET_CLIENT_WINDOW:      /* return handle to client window. For most windows, there is no seperate client window, so it is the same handle */
      WM_DefaultProc(pMsg);
      return;                       /* We are done ! */
  }
  if (cb) {
    pMsg->hWin = hParent;
    (*cb)(pMsg);
  }
}
コード例 #3
0
ファイル: framewin.c プロジェクト: stormbay/DragonVer1.0
static void CalcPositions( FRAMEWIN_Handle hObj) {
  if (hObj) {
    FRAMEWIN_Obj * pObj = FRAMEWIN_H2P(hObj);
    int TitleHeight;
    int FontSize = GUI_GetYSizeOfFont(pObj->pFont);
    int xsize = WM_GetWindowSizeX(hObj);
    int ysize = WM_GetWindowSizeY(hObj);
    TitleHeight = _DefaultCaptionSize;
    /* Make sure defaults are o.k. for us */
    if (FontSize + 2 >= TitleHeight)
      TitleHeight = FontSize + 2;
    /* Set object properties accordingly */
    pObj->rClient.x0  =         _DefaultBorderSize;
    pObj->rClient.x1  = xsize - _DefaultBorderSize - 1;
    pObj->rClient.y0  =         _DefaultBorderSize + FRAMEWIN_IBORDER_DEFAULT + TitleHeight;
    pObj->rClient.y1  = ysize - _DefaultBorderSize - 1;
    pObj->FrameSize   =         _DefaultBorderSize;
    pObj->TitleHeight = TitleHeight;
    if (pObj->hClient) {
      WM_MoveTo (pObj->hClient, 
                 pObj->rClient.x0 + pObj->Widget.Win.Rect.x0, 
                 pObj->rClient.y0 + pObj->Widget.Win.Rect.y0);
      WM_SetSize(pObj->hClient, 
                 pObj->rClient.x1 - pObj->rClient.x0 + 1, 
                 pObj->rClient.y1 - pObj->rClient.y0 + 1);
    }
  }  
}
コード例 #4
0
ファイル: framewin.c プロジェクト: stormbay/DragonVer1.0
FRAMEWIN_Handle FRAMEWIN_CreateAsChild( 
                                    int x0, int y0, int xsize, int ysize, WM_HWIN hParent,
                                    const char* pText, WM_CALLBACK* cb, int Flags)
{
  FRAMEWIN_Handle hObj;
  /* Create the window */
  GUI_LOCK();
  hObj = WM_CreateWindowAsChild(x0, y0, xsize/*+2*HBorder*/, ysize/*+TBorder+BBorder*/, hParent,
                        Flags, _FRAMEWIN_Callback, sizeof(FRAMEWIN_Obj) - sizeof(WM_Obj));
  if (hObj) {
    FRAMEWIN_Obj* pObj = FRAMEWIN_H2P(hObj);
    /* init widget specific variables */
    WIDGET__Init(&pObj->Widget, WIDGET_STATE_FOCUSSABLE | WIDGET_STATE_ENABLED);
    /* init member variables */
    pObj->pFont = _pDefaultFont;
    memcpy(pObj->BarColor, _aBarColor, sizeof(pObj->BarColor));
    pObj->TextColor    = 0xffffff;
    pObj->TextAlign    = GUI_TA_LEFT;
    pObj->ClientColor  = _DefaultClientColor;
    pObj->pText        = pText;
    pObj->XOff = 1;
    pObj->YOff = 1;
    pObj->cb = cb;
    CalcPositions(hObj);
    pObj->hClient = WM_CreateWindowAsChild(0, 0, 0, 0, hObj, WM_CF_SHOW, FRAMEWIN__cbClient, 0);
  }
  GUI_UNLOCK();
  return hObj;
}
コード例 #5
0
ファイル: framewin.c プロジェクト: stormbay/DragonVer1.0
void FRAMEWIN_SetBarColor(FRAMEWIN_Handle hObj, int index, GUI_COLOR color) {
  GUI_LOCK();
  if (hObj) {
    FRAMEWIN_Obj* pObj = FRAMEWIN_H2P(hObj);
    pObj->BarColor[index] = color;
    FRAMEWIN_Invalidate(hObj);
  }
  GUI_UNLOCK();
}
コード例 #6
0
ファイル: framewin.c プロジェクト: stormbay/DragonVer1.0
void FRAMEWIN_SetClientColor(FRAMEWIN_Handle hObj, GUI_COLOR Color) {
  GUI_LOCK();
  if (hObj) {
    FRAMEWIN_Obj* pObj = FRAMEWIN_H2P(hObj);
    pObj->ClientColor = Color;
    FRAMEWIN_Invalidate(hObj);
  }
  GUI_UNLOCK();
}
コード例 #7
0
/*********************************************************************
*
*       FRAMEWIN_Maximize
*/
void FRAMEWIN_Maximize(FRAMEWIN_Handle hObj) {
  if (hObj) {
    FRAMEWIN_Obj* pObj;
    WM_LOCK();
    pObj = FRAMEWIN_H2P(hObj);
    _MaximizeFramewin(hObj, pObj);
    WM_UNLOCK();
  }
}
コード例 #8
0
/*********************************************************************
*
*       FRAMEWIN_Restore
*/
void FRAMEWIN_Restore(FRAMEWIN_Handle hObj) {
  if (hObj) {
    FRAMEWIN_Obj* pObj;
    WM_LOCK();
    pObj = FRAMEWIN_H2P(hObj);
    _RestoreMinimized(hObj, pObj);
    _RestoreMaximized(hObj, pObj);
    WM_UNLOCK();
  }
}
コード例 #9
0
ファイル: framewin.c プロジェクト: stormbay/DragonVer1.0
/*********************************************************************
*
*        Exported routines:  Various methods
*
**********************************************************************
*/
void FRAMEWIN_SetFont(FRAMEWIN_Handle hObj, const GUI_FONT* pFont) {
  GUI_LOCK();
  if (hObj) {
    FRAMEWIN_Obj* pObj = FRAMEWIN_H2P(hObj);
    pObj->pFont = pFont;
    CalcPositions(hObj);
    FRAMEWIN_Invalidate(hObj);
  }
  GUI_UNLOCK();
}
コード例 #10
0
ファイル: framewin.c プロジェクト: stormbay/DragonVer1.0
void FRAMEWIN_SetTextPos(FRAMEWIN_Handle hObj, int XOff, int YOff) {
  GUI_LOCK();
  if (hObj) {
    FRAMEWIN_Obj* pObj = FRAMEWIN_H2P(hObj);
    pObj->XOff = XOff;
    pObj->YOff = YOff;
    FRAMEWIN_Invalidate(hObj);
  }
  GUI_UNLOCK();
}
コード例 #11
0
ファイル: framewin.c プロジェクト: stormbay/DragonVer1.0
FRAMEWIN_Handle FRAMEWIN_CreateIndirect(const GUI_WIDGET_CREATE_INFO* pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK* pCallback) {
  FRAMEWIN_Handle hObj;
  hObj = FRAMEWIN_CreateAsChild(
    pCreateInfo->x0 + x0, pCreateInfo->y0 + y0, pCreateInfo->xSize, pCreateInfo->ySize, hWinParent,
    pCreateInfo->pName, pCallback, 0);
  if (hObj) {
    FRAMEWIN_Obj* pObj = FRAMEWIN_H2P(hObj);
    pObj->Flags = pCreateInfo->Flags;
  }
  return hObj;
}
コード例 #12
0
ファイル: FRAMEWIN_IsMinMax.c プロジェクト: Jaly314/CH-K-Lib
/*********************************************************************
*
*       FRAMEWIN_IsMaximized
*/
int FRAMEWIN_IsMaximized(FRAMEWIN_Handle hObj) {
  int r = 0;
  if (hObj) {
    FRAMEWIN_Obj* pObj;
    WM_LOCK();
    pObj = FRAMEWIN_H2P(hObj);
    r = (pObj->Flags & FRAMEWIN_SF_MAXIMIZED) ? 1 : 0;
    WM_UNLOCK();
  }
  return r;
}
コード例 #13
0
/*********************************************************************
*
*       _Draw
*/
static void _Draw(void) {
  FRAMEWIN_Obj* pObj;
  WM_HWIN hWin;
  hWin = WM_GetActiveWindow();
  hWin = WM_GetParent(hWin);
  pObj = FRAMEWIN_H2P(hWin);
  if (pObj->Flags & FRAMEWIN_SF_MAXIMIZED) {
    _DrawRestore();
  } else {
    _DrawMax();
  }
}
コード例 #14
0
/*********************************************************************
*
*       FRAMEWIN_SetFont
*/
void FRAMEWIN_SetFont(FRAMEWIN_Handle hObj, const GUI_FONT GUI_UNI_PTR * pFont) {
  GUI_LOCK();
  if (hObj) {
    FRAMEWIN_Obj* pObj = FRAMEWIN_H2P(hObj);
    int OldHeight = FRAMEWIN__CalcTitleHeight(pObj);
    pObj->Props.pFont = pFont;
    FRAMEWIN__UpdatePositions(pObj);
    FRAMEWIN__UpdateButtons(pObj, OldHeight);
    FRAMEWIN_Invalidate(hObj);
  }
  GUI_UNLOCK();
}
コード例 #15
0
/*********************************************************************
*
*       Callback
*
* This is the overwritten callback routine for the button.
* The primary reason for overwriting it is that we define the default
* action of the Framewindow here.
* It works as follows:
* - User clicks and releases the button
*   -> BUTTON sends WM_NOTIFY_PARENT to FRAMEWIN
*     -> FRAMEWIN either a) reacts or b)sends WM_NOTIFY_PARENT_REFLECTION back
*       In case of a) This module reacts !
*/
static void _cbMax(WM_MESSAGE* pMsg) {
  if (pMsg->MsgId == WM_NOTIFY_PARENT_REFLECTION) {
    WM_HWIN hWin = pMsg->hWinSrc;
    FRAMEWIN_Obj* pObj = FRAMEWIN_H2P(hWin);
    if (pObj->Flags & FRAMEWIN_SF_MAXIMIZED) {
      FRAMEWIN_Restore(hWin);
    } else {
      FRAMEWIN_Maximize(hWin);
    }
    return;                                       /* We are done ! */
  }
  BUTTON_Callback(pMsg);
}
コード例 #16
0
/*********************************************************************
*
*       FRAMEWIN_SetResizeable
*/
void FRAMEWIN_SetResizeable(FRAMEWIN_Handle hObj, int State) {
    if (hObj) {
        FRAMEWIN_Obj* pObj;
        WM_LOCK();
        pObj = FRAMEWIN_H2P(hObj);
        if (pObj) {
            if (State) {
                GUI_HOOK_Add(&pObj->pFirstHook, &_HOOK_Resizeable, &_HOOKFUNC_Resizeable);
            } else {
                GUI_HOOK_Remove(&pObj->pFirstHook, &_HOOK_Resizeable);
            }
        }
        WM_UNLOCK();
    }
}
コード例 #17
0
ファイル: framewin.c プロジェクト: stormbay/DragonVer1.0
void FRAMEWIN_SetText(FRAMEWIN_Handle hObj, const char* s) {
  char NeedsInvalidate;
  GUI_LOCK();
  if (hObj) {
    FRAMEWIN_Obj* pObj = FRAMEWIN_H2P(hObj);
    NeedsInvalidate = 1;
    if (s && pObj->pText) {
      if (strcmp(s, pObj->pText) == 0) {
        NeedsInvalidate = 0;
      }
    }
    pObj->pText = s;
    if (NeedsInvalidate) {
      FRAMEWIN_Invalidate(hObj);
    }
  }
  GUI_UNLOCK();
}
コード例 #18
0
ファイル: framewin.c プロジェクト: stormbay/DragonVer1.0
void FRAMEWIN_SetTextAlign(FRAMEWIN_Handle hObj, int Align) {
  GUI_LOCK();
  if (hObj) {
    FRAMEWIN_Obj* pObj = FRAMEWIN_H2P(hObj);
    pObj->TextAlign = Align;
    switch (Align) {
    case GUI_TA_HCENTER:
      pObj->XOff = (pObj->rClient.x1 - pObj->rClient.x0) / 2;
      break;
    case GUI_TA_LEFT:
      pObj->XOff = pObj->FrameSize;
      break;
    case GUI_TA_RIGHT:
      pObj->XOff = pObj->rClient.x1 - pObj->FrameSize;
      break;
    }
    FRAMEWIN_Invalidate(hObj);
  }
  GUI_UNLOCK();
}
コード例 #19
0
ファイル: framewin.c プロジェクト: stormbay/DragonVer1.0
/*********************************************************************
*
*       Framewin Callback
*/
static void _FRAMEWIN_Callback (WM_MESSAGE *pMsg) {
  FRAMEWIN_Handle hWin = (FRAMEWIN_Handle)(pMsg->hWin);
  FRAMEWIN_Obj* pObj = FRAMEWIN_H2P(hWin);
  GUI_RECT* pRect = (GUI_RECT*)(pMsg->Data.p);
  switch (pMsg->MsgId) {
  case WM_PAINT:
    _Paint(pObj);
    break;
  case WM_TOUCH:
    _OnTouch(hWin, pObj, pMsg);
    return;                       /* Return here ... Message handled */
  case WM_GETCLIENTRECT:
		*pRect = pObj->rClient;
    return;                       /* Return here ... Message handled */
  case WM_GETCLIENTRECT_ABS:  /* Do not seperate from WM_GETCLIENTRECT !!! */
	  *pRect = pObj->rClient;
    GUI_MoveRect(pRect, pObj->Widget.Win.Rect.x0, pObj->Widget.Win.Rect.y0);
    return;                       /* Return here ... Message handled */
  case WM_GET_CLIENT_WINDOW:      /* return handle to client window. For most windows, there is no seperate client window, so it is the same handle */
    pMsg->Data.v = pObj->hClient;
    return;                       /* Return here ... Message handled */
  case WM_GET_FOCUSSED_CHILD:
    pMsg->Data.v = pObj->hFocussedChild;
    return;                       /* Return here ... Message handled */
  case WM_SET_FOCUS:
    if (pMsg->Data.v == 1) {
      WM_SetFocus(pObj->hFocussedChild);
    } else {
      WM_SetFocus(0);
    }
    return;
  }
  /* Let widget handle the standard messages */
  if (WIDGET_HandleActive(hWin, pMsg) == 0) {
    return;
  }
  WM_DefaultProc(pMsg);
}
コード例 #20
0
ファイル: FRAMEWIN_Button.c プロジェクト: Jaly314/CH-K-Lib
/*********************************************************************
*
*       FRAMEWIN_AddButton
*/
WM_HWIN FRAMEWIN_AddButton(FRAMEWIN_Handle hObj, int Flags, int Off, int Id) {
  WM_HWIN r = 0;
  if (hObj) {
    FRAMEWIN_Obj* pObj;
    POSITIONS Pos;
    int Size       = FRAMEWIN_GetTitleHeight(hObj);
    int BorderSize = FRAMEWIN_GetBorderSize(hObj);
    int WinFlags, x;
    WM_LOCK();
    pObj = FRAMEWIN_H2P(hObj);
    FRAMEWIN__CalcPositions(pObj, &Pos);
    if (Flags & FRAMEWIN_BUTTON_RIGHT) {
      x = Pos.rTitleText.x1 - (Size - 1) - Off;
      WinFlags = WM_CF_SHOW | WM_CF_ANCHOR_RIGHT;
    } else {
      x = Pos.rTitleText.x0 + Off;
      WinFlags = WM_CF_SHOW;
    }
    r = BUTTON_CreateAsChild(x, BorderSize, Size, Size, hObj, Id, WinFlags);
    BUTTON_SetFocussable(r, 0);
    WM_UNLOCK();
  }
  return r;
}