Develop and Download Open Source Software

Browse Subversion Repository

Contents of /trunk/teraterm/teraterm/sizetip.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 9048 - (show annotations) (download) (as text)
Wed Dec 16 12:24:13 2020 UTC (3 years, 5 months ago) by nmaya
File MIME type: text/x-csrc
File size: 5022 byte(s)
ソースファイルの著作権表記の "最後の発行の年" を削除

ticket #40996
1 /*
2 * Copyright (C) 2008- TeraTerm Project
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * 3. The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28 /* original idea from PuTTY 0.60 windows/sizetip.c */
29
30 #include "teraterm.h"
31 #include "tttypes.h"
32 #include "ttlib.h"
33 #include "ttwinman.h"
34 #include "compat_win.h"
35
36 #include <windows.h>
37 #include <stdio.h>
38
39 #include "tipwin.h"
40
41 static TipWin *SizeTip;
42 static int tip_enabled = 0;
43
44 /*
45 * point ��
46 * �X�N���[�����������o�������������A������������������
47 * NearestMonitor �� TRUE �������A�����������j�^
48 * FALSE�������A�}�E�X���������j�^������������
49 * �f�B�X�v���C���[���� FrameWidth(pixel) ��������������������
50 */
51 static void FixPosFromFrame(POINT *point, int FrameWidth, BOOL NearestMonitor)
52 {
53 if (HasMultiMonitorSupport()) {
54 // �}���`���j�^���T�|�[�g��������������
55 HMONITOR hm;
56 MONITORINFO mi;
57 int ix, iy;
58
59 // �������W��������������
60 ix = point->x;
61 iy = point->y;
62
63 hm = pMonitorFromPoint(*point, MONITOR_DEFAULTTONULL);
64 if (hm == NULL) {
65 if (NearestMonitor) {
66 // �����������j�^���\������
67 hm = pMonitorFromPoint(*point, MONITOR_DEFAULTTONEAREST);
68 } else {
69 // �X�N���[�����������o���������������}�E�X���������j�^���\������
70 GetCursorPos(point);
71 hm = pMonitorFromPoint(*point, MONITOR_DEFAULTTONEAREST);
72 }
73 }
74
75 mi.cbSize = sizeof(MONITORINFO);
76 pGetMonitorInfoA(hm, &mi);
77 if (ix < mi.rcMonitor.left + FrameWidth) {
78 ix = mi.rcMonitor.left + FrameWidth;
79 }
80 if (iy < mi.rcMonitor.top + FrameWidth) {
81 iy = mi.rcMonitor.top + FrameWidth;
82 }
83
84 point->x = ix;
85 point->y = iy;
86 }
87 else
88 {
89 // �}���`���j�^���T�|�[�g����������������
90 if (point->x < FrameWidth) {
91 point->x = FrameWidth;
92 }
93 if (point->y < FrameWidth) {
94 point->y = FrameWidth;
95 }
96 }
97 }
98
99 /* ���T�C�Y�p�c�[���`�b�v���\������
100 *
101 * �����F
102 * src �E�B���h�E�n���h��
103 * cx, cy �c�[���`�b�v���\�������c���T�C�Y
104 * fwSide ���T�C�Y�����������E�B���h�E����������
105 * newX, newY ���T�C�Y�������������W
106 *
107 * ����:
108 * Windows9x�����������v���p�e�B���u�E�B���h�E�����e���\����������
109 * �h���b�O�����v���`�F�b�N�������������A�c�[���`�b�v���\�������������B
110 */
111 void UpdateSizeTip(HWND src, int cx, int cy, UINT fwSide, int newX, int newY)
112 {
113 char str[32];
114 int tooltip_movable = 0;
115
116 if (!tip_enabled)
117 return;
118
119 /* Generate the tip text */
120 _snprintf_s(str, _countof(str), _TRUNCATE, "%dx%d", cx, cy);
121
122 // �E�B���h�E���E�A�E���A�����������������A�c�[���`�b�v�����������z�u�����B
123 // ���������O�����T�C�Y�������������z�u�����B
124 if (!(fwSide == WMSZ_RIGHT || fwSide == WMSZ_BOTTOMRIGHT || fwSide == WMSZ_BOTTOM)) {
125 tooltip_movable = 1;
126 }
127
128 if (SizeTip == NULL) {
129 RECT wr;
130 POINT point;
131 int w, h;
132
133 // ���������c���T�C�Y����������
134 TipWinGetTextWidthHeight(src, str, &w, &h);
135
136 // �E�B���h�E�����u������
137 GetWindowRect(src, &wr);
138
139 // sizetip���o�����u���A�E�B���h�E����(X, Y)���������A
140 // (X, Y - ������������ - TIP_WIN_FRAME_WIDTH * 2) �������B
141 point.x = wr.left;
142 point.y = wr.top - (h + TIP_WIN_FRAME_WIDTH * 2);
143 FixPosFromFrame(&point, 16, FALSE);
144 cx = point.x;
145 cy = point.y;
146
147 SizeTip = TipWinCreateA(NULL, src, cx, cy, str);
148 } else {
149 /* Tip already exists, just set the text */
150 TipWinSetTextA(SizeTip, str);
151
152 // �E�B���h�E��������������������
153 if (tooltip_movable) {
154 TipWinSetPos(SizeTip, newX + TIP_WIN_FRAME_WIDTH*2, newY + TIP_WIN_FRAME_WIDTH*2);
155 }
156 }
157 }
158
159 void EnableSizeTip(int bEnable)
160 {
161 if (SizeTip && !bEnable) {
162 TipWinDestroy(SizeTip);
163 SizeTip = NULL;
164 }
165
166 tip_enabled = bEnable;
167 }

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26