void CNewGameSession::CmdEditName (void) // CmdEditName // // Handles the edit name button { const CVisualPalette &VI = m_HI.GetVisuals(); if (m_bEditingName) { IAnimatron *pEdit; if (m_pRoot->FindElement(ID_PLAYER_NAME_FIELD, &pEdit)) { m_Settings.sPlayerName = CUniverse::ValidatePlayerName(pEdit->GetPropertyString(PROP_TEXT)); m_Settings.bDefaultPlayerName = false; DeleteElement(ID_PLAYER_NAME_FIELD); } SetPlayerName(m_Settings.sPlayerName, m_xPlayerName, m_yPlayerName, m_cxPlayerName); m_bEditingName = false; } // If we're not editing, then start editing else { DeleteElement(ID_PLAYER_NAME); // Create edit control IAnimatron *pEdit; VI.CreateEditControl(NULL, ID_PLAYER_NAME_FIELD, m_xPlayerName + SMALL_BUTTON_WIDTH + MAJOR_PADDING_HORZ, m_yPlayerName, NAME_FIELD_WIDTH, 0, NULL_STR, &pEdit, NULL); pEdit->SetPropertyString(PROP_TEXT, m_Settings.sPlayerName); m_pRoot->AddLine(pEdit); SetInputFocus(ID_PLAYER_NAME_FIELD); m_bEditingName = true; } }
int ProcXISetFocus(ClientPtr client) { DeviceIntPtr dev; int ret; REQUEST(xXISetFocusReq); REQUEST_AT_LEAST_SIZE(xXISetFocusReq); ret = dixLookupDevice(&dev, stuff->deviceid, client, DixSetFocusAccess); if (ret != Success) return ret; if (!dev->focus) return BadDevice; return SetInputFocus(client, dev, stuff->focus, RevertToParent, stuff->time, TRUE); }
int ProcXSetDeviceFocus(ClientPtr client) { int ret; DeviceIntPtr dev; REQUEST(xSetDeviceFocusReq); REQUEST_SIZE_MATCH(xSetDeviceFocusReq); ret = dixLookupDevice(&dev, stuff->device, client, DixSetFocusAccess); if (ret != Success) return ret; if (!dev->focus) return BadDevice; ret = SetInputFocus(client, dev, stuff->focus, stuff->revertTo, stuff->time, TRUE); return ret; }
void CLoginSession::ShowInitialDlg (void) // ShowInitialDlg // // Shows the first dialog box { const CVisualPalette &VI = m_HI.GetVisuals(); IAnimatron *pDlg; // If we're already signed in then we're done. if (m_Service.HasCapability(ICIService::canGetUserProfile)) CmdCancel(); // Otherwise, if we have a username else if (m_Service.HasCapability(ICIService::cachedUser)) { CreateDlgSignIn(VI, &pDlg); m_iCurrent = dlgSignIn; StartPerformance(pDlg, ID_DLG_SIGN_IN, CReanimator::SPR_FLAG_DELETE_WHEN_DONE); if (!m_Service.GetDefaultUsername().IsBlank()) SetInputFocus(ID_CTRL_PASSWORD); } // Otherwise, register else if (m_Service.HasCapability(ICIService::registerUser)) { CreateDlgRegister(VI, &pDlg); m_iCurrent = dlgRegister; StartPerformance(pDlg, ID_DLG_REGISTER, CReanimator::SPR_FLAG_DELETE_WHEN_DONE); } // Otherwise, cannot sign in else CmdCancel(); }
int ProcXSetDeviceFocus(ClientPtr client) { int ret; DeviceIntPtr dev; REQUEST(xSetDeviceFocusReq); REQUEST_SIZE_MATCH(xSetDeviceFocusReq); dev = LookupDeviceIntRec(stuff->device); if (dev == NULL || !dev->focus) { SendErrorToClient(client, IReqCode, X_SetDeviceFocus, 0, BadDevice); return Success; } ret = SetInputFocus(client, dev, stuff->focus, stuff->revertTo, stuff->time, TRUE); if (ret != Success) SendErrorToClient(client, IReqCode, X_SetDeviceFocus, 0, ret); return Success; }
int GUIInput::NotifyTouch(TOUCH_STATE state, int x, int y) { static int startSelection = -1; int textWidth; string displayValue, originalValue; void* fontResource = NULL; if (mFont) fontResource = mFont->GetResource(); if (!isConditionTrue()) return -1; if (!HasInputFocus) { if (state != TOUCH_RELEASE) return 0; // Only change focus if touch releases within the input box if (GetSelection(x, y) >= 0) { // When changing focus, we don't scroll or change the cursor location PageManager::SetKeyBoardFocus(0); PageManager::NotifyKeyboard(0); SetInputFocus(1); DrawCursor = true; mRendered = false; } } else { switch (state) { case TOUCH_HOLD: case TOUCH_REPEAT: break; case TOUCH_START: startSelection = GetSelection(x,y); lastX = x; DrawCursor = false; mRendered = false; break; case TOUCH_DRAG: // Check if we dragged out of the selection window if (GetSelection(x, y) == -1) { lastX = 0; break; } DrawCursor = false; // Provide some debounce on initial touches if (startSelection != -1 && abs(x - lastX) < 6) { break; } startSelection = -1; if (lastX != x) HandleTextLocation(x); break; case TOUCH_RELEASE: // We've moved the cursor location int relativeX = x - mRenderX; mRendered = false; DrawCursor = true; DataManager::GetValue(mVariable, displayValue); if (HasMask) { int index, string_size = displayValue.size(); string maskedValue; for (index=0; index<string_size; index++) maskedValue += mMask; displayValue = maskedValue; } if (displayValue.size() == 0) { skipChars = 0; mCursorLocation = -1; return 0; } else if (skipChars && skipChars < displayValue.size()) { displayValue.erase(0, skipChars); } string cursorString; int cursorX = 0; unsigned index = 0; for(index=0; index<displayValue.size(); index++) { cursorString = displayValue.substr(0, index); cursorX = gr_measureEx(cursorString.c_str(), fontResource) + mRenderX; if (cursorX > x) { if (index > 0) mCursorLocation = index - 1; else mCursorLocation = index; return 0; } } mCursorLocation = -1; break; } } return 0; }
GUIInput::GUIInput(xml_node<>* node) : GUIObject(node) { xml_attribute<>* attr; xml_node<>* child; mInputText = NULL; mAction = NULL; mBackground = NULL; mCursor = NULL; mFont = NULL; mRendered = false; HasMask = false; DrawCursor = false; isLocalChange = true; HasAllowed = false; HasDisabled = false; skipChars = scrollingX = mFontHeight = mFontY = lastX = 0; mBackgroundX = mBackgroundY = mBackgroundW = mBackgroundH = MinLen = MaxLen = 0; mCursorLocation = -1; // -1 is always the end of the string CursorWidth = 3; ConvertStrToColor("black", &mBackgroundColor); ConvertStrToColor("white", &mCursorColor); if (!node) return; // Load text directly from the node mInputText = new GUIText(node); // Load action directly from the node mAction = new GUIAction(node); if (mInputText->Render() < 0) { delete mInputText; mInputText = NULL; } // Load the background child = node->first_node("background"); if (child) { attr = child->first_attribute("resource"); if (attr) mBackground = PageManager::FindResource(attr->value()); attr = child->first_attribute("color"); if (attr) { std::string color = attr->value(); ConvertStrToColor(color, &mBackgroundColor); } } if (mBackground && mBackground->GetResource()) { mBackgroundW = gr_get_width(mBackground->GetResource()); mBackgroundH = gr_get_height(mBackground->GetResource()); } // Load the cursor color child = node->first_node("cursor"); if (child) { attr = child->first_attribute("resource"); if (attr) mCursor = PageManager::FindResource(attr->value()); attr = child->first_attribute("color"); if (attr) { std::string color = attr->value(); ConvertStrToColor(color, &mCursorColor); } attr = child->first_attribute("hasfocus"); if (attr) { std::string color = attr->value(); SetInputFocus(atoi(color.c_str())); } attr = child->first_attribute("width"); if (attr) { std::string cwidth = gui_parse_text(attr->value()); CursorWidth = atoi(cwidth.c_str()); } } DrawCursor = HasInputFocus; // Load the font, and possibly override the color child = node->first_node("font"); if (child) { attr = child->first_attribute("resource"); if (attr) { mFont = PageManager::FindResource(attr->value()); mFontHeight = gr_getMaxFontHeight(mFont ? mFont->GetResource() : NULL); } } child = node->first_node("text"); if (child) mText = child->value(); mLastValue = gui_parse_text(mText); child = node->first_node("data"); if (child) { attr = child->first_attribute("name"); if (attr) mVariable = attr->value(); attr = child->first_attribute("default"); if (attr) DataManager::SetValue(mVariable, attr->value()); attr = child->first_attribute("mask"); if (attr) { mMask = attr->value(); HasMask = true; } attr = child->first_attribute("maskvariable"); if (attr) mMaskVariable = attr->value(); else mMaskVariable = mVariable; } // Load input restrictions child = node->first_node("restrict"); if (child) { attr = child->first_attribute("minlen"); if (attr) { std::string attrib = attr->value(); MinLen = atoi(attrib.c_str()); } attr = child->first_attribute("maxlen"); if (attr) { std::string attrib = attr->value(); MaxLen = atoi(attrib.c_str()); } attr = child->first_attribute("allow"); if (attr) { HasAllowed = true; AllowedList = attr->value(); } attr = child->first_attribute("disable"); if (attr) { HasDisabled = true; DisabledList = attr->value(); } } // Load the placement LoadPlacement(node->first_node("placement"), &mRenderX, &mRenderY, &mRenderW, &mRenderH); SetActionPos(mRenderX, mRenderY, mRenderW, mRenderH); if (mInputText && mFontHeight && mFontHeight < (unsigned)mRenderH) { mFontY = ((mRenderH - mFontHeight) / 2) + mRenderY; mInputText->SetRenderPos(mRenderX, mFontY); } else mFontY = mRenderY; if (mInputText) mInputText->SetMaxWidth(mRenderW); isLocalChange = false; HandleTextLocation(-3); }
GUIInput::GUIInput(xml_node<>* node) : GUIObject(node) { xml_attribute<>* attr; xml_node<>* child; mInputText = NULL; mAction = NULL; mBackground = NULL; mCursor = NULL; mFont = NULL; mRendered = false; HasMask = false; DrawCursor = false; isLocalChange = true; HasAllowed = false; HasDisabled = false; skipChars = scrollingX = mFontHeight = mFontY = lastX = 0; mBackgroundX = mBackgroundY = mBackgroundW = mBackgroundH = MinLen = MaxLen = 0; mCursorLocation = -1; // -1 is always the end of the string CursorWidth = 3; ConvertStrToColor("black", &mBackgroundColor); ConvertStrToColor("white", &mCursorColor); if (!node) return; // Load text directly from the node mInputText = new GUIText(node); // Load action directly from the node mAction = new GUIAction(node); if (mInputText->Render() < 0) { delete mInputText; mInputText = NULL; } // Load the background child = FindNode(node, "background"); if (child) { mBackground = LoadAttrImage(child, "resource"); mBackgroundColor = LoadAttrColor(child, "color", mBackgroundColor); } if (mBackground && mBackground->GetResource()) { mBackgroundW = mBackground->GetWidth(); mBackgroundH = mBackground->GetHeight(); } // Load the cursor color child = FindNode(node, "cursor"); if (child) { mCursor = LoadAttrImage(child, "resource"); mCursorColor = LoadAttrColor(child, "color", mCursorColor); attr = child->first_attribute("hasfocus"); if (attr) { std::string focus = attr->value(); SetInputFocus(atoi(focus.c_str())); } CursorWidth = LoadAttrIntScaleX(child, "width", CursorWidth); } DrawCursor = HasInputFocus; // Load the font child = FindNode(node, "font"); if (child) { mFont = LoadAttrFont(child, "resource"); mFontHeight = mFont->GetHeight(); } child = FindNode(node, "text"); if (child) mText = child->value(); mLastValue = gui_parse_text(mText); child = FindNode(node, "data"); if (child) { attr = child->first_attribute("name"); if (attr) mVariable = attr->value(); attr = child->first_attribute("default"); if (attr) DataManager::SetValue(mVariable, attr->value()); mMask = LoadAttrString(child, "mask"); HasMask = !mMask.empty(); attr = child->first_attribute("maskvariable"); if (attr) mMaskVariable = attr->value(); else mMaskVariable = mVariable; } // Load input restrictions child = FindNode(node, "restrict"); if (child) { MinLen = LoadAttrInt(child, "minlen", MinLen); MaxLen = LoadAttrInt(child, "maxlen", MaxLen); AllowedList = LoadAttrString(child, "allow"); HasAllowed = !AllowedList.empty(); DisabledList = LoadAttrString(child, "disable"); HasDisabled = !DisabledList.empty(); } // Load the placement LoadPlacement(FindNode(node, "placement"), &mRenderX, &mRenderY, &mRenderW, &mRenderH); SetActionPos(mRenderX, mRenderY, mRenderW, mRenderH); if (mInputText && mFontHeight && mFontHeight < (unsigned)mRenderH) { mFontY = ((mRenderH - mFontHeight) / 2) + mRenderY; mInputText->SetRenderPos(mRenderX, mFontY); } else mFontY = mRenderY; if (mInputText) mInputText->SetMaxWidth(mRenderW); isLocalChange = false; HandleTextLocation(-3); }
void GUI_Input::InputBegin(){ SetInputFocus(); waiting = true; Update(); }
bool PG_ListBox::eventMouseButtonUp(const SDL_MouseButtonEvent* button) { SetInputFocus(); return true; }
MoveCursor (x, y) { if (x != CursorX || y != CursorY || !CursorVisible) { register struct SplitWindow *w = RootWindow[CursorDisplayNumber]; CursorDown (); CursorX = x; CursorY = y; { struct display *d = &displays[CursorDisplayNumber]; x += d->screen.left; y += d->screen.top; } if (MovingBar) LastCursorDrawn = MovingBar -> SplitHorizontally ? HorizontalCursor : VerticalCursor; else if (Reshapee) LastCursorDrawn = Reshapee_x < 0 ? UpperLeftCursor : LowerRightCursor; else if (MenuActive) { LastCursorDrawn = RightFingerCursor; MenuActive = 1; } else { while (w && w -> t.type == SplitWindowType) { register diff = w -> SplitValue - (w -> SplitHorizontally ? y : x); if (diff < -BorderWidth) w = w -> bottom; else if (diff >= BorderWidth) w = w -> top; else break; } CursorWindow = W; if (w == 0) LastCursorDrawn = 0; else if (w -> t.type == SplitWindowType) if (w -> SplitHorizontally) LastCursorDrawn = HorizontalCursor; else LastCursorDrawn = VerticalCursor; else { register struct WindowRegion *r; register area = 999999; if (CursorWindow != WindowInFocus && FocusFollowsCursor) SetInputFocus (W); LastCursorDrawn = W -> Cursor; if (W -> MaxRegion >= 0) for (r = &W -> regions[W -> MaxRegion]; r >= W -> regions; r--) { struct icon *Cursor; if (x >= r -> region.left && y >= r -> region.top && area > r -> area && (Cursor = W -> regions[r->linked].Cursor) && x < r -> region.left + r -> region.width && y < r -> region.top + r -> region.height) { LastCursorDrawn = Cursor; area = r -> area; } } } } DrawCursor (); CursorVisible = 1; } }